From 564b43443f31affe87b2b20f5c36a626a369e4a9 Mon Sep 17 00:00:00 2001 From: Aditya Naik Date: Mon, 8 Jun 2020 14:32:21 -0400 Subject: Addressing changes --- src/main-master.c | 28 ++++++++++++++++------------ src/main-slave.c | 11 ++++++----- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/main-master.c b/src/main-master.c index 2b47020..d77cc20 100644 --- a/src/main-master.c +++ b/src/main-master.c @@ -26,14 +26,14 @@ /* Private Macros */ #define device_MDR s2m_MDR_response -#define GET_IDX_FROM_ADDR(i2c_addr) i2c_addr-1 -#define GET_ADDR_FROM_IDX(idx) idx+1 +#define GET_IDX_FROM_ADDR(i2c_addr) (i2c_addr>>1)-1 +#define GET_ADDR_FROM_IDX(idx) (idx+1)<<1 #define GET_BIT_FROM_IDX(a, b) a[b>>5]&(1<<(b%32)) #define SET_BIT_FROM_IDX(a, b) a[b>>5]|=(1<<(b%32)) #define COUNTOF(__BUFFER__) (sizeof(__BUFFER__) / sizeof(*(__BUFFER__))) /* #define I2C_ADDRESS 0x05 */ -#define BUS_DEVICE_LIMIT 5 +#define BUS_DEVICE_LIMIT 16 /* Macro to toggle between master and slave firmware */ #define MASTER @@ -105,8 +105,8 @@ int main(void) while (1) { if (priority_counter == 0) { hs_status_t hs_status; - for (uint8_t curr_addr=5; curr_addr == 5; curr_addr++) { - /* for (uint8_t curr_addr=1; curr_addr <= BUS_DEVICE_LIMIT; curr_addr++) { */ + /* for (uint8_t curr_addr=5; curr_addr == 5; curr_addr++) { */ + for (uint8_t curr_addr=0x1; curr_addr <= BUS_DEVICE_LIMIT; curr_addr++) { if (todo_hs_or_not_todo_hs(curr_addr)) { hs_status = handshake(curr_addr); dev_sts[GET_IDX_FROM_ADDR(curr_addr)] = get_state_from_hs_status(curr_addr, hs_status); @@ -118,7 +118,7 @@ int main(void) routing(); } else { - for (int device_idx = 4; device_idx ==4; device_idx++) { + for (int device_idx = 0; device_idx < BUS_DEVICE_LIMIT-1; device_idx++) { if (dev_sts[device_idx] == REGISTERED) { device_dataflow(GET_ADDR_FROM_IDX(device_idx), SLAVE_TX, 0); } @@ -304,7 +304,7 @@ __TESTING_BLOCK_END: { goto __DEBUG_BLOCK_END; __HS_MDR_REQ_I2C_ERROR: - sprintf((char*)debug_buf, "Unable to send MDR request. I2C error: %ld\r\n", HAL_I2C_GetError(&hi2c1)); + sprintf((char*)debug_buf, "Unable to send MDR request to %lx. I2C error: %ld\r\n", i2c_addr, HAL_I2C_GetError(&hi2c1)); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); memset(debug_buf, 0, 128); goto __HS_MDR_REQ_I2C_ERROR_END; @@ -361,9 +361,9 @@ dataflow_status_t device_dataflow(uint8_t i2c_addr, uint32_t SOR_code, uint8_t r switch (df_status) { case (DF_IDLE): { - /* HAL_Delay(MASTER_I2C_BUS_INTERVAL); */ + HAL_Delay(MASTER_I2C_BUS_INTERVAL); uint8_t SOR_buf[2] = {SOR_code, 0x0}; - if (HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)i2c_addr, SOR_buf, 2, 1000) != HAL_OK) { + if (HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)i2c_addr, SOR_buf, 2, 500) != HAL_OK) { df_status = DF_FAIL; #ifdef DEBUG_ENABLE goto __DF_SOR_I2C_ERROR; @@ -421,12 +421,15 @@ dataflow_status_t device_dataflow(uint8_t i2c_addr, uint32_t SOR_code, uint8_t r else if (DOC_message.DOC_code == CMD_BROADCAST) { /* TODO */ } + else { + df_status = DF_FAIL; + } } break; } case (DF_CTS): { - /* HAL_Delay(MASTER_I2C_BUS_INTERVAL); */ + HAL_Delay(MASTER_I2C_BUS_INTERVAL); uint8_t CTS_buf[2] = {0x2, 0xFF}; if (HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)i2c_addr, CTS_buf, 2, 10000) != HAL_OK) { df_status = DF_FAIL; @@ -448,7 +451,7 @@ dataflow_status_t device_dataflow(uint8_t i2c_addr, uint32_t SOR_code, uint8_t r } case (DF_RX_DATA): { - /* HAL_Delay(MASTER_I2C_BUS_INTERVAL); */ + HAL_Delay(MASTER_I2C_BUS_INTERVAL); sprintf((char*)debug_buf, "data len: %ld\r\n", data_len); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); memset(debug_buf, 0, 128); @@ -726,7 +729,7 @@ bool todo_hs_or_not_todo_hs(uint8_t i2c_addr) case NO_HS: case CONNECTED: case FAILED: - case OFFLINE: + case OFFLINE: do_hs = true; break; case REGISTERED: @@ -893,6 +896,7 @@ static void MX_I2C1_Init(void) hi2c1.Init.OwnAddress2 = 0xFF; hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; + /* hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_ENABLE; */ if (HAL_I2C_Init(&hi2c1) != HAL_OK) { Error_Handler(); diff --git a/src/main-slave.c b/src/main-slave.c index 7476436..e2364e3 100644 --- a/src/main-slave.c +++ b/src/main-slave.c @@ -32,7 +32,7 @@ #define SET_BIT_FROM_IDX(a, b) a[b>>5]|=(1<<(b%32)) #define COUNTOF(__BUFFER__) (sizeof(__BUFFER__) / sizeof(*(__BUFFER__))) -#define I2C_ADDRESS 0x05 +#define I2C_ADDRESS 0x05<<1 #define BUS_DEVICE_LIMIT 128 /* Macro to toggle between master and slave firmware */ @@ -80,7 +80,7 @@ int main(void) HAL_Delay(1000); while (1) { - if (HAL_I2C_Slave_Receive(&hi2c1, (uint8_t*)SOR_buf, 2, 10000) != HAL_OK) { + if (HAL_I2C_Slave_Receive(&hi2c1, (uint8_t*)SOR_buf, 2, 500) != HAL_OK) { sprintf((char*)debug_buf, "Failed to get SOR\r\n"); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); memset(debug_buf, 0, 128); @@ -119,7 +119,7 @@ int main(void) } uint8_t CTS_buf[2] = {0x0, 0x0}; - if (HAL_I2C_Slave_Receive(&hi2c1, (uint8_t*)CTS_buf, 2, 100000) != HAL_OK) { + if (HAL_I2C_Slave_Receive(&hi2c1, (uint8_t*)CTS_buf, 2, 10000) != HAL_OK) { sprintf((char*)debug_buf, "Failed to get CTS: %ld\r\n", HAL_I2C_GetError(&hi2c1)); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); memset(debug_buf, 0, 128); @@ -131,7 +131,7 @@ int main(void) memset(debug_buf, 0, 128); } - if (HAL_I2C_Slave_Transmit(&hi2c1, (uint8_t*)data_buf, data_enc_size, 100000) != HAL_OK) { + if (HAL_I2C_Slave_Transmit(&hi2c1, (uint8_t*)data_buf, data_enc_size, 10000) != HAL_OK) { sprintf((char*)debug_buf, "Data I2C send error: %ld\r\n", HAL_I2C_GetError(&hi2c1)); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); memset(debug_buf, 0, 128); @@ -163,7 +163,7 @@ int main(void) sprintf((char*)debug_buf, "Got lengths. MDR: %d, data: %d\r\n", MDR_len, data_len); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); memset(debug_buf, 0, 128); - + HAL_I2C_Slave_Transmit(&hi2c1, CTS_buf, 2, 10000); HAL_I2C_Slave_Receive(&hi2c1, MDR_buf, MDR_len, 10000); HAL_I2C_Slave_Receive(&hi2c1, data_buf, data_len, 10000); @@ -373,6 +373,7 @@ static void MX_I2C1_Init(void) hi2c1.Init.OwnAddress2 = 0xFF; hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; + /* hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_ENABLE; */ if (HAL_I2C_Init(&hi2c1) != HAL_OK) { Error_Handler(); -- cgit v1.2.3