1 #include <aos/kernel.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5
6 #include "py/builtin.h"
7 #include "py/obj.h"
8 #include "py/runtime.h"
9 #include "py/stackctrl.h"
10 #include "ugraphics.h"
11 #include "ulog/ulog.h"
12
13 #define LOG_TAG "ugraphics"
14
mp_ugraphics_init(size_t n_args,const mp_obj_t * args)15 STATIC mp_obj_t mp_ugraphics_init(size_t n_args, const mp_obj_t *args)
16 {
17 if (n_args < 2) {
18 mp_raise_OSError(EINVAL);
19 return mp_const_none;
20 }
21
22 int32_t width = 0;
23 int32_t height = 0;
24
25 width = mp_obj_get_int(args[0]);
26 height = mp_obj_get_int(args[1]);
27
28 mp_int_t status = ugraphics_init(width, height);
29
30 return MP_OBJ_NEW_SMALL_INT(-status);
31 }
32 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(mp_ugraphics_init_obj, 2, mp_ugraphics_init);
33
mp_ugraphics_deinit(size_t n_args,const mp_obj_t * args)34 STATIC mp_obj_t mp_ugraphics_deinit(size_t n_args, const mp_obj_t *args)
35 {
36 ugraphics_quit();
37
38 return mp_obj_new_int(0);
39 }
40 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(mp_ugraphics_deinit_obj, 0,
41 mp_ugraphics_deinit);
42
mp_ugraphics_loadFont(size_t n_args,const mp_obj_t * args)43 STATIC mp_obj_t mp_ugraphics_loadFont(size_t n_args, const mp_obj_t *args)
44 {
45 if (n_args < 2) {
46 mp_raise_OSError(EINVAL);
47 return mp_const_none;
48 }
49
50 int32_t size = 0;
51
52 char *path = (char *)mp_obj_str_get_str(args[0]);
53 size = mp_obj_get_int(args[1]);
54
55 mp_int_t status = ugraphics_load_font(path, size);
56
57 return MP_OBJ_NEW_SMALL_INT(-status);
58 }
59 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(mp_ugraphics_loadFont_obj, 2,
60 mp_ugraphics_loadFont);
61
mp_ugraphics_setFontSytle(size_t n_args,const mp_obj_t * args)62 STATIC mp_obj_t mp_ugraphics_setFontSytle(size_t n_args, const mp_obj_t *args)
63 {
64 if (n_args < 1) {
65 mp_raise_OSError(EINVAL);
66 return mp_const_none;
67 }
68
69 int32_t style = 0;
70
71 style = mp_obj_get_int(args[0]);
72
73 ugraphics_set_font_style(style);
74
75 return mp_obj_new_int(0);
76 }
77 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(mp_ugraphics_setFontSytle_obj, 1,
78 mp_ugraphics_setFontSytle);
79
mp_ugraphics_ugraphicsFlip(size_t n_args,const mp_obj_t * args)80 STATIC mp_obj_t mp_ugraphics_ugraphicsFlip(size_t n_args, const mp_obj_t *args)
81 {
82 ugraphics_flip();
83
84 return mp_obj_new_int(0);
85 }
86 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(mp_ugraphics_ugraphicsFlip_obj, 0,
87 mp_ugraphics_ugraphicsFlip);
88
mp_ugraphics_ugraphicsClear(size_t n_args,const mp_obj_t * args)89 STATIC mp_obj_t mp_ugraphics_ugraphicsClear(size_t n_args, const mp_obj_t *args)
90 {
91 mp_int_t status = ugraphics_clear();
92
93 return MP_OBJ_NEW_SMALL_INT(-status);
94 }
95 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(mp_ugraphics_ugraphicsClear_obj, 0,
96 mp_ugraphics_ugraphicsClear);
97
mp_ugraphics_setColour(size_t n_args,const mp_obj_t * args)98 STATIC mp_obj_t mp_ugraphics_setColour(size_t n_args, const mp_obj_t *args)
99 {
100 if (n_args < 1) {
101 mp_raise_OSError(EINVAL);
102 return mp_const_none;
103 }
104
105 int32_t colour = 0;
106
107 colour = mp_obj_get_int(args[0]);
108
109 mp_int_t status = ugraphics_set_color(colour);
110
111 return MP_OBJ_NEW_SMALL_INT(-status);
112 }
113 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(mp_ugraphics_setColour_obj, 1,
114 mp_ugraphics_setColour);
115
mp_ugraphics_drawRect(size_t n_args,const mp_obj_t * args)116 STATIC mp_obj_t mp_ugraphics_drawRect(size_t n_args, const mp_obj_t *args)
117 {
118 if (n_args < 4) {
119 mp_raise_OSError(EINVAL);
120 return mp_const_none;
121 }
122
123 int32_t x = 0;
124 int32_t y = 0;
125 int32_t w = 0;
126 int32_t h = 0;
127
128 x = mp_obj_get_int(args[0]);
129 y = mp_obj_get_int(args[1]);
130 w = mp_obj_get_int(args[2]);
131 h = mp_obj_get_int(args[3]);
132
133 mp_int_t status = ugraphics_draw_rect(x, y, w, h);
134
135 return MP_OBJ_NEW_SMALL_INT(-status);
136 }
137 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(mp_ugraphics_drawRect_obj, 4,
138 mp_ugraphics_drawRect);
139
mp_ugraphics_fillRect(size_t n_args,const mp_obj_t * args)140 STATIC mp_obj_t mp_ugraphics_fillRect(size_t n_args, const mp_obj_t *args)
141 {
142 if (n_args < 4) {
143 mp_raise_OSError(EINVAL);
144 return mp_const_none;
145 }
146
147 int32_t x = 0;
148 int32_t y = 0;
149 int32_t w = 0;
150 int32_t h = 0;
151
152 x = mp_obj_get_int(args[0]);
153 y = mp_obj_get_int(args[1]);
154 w = mp_obj_get_int(args[2]);
155 h = mp_obj_get_int(args[3]);
156
157 mp_int_t status = ugraphics_fill_rect(x, y, w, h);
158
159 return MP_OBJ_NEW_SMALL_INT(-status);
160 }
161 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(mp_ugraphics_fillRect_obj, 4,
162 mp_ugraphics_fillRect);
163
mp_ugraphics_drawLine(size_t n_args,const mp_obj_t * args)164 STATIC mp_obj_t mp_ugraphics_drawLine(size_t n_args, const mp_obj_t *args)
165 {
166 if (n_args < 4) {
167 mp_raise_OSError(EINVAL);
168 return mp_const_none;
169 }
170
171 int32_t x1 = 0;
172 int32_t y1 = 0;
173 int32_t x2 = 0;
174 int32_t y2 = 0;
175
176 x1 = mp_obj_get_int(args[0]);
177 y1 = mp_obj_get_int(args[1]);
178 x2 = mp_obj_get_int(args[2]);
179 y2 = mp_obj_get_int(args[3]);
180
181 mp_int_t status = ugraphics_draw_line(x1, y1, x2, y2);
182
183 return MP_OBJ_NEW_SMALL_INT(-status);
184 }
185 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(mp_ugraphics_drawLine_obj, 4,
186 mp_ugraphics_drawLine);
187
mp_ugraphics_drawString(size_t n_args,const mp_obj_t * args)188 STATIC mp_obj_t mp_ugraphics_drawString(size_t n_args, const mp_obj_t *args)
189 {
190 if (n_args < 3) {
191 mp_raise_OSError(EINVAL);
192 return mp_const_none;
193 }
194
195 int32_t x = 0;
196 int32_t y = 0;
197
198 char *string = (char *)mp_obj_str_get_str(args[0]);
199
200 x = mp_obj_get_int(args[1]);
201 y = mp_obj_get_int(args[2]);
202
203 mp_int_t status = ugraphics_draw_string(string, x, y);
204
205 return MP_OBJ_NEW_SMALL_INT(-status);
206 }
207 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(mp_ugraphics_drawString_obj, 3,
208 mp_ugraphics_drawString);
209
mp_ugraphics_stringWidth(size_t n_args,const mp_obj_t * args)210 STATIC mp_obj_t mp_ugraphics_stringWidth(size_t n_args, const mp_obj_t *args)
211 {
212 if (n_args < 1) {
213 mp_raise_OSError(EINVAL);
214 return mp_const_none;
215 }
216 char *string = (char *)mp_obj_str_get_str(args[0]);
217
218 mp_int_t ret = ugraphics_string_width(string);
219
220 return mp_obj_new_int(ret);
221 }
222 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(mp_ugraphics_stringWidth_obj, 1,
223 mp_ugraphics_stringWidth);
224
mp_ugraphics_saveImage(size_t n_args,const mp_obj_t * args)225 STATIC mp_obj_t mp_ugraphics_saveImage(size_t n_args, const mp_obj_t *args)
226 {
227 if (n_args < 3) {
228 mp_raise_OSError(EINVAL);
229 return mp_const_none;
230 }
231
232 int32_t len = 0;
233
234 len = mp_obj_get_int(args[1]);
235
236 mp_buffer_info_t bufinfo;
237 mp_get_buffer_raise(args[0], &bufinfo, MP_BUFFER_WRITE);
238 if (bufinfo.len < len * sizeof(uint16_t)) {
239 mp_raise_msg(&mp_type_ValueError,
240 MP_ERROR_TEXT("bytearray size should not smaller than "
241 "twice of reg_quantity"));
242 return mp_const_none;
243 }
244
245 char *path = (char *)mp_obj_str_get_str(args[2]);
246
247 mp_int_t status = ugraphics_save_image(bufinfo.buf, len, path);
248
249 return MP_OBJ_NEW_SMALL_INT(-status);
250 }
251 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(mp_ugraphics_saveImage_obj, 3,
252 mp_ugraphics_saveImage);
253
mp_ugraphics_drawImage(size_t n_args,const mp_obj_t * args)254 STATIC mp_obj_t mp_ugraphics_drawImage(size_t n_args, const mp_obj_t *args)
255 {
256 if (n_args < 3) {
257 mp_raise_OSError(EINVAL);
258 return mp_const_none;
259 }
260
261 int32_t x = 0;
262 int32_t y = 0;
263
264 char *path = (char *)mp_obj_str_get_str(args[0]);
265 x = mp_obj_get_int(args[1]);
266 y = mp_obj_get_int(args[2]);
267
268 mp_int_t status = ugraphics_draw_image(path, x, y);
269
270 return MP_OBJ_NEW_SMALL_INT(-status);
271 }
272 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(mp_ugraphics_drawImage_obj, 3,
273 mp_ugraphics_drawImage);
274
275 STATIC const mp_rom_map_elem_t ugraphics_module_globals_table[] = {
276 { MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_ugraphics) },
277 { MP_OBJ_NEW_QSTR(MP_QSTR_init), MP_ROM_PTR(&mp_ugraphics_init_obj) },
278 { MP_OBJ_NEW_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&mp_ugraphics_deinit_obj) },
279 { MP_OBJ_NEW_QSTR(MP_QSTR_loadFont),
280 MP_ROM_PTR(&mp_ugraphics_loadFont_obj) },
281 { MP_OBJ_NEW_QSTR(MP_QSTR_setFontStyle),
282 MP_ROM_PTR(&mp_ugraphics_setFontSytle_obj) },
283 { MP_OBJ_NEW_QSTR(MP_QSTR_ugraphicsFlip),
284 MP_ROM_PTR(&mp_ugraphics_ugraphicsFlip_obj) },
285 { MP_OBJ_NEW_QSTR(MP_QSTR_ugraphicsClear),
286 MP_ROM_PTR(&mp_ugraphics_ugraphicsClear_obj) },
287 { MP_OBJ_NEW_QSTR(MP_QSTR_setColour),
288 MP_ROM_PTR(&mp_ugraphics_setColour_obj) },
289 { MP_OBJ_NEW_QSTR(MP_QSTR_drawRect),
290 MP_ROM_PTR(&mp_ugraphics_drawRect_obj) },
291 { MP_OBJ_NEW_QSTR(MP_QSTR_fillRect),
292 MP_ROM_PTR(&mp_ugraphics_fillRect_obj) },
293 { MP_OBJ_NEW_QSTR(MP_QSTR_drawLine),
294 MP_ROM_PTR(&mp_ugraphics_drawLine_obj) },
295 { MP_OBJ_NEW_QSTR(MP_QSTR_drawString),
296 MP_ROM_PTR(&mp_ugraphics_drawString_obj) },
297 { MP_OBJ_NEW_QSTR(MP_QSTR_stringWidth),
298 MP_ROM_PTR(&mp_ugraphics_stringWidth_obj) },
299 { MP_OBJ_NEW_QSTR(MP_QSTR_saveImage),
300 MP_ROM_PTR(&mp_ugraphics_saveImage_obj) },
301 { MP_OBJ_NEW_QSTR(MP_QSTR_drawImage),
302 MP_ROM_PTR(&mp_ugraphics_drawImage_obj) },
303 };
304
305 STATIC MP_DEFINE_CONST_DICT(ugraphics_module_globals,
306 ugraphics_module_globals_table);
307
308 const mp_obj_module_t ugraphics_module = {
309 .base = { &mp_type_module },
310 .globals = (mp_obj_dict_t *)&ugraphics_module_globals,
311 };
312