extmod/machine_i2c: Rename type to SoftI2C and add custom print method.
Also rename machine_i2c_type to mp_machine_soft_i2c_type. These changes make it clear that it's a soft-I2C implementation, and match SoftSPI. Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
parent
c711c0049e
commit
c35deb2625
|
@ -302,6 +302,12 @@ STATIC int mp_machine_i2c_writeto(mp_obj_base_t *self, uint16_t addr, const uint
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
// MicroPython bindings for I2C
|
// MicroPython bindings for I2C
|
||||||
|
|
||||||
|
STATIC void mp_machine_soft_i2c_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
|
||||||
|
mp_machine_soft_i2c_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
|
mp_printf(print, "SoftI2C(scl=" MP_HAL_PIN_FMT ", sda=" MP_HAL_PIN_FMT ", freq=%u)",
|
||||||
|
mp_hal_pin_name(self->scl), mp_hal_pin_name(self->sda), 500000 / self->us_delay);
|
||||||
|
}
|
||||||
|
|
||||||
STATIC void machine_i2c_obj_init_helper(machine_i2c_obj_t *self, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
STATIC void machine_i2c_obj_init_helper(machine_i2c_obj_t *self, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
||||||
enum { ARG_scl, ARG_sda, ARG_freq, ARG_timeout };
|
enum { ARG_scl, ARG_sda, ARG_freq, ARG_timeout };
|
||||||
static const mp_arg_t allowed_args[] = {
|
static const mp_arg_t allowed_args[] = {
|
||||||
|
@ -318,7 +324,7 @@ STATIC void machine_i2c_obj_init_helper(machine_i2c_obj_t *self, size_t n_args,
|
||||||
mp_hal_i2c_init(self, args[ARG_freq].u_int);
|
mp_hal_i2c_init(self, args[ARG_freq].u_int);
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t machine_i2c_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
|
STATIC mp_obj_t mp_machine_soft_i2c_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
|
||||||
// check the id argument, if given
|
// check the id argument, if given
|
||||||
if (n_args > 0) {
|
if (n_args > 0) {
|
||||||
if (args[0] != MP_OBJ_NEW_SMALL_INT(-1)) {
|
if (args[0] != MP_OBJ_NEW_SMALL_INT(-1)) {
|
||||||
|
@ -336,7 +342,7 @@ STATIC mp_obj_t machine_i2c_make_new(const mp_obj_type_t *type, size_t n_args, s
|
||||||
|
|
||||||
// create new soft I2C object
|
// create new soft I2C object
|
||||||
machine_i2c_obj_t *self = m_new_obj(machine_i2c_obj_t);
|
machine_i2c_obj_t *self = m_new_obj(machine_i2c_obj_t);
|
||||||
self->base.type = &machine_i2c_type;
|
self->base.type = &mp_machine_soft_i2c_type;
|
||||||
mp_map_t kw_args;
|
mp_map_t kw_args;
|
||||||
mp_map_init_fixed_table(&kw_args, n_kw, args + n_args);
|
mp_map_init_fixed_table(&kw_args, n_kw, args + n_args);
|
||||||
machine_i2c_obj_init_helper(self, n_args, args, &kw_args);
|
machine_i2c_obj_init_helper(self, n_args, args, &kw_args);
|
||||||
|
@ -700,10 +706,11 @@ STATIC const mp_machine_i2c_p_t mp_machine_soft_i2c_p = {
|
||||||
.transfer = mp_machine_soft_i2c_transfer,
|
.transfer = mp_machine_soft_i2c_transfer,
|
||||||
};
|
};
|
||||||
|
|
||||||
const mp_obj_type_t machine_i2c_type = {
|
const mp_obj_type_t mp_machine_soft_i2c_type = {
|
||||||
{ &mp_type_type },
|
{ &mp_type_type },
|
||||||
.name = MP_QSTR_I2C,
|
.name = MP_QSTR_SoftI2C,
|
||||||
.make_new = machine_i2c_make_new,
|
.print = mp_machine_soft_i2c_print,
|
||||||
|
.make_new = mp_machine_soft_i2c_make_new,
|
||||||
.protocol = &mp_machine_soft_i2c_p,
|
.protocol = &mp_machine_soft_i2c_p,
|
||||||
.locals_dict = (mp_obj_dict_t *)&mp_machine_soft_i2c_locals_dict,
|
.locals_dict = (mp_obj_dict_t *)&mp_machine_soft_i2c_locals_dict,
|
||||||
};
|
};
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#define MICROPY_INCLUDED_EXTMOD_MACHINE_I2C_H
|
#define MICROPY_INCLUDED_EXTMOD_MACHINE_I2C_H
|
||||||
|
|
||||||
#include "py/obj.h"
|
#include "py/obj.h"
|
||||||
|
#include "py/mphal.h"
|
||||||
|
|
||||||
#define MP_MACHINE_I2C_FLAG_READ (0x01) // if not set then it's a write
|
#define MP_MACHINE_I2C_FLAG_READ (0x01) // if not set then it's a write
|
||||||
#define MP_MACHINE_I2C_FLAG_STOP (0x02)
|
#define MP_MACHINE_I2C_FLAG_STOP (0x02)
|
||||||
|
@ -56,7 +57,7 @@ typedef struct _mp_machine_soft_i2c_obj_t {
|
||||||
mp_hal_pin_obj_t sda;
|
mp_hal_pin_obj_t sda;
|
||||||
} mp_machine_soft_i2c_obj_t;
|
} mp_machine_soft_i2c_obj_t;
|
||||||
|
|
||||||
extern const mp_obj_type_t machine_i2c_type;
|
extern const mp_obj_type_t mp_machine_soft_i2c_type;
|
||||||
extern const mp_obj_dict_t mp_machine_soft_i2c_locals_dict;
|
extern const mp_obj_dict_t mp_machine_soft_i2c_locals_dict;
|
||||||
|
|
||||||
int mp_machine_i2c_transfer_adaptor(mp_obj_base_t *self, uint16_t addr, size_t n, mp_machine_i2c_buf_t *bufs, unsigned int flags);
|
int mp_machine_i2c_transfer_adaptor(mp_obj_base_t *self, uint16_t addr, size_t n, mp_machine_i2c_buf_t *bufs, unsigned int flags);
|
||||||
|
|
|
@ -255,7 +255,7 @@ STATIC const mp_rom_map_elem_t machine_module_globals_table[] = {
|
||||||
{ MP_ROM_QSTR(MP_QSTR_TouchPad), MP_ROM_PTR(&machine_touchpad_type) },
|
{ MP_ROM_QSTR(MP_QSTR_TouchPad), MP_ROM_PTR(&machine_touchpad_type) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_ADC), MP_ROM_PTR(&machine_adc_type) },
|
{ MP_ROM_QSTR(MP_QSTR_ADC), MP_ROM_PTR(&machine_adc_type) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_DAC), MP_ROM_PTR(&machine_dac_type) },
|
{ MP_ROM_QSTR(MP_QSTR_DAC), MP_ROM_PTR(&machine_dac_type) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&machine_i2c_type) },
|
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&mp_machine_soft_i2c_type) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_PWM), MP_ROM_PTR(&machine_pwm_type) },
|
{ MP_ROM_QSTR(MP_QSTR_PWM), MP_ROM_PTR(&machine_pwm_type) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_RTC), MP_ROM_PTR(&machine_rtc_type) },
|
{ MP_ROM_QSTR(MP_QSTR_RTC), MP_ROM_PTR(&machine_rtc_type) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&mp_machine_soft_spi_type) },
|
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&mp_machine_soft_spi_type) },
|
||||||
|
|
|
@ -421,7 +421,7 @@ STATIC const mp_rom_map_elem_t machine_module_globals_table[] = {
|
||||||
{ MP_ROM_QSTR(MP_QSTR_ADC), MP_ROM_PTR(&machine_adc_type) },
|
{ MP_ROM_QSTR(MP_QSTR_ADC), MP_ROM_PTR(&machine_adc_type) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&pyb_uart_type) },
|
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&pyb_uart_type) },
|
||||||
#if MICROPY_PY_MACHINE_I2C
|
#if MICROPY_PY_MACHINE_I2C
|
||||||
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&machine_i2c_type) },
|
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&mp_machine_soft_i2c_type) },
|
||||||
#endif
|
#endif
|
||||||
#if MICROPY_PY_MACHINE_SPI
|
#if MICROPY_PY_MACHINE_SPI
|
||||||
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&machine_hspi_type) },
|
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&machine_hspi_type) },
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#ifndef I2C_H__
|
#ifndef I2C_H__
|
||||||
#define I2C_H__
|
#define I2C_H__
|
||||||
|
|
||||||
extern const mp_obj_type_t machine_i2c_type;
|
#include "extmod/machine_i2c.h"
|
||||||
|
|
||||||
void i2c_init0(void);
|
void i2c_init0(void);
|
||||||
|
|
||||||
|
|
|
@ -208,7 +208,7 @@ STATIC const mp_rom_map_elem_t machine_module_globals_table[] = {
|
||||||
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&machine_hard_spi_type) },
|
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&machine_hard_spi_type) },
|
||||||
#endif
|
#endif
|
||||||
#if MICROPY_PY_MACHINE_I2C
|
#if MICROPY_PY_MACHINE_I2C
|
||||||
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&machine_i2c_type) },
|
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&mp_machine_soft_i2c_type) },
|
||||||
#endif
|
#endif
|
||||||
#if MICROPY_PY_MACHINE_ADC
|
#if MICROPY_PY_MACHINE_ADC
|
||||||
{ MP_ROM_QSTR(MP_QSTR_ADC), MP_ROM_PTR(&machine_adc_type) },
|
{ MP_ROM_QSTR(MP_QSTR_ADC), MP_ROM_PTR(&machine_adc_type) },
|
||||||
|
|
|
@ -54,8 +54,10 @@ void mp_hal_delay_us(mp_uint_t us);
|
||||||
|
|
||||||
const char *nrfx_error_code_lookup(uint32_t err_code);
|
const char *nrfx_error_code_lookup(uint32_t err_code);
|
||||||
|
|
||||||
|
#define MP_HAL_PIN_FMT "%q"
|
||||||
#define mp_hal_pin_obj_t const pin_obj_t *
|
#define mp_hal_pin_obj_t const pin_obj_t *
|
||||||
#define mp_hal_get_pin_obj(o) pin_find(o)
|
#define mp_hal_get_pin_obj(o) pin_find(o)
|
||||||
|
#define mp_hal_pin_name(p) ((p)->name)
|
||||||
#define mp_hal_pin_high(p) nrf_gpio_pin_set(p->pin)
|
#define mp_hal_pin_high(p) nrf_gpio_pin_set(p->pin)
|
||||||
#define mp_hal_pin_low(p) nrf_gpio_pin_clear(p->pin)
|
#define mp_hal_pin_low(p) nrf_gpio_pin_clear(p->pin)
|
||||||
#define mp_hal_pin_read(p) (nrf_gpio_pin_dir_get(p->pin) == NRF_GPIO_PIN_DIR_OUTPUT) ? nrf_gpio_pin_out_read(p->pin) : nrf_gpio_pin_read(p->pin)
|
#define mp_hal_pin_read(p) (nrf_gpio_pin_dir_get(p->pin) == NRF_GPIO_PIN_DIR_OUTPUT) ? nrf_gpio_pin_out_read(p->pin) : nrf_gpio_pin_read(p->pin)
|
||||||
|
|
|
@ -415,7 +415,7 @@ STATIC const mp_rom_map_elem_t machine_module_globals_table[] = {
|
||||||
{ MP_ROM_QSTR(MP_QSTR_RTC), MP_ROM_PTR(&pyb_rtc_type) },
|
{ MP_ROM_QSTR(MP_QSTR_RTC), MP_ROM_PTR(&pyb_rtc_type) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_ADC), MP_ROM_PTR(&machine_adc_type) },
|
{ MP_ROM_QSTR(MP_QSTR_ADC), MP_ROM_PTR(&machine_adc_type) },
|
||||||
#if MICROPY_PY_MACHINE_I2C
|
#if MICROPY_PY_MACHINE_I2C
|
||||||
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&machine_i2c_type) },
|
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&mp_machine_soft_i2c_type) },
|
||||||
#endif
|
#endif
|
||||||
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&machine_hard_spi_type) },
|
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&machine_hard_spi_type) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&pyb_uart_type) },
|
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&pyb_uart_type) },
|
||||||
|
|
|
@ -60,7 +60,7 @@ STATIC const mp_rom_map_elem_t machine_module_globals_table[] = {
|
||||||
#endif
|
#endif
|
||||||
{ MP_ROM_QSTR(MP_QSTR_reset_cause), MP_ROM_PTR(&machine_reset_cause_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_reset_cause), MP_ROM_PTR(&machine_reset_cause_obj) },
|
||||||
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&machine_i2c_type) },
|
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&mp_machine_soft_i2c_type) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_Pin), MP_ROM_PTR(&machine_pin_type) },
|
{ MP_ROM_QSTR(MP_QSTR_Pin), MP_ROM_PTR(&machine_pin_type) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_Signal), MP_ROM_PTR(&machine_signal_type) },
|
{ MP_ROM_QSTR(MP_QSTR_Signal), MP_ROM_PTR(&machine_signal_type) },
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue