Skip to content

Commit 5c6d94d

Browse files
committed
Split into shared-module and shared-bindings
1 parent a20490c commit 5c6d94d

File tree

5 files changed

+557
-259
lines changed

5 files changed

+557
-259
lines changed

py/circuitpy_defns.mk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,8 @@ SRC_SHARED_MODULE_ALL = \
363363
uheap/__init__.c \
364364
ustack/__init__.c \
365365
_pew/__init__.c \
366-
_pew/PewPew.c
366+
_pew/PewPew.c \
367+
_eve/__init__.c
367368

368369
# All possible sources are listed here, and are filtered by SRC_PATTERNS.
369370
SRC_SHARED_MODULE = $(filter $(SRC_PATTERNS), $(SRC_SHARED_MODULE_ALL))

shared-bindings/_eve/__init__.c

Lines changed: 23 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
#include "py/runtime.h"
3232
#include "py/binary.h"
3333

34+
#include "shared-module/_eve/__init__.h"
35+
3436
//| :mod:`_eve` --- low-level BridgeTek EVE bindings
3537
//| ================================================
3638
//|
@@ -45,94 +47,57 @@
4547

4648
typedef struct _mp_obj__EVE_t {
4749
mp_obj_base_t base;
48-
mp_obj_t dest[3]; // Own 'write' method, plus argument
49-
int vscale; // fixed-point scaling used for Vertex2f
50-
size_t n; // Current size of command buffer
51-
uint8_t buf[512]; // Command buffer
50+
common_hal__eve_t _eve;
5251
} mp_obj__EVE_t;
5352

5453
STATIC const mp_obj_type_t _EVE_type;
5554

56-
STATIC void _write(mp_obj__EVE_t *_EVE, mp_obj_t b) {
57-
_EVE->dest[2] = b;
58-
mp_call_method_n_kw(1, 0, _EVE->dest);
59-
}
55+
#define EVEHAL(s) \
56+
(&((mp_obj__EVE_t*)mp_instance_cast_to_native_base((s), &_EVE_type))->_eve)
6057

6158
STATIC mp_obj_t _register(mp_obj_t self, mp_obj_t o) {
62-
mp_obj__EVE_t *_EVE = mp_instance_cast_to_native_base(self, &_EVE_type);
63-
mp_load_method(o, MP_QSTR_write, _EVE->dest);
59+
common_hal__eve_t *eve = EVEHAL(self);
60+
mp_load_method(o, MP_QSTR_write, eve->dest);
6461
return mp_const_none;
6562
}
6663
STATIC MP_DEFINE_CONST_FUN_OBJ_2(register_obj, _register);
6764

6865
STATIC mp_obj_t _flush(mp_obj_t self) {
69-
mp_obj__EVE_t *_EVE = mp_instance_cast_to_native_base(self, &_EVE_type);
70-
if (_EVE->n != 0) {
71-
_write(_EVE, mp_obj_new_bytearray_by_ref(_EVE->n, _EVE->buf));
72-
_EVE->n = 0;
73-
}
66+
common_hal__eve_flush(EVEHAL(self));
7467
return mp_const_none;
7568
}
7669
STATIC MP_DEFINE_CONST_FUN_OBJ_1(flush_obj, _flush);
7770

78-
STATIC void *append(mp_obj_t self, size_t m) {
79-
mp_obj__EVE_t *_EVE = mp_instance_cast_to_native_base(self, &_EVE_type);
80-
if ((_EVE->n + m) > sizeof(_EVE->buf))
81-
_flush((mp_obj_t)_EVE);
82-
uint8_t *r = _EVE->buf + _EVE->n;
83-
_EVE->n += m;
84-
return (void*)r;
85-
}
86-
8771
STATIC mp_obj_t _cc(mp_obj_t self, mp_obj_t b) {
88-
mp_obj__EVE_t *_EVE = mp_instance_cast_to_native_base(self, &_EVE_type);
8972
mp_buffer_info_t buffer_info;
9073
mp_get_buffer_raise(b, &buffer_info, MP_BUFFER_READ);
91-
if (buffer_info.len <= sizeof(_EVE->buf)) {
92-
uint8_t *p = (uint8_t*)append(_EVE, buffer_info.len);
93-
// memcpy(p, buffer_info.buf, buffer_info.len);
94-
uint8_t *s = buffer_info.buf;
95-
for (size_t i = 0; i < buffer_info.len; i++)
96-
*p++ = *s++;
97-
} else {
98-
_flush(self);
99-
_write(_EVE, b);
100-
}
101-
74+
common_hal__eve_add(EVEHAL(self), buffer_info.len, buffer_info.buf);
10275
return mp_const_none;
10376
}
10477
STATIC MP_DEFINE_CONST_FUN_OBJ_2(cc_obj, _cc);
10578

106-
#define C4(self, u) (*(uint32_t*)append((self), sizeof(uint32_t)) = (u))
107-
10879
#include "mod_eve-gen.h"
10980

11081
// Hand-written functions {
11182

83+
#define ADD_X(self, x) \
84+
common_hal__eve_add(EVEHAL(self), sizeof(x), &(x));
85+
11286
STATIC mp_obj_t _cmd0(mp_obj_t self, mp_obj_t n) {
113-
C4(self, (0xffffff00 | mp_obj_get_int_truncated(n)));
87+
uint32_t code = 0xffffff00 | mp_obj_get_int_truncated(n);
88+
ADD_X(self, code);
11489
return mp_const_none;
11590
}
11691
STATIC MP_DEFINE_CONST_FUN_OBJ_2(cmd0_obj, _cmd0);
11792

11893
STATIC mp_obj_t _vertex2f(mp_obj_t self, mp_obj_t a0, mp_obj_t a1) {
119-
mp_obj__EVE_t *_EVE = mp_instance_cast_to_native_base(self, &_EVE_type);
120-
int16_t x = (int16_t)(_EVE->vscale * mp_obj_get_float(a0));
121-
int16_t y = (int16_t)(_EVE->vscale * mp_obj_get_float(a1));
122-
C4(self, (0x40000000 | ((x & 32767) << 15) | (y & 32767)));
94+
mp_float_t x = mp_obj_get_float(a0);
95+
mp_float_t y = mp_obj_get_float(a1);
96+
common_hal__eve_Vertex2f(EVEHAL(self), x, y);
12397
return mp_const_none;
12498
}
12599
STATIC MP_DEFINE_CONST_FUN_OBJ_3(vertex2f_obj, _vertex2f);
126100

127-
STATIC mp_obj_t _vertexformat(mp_obj_t self, mp_obj_t a0) {
128-
mp_obj__EVE_t *_EVE = mp_instance_cast_to_native_base(self, &_EVE_type);
129-
uint32_t frac = mp_obj_get_int_truncated(a0);
130-
C4(self, ((0x27 << 24) | (frac & 3)));
131-
_EVE->vscale = 1 << frac;
132-
return mp_const_none;
133-
}
134-
STATIC MP_DEFINE_CONST_FUN_OBJ_2(vertexformat_obj, _vertexformat);
135-
136101
STATIC mp_obj_t _cmd(size_t n_args, const mp_obj_t *args) {
137102
mp_obj_t self = args[0];
138103
mp_obj_t num = args[1];
@@ -159,7 +124,8 @@ STATIC mp_obj_t _cmd(size_t n_args, const mp_obj_t *args) {
159124
}
160125
}
161126

162-
uint32_t *p = (uint32_t*)append(self, sizeof(uint32_t) * (1 + n));
127+
uint32_t buf[16];
128+
uint32_t *p = buf;
163129
*p++ = 0xffffff00 | mp_obj_get_int_truncated(num);
164130
mp_obj_t *a = items;
165131
uint32_t lo;
@@ -181,6 +147,8 @@ STATIC mp_obj_t _cmd(size_t n_args, const mp_obj_t *args) {
181147
break;
182148
}
183149
}
150+
151+
common_hal__eve_add(EVEHAL(self), sizeof(uint32_t) * (1 + n), buf);
184152
return mp_const_none;
185153
}
186154
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(cmd_obj, 4, 4, _cmd);
@@ -190,7 +158,6 @@ STATIC const mp_rom_map_elem_t _EVE_locals_dict_table[] = {
190158
{ MP_ROM_QSTR(MP_QSTR_cc), MP_ROM_PTR(&cc_obj) },
191159
{ MP_ROM_QSTR(MP_QSTR_flush), MP_ROM_PTR(&flush_obj) },
192160
{ MP_ROM_QSTR(MP_QSTR_Vertex2f), MP_ROM_PTR(&vertex2f_obj) },
193-
{ MP_ROM_QSTR(MP_QSTR_VertexFormat), MP_ROM_PTR(&vertexformat_obj) },
194161
{ MP_ROM_QSTR(MP_QSTR_cmd), MP_ROM_PTR(&cmd_obj) },
195162
{ MP_ROM_QSTR(MP_QSTR_cmd0), MP_ROM_PTR(&cmd0_obj) },
196163
ROM_DECLS
@@ -206,10 +173,9 @@ STATIC void _EVE_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_
206173
STATIC mp_obj_t _EVE_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *args, mp_map_t *kw_args) {
207174
// mp_arg_check_num(n_args, kw_args, 1, 1, false);
208175
mp_obj__EVE_t *o = m_new_obj(mp_obj__EVE_t);
209-
mp_printf(&mp_plat_print, "_EVE %p make_new\n", o);
210176
o->base.type = &_EVE_type;
211-
o->n = 0;
212-
o->vscale = 16;
177+
o->_eve.n = 0;
178+
o->_eve.vscale = 16;
213179
return MP_OBJ_FROM_PTR(o);
214180
}
215181

0 commit comments

Comments
 (0)