aboutsummaryrefslogtreecommitdiff
path: root/main/pbdrv.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/pbdrv.c')
-rw-r--r--main/pbdrv.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/main/pbdrv.c b/main/pbdrv.c
index 323afbe..d809b86 100644
--- a/main/pbdrv.c
+++ b/main/pbdrv.c
@@ -3,12 +3,15 @@
#include "pb.h"
#include "pb-types.h"
#include "pb-mod.h"
+#include "pb-msg.h"
#include <hardware/i2c.h>
#include <hardware/gpio.h>
#include <pico/i2c_slave.h>
+#include <pico/stdio.h>
#include <FreeRTOS.h>
+#include <stdio.h>
#include <timers.h>
#define PB_I2C i2c0
@@ -70,3 +73,19 @@ __weak void pb_i2c_send(i2c_addr_t addr, const uint8_t * buf, size_t sz) {
i2c_set_slave_mode(PB_I2C, true, PB_MOD_ADDR);
}
+void bus_scan() {
+ i2c_set_slave_mode(PB_I2C, false, PB_MOD_ADDR);
+
+ pb_buf_t buf = pb_msg_write_req_magic();
+
+ // check for all 7-bit addresses
+ uint16_t addr_max = 1 << 7;
+ for (uint16_t addr = 0x00; addr < addr_max; addr++) {
+ i2c_write_timeout_us(PB_I2C, addr, (uint8_t *) buf.data, buf.size, false, PB_TIMEOUT_US);
+ }
+
+ pb_buf_free(&buf);
+
+ i2c_set_slave_mode(PB_I2C, true, PB_MOD_ADDR);
+}
+