diff options
| author | Aditya Naik | 2020-06-05 15:39:00 -0400 |
|---|---|---|
| committer | Aditya Naik | 2020-06-05 15:39:00 -0400 |
| commit | a466dbd8d310d5c01a104b0956a0a03ef8560c75 (patch) | |
| tree | 0a78b23f1f1f9d9b15ad1ededfb0ae2b224460b9 | |
| parent | 3f5f496bd809fa417dbaa7bbd33db0d903033155 (diff) | |
Debugged DF DOC/CTS errors
| -rw-r--r-- | src/dataflow.h | 2 | ||||
| -rw-r--r-- | src/main-master.c | 64 | ||||
| -rw-r--r-- | src/main-slave.c | 16 |
3 files changed, 31 insertions, 51 deletions
diff --git a/src/dataflow.h b/src/dataflow.h index a2217ca..d39126e 100644 --- a/src/dataflow.h +++ b/src/dataflow.h @@ -42,5 +42,5 @@ typedef enum DOC_codes { CMD_MULTICAST = 2, CMD_BROADCAST = 3, RESERVED = 4, - DATA = 5 + DATA = 0x5 } DOC_codes_t; diff --git a/src/main-master.c b/src/main-master.c index e4a8fd4..2b47020 100644 --- a/src/main-master.c +++ b/src/main-master.c @@ -33,7 +33,7 @@ #define COUNTOF(__BUFFER__) (sizeof(__BUFFER__) / sizeof(*(__BUFFER__))) /* #define I2C_ADDRESS 0x05 */ -#define BUS_DEVICE_LIMIT 16 +#define BUS_DEVICE_LIMIT 5 /* Macro to toggle between master and slave firmware */ #define MASTER @@ -105,7 +105,8 @@ int main(void) while (1) { if (priority_counter == 0) { hs_status_t hs_status; - 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=1; 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); @@ -117,7 +118,7 @@ int main(void) routing(); } else { - for (int device_idx = 0; device_idx < BUS_DEVICE_LIMIT; device_idx++) { + for (int device_idx = 4; device_idx ==4; device_idx++) { if (dev_sts[device_idx] == REGISTERED) { device_dataflow(GET_ADDR_FROM_IDX(device_idx), SLAVE_TX, 0); } @@ -204,7 +205,7 @@ hs_status_t handshake(uint32_t i2c_addr) } case (HS_MDR_CTS): { - uint8_t MDR_CTS_buf[2] = {0x0, 0x02}; + uint8_t MDR_CTS_buf[2] = {0x0, 0x02}; if (HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)i2c_addr, MDR_CTS_buf, 2, 10000) != HAL_OK) { hs_sts = HS_FAILED; #ifdef DEBUG_ENABLE @@ -339,15 +340,15 @@ dataflow_status_t device_dataflow(uint8_t i2c_addr, uint32_t SOR_code, uint8_t r { uint8_t dev_idx = GET_IDX_FROM_ADDR(i2c_addr); dataflow_status_t df_status = DF_IDLE; - - uint8_t *CTS_buf, *data_buf; + + uint8_t DOC_buf[4]; + uint8_t *data_buf; uint32_t AF_error_counter = 0; uint32_t data_len = 0; _datapoint datapoints[16]; s2m_DOC DOC_message = s2m_DOC_init_zero; /* TODO Add default values to the CTS message in proto */ - m2s_CTS CTS_message = m2s_CTS_init_default; s2m_data data_message = s2m_data_init_zero; #if defined(TESTING_ENABLE) || defined(DEBUG_ENABLE) uint8_t debug_buf[128]; @@ -362,7 +363,7 @@ dataflow_status_t device_dataflow(uint8_t i2c_addr, uint32_t SOR_code, uint8_t r { /* 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, 10000) != HAL_OK) { + if (HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)i2c_addr, SOR_buf, 2, 1000) != HAL_OK) { df_status = DF_FAIL; #ifdef DEBUG_ENABLE goto __DF_SOR_I2C_ERROR; @@ -389,10 +390,9 @@ dataflow_status_t device_dataflow(uint8_t i2c_addr, uint32_t SOR_code, uint8_t r case (DF_RX_DOC): { HAL_Delay(MASTER_I2C_BUS_INTERVAL); - uint8_t DOC_buf[4]; AF_error_counter = 0; while (HAL_I2C_Master_Receive(&hi2c1, (uint16_t)i2c_addr, - (uint8_t*)DOC_buf, 4, 1000) != HAL_OK) { + (uint8_t*)DOC_buf, 4, 10000) != HAL_OK) { if (HAL_I2C_GetError(&hi2c1) != HAL_I2C_ERROR_AF) { df_status = DF_FAIL; #ifdef DEBUG_ENABLE @@ -407,7 +407,7 @@ dataflow_status_t device_dataflow(uint8_t i2c_addr, uint32_t SOR_code, uint8_t r break; } } - if (df_status != DF_FAIL) { + if (df_status != DF_FAIL) { if (DOC_buf[1] == DATA) { df_status = DF_CTS; data_len = DOC_buf[3]; @@ -426,44 +426,33 @@ dataflow_status_t device_dataflow(uint8_t i2c_addr, uint32_t SOR_code, uint8_t r } case (DF_CTS): { - HAL_Delay(MASTER_I2C_BUS_INTERVAL); - CTS_buf = (uint8_t*)malloc(8); - pb_ostream_t CTS_ostream = pb_ostream_from_buffer(CTS_buf, 8); - CTS_message.timeout = 100; - - if (!pb_encode(&CTS_ostream, m2s_CTS_fields, &CTS_message)) { + /* 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; #ifdef DEBUG_ENABLE - goto __DF_CTS_ENC_FAIL; - __DF_CTS_ENC_FAIL_END: + goto __DF_CTS_I2C_ERROR; + __DF_CTS_I2C_ERROR_END: __asm__("nop"); #endif } else { - HAL_Delay(MASTER_I2C_BUS_INTERVAL); - if (HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)i2c_addr, (uint8_t*)CTS_buf, - 2, 10000) != HAL_OK) { - df_status = DF_FAIL; -#ifdef DEBUG_ENABLE - goto __DF_CTS_I2C_ERROR; - __DF_CTS_I2C_ERROR_END: - __asm__("nop"); -#endif + if (DOC_buf[1] == DATA) { + df_status = DF_RX_DATA; } else { - if (DOC_message.DOC_code == DATA) { - df_status = DF_RX_DATA; - } - else { - /* TODO */ - } + /* TODO RX CMD stuff */ } } break; } 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); + data_buf = (uint8_t*)malloc(128); AF_error_counter = 0; while (HAL_I2C_Master_Receive(&hi2c1, (uint16_t)i2c_addr, @@ -636,11 +625,6 @@ dataflow_status_t device_dataflow(uint8_t i2c_addr, uint32_t SOR_code, uint8_t r HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); memset(debug_buf, 0, 128); goto __DF_DOC_I2C_ERROR_END; - __DF_CTS_ENC_FAIL: - sprintf((char*)debug_buf, "CTS encoding error\r\n"); - HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); - memset(debug_buf, 0, 128); - goto __DF_CTS_ENC_FAIL_END; __DF_CTS_I2C_ERROR: sprintf((char*)debug_buf, "CTS I2C error: %ld\r\n", HAL_I2C_GetError(&hi2c1)); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); diff --git a/src/main-slave.c b/src/main-slave.c index 39d31bb..7476436 100644 --- a/src/main-slave.c +++ b/src/main-slave.c @@ -80,7 +80,7 @@ int main(void) HAL_Delay(1000); while (1) { - if (HAL_I2C_Slave_Receive(&hi2c1, (uint8_t*)SOR_buf, 2, 500) != HAL_OK) { + if (HAL_I2C_Slave_Receive(&hi2c1, (uint8_t*)SOR_buf, 2, 10000) != 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); @@ -104,11 +104,8 @@ int main(void) memset(debug_buf, 0, 128); continue; } - data_enc_size = data_ostream.bytes_written; - - s2m_DOC doc = s2m_DOC_init_zero; + data_enc_size = data_ostream.bytes_written; uint8_t doc_buf[4] = {0x0, 0x5, 0x0, data_enc_size}; - if (HAL_I2C_Slave_Transmit(&hi2c1, (uint8_t*)doc_buf, 4, 10000) != HAL_OK) { sprintf((char*)debug_buf, "DOC I2C send error: %ld\r\n", HAL_I2C_GetError(&hi2c1)); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); @@ -121,21 +118,20 @@ int main(void) memset(debug_buf, 0, 128); } - uint8_t CTS_buf[8]; - - if (HAL_I2C_Slave_Receive(&hi2c1, (uint8_t*)CTS_buf, 2, 10000) != HAL_OK) { + uint8_t CTS_buf[2] = {0x0, 0x0}; + if (HAL_I2C_Slave_Receive(&hi2c1, (uint8_t*)CTS_buf, 2, 100000) != 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); continue; } else { - sprintf((char*)debug_buf, "Got CTS\r\n"); + sprintf((char*)debug_buf, "Got CTS: %d\r\n", CTS_buf[0]); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); memset(debug_buf, 0, 128); } - if (HAL_I2C_Slave_Transmit(&hi2c1, (uint8_t*)data_buf, data_enc_size, 10000) != HAL_OK) { + if (HAL_I2C_Slave_Transmit(&hi2c1, (uint8_t*)data_buf, data_enc_size, 100000) != 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); |
