|
76 | 76 | #define I2C_BUS_LOCK_DELETE(self) vSemaphoreDelete(self->lock.handle) |
77 | 77 | #define I2C_BUS_LOCK_RELEASE(self) xSemaphoreGive(self->lock.handle) |
78 | 78 | #define I2C_BUS_LOCK_INIT(self) { \ |
79 | | - lock->handle = xSemaphoreCreateBinaryStatic(&self->lock.buffer); \ |
| 79 | + self->lock.handle = xSemaphoreCreateBinaryStatic(&self->lock.buffer); \ |
80 | 80 | xSemaphoreGive(self->lock.handle); \ |
81 | 81 | } |
82 | 82 |
|
|
206 | 206 |
|
207 | 207 | static void i2c_bus_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) |
208 | 208 | { |
209 | | - machine_hw_i2c_obj_t *self = MP_OBJ_TO_PTR(self_in); |
| 209 | + mp_machine_hw_i2c_bus_obj_t *self = MP_OBJ_TO_PTR(self_in); |
210 | 210 | int h, l; |
211 | 211 | i2c_get_period(self->port, &h, &l); |
212 | 212 | mp_printf(print, "I2C(%u, scl=%u, sda=%u, freq=%u)", |
|
232 | 232 | mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); |
233 | 233 |
|
234 | 234 | // Get I2C bus |
235 | | - uint8_t i2c_id = (uint8_t)args[ARG_host].u_int); |
| 235 | + uint8_t i2c_id = (uint8_t)args[ARG_host].u_int; |
236 | 236 | if (!(I2C_NUM_0 <= i2c_id && i2c_id < I2C_NUM_MAX)) { |
237 | 237 | mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("I2C(%u) doesn't exist"), i2c_id); |
238 | 238 | } |
|
244 | 244 | mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("I2C host is already in use (%u)"), i2c_id); |
245 | 245 | } |
246 | 246 | // Created for the first time, set default pins |
247 | | - self->base.type = &mp_machine_i2c_bus_type; |
| 247 | + self->base.type = &mp_machine_hw_i2c_bus_type; |
248 | 248 | self->port = i2c_id; |
249 | 249 | self->active = 0; |
250 | 250 | self->device_count = 0; |
|
329 | 329 |
|
330 | 330 | // Create buffer with memory address |
331 | 331 | uint8_t memaddr_buf[4]; |
332 | | - size_t memaddr_len = fill_memaddr_buf(&memaddr_buf[0], memaddr, addrsize); |
| 332 | + size_t memaddr_len = get_memaddr_buf(&memaddr_buf[0], memaddr, addrsize); |
333 | 333 |
|
334 | 334 | // Create partial write buffers |
335 | 335 | mp_machine_i2c_buf_t bufs[2] = { |
|
373 | 373 | { |
374 | 374 | if (self->bus == NULL) return; |
375 | 375 |
|
376 | | - uint8_t i = 0 |
| 376 | + uint8_t i = 0; |
377 | 377 |
|
378 | 378 | for (;i<self->bus->device_count;i++) { |
379 | 379 | if (self->bus->devices[i] == self) { |
|
425 | 425 |
|
426 | 426 | uint32_t memaddr = 0; |
427 | 427 |
|
428 | | - for (uint8_t i=(self->reg_bits / 8) - 1;i>-1;i--) { |
429 | | - memaddr |= (uint32_t)(((uint8_t)write_bufinfo.buf[i]) << ((~i + (self.reg_bits / 8)) * 8)); |
| 428 | + for (int i=(int)(self->reg_bits / 8) - 1;i>-1;i--) { |
| 429 | + memaddr |= (uint32_t)(((uint8_t *)write_bufinfo.buf[i]) << ((~i + (self->reg_bits / 8)) * 8)); |
430 | 430 | } |
431 | 431 |
|
432 | 432 | int ret = device_read(self, self->device_id, memaddr, self->reg_bits, (uint8_t *)read_bufinfo.buf, read_bufinfo.len); |
|
547 | 547 | vstr_init_len(&vstr, num_bytes); |
548 | 548 |
|
549 | 549 | // do the transfer |
550 | | - ret = device_readfrom(self, self->device_id, (uint8_t *)vstr.buf, vstr.len); |
| 550 | + ret = device_readfrom(self, self->device_id, (uint8_t *)vstr.buf, vstr.len, true); |
551 | 551 | if (ret < 0) { |
552 | 552 | mp_raise_OSError(-ret); |
553 | 553 | } |
|
575 | 575 | mp_buffer_info_t bufinfo; |
576 | 576 | mp_get_buffer_raise(args[ARG_buf].u_obj, &bufinfo, MP_BUFFER_READ); |
577 | 577 |
|
578 | | - ret = device_writeto(self, self->device_id, (uint8_t *)bufinfo.buf, bufinfo.len, true); |
| 578 | + int ret = device_writeto(self, self->device_id, (uint8_t *)bufinfo.buf, bufinfo.len, true); |
579 | 579 | if (ret < 0) { |
580 | 580 | mp_raise_OSError(-ret); |
581 | 581 | } |
|
623 | 623 |
|
624 | 624 |
|
625 | 625 | static const mp_rom_map_elem_t i2c_device_locals_dict_table[] = { |
626 | | - { MP_ROM_QSTR(MP_QSTR_init), MP_ROM_PTR(&machine_i2c_init_obj) }, |
627 | 626 | { MP_ROM_QSTR(MP_QSTR_write_readinto), MP_ROM_PTR(&i2c_device_write_readinto_obj) }, |
628 | 627 | { MP_ROM_QSTR(MP_QSTR_read_mem), MP_ROM_PTR(&i2c_device_read_mem_obj) }, |
629 | 628 | { MP_ROM_QSTR(MP_QSTR_write_mem), MP_ROM_PTR(&i2c_device_write_mem_obj) }, |
|
0 commit comments