From dcccf564f0bdc529b4165e4f2e2fb63216da2339 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Tue, 25 Jun 2024 10:44:57 +0200 Subject: add i2c hooks --- lib/pbdrv/drv/rp2040/mod.c | 2 ++ lib/pbdrv/pb-mod.c | 5 +++++ lib/pbdrv/pb-mod.h | 13 +++++++++++++ main/i2c.c | 1 + 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 diff --git a/main/i2c.c b/main/i2c.c index e1563a0..3dfa7cb 100644 --- a/main/i2c.c +++ b/main/i2c.c @@ -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); -- cgit v1.2.3