From 519ffcefbe607dcb89dd9da654628dd3b0c588eb Mon Sep 17 00:00:00 2001 From: ThomasintAnker Date: Fri, 31 May 2024 00:00:19 +0200 Subject: Working i2c+utp wo extra functionality --- main/i2c.c | 1 + main/i2c.h | 1 + main/init.c | 2 ++ main/main.c | 2 +- 4 files changed, 5 insertions(+), 1 deletion(-) (limited to 'main') diff --git a/main/i2c.c b/main/i2c.c index b324124..2615d0a 100644 --- a/main/i2c.c +++ b/main/i2c.c @@ -38,6 +38,7 @@ void init_addr_array(uint8_t array[], int size) { } } +// Make sure that current addresses are checked (modules), and invalid addresses are ignore (neotrellis slave) uint8_t* scan_bus(uint8_t *array) { int ret; int i = 0; diff --git a/main/i2c.h b/main/i2c.h index 5ad5cfb..05acb1c 100644 --- a/main/i2c.h +++ b/main/i2c.h @@ -1,5 +1,6 @@ #pragma once // https://github.com/raspberrypi/pico-examples/tree/master/i2c +// https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html #include #include diff --git a/main/init.c b/main/init.c index 08177c7..fee3a6a 100644 --- a/main/init.c +++ b/main/init.c @@ -24,8 +24,10 @@ static void init_wifi() { // enable 'station' mode (connect to an access point instead of acting like one) cyw43_arch_enable_sta_mode(); + /* WERKT GEWOON NIET MET DEZE LIJNEN CODE */ // if (cyw43_arch_wifi_connect_timeout_ms(CONF_NET_SSID, CONF_NET_PASS, CONF_NET_AUTH, CONF_NET_CONN_TIMEOUT)) // panic("cyw43_arch_wifi_connect failed\n"); + /* WERKT GEWOON NIET MET DEZE LIJNEN CODE */ printf("connected to Wi-Fi\n"); diff --git a/main/main.c b/main/main.c index 19dd3cd..b38030f 100644 --- a/main/main.c +++ b/main/main.c @@ -24,7 +24,7 @@ int main() { init(); xTaskCreate((TaskFunction_t) blink_task, "blink", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 2, NULL); - //xTaskCreate((TaskFunction_t) serve_task, "serve", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 2, NULL); + xTaskCreate((TaskFunction_t) serve_task, "serve", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 2, NULL); xTaskCreate((TaskFunction_t) bus_task, "bus", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 2, NULL); vTaskStartScheduler(); -- cgit v1.2.3 From 377644354f15d283f37450bd7a473153d681316d Mon Sep 17 00:00:00 2001 From: ThomasintAnker Date: Fri, 31 May 2024 02:19:28 +0200 Subject: added queue for bbetween thread-communication --- main/i2c.c | 15 ++++++++++++++- main/main.c | 14 ++++++++++++++ main/sock.c | 15 +++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) (limited to 'main') diff --git a/main/i2c.c b/main/i2c.c index 2615d0a..e42e0b1 100644 --- a/main/i2c.c +++ b/main/i2c.c @@ -7,6 +7,11 @@ #include #include +#include +#include + +extern QueueHandle_t queue; + void init_i2c() { i2c_init(I2C_PORT, 100 * 1000); // currently at 100kHz @@ -77,11 +82,12 @@ void bus_task() { // printf("Bus scan!"); scan_bus(found); + uint8_t data; for(int i = 0; i < MAX_SLAVES; i++){ if( found[i] == 0x00 ) break; - uint8_t data = 0x01; + data = 0x01; // send data to found slave address write_i2c(found[i], &data, 1); @@ -90,5 +96,12 @@ void bus_task() { // request update from slave addr at found[i] //write_i2c(); } + + uint8_t rcvData[2]; + if(xQueueReceive(queue, &rcvData, portMAX_DELAY) == pdPASS){ + write_i2c(rcvData[0], &rcvData[1], sizeof(rcvData[1])); + } else { + printf("Something went wrong at queue receive!\n"); + } } } diff --git a/main/main.c b/main/main.c index b38030f..33912ec 100644 --- a/main/main.c +++ b/main/main.c @@ -1,4 +1,5 @@ #include +#include #include #include @@ -9,6 +10,8 @@ #include "sock.h" #include "i2c.h" +QueueHandle_t queue; + void blink_task() { await_init(); // `blink_task` uses GPIO @@ -23,10 +26,21 @@ void blink_task() { int main() { init(); + // change queue size(?) + queue + uint8_t i2cData[2]; + queue = xQueueCreate(10, sizeof(i2cData)); + xTaskCreate((TaskFunction_t) blink_task, "blink", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 2, NULL); xTaskCreate((TaskFunction_t) serve_task, "serve", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 2, NULL); xTaskCreate((TaskFunction_t) bus_task, "bus", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 2, NULL); vTaskStartScheduler(); + + while(1) { + // we should have never gotten here + printf("Why are we here?!\n"); + } + + return 0; } diff --git a/main/sock.c b/main/sock.c index 4f50981..5c8644b 100644 --- a/main/sock.c +++ b/main/sock.c @@ -5,11 +5,16 @@ #include #include +#include +#include + #include "init.h" #include "config.h" #include "puzbusv1.h" #include "sock.h" +extern QueueHandle_t queue; + struct netconn* current_connection = NULL; struct pb_msg recv_msg; @@ -35,15 +40,25 @@ void i2c_send(uint16_t addr, const char * data, size_t data_size) { } void i2c_recv(uint16_t addr, const char * data, size_t data_size) { + /* printf("address: 0x%02x\n", addr); printf("data: \"%.*s\"\n", data_size, data); // send message back char reply[] = "Test message back!"; i2c_send(0x69, reply, strlen(reply)); + */ // TODO: this function should forward the recieved message onto the puzzle // bus instead of printing/replying + // using queueu -> i2c_write only accepts uint8_t addr, and uint8_t data ._. + + printf("Sending data over i2c"); + uint8_t i2cData[2] = {addr, 0x00}; + if(xQueueSend(queue, &i2cData, portMAX_DELAY) != pdPASS) { + printf("Something went wrong!"); + } + } void recv_handler(struct netconn* conn, struct netbuf* buf) { -- cgit v1.2.3 From b865921e5dcf2ae2d6532b88eba1a0a49998eb27 Mon Sep 17 00:00:00 2001 From: ThomasintAnker Date: Fri, 31 May 2024 15:01:11 +0200 Subject: shenanigans --- main/i2c.c | 39 +++++++++++++++++++++++---------------- main/init.c | 4 ++-- main/sock.c | 6 ++++-- 3 files changed, 29 insertions(+), 20 deletions(-) (limited to 'main') diff --git a/main/i2c.c b/main/i2c.c index e42e0b1..5cad081 100644 --- a/main/i2c.c +++ b/main/i2c.c @@ -49,14 +49,16 @@ uint8_t* scan_bus(uint8_t *array) { int i = 0; uint8_t rxdata; - for(int addr = 0; addr < (1<<7); addr++) { + for(int addr = 1; addr < (1<<7); addr++) { // ignore reserved addresses // These are any addresses of the form 000 0xxx or 111 1xxx - if( reserved_addr(addr) ){ - ret = PICO_ERROR_GENERIC; - }else{ - ret = i2c_read_blocking(I2C_PORT, addr, &rxdata, 1, false); - } + + // if( reserved_addr(addr) ){ + // ret = PICO_ERROR_GENERIC; + // }else{ + // + ret = i2c_read_blocking(I2C_PORT, addr, &rxdata, 1, false); + //} // if acknowledged -> ret == number of bytes sent if(ret > 0){ @@ -77,31 +79,36 @@ void bus_task() { int i = 0; uint8_t found[MAX_SLAVES]; init_addr_array(found, MAX_SLAVES); + scan_bus(found); while(1) { // printf("Bus scan!"); - scan_bus(found); uint8_t data; for(int i = 0; i < MAX_SLAVES; i++){ if( found[i] == 0x00 ) - break; + continue; - data = 0x01; - // send data to found slave address - write_i2c(found[i], &data, 1); + read_i2c(found[i], &data, 2); + if(data > 0) { + printf("Data: %d", data); + } + + // data = 0x01; + // // send data to found slave address + // write_i2c(found[i], &data, 1); + + // data = 0x02; + // write_i2c(found[i], &data, 1); - data = 0x02; - write_i2c(found[i], &data, 1); // request update from slave addr at found[i] //write_i2c(); } uint8_t rcvData[2]; - if(xQueueReceive(queue, &rcvData, portMAX_DELAY) == pdPASS){ + if(xQueueReceive(queue, &rcvData, 5) == pdPASS){ + printf("Send to address: %d, datat: %d\n", rcvData[0], rcvData[1]); write_i2c(rcvData[0], &rcvData[1], sizeof(rcvData[1])); - } else { - printf("Something went wrong at queue receive!\n"); } } } diff --git a/main/init.c b/main/init.c index fee3a6a..4ab373e 100644 --- a/main/init.c +++ b/main/init.c @@ -25,8 +25,8 @@ static void init_wifi() { cyw43_arch_enable_sta_mode(); /* WERKT GEWOON NIET MET DEZE LIJNEN CODE */ - // if (cyw43_arch_wifi_connect_timeout_ms(CONF_NET_SSID, CONF_NET_PASS, CONF_NET_AUTH, CONF_NET_CONN_TIMEOUT)) - // panic("cyw43_arch_wifi_connect failed\n"); + if (cyw43_arch_wifi_connect_timeout_ms(CONF_NET_SSID, CONF_NET_PASS, CONF_NET_AUTH, CONF_NET_CONN_TIMEOUT)) + panic("cyw43_arch_wifi_connect failed\n"); /* WERKT GEWOON NIET MET DEZE LIJNEN CODE */ printf("connected to Wi-Fi\n"); diff --git a/main/sock.c b/main/sock.c index 5c8644b..434694f 100644 --- a/main/sock.c +++ b/main/sock.c @@ -55,8 +55,8 @@ void i2c_recv(uint16_t addr, const char * data, size_t data_size) { printf("Sending data over i2c"); uint8_t i2cData[2] = {addr, 0x00}; - if(xQueueSend(queue, &i2cData, portMAX_DELAY) != pdPASS) { - printf("Something went wrong!"); + if(xQueueSend(queue, &i2cData, portMAX_DELAY) == pdPASS) { + printf("Socket send data to address: %d, data: %d", i2cData[0], i2cData[1]); } } @@ -70,8 +70,10 @@ void recv_handler(struct netconn* conn, struct netbuf* buf) { netbuf_data(buf, (void**)&data, &len); // continue early if more data is needed to complete message + printf("yeetus deletus defeatus"); if (!pb_read(&recv_msg, data, len)) continue; + printf("yeetus deletus defeatus v2!"); // forward received message to puzzle bus i2c_recv(recv_msg.addr, recv_msg.data, recv_msg.length); free(recv_msg.data); -- cgit v1.2.3 From 2107d89060c345906534f9b0a9eb37e679cdbce8 Mon Sep 17 00:00:00 2001 From: ThomasintAnker Date: Fri, 31 May 2024 15:39:27 +0200 Subject: working coms between i2c and utp --- main/i2c.c | 20 -------------------- main/main.c | 3 --- main/sock.c | 25 ++++--------------------- 3 files changed, 4 insertions(+), 44 deletions(-) (limited to 'main') diff --git a/main/i2c.c b/main/i2c.c index 5cad081..c5547e0 100644 --- a/main/i2c.c +++ b/main/i2c.c @@ -7,11 +7,6 @@ #include #include -#include -#include - -extern QueueHandle_t queue; - void init_i2c() { i2c_init(I2C_PORT, 100 * 1000); // currently at 100kHz @@ -94,21 +89,6 @@ void bus_task() { printf("Data: %d", data); } - // data = 0x01; - // // send data to found slave address - // write_i2c(found[i], &data, 1); - - // data = 0x02; - // write_i2c(found[i], &data, 1); - - // request update from slave addr at found[i] - //write_i2c(); - } - - uint8_t rcvData[2]; - if(xQueueReceive(queue, &rcvData, 5) == pdPASS){ - printf("Send to address: %d, datat: %d\n", rcvData[0], rcvData[1]); - write_i2c(rcvData[0], &rcvData[1], sizeof(rcvData[1])); } } } diff --git a/main/main.c b/main/main.c index 33912ec..051f500 100644 --- a/main/main.c +++ b/main/main.c @@ -1,5 +1,4 @@ #include -#include #include #include @@ -10,8 +9,6 @@ #include "sock.h" #include "i2c.h" -QueueHandle_t queue; - void blink_task() { await_init(); // `blink_task` uses GPIO diff --git a/main/sock.c b/main/sock.c index 33da03c..0755a5d 100644 --- a/main/sock.c +++ b/main/sock.c @@ -5,13 +5,11 @@ #include #include -#include -#include - #include "init.h" #include "config.h" #include "i2ctcpv1.h" #include "sock.h" +#include extern QueueHandle_t queue; @@ -40,25 +38,12 @@ void i2c_send(uint16_t addr, const char * data, size_t data_size) { } void i2c_recv(uint16_t addr, const char * data, size_t data_size) { - /* - printf("address: 0x%02x\n", addr); - printf("data: \"%.*s\"\n", data_size, data); - - // send message back - char reply[] = "Test message back!"; - i2c_send(0x69, reply, strlen(reply)); - */ - // TODO: this function should forward the recieved message onto the puzzle // bus instead of printing/replying // using queueu -> i2c_write only accepts uint8_t addr, and uint8_t data ._. - printf("Sending data over i2c"); - uint8_t i2cData[2] = {addr, 0x00}; - if(xQueueSend(queue, &i2cData, portMAX_DELAY) == pdPASS) { - printf("Socket send data to address: %d, data: %d", i2cData[0], i2cData[1]); - } - + printf("Addr: %lu, Data: %c, Data_size: %lu\n", addr, data[0], data_size); + i2c_write_blocking(i2c0, addr, data, data_size, false); } void recv_handler(struct netconn* conn, struct netbuf* buf) { @@ -70,10 +55,8 @@ void recv_handler(struct netconn* conn, struct netbuf* buf) { netbuf_data(buf, (void**)&data, &len); // continue early if more data is needed to complete message - printf("yeetus deletus defeatus"); - if (!i2ctcp_read(&recv_msg, data, len)) continue; + if (i2ctcp_read(&recv_msg, data, len) > 0) continue; - printf("yeetus deletus defeatus v2!"); // forward received message to puzzle bus i2c_recv(recv_msg.addr, recv_msg.data, recv_msg.length); free(recv_msg.data); -- cgit v1.2.3 From aca4c7549b2dc8d69931dca7c679c267b146ec48 Mon Sep 17 00:00:00 2001 From: ThomasintAnker Date: Mon, 3 Jun 2024 10:49:21 +0200 Subject: chaos --- main/CMakeLists.txt | 1 + main/i2c.c | 75 ++++++++++++++++++++++++++++++++++++++++------------- main/i2c.h | 6 +++++ main/main.c | 4 --- main/sock.c | 14 +++++----- 5 files changed, 71 insertions(+), 29 deletions(-) (limited to 'main') diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 6390d7c..cf23839 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -8,6 +8,7 @@ set(PICO_BOARD pico_w) include(lib/pico-sdk/pico_sdk_init.cmake) include(lib/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2040/FreeRTOS_Kernel_import.cmake) include(../i2ctcp/include.cmake) +include(../shared/include.cmake) project(puzzlebox_main C CXX ASM) diff --git a/main/i2c.c b/main/i2c.c index c5547e0..3347ecc 100644 --- a/main/i2c.c +++ b/main/i2c.c @@ -1,12 +1,23 @@ #include "i2c.h" #include "init.h" +#include "sock.h" +#include "pb/types.h" #include #include #include +#include #include #include +#include +#include +#include +#include + +uint8_t found[MAX_SLAVES]; +extern struct netconn* current_connection; + void init_i2c() { i2c_init(I2C_PORT, 100 * 1000); // currently at 100kHz @@ -38,26 +49,55 @@ void init_addr_array(uint8_t array[], int size) { } } +int write_read_i2c(uint8_t addr, uint8_t *input, size_t input_len, uint8_t *output, size_t output_len){ + // herhaalde start conditie voor direct lezen na i2c write (?) + int ret = write_i2c(addr, input, input_len); + if (ret < 0) { + printf("Write failure while writing data to bus.\n"); + return ret; + } + + // wait for response + absolute_time_t start_time = get_absolute_time(); + while ( absolute_time_diff_us(start_time, get_absolute_time()) / 1000 < MAX_TIMEOUT_TIME ){ + ret = read_i2c(addr, output, output_len); + if( ret > 0 ) { + return ret; + } + sleep_ms(1); + } + + printf("Timeout occurred while waiting for slave response.\n"); + return -1; +} + // Make sure that current addresses are checked (modules), and invalid addresses are ignore (neotrellis slave) uint8_t* scan_bus(uint8_t *array) { int ret; int i = 0; - uint8_t rxdata; + uint8_t rxdata, handshake_data; + init_addr_array(array, MAX_SLAVES); + + for(int addr = 1; addr < (1<<7); addr++) { + // fix handshake + ret = read_i2c(addr, &rxdata, 1); - for(int addr = 1; addr < (1<<7); addr++) { - // ignore reserved addresses - // These are any addresses of the form 000 0xxx or 111 1xxx + if ( ret <= 0 ) + continue; + + printf("found possible i2c slave on addr: %d\n", addr); + + // do handshake + ret = write_read_i2c(addr, (uint8_t*)pb_magic_msg, sizeof(pb_magic_msg), (uint8_t*)handshake_data, sizeof(pb_magic_res)); // fix data + length + everything - // if( reserved_addr(addr) ){ - // ret = PICO_ERROR_GENERIC; - // }else{ - // - 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\n", addr); + if ( ret != sizeof(pb_magic_res)) + continue; + + if ( ret > 0 && (memcmp(handshake_data, pb_magic_res, sizeof(pb_magic_res)) == 0)) { + char buf[80]; + size_t s = snprintf(buf, "found i2c puzzle module at address: 0x%02x\n"); + netconn_write(current_connection, buf, s, NETCONN_COPY); + array[i] = addr; i++; } @@ -71,13 +111,10 @@ void bus_task() { // send updates at regular intervals await_init(); - int i = 0; - uint8_t found[MAX_SLAVES]; - init_addr_array(found, MAX_SLAVES); scan_bus(found); while(1) { - // printf("Bus scan!"); + // add check if bus is in use uint8_t data; for(int i = 0; i < MAX_SLAVES; i++){ @@ -90,5 +127,7 @@ void bus_task() { } } + + sleep_ms(1000); // wait for one second before next loop } } diff --git a/main/i2c.h b/main/i2c.h index 05acb1c..42cf34a 100644 --- a/main/i2c.h +++ b/main/i2c.h @@ -10,6 +10,7 @@ #define SCL_PIN 17 #define I2C_PORT i2c0 #define MAX_SLAVES 10 +#define MAX_TIMEOUT_TIME 50 //ms /** * \brief initialize all required gpio for i2c usage on the pico @@ -41,5 +42,10 @@ int read_i2c(uint8_t addr, uint8_t *output, size_t len); */ int write_i2c(uint8_t addr, uint8_t *input, size_t len); +/** + * \brief +*/ +int write_read_i2c(uint8_t addr, uint8_t *input, size_t input_len, uint8_t *output, size_t output_len); + /** \brief looking for slave addresses and requesting updates */ void bus_task(); diff --git a/main/main.c b/main/main.c index 051f500..7558a0b 100644 --- a/main/main.c +++ b/main/main.c @@ -23,10 +23,6 @@ void blink_task() { int main() { init(); - // change queue size(?) + queue - uint8_t i2cData[2]; - queue = xQueueCreate(10, sizeof(i2cData)); - xTaskCreate((TaskFunction_t) blink_task, "blink", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 2, NULL); xTaskCreate((TaskFunction_t) serve_task, "serve", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 2, NULL); xTaskCreate((TaskFunction_t) bus_task, "bus", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 2, NULL); diff --git a/main/sock.c b/main/sock.c index 0755a5d..08bec6b 100644 --- a/main/sock.c +++ b/main/sock.c @@ -11,8 +11,7 @@ #include "sock.h" #include -extern QueueHandle_t queue; - +extern uint8_t found[MAX_SLAVES]; struct netconn* current_connection = NULL; i2ctcp_msg_t recv_msg; @@ -40,26 +39,27 @@ void i2c_send(uint16_t addr, const char * data, size_t data_size) { void i2c_recv(uint16_t addr, const char * data, size_t data_size) { // TODO: this function should forward the recieved message onto the puzzle // bus instead of printing/replying - // using queueu -> i2c_write only accepts uint8_t addr, and uint8_t data ._. printf("Addr: %lu, Data: %c, Data_size: %lu\n", addr, data[0], data_size); i2c_write_blocking(i2c0, addr, data, data_size, false); } void recv_handler(struct netconn* conn, struct netbuf* buf) { - i2ctcp_read_reset(&recv_msg); + // i2ctcp_read_reset(&recv_msg); do { char* data; uint16_t len; netbuf_data(buf, (void**)&data, &len); + + scan_bus(found); // continue early if more data is needed to complete message - if (i2ctcp_read(&recv_msg, data, len) > 0) continue; + // if (i2ctcp_read(&recv_msg, data, len) > 0) continue; // forward received message to puzzle bus - i2c_recv(recv_msg.addr, recv_msg.data, recv_msg.length); - free(recv_msg.data); + // i2c_recv(recv_msg.addr, recv_msg.data, recv_msg.length); + // free(recv_msg.data); } while (netbuf_next(buf) >= 0); netbuf_delete(buf); -- cgit v1.2.3 From a98a2606c50023090d233fc16f3bb9516bfff0a8 Mon Sep 17 00:00:00 2001 From: ThomasintAnker Date: Mon, 3 Jun 2024 11:02:59 +0200 Subject: fix 1 --- main/i2c.c | 8 ++++---- main/i2c.h | 2 ++ main/sock.c | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) (limited to 'main') diff --git a/main/i2c.c b/main/i2c.c index 3347ecc..26723aa 100644 --- a/main/i2c.c +++ b/main/i2c.c @@ -75,12 +75,12 @@ int write_read_i2c(uint8_t addr, uint8_t *input, size_t input_len, uint8_t *outp uint8_t* scan_bus(uint8_t *array) { int ret; int i = 0; - uint8_t rxdata, handshake_data; + uint8_t* rxdata, handshake_data; init_addr_array(array, MAX_SLAVES); for(int addr = 1; addr < (1<<7); addr++) { // fix handshake - ret = read_i2c(addr, &rxdata, 1); + ret = read_i2c(addr, rxdata, 1); if ( ret <= 0 ) continue; @@ -88,14 +88,14 @@ uint8_t* scan_bus(uint8_t *array) { printf("found possible i2c slave on addr: %d\n", addr); // do handshake - ret = write_read_i2c(addr, (uint8_t*)pb_magic_msg, sizeof(pb_magic_msg), (uint8_t*)handshake_data, sizeof(pb_magic_res)); // fix data + length + everything + ret = write_read_i2c(addr, (uint8_t*)pb_magic_msg, sizeof(pb_magic_msg), &handshake_data, sizeof(pb_magic_res)); // fix data + length + everything if ( ret != sizeof(pb_magic_res)) continue; if ( ret > 0 && (memcmp(handshake_data, pb_magic_res, sizeof(pb_magic_res)) == 0)) { char buf[80]; - size_t s = snprintf(buf, "found i2c puzzle module at address: 0x%02x\n"); + size_t s = snprintf(buf, 80,"found i2c puzzle module at address: 0x%02x\n"); netconn_write(current_connection, buf, s, NETCONN_COPY); array[i] = addr; diff --git a/main/i2c.h b/main/i2c.h index 42cf34a..fcfa23b 100644 --- a/main/i2c.h +++ b/main/i2c.h @@ -47,5 +47,7 @@ int write_i2c(uint8_t addr, uint8_t *input, size_t len); */ int write_read_i2c(uint8_t addr, uint8_t *input, size_t input_len, uint8_t *output, size_t output_len); +uint8_t* scan_bus(uint8_t *array); + /** \brief looking for slave addresses and requesting updates */ void bus_task(); diff --git a/main/sock.c b/main/sock.c index 08bec6b..1913698 100644 --- a/main/sock.c +++ b/main/sock.c @@ -9,6 +9,7 @@ #include "config.h" #include "i2ctcpv1.h" #include "sock.h" +#include "i2c.h" #include extern uint8_t found[MAX_SLAVES]; -- cgit v1.2.3 From 3a8fcd3a27cc39a360e367a0492878e2e9aa8f28 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Mon, 3 Jun 2024 11:25:23 +0200 Subject: demo working kinda --- main/i2c.c | 11 ++++++++--- main/sock.c | 1 + shared/pb/types.h | 4 ++++ 3 files changed, 13 insertions(+), 3 deletions(-) (limited to 'main') diff --git a/main/i2c.c b/main/i2c.c index 26723aa..5ce0507 100644 --- a/main/i2c.c +++ b/main/i2c.c @@ -75,7 +75,8 @@ int write_read_i2c(uint8_t addr, uint8_t *input, size_t input_len, uint8_t *outp uint8_t* scan_bus(uint8_t *array) { int ret; int i = 0; - uint8_t* rxdata, handshake_data; + uint8_t * rxdata; + uint8_t * handshake_data; init_addr_array(array, MAX_SLAVES); for(int addr = 1; addr < (1<<7); addr++) { @@ -85,15 +86,19 @@ uint8_t* scan_bus(uint8_t *array) { if ( ret <= 0 ) continue; - printf("found possible i2c slave on addr: %d\n", addr); + char buf[80]; + size_t s = snprintf(buf, 80,"found i2c puzzle module at address: 0x%02x\n", addr); + netconn_write(current_connection, buf, s, NETCONN_COPY); + printf("%.*s", s, buf); // do handshake - ret = write_read_i2c(addr, (uint8_t*)pb_magic_msg, sizeof(pb_magic_msg), &handshake_data, sizeof(pb_magic_res)); // fix data + length + everything + ret = write_read_i2c(addr, (uint8_t*)pb_magic_msg, sizeof(pb_magic_msg), handshake_data, sizeof(pb_magic_res)); // fix data + length + everything if ( ret != sizeof(pb_magic_res)) continue; if ( ret > 0 && (memcmp(handshake_data, pb_magic_res, sizeof(pb_magic_res)) == 0)) { + printf("this was an actual device!!!1111!\n"); char buf[80]; size_t s = snprintf(buf, 80,"found i2c puzzle module at address: 0x%02x\n"); netconn_write(current_connection, buf, s, NETCONN_COPY); diff --git a/main/sock.c b/main/sock.c index 1913698..af25d97 100644 --- a/main/sock.c +++ b/main/sock.c @@ -53,6 +53,7 @@ void recv_handler(struct netconn* conn, struct netbuf* buf) { uint16_t len; netbuf_data(buf, (void**)&data, &len); + printf("now scanning the bus!!!!\n"); scan_bus(found); // continue early if more data is needed to complete message diff --git a/shared/pb/types.h b/shared/pb/types.h index f2e2078..d4a65ed 100644 --- a/shared/pb/types.h +++ b/shared/pb/types.h @@ -6,9 +6,13 @@ extern "C" { #endif #ifdef __GNUC__ +#ifndef __packed #define __packed __attribute__((packed)) +#endif +#ifndef __weak #define __weak __attribute__((weak)) #endif +#endif #ifndef __packed #error Could not determine packed attribute for current compiler #define __packed -- cgit v1.2.3