2828// bitbangio.I2C class.
2929
3030#include "shared-bindings/bitbangio/I2C.h"
31+ #include "shared-bindings/microcontroller/Pin.h"
3132
3233#include "py/runtime.h"
3334//| .. currentmodule:: bitbangio
4647//| :param int freq: The clock frequency
4748//|
4849STATIC mp_obj_t bitbangio_i2c_make_new (const mp_obj_type_t * type , size_t n_args , size_t n_kw , const mp_obj_t * pos_args ) {
49- mp_arg_check_num (n_args , n_kw , 0 , MP_OBJ_FUN_ARGS_MAX , true);
50- bitbangio_i2c_obj_t * self = m_new_obj (bitbangio_i2c_obj_t );
51- self -> base .type = & bitbangio_i2c_type ;
52- mp_map_t kw_args ;
53- mp_map_init_fixed_table (& kw_args , n_kw , pos_args + n_args );
54- enum { ARG_scl , ARG_sda , ARG_freq };
55- static const mp_arg_t allowed_args [] = {
56- { MP_QSTR_scl , MP_ARG_REQUIRED | MP_ARG_OBJ },
57- { MP_QSTR_sda , MP_ARG_REQUIRED | MP_ARG_OBJ },
58- { MP_QSTR_freq , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = 400000 } },
59- };
60- mp_arg_val_t args [MP_ARRAY_SIZE (allowed_args )];
61- mp_arg_parse_all (n_args , pos_args , & kw_args , MP_ARRAY_SIZE (allowed_args ), allowed_args , args );
62- const mcu_pin_obj_t * scl = MP_OBJ_TO_PTR (args [ARG_scl ].u_obj );
63- const mcu_pin_obj_t * sda = MP_OBJ_TO_PTR (args [ARG_sda ].u_obj );
64- shared_module_bitbangio_i2c_construct (self , scl , sda , args [ARG_freq ].u_int );
65- return (mp_obj_t )self ;
50+ mp_arg_check_num (n_args , n_kw , 0 , MP_OBJ_FUN_ARGS_MAX , true);
51+ bitbangio_i2c_obj_t * self = m_new_obj (bitbangio_i2c_obj_t );
52+ self -> base .type = & bitbangio_i2c_type ;
53+ mp_map_t kw_args ;
54+ mp_map_init_fixed_table (& kw_args , n_kw , pos_args + n_args );
55+ enum { ARG_scl , ARG_sda , ARG_freq };
56+ static const mp_arg_t allowed_args [] = {
57+ { MP_QSTR_scl , MP_ARG_REQUIRED | MP_ARG_OBJ },
58+ { MP_QSTR_sda , MP_ARG_REQUIRED | MP_ARG_OBJ },
59+ { MP_QSTR_freq , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = 400000 } },
60+ };
61+ mp_arg_val_t args [MP_ARRAY_SIZE (allowed_args )];
62+ mp_arg_parse_all (n_args , pos_args , & kw_args , MP_ARRAY_SIZE (allowed_args ), allowed_args , args );
63+ assert_pin (args [ARG_scl ].u_obj , false);
64+ assert_pin (args [ARG_sda ].u_obj , false);
65+ const mcu_pin_obj_t * scl = MP_OBJ_TO_PTR (args [ARG_scl ].u_obj );
66+ const mcu_pin_obj_t * sda = MP_OBJ_TO_PTR (args [ARG_sda ].u_obj );
67+ shared_module_bitbangio_i2c_construct (self , scl , sda , args [ARG_freq ].u_int );
68+ return (mp_obj_t )self ;
6669}
6770
6871//| .. method:: I2C.deinit()
6972//|
7073//| Releases control of the underlying hardware so other classes can use it.
7174//|
7275STATIC mp_obj_t bitbangio_i2c_obj_deinit (mp_obj_t self_in ) {
73- bitbangio_i2c_obj_t * self = MP_OBJ_TO_PTR (self_in );
74- shared_module_bitbangio_i2c_deinit (self );
75- return mp_const_none ;
76+ bitbangio_i2c_obj_t * self = MP_OBJ_TO_PTR (self_in );
77+ shared_module_bitbangio_i2c_deinit (self );
78+ return mp_const_none ;
7679}
7780MP_DEFINE_CONST_FUN_OBJ_1 (bitbangio_i2c_deinit_obj , bitbangio_i2c_obj_deinit );
7881
@@ -81,7 +84,7 @@ MP_DEFINE_CONST_FUN_OBJ_1(bitbangio_i2c_deinit_obj, bitbangio_i2c_obj_deinit);
8184//| No-op used in Context Managers.
8285//|
8386STATIC mp_obj_t bitbangio_i2c_obj___enter__ (mp_obj_t self_in ) {
84- return self_in ;
87+ return self_in ;
8588}
8689MP_DEFINE_CONST_FUN_OBJ_1 (bitbangio_i2c___enter___obj , bitbangio_i2c_obj___enter__ );
8790
@@ -103,16 +106,16 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(bitbangio_i2c_obj___exit___obj, 4, 4,
103106//| its address (including a read bit) is sent on the bus.
104107//|
105108STATIC mp_obj_t bitbangio_i2c_scan (mp_obj_t self_in ) {
106- bitbangio_i2c_obj_t * self = MP_OBJ_TO_PTR (self_in );
107- mp_obj_t list = mp_obj_new_list (0 , NULL );
108- // 7-bit addresses 0b0000xxx and 0b1111xxx are reserved
109- for (int addr = 0x08 ; addr < 0x78 ; ++ addr ) {
110- bool success = shared_module_bitbangio_i2c_probe (self , addr );
111- if (success ) {
109+ bitbangio_i2c_obj_t * self = MP_OBJ_TO_PTR (self_in );
110+ mp_obj_t list = mp_obj_new_list (0 , NULL );
111+ // 7-bit addresses 0b0000xxx and 0b1111xxx are reserved
112+ for (int addr = 0x08 ; addr < 0x78 ; ++ addr ) {
113+ bool success = shared_module_bitbangio_i2c_probe (self , addr );
114+ if (success ) {
112115 mp_obj_list_append (list , MP_OBJ_NEW_SMALL_INT (addr ));
113- }
114- }
115- return list ;
116+ }
117+ }
118+ return list ;
116119}
117120MP_DEFINE_CONST_FUN_OBJ_1 (bitbangio_i2c_scan_obj , bitbangio_i2c_scan );
118121
@@ -174,8 +177,8 @@ STATIC const mp_rom_map_elem_t bitbangio_i2c_locals_dict_table[] = {
174177STATIC MP_DEFINE_CONST_DICT (bitbangio_i2c_locals_dict , bitbangio_i2c_locals_dict_table );
175178
176179const mp_obj_type_t bitbangio_i2c_type = {
177- { & mp_type_type },
178- .name = MP_QSTR_I2C ,
179- .make_new = bitbangio_i2c_make_new ,
180- .locals_dict = (mp_obj_dict_t * )& bitbangio_i2c_locals_dict ,
180+ { & mp_type_type },
181+ .name = MP_QSTR_I2C ,
182+ .make_new = bitbangio_i2c_make_new ,
183+ .locals_dict = (mp_obj_dict_t * )& bitbangio_i2c_locals_dict ,
181184};
0 commit comments