aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoek Le Blansch <loek@pipeframe.xyz>2024-06-25 10:44:57 +0200
committerLoek Le Blansch <loek@pipeframe.xyz>2024-06-25 10:44:57 +0200
commitdcccf564f0bdc529b4165e4f2e2fb63216da2339 (patch)
tree33586f0b0b655026909e51a1bdd81ad8ad05d049
parent637ec19bc55a2466fb0ffbf310140f891ac06783 (diff)
add i2c hooks
-rw-r--r--lib/pbdrv/drv/rp2040/mod.c2
-rw-r--r--lib/pbdrv/pb-mod.c5
-rw-r--r--lib/pbdrv/pb-mod.h13
-rw-r--r--main/i2c.c1
-rw-r--r--main/sock.c4
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);