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