aboutsummaryrefslogtreecommitdiff
path: root/main/i2c.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/i2c.c')
-rw-r--r--main/i2c.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/main/i2c.c b/main/i2c.c
index cbf6938..c1f11ea 100644
--- a/main/i2c.c
+++ b/main/i2c.c
@@ -1,4 +1,5 @@
#include "i2c.h"
+#include "init.h"
#include <stdio.h>
#include <stddef.h>
@@ -7,8 +8,9 @@
#include <hardware/i2c.h>
void init_i2c() {
- stdio_init_all();
- i2c_init(i2c_default, 100 * 1000); // currently at 100kHz
+ await_init();
+
+ i2c_init(I2C_PORT, 100 * 1000); // currently at 100kHz
// Initialize I2C pins - sda(16), scl(17)
gpio_set_function(SDA_PIN, GPIO_FUNC_I2C);
@@ -20,25 +22,25 @@ void init_i2c() {
int read_i2c(uint8_t addr, uint8_t *output, size_t len) {
// false - finished with bus
- return i2c_read_blocking (i2c_default, addr, output, len, false);
+ return i2c_read_blocking (I2C_PORT, addr, output, len, false);
}
int write_i2c(uint8_t addr, uint8_t *input, size_t len) {
// true to keep master control of bus
- return i2c_write_blocking (i2c_default, addr, input, len, true);
+ return i2c_write_blocking (I2C_PORT, addr, input, len, true);
}
bool reserved_addr(uint8_t addr) {
return (addr & 0x78) == 0 || (addr & 0x78) == 0x78;
}
-void init_addr_array(uint8_t array[]) {
- for(int i = 0; i < MAX_SLAVES; i++){
+void init_addr_array(uint8_t array[], int size) {
+ for(int i = 0; i < size; i++){
array[i] = 0x00;
}
}
-uint8_t* scan_bus(uint8_t* array) {
+uint8_t* scan_bus(uint8_t *array) {
int ret;
int i = 0;
uint8_t rxdata;
@@ -49,11 +51,12 @@ uint8_t* scan_bus(uint8_t* array) {
if( reserved_addr(addr) ){
ret = PICO_ERROR_GENERIC;
}else{
- ret = i2c_read_blocking(i2c_default, addr, &rxdata, 1, false);
+ ret = i2c_read_blocking(I2C_PORT, addr, &rxdata, 1, false);
}
// if acknowledged -> ret == number of bytes sent
if(ret > 0){
+ printf("found i2c slave on addr: %d", addr);
array[i] = addr;
i++;
}
@@ -65,27 +68,33 @@ uint8_t* scan_bus(uint8_t* array) {
void bus_task() {
// scan bus for slaves
// send updates at regular intervals
+ await_init();
+ printf("Bus task!");
+ return;
+
int i = 0;
uint8_t found[MAX_SLAVES];
- init_addr_array(found);
+ init_addr_array(found, MAX_SLAVES);
while(1) {
+ printf("Bus scan!");
scan_bus(found);
for(int i = 0; i < MAX_SLAVES; i++){
if( found[i] == 0x00 )
break;
- uint8_t data = 1;
+ uint8_t data = 0x01;
// send data to found slave address
+ printf("printing data 1");
write_i2c(found[i], &data, 1);
- data = 0;
+ printf("printing data 0");
+ data = 0x02;
write_i2c(found[i], &data, 1);
// request update from slave addr at found[i]
//write_i2c();
}
}
-
}