Skip to content

Commit 7e97c39

Browse files
committed
Protomatter - fixup
1 parent 7881ed5 commit 7e97c39

File tree

2 files changed

+20
-19
lines changed

2 files changed

+20
-19
lines changed

shared-bindings/_protomatter/Protomatter.c

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ STATIC mp_obj_t protomatter_protomatter_make_new(const mp_obj_type_t *type, size
9898
mp_raise_ValueError(translate("No timer available"));
9999
}
100100

101+
self->width = args[ARG_bit_width].u_int;
102+
self->bufsize = 2 * args[ARG_bit_width].u_int * self->rgb_count / 3 * (1 << self->addr_count);
101103
claim_pins(args[ARG_rgb_list].u_obj);
102104
claim_pins(args[ARG_addr_list].u_obj);
103105
common_hal_mcu_pin_claim(args[ARG_clock_pin].u_obj);
@@ -113,27 +115,13 @@ STATIC mp_obj_t protomatter_protomatter_make_new(const mp_obj_type_t *type, size
113115

114116
if (stat == PROTOMATTER_OK) {
115117
_PM_protoPtr = &self->core;
116-
117-
uint16_t *framebuffer = m_malloc(2*64*32, 0);
118-
for(int i=0; i<64*32; i++) {
119-
int r = (i % 2) ^ ((i / 64) % 2);
120-
framebuffer[i] = r ? 0xf000 : 0x000f;
121-
}
122-
for(int i=0; i<64; i++) {
123-
framebuffer[i] = i >> 1;
124-
framebuffer[64+i] = i << 5;
125-
framebuffer[128+i] = (i >> 1) << 11;
126-
framebuffer[192+i] = (i >> 1) | (i << 5) | (i >> 1) << 11;
127-
}
128-
129-
common_hal_mcu_disable_interrupts();
118+
uint16_t *framebuffer = m_malloc(self->bufsize, 0);
119+
common_hal_mcu_disable_interrupts();
130120
stat = _PM_begin(&self->core);
131121
_PM_convert_565_byte(&self->core, framebuffer, 64);
132-
133-
// while(true) _PM_row_handler(&self->core);
134122
common_hal_protomatter_timer_enable(self->timer);
135-
common_hal_mcu_enable_interrupts();
136123
m_free(framebuffer);
124+
common_hal_mcu_enable_interrupts();
137125
}
138126

139127
if (stat != PROTOMATTER_OK) {
@@ -227,6 +215,7 @@ STATIC mp_obj_t protomatter_protomatter_set_paused(mp_obj_t self_in, mp_obj_t va
227215
} else if(!paused && self->paused) {
228216
_PM_resume(&self->core);
229217
}
218+
self->paused = paused;
230219

231220
return mp_const_none;
232221
}
@@ -253,14 +242,25 @@ const mp_obj_property_t protomatter_protomatter_frame_count_obj = {
253242
(mp_obj_t)&mp_const_none_obj},
254243
};
255244

245+
STATIC mp_obj_t protomatter_protomatter_write(mp_obj_t self_in, mp_obj_t buf) {
246+
protomatter_protomatter_obj_t *self = (protomatter_protomatter_obj_t*)self_in;
247+
check_for_deinit(self);
248+
mp_buffer_info_t bufinfo;
249+
mp_get_buffer_raise(buf, &bufinfo, MP_BUFFER_READ);
250+
251+
mp_get_index(mp_obj_get_type(buf), bufinfo.len, MP_OBJ_NEW_SMALL_INT(self->bufsize-1), false);
252+
_PM_convert_565_byte(&self->core, bufinfo.buf, self->width);
253+
return mp_const_none;
254+
}
255+
MP_DEFINE_CONST_FUN_OBJ_2(protomatter_protomatter_write_obj, protomatter_protomatter_write);
256+
256257
STATIC const mp_rom_map_elem_t protomatter_protomatter_locals_dict_table[] = {
257258
{ MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&protomatter_protomatter_deinit_obj) },
258259
{ MP_ROM_QSTR(MP_QSTR_paused), MP_ROM_PTR(&protomatter_protomatter_paused_obj) },
259260
{ MP_ROM_QSTR(MP_QSTR_frame_count), MP_ROM_PTR(&protomatter_protomatter_frame_count_obj) },
260-
// begin (method)
261+
{ MP_ROM_QSTR(MP_QSTR_write), MP_ROM_PTR(&protomatter_protomatter_write_obj) },
261262
// stop (method)
262263
// resume (method)
263-
// frameCount (property)
264264
};
265265
STATIC MP_DEFINE_CONST_DICT(protomatter_protomatter_locals_dict, protomatter_protomatter_locals_dict_table);
266266

shared-bindings/_protomatter/Protomatter.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ typedef struct {
3939
uint8_t *addr_pins;
4040
uint8_t clock_pin, latch_pin, oe_pin;
4141
uint8_t rgb_count, addr_count;
42+
uint16_t bufsize, width;
4243
bool core_is_initialized;
4344
bool paused;
4445
} protomatter_protomatter_obj_t;

0 commit comments

Comments
 (0)