summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAditya Naik2020-06-05 15:39:00 -0400
committerAditya Naik2020-06-05 15:39:00 -0400
commita466dbd8d310d5c01a104b0956a0a03ef8560c75 (patch)
tree0a78b23f1f1f9d9b15ad1ededfb0ae2b224460b9
parent3f5f496bd809fa417dbaa7bbd33db0d903033155 (diff)
Debugged DF DOC/CTS errors
-rw-r--r--src/dataflow.h2
-rw-r--r--src/main-master.c64
-rw-r--r--src/main-slave.c16
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);