Skip to content
Snippets Groups Projects
Commit c6400205 authored by Václav Jelínek's avatar Václav Jelínek
Browse files

Add option for I2C slave to read all registers

parent b18a6e69
No related branches found
No related tags found
No related merge requests found
Pipeline #124753 canceled
......@@ -75,7 +75,7 @@ class Robot:
# Turn off cube
def turn_off(self):
self.turn_off_pin.value(1)
sleep(0.096)
sleep(0.08)
self.led.on()
self.turn_off_pin.value(0) # resetting pin for quick startup
sleep(1)
......
......@@ -98,7 +98,7 @@ static void oc_i2c_slave_handler(i2c_inst_t *i2c, i2c_slave_event_t event) {
if (context->mem_address == OC_I2C_SLAVE_TIME_TRIGGER_REG_END) {
uint32_t* delay_us = (uint32_t*) &context->mem[OC_I2C_SLAVE_TIME_TRIGGER_REG_START];
oc_i2c_slave_obj.time_trigger = *delay_us;
if (oc_i2c_slave_obj.mp_irq_trigger & OC_I2C_SLAVE_TRIGGER) {
if (oc_i2c_slave_obj.mp_irq_trigger & OC_I2C_SLAVE_TRIGGER && *delay_us > 0) {
oc_cancel_alarm(&oc_i2c_slave_obj);
oc_i2c_slave_obj.alarm_id = alarm_pool_add_alarm_in_us(oc_i2c_slave_obj.pool,
(uint64_t)(*delay_us), alarm_callback, &oc_i2c_slave_obj, true);
......@@ -253,6 +253,17 @@ static mp_obj_t oc_i2c_slave_read(mp_obj_t self_in, mp_obj_t addr) {
}
static MP_DEFINE_CONST_FUN_OBJ_2(oc_i2c_slave_read_obj, oc_i2c_slave_read);
static mp_obj_t oc_i2c_slave_read_all(mp_obj_t self_in, mp_obj_t nbytes) {
oc_i2c_slave_obj_t *self = MP_OBJ_TO_PTR(self_in);
vstr_t vstr;
vstr_init_len(&vstr, mp_obj_get_int(nbytes));
for (size_t i = 0; i < vstr.len; i++) {
vstr.buf[i] = self->context.mem[i];
}
return mp_obj_new_bytes_from_vstr(&vstr);
}
static MP_DEFINE_CONST_FUN_OBJ_2(oc_i2c_slave_read_all_obj, oc_i2c_slave_read_all);
// I2C_slave.write()
static mp_obj_t oc_i2c_slave_write(mp_obj_t self_in, mp_obj_t addr, mp_obj_t data) {
oc_i2c_slave_obj_t *self = MP_OBJ_TO_PTR(self_in);
......@@ -372,6 +383,7 @@ static mp_irq_obj_t *oc_i2c_slave_irq_helper(oc_i2c_slave_obj_t *self, bool any_
// The table structure is similar to the module table, as detailed below.
static const mp_rom_map_elem_t oc_i2c_slave_locals_dict[] = {
{ MP_ROM_QSTR(MP_QSTR_read), MP_ROM_PTR(&oc_i2c_slave_read_obj) },
{ MP_ROM_QSTR(MP_QSTR_read_all), MP_ROM_PTR(&oc_i2c_slave_read_all_obj) },
{ MP_ROM_QSTR(MP_QSTR_write), MP_ROM_PTR(&oc_i2c_slave_write_obj) },
{ MP_ROM_QSTR(MP_QSTR_read_flags), MP_ROM_PTR(&oc_i2c_slave_read_flags_obj) },
{ MP_ROM_QSTR(MP_QSTR_written_flags), MP_ROM_PTR(&oc_i2c_slave_written_flags_obj) },
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment