diff options
author | Loek Le Blansch <loek@pipeframe.xyz> | 2024-06-25 10:44:57 +0200 |
---|---|---|
committer | Loek Le Blansch <loek@pipeframe.xyz> | 2024-06-25 10:44:57 +0200 |
commit | dcccf564f0bdc529b4165e4f2e2fb63216da2339 (patch) | |
tree | 33586f0b0b655026909e51a1bdd81ad8ad05d049 | |
parent | 637ec19bc55a2466fb0ffbf310140f891ac06783 (diff) |
add i2c hooks
-rw-r--r-- | lib/pbdrv/drv/rp2040/mod.c | 2 | ||||
-rw-r--r-- | lib/pbdrv/pb-mod.c | 5 | ||||
-rw-r--r-- | lib/pbdrv/pb-mod.h | 13 | ||||
-rw-r--r-- | main/i2c.c | 1 | ||||
-rw-r--r-- | main/sock.c | 4 |
5 files changed, 23 insertions, 2 deletions
diff --git a/lib/pbdrv/drv/rp2040/mod.c b/lib/pbdrv/drv/rp2040/mod.c index 1535da9..bc20927 100644 --- a/lib/pbdrv/drv/rp2040/mod.c +++ b/lib/pbdrv/drv/rp2040/mod.c @@ -43,6 +43,8 @@ void pb_setup() { } __weak void pb_i2c_send(i2c_addr_t addr, const uint8_t * buf, size_t sz) { + pb_hook_i2c_send(addr, buf, sz); + // false to write stop condition to i2c bus i2c_write_timeout_us(PB_I2C_M, addr, buf, sz, false, PB_TIMEOUT_US); } diff --git a/lib/pbdrv/pb-mod.c b/lib/pbdrv/pb-mod.c index c27194e..6b23b04 100644 --- a/lib/pbdrv/pb-mod.c +++ b/lib/pbdrv/pb-mod.c @@ -18,7 +18,10 @@ __weak void pb_hook_mod_state_write(pb_global_state_t state) { _global_state = state; } +__weak void pb_hook_i2c_recv(const uint8_t * data, size_t sz) { } __weak void pb_i2c_recv(const uint8_t * data, size_t sz) { + pb_hook_i2c_recv(data, sz); + pb_buf_t buf = { .data = (char *) data, .size = sz, @@ -32,3 +35,5 @@ __weak void pb_i2c_recv(const uint8_t * data, size_t sz) { pb_msg_free(msg); } +__weak void pb_hook_i2c_send(i2c_addr_t i2c_addr, const uint8_t * data, size_t sz) { } + diff --git a/lib/pbdrv/pb-mod.h b/lib/pbdrv/pb-mod.h index 91e1d1f..bf5952b 100644 --- a/lib/pbdrv/pb-mod.h +++ b/lib/pbdrv/pb-mod.h @@ -94,6 +94,19 @@ pb_global_state_t pb_hook_mod_state_read(); void pb_hook_mod_state_write(pb_global_state_t state); /// \} + +/** + * \defgroup pb_hook_i2c I2C + * \brief Intercept incoming/outgoing I2C messages + * + * \{ + */ + +void pb_hook_i2c_recv(const uint8_t * buf, size_t sz); +void pb_hook_i2c_send(i2c_addr_t i2c_addr, const uint8_t * buf, size_t sz); + +/// \} + /// \} #ifdef __cplusplus @@ -122,3 +122,4 @@ pb_global_state_t pb_hook_mod_state_read() { void pb_hook_mod_state_write(pb_global_state_t state) { _global_state = state; } + diff --git a/main/sock.c b/main/sock.c index 33a6111..07db6af 100644 --- a/main/sock.c +++ b/main/sock.c @@ -14,7 +14,7 @@ struct netconn* current_connection = NULL; i2ctcp_msg_t recv_msg; -void i2c_send(uint16_t addr, const char * data, size_t data_size) { +void pb_hook_i2c_send(i2c_addr_t addr, const uint8_t * data, size_t data_size) { if (current_connection == NULL) return; i2ctcp_msg_t send_msg = { @@ -35,7 +35,7 @@ void i2c_send(uint16_t addr, const char * data, size_t data_size) { free(buf); } -static void i2c_recv_fwd(uint16_t addr, const uint8_t * data, size_t data_size) { +static void i2c_recv_fwd(i2c_addr_t addr, const uint8_t * data, size_t data_size) { if (addr == PB_MOD_ADDR) { // addressed to me = act as recieved pb_i2c_recv(data, data_size); |