3131
3232#include "zephyr_device.h"
3333
34- static machine_i2c_target_data_t i2c_target_data [4 ];
35-
3634typedef struct _machine_i2c_target_obj_t {
3735 mp_obj_base_t base ;
3836 const struct device * dev ;
@@ -50,15 +48,15 @@ static int i2c_target_write_requested(struct i2c_target_config *config) {
5048 // printk("wr req\n");
5149 writing = true;
5250 reading = false;
53- machine_i2c_target_data_addr_match (& i2c_target_data [0 ], false);
51+ machine_i2c_target_data_addr_match (& machine_i2c_target_data [0 ], false);
5452 return 0 ;
5553}
5654
5755static int i2c_target_write_received (struct i2c_target_config * config , uint8_t val ) {
5856 // printk("wr recv %d\n", val);
5957 global_val = val ;
6058 machine_i2c_target_obj_t * self = CONTAINER_OF (config , machine_i2c_target_obj_t , cfg );
61- machine_i2c_target_data_t * data = & i2c_target_data [0 ];
59+ machine_i2c_target_data_t * data = & machine_i2c_target_data [0 ];
6260 machine_i2c_target_data_write_request (self , data );
6361 return 0 ;
6462}
@@ -70,7 +68,7 @@ static int i2c_target_read_requested(struct i2c_target_config *config, uint8_t *
7068 // printk("rd req\n");
7169 writing = false;
7270 machine_i2c_target_obj_t * self = CONTAINER_OF (config , machine_i2c_target_obj_t , cfg );
73- machine_i2c_target_data_t * data = & i2c_target_data [0 ];
71+ machine_i2c_target_data_t * data = & machine_i2c_target_data [0 ];
7472 if (!reading ) {
7573 machine_i2c_target_data_addr_match (data , true);
7674 machine_i2c_target_data_read_request (self , data );
@@ -83,7 +81,7 @@ static int i2c_target_read_requested(struct i2c_target_config *config, uint8_t *
8381static int i2c_target_read_processed (struct i2c_target_config * config , uint8_t * val ) {
8482 // printk("rd processed\n");
8583 machine_i2c_target_obj_t * self = CONTAINER_OF (config , machine_i2c_target_obj_t , cfg );
86- machine_i2c_target_data_t * data = & i2c_target_data [0 ];
84+ machine_i2c_target_data_t * data = & machine_i2c_target_data [0 ];
8785 machine_i2c_target_data_read_request (self , data );
8886 * val = global_val ;
8987 return 0 ;
@@ -94,11 +92,11 @@ static int i2c_target_stop(struct i2c_target_config *config) {
9492 // printk("stop\n");
9593 if (!writing && !reading ) {
9694 // Assume a stop without a start is a 0-byte write.
97- machine_i2c_target_data_addr_match (& i2c_target_data [0 ], false);
95+ machine_i2c_target_data_addr_match (& machine_i2c_target_data [0 ], false);
9896 }
9997 writing = false;
10098 reading = false;
101- machine_i2c_target_data_t * data = & i2c_target_data [0 ];
99+ machine_i2c_target_data_t * data = & machine_i2c_target_data [0 ];
102100 machine_i2c_target_data_stop (data );
103101 return 0 ;
104102}
@@ -114,6 +112,10 @@ static struct i2c_target_callbacks i2c_target_callbacks = {
114112/******************************************************************************/
115113// I2CTarget port implementation
116114
115+ static inline size_t mp_machine_i2c_target_get_index (machine_i2c_target_obj_t * self ) {
116+ return 0 ;
117+ }
118+
117119static void mp_machine_i2c_target_deinit_all_port (void ) {
118120}
119121
@@ -167,8 +169,8 @@ static mp_obj_t mp_machine_i2c_target_make_new(const mp_obj_type_t *type, size_t
167169 self -> cfg .callbacks = & i2c_target_callbacks ;
168170
169171 // Initialise data.
170- MP_STATE_PORT (i2c_target_mem_obj )[0 ] = args [ARG_mem ].u_obj ;
171- machine_i2c_target_data_t * data = & i2c_target_data [0 ];
172+ MP_STATE_PORT (machine_i2c_target_mem_obj )[0 ] = args [ARG_mem ].u_obj ;
173+ machine_i2c_target_data_t * data = & machine_i2c_target_data [0 ];
172174 machine_i2c_target_data_init (data , args [ARG_mem ].u_obj , args [ARG_mem_addrsize ].u_int );
173175
174176 #if 0
@@ -189,6 +191,8 @@ static mp_obj_t mp_machine_i2c_target_make_new(const mp_obj_type_t *type, size_t
189191 }
190192 #endif
191193
194+ // TODO check that only one can be created at once.
195+
192196 // Initialise the I2C target.
193197 // TODO: don't reinitialize if no arguments given.
194198 int ret = i2c_target_register (self -> dev , & self -> cfg );
0 commit comments