From b5b5ad6fb82b45fa240df1873e96ec4994925f08 Mon Sep 17 00:00:00 2001 From: Aditya Naik Date: Wed, 25 Mar 2020 17:25:23 -0400 Subject: Master work for MDR CTS and MDR work (not decoding yet) --- Src/main.c | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/Src/main.c b/Src/main.c index f2f55ca..2f424fd 100644 --- a/Src/main.c +++ b/Src/main.c @@ -183,7 +183,8 @@ int main(void) HAL_UART_Transmit(&huart1, term, 2, 100); memset(debug_buf, 0, 128); #endif /* TESTING_ENABLE */ - + + uint32_t MDR_len = 0; pb_istream_t MDR_ACK_istream = pb_istream_from_buffer(MDR_ACK_buf, 2); s2m_MDR_req_ACK MDR_ACK; if (!pb_decode(&MDR_ACK_istream, s2m_MDR_req_ACK_fields, &MDR_ACK)) { @@ -193,6 +194,7 @@ int main(void) #endif /* DEBUG_ENABLE */ } else { + MDR_len = MDR_ACK.MDR_res_length; #ifdef TESTING_ENABLE sprintf((char*)debug_buf, "Got MDR message length: %ld\r\n", MDR_ACK.MDR_res_length); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); @@ -200,6 +202,44 @@ int main(void) #endif /* TESTING_ENABLE */ } + uint8_t MDR_CTS_buf[8]; + m2s_MDR_res_CTS MDR_CTS; + pb_ostream_t MDR_CTS_ostream = pb_ostream_from_buffer(MDR_CTS_buf, sizeof(MDR_CTS_buf)); + + MDR_CTS.timeout = 1000; + if (!pb_encode(&MDR_CTS_ostream, m2s_MDR_res_CTS_fields, &MDR_CTS)) { +#ifdef DEBUG_ENABLE + sprintf((char*)debug_buf, "MDR encoding error\r\n"); + HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); + memset(debug_buf, 0, 128); +#endif + } + else { + if (HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)I2C_ADDRESS, (uint8_t*)MDR_CTS_buf, m2s_MDR_res_CTS_size, 10000) != HAL_OK) { +#ifdef DEBUG_ENABLE + sprintf((char*)debug_buf, "Unable to send MDR CTS. I2C error: %ld\r\n", HAL_I2C_GetError(&hi2c1)); + HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); + memset(debug_buf, 0, 128); +#endif /* DEBUG_ENABLE */ + } + HAL_GPIO_TogglePin(led_GPIO_Port, led_Pin); + } + + uint8_t MDR_buf[256]; + AF_error_counter = 0; + while (HAL_I2C_Master_Receive(&hi2c1, (uint8_t)I2C_ADDRESS, (uint8_t*)MDR_buf, MDR_len, 100) != HAL_OK) { + if (HAL_I2C_GetError(&hi2c1) != HAL_I2C_ERROR_AF) { +#ifdef DEBUG_ENABLE + sprintf((char*)debug_buf, "Unable to get MDR. I2C error: %ld\r\n", HAL_I2C_GetError(&hi2c1)); + HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); + memset(debug_buf, 0, 128); +#endif /* DEBUG_ENABLE */ + break; + } + if (++AF_error_counter > 1000) { + break; + } + } #else /* MASTER */ uint8_t buffer[128], debug_buf[128], term[]="\r\n"; -- cgit v1.2.3 From c6456daa9bd08e5b91d3d508699c01badde42102 Mon Sep 17 00:00:00 2001 From: Aditya Naik Date: Wed, 25 Mar 2020 19:09:06 -0400 Subject: Master receives MDR --- Src/main.c | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 90 insertions(+), 19 deletions(-) diff --git a/Src/main.c b/Src/main.c index 2f424fd..8c500f9 100644 --- a/Src/main.c +++ b/Src/main.c @@ -202,11 +202,11 @@ int main(void) #endif /* TESTING_ENABLE */ } - uint8_t MDR_CTS_buf[8]; - m2s_MDR_res_CTS MDR_CTS; + uint8_t MDR_CTS_buf[8] = {0}; + m2s_MDR_res_CTS MDR_CTS; pb_ostream_t MDR_CTS_ostream = pb_ostream_from_buffer(MDR_CTS_buf, sizeof(MDR_CTS_buf)); - MDR_CTS.timeout = 1000; + MDR_CTS.timeout = 100; if (!pb_encode(&MDR_CTS_ostream, m2s_MDR_res_CTS_fields, &MDR_CTS)) { #ifdef DEBUG_ENABLE sprintf((char*)debug_buf, "MDR encoding error\r\n"); @@ -214,20 +214,32 @@ int main(void) memset(debug_buf, 0, 128); #endif } - else { - if (HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)I2C_ADDRESS, (uint8_t*)MDR_CTS_buf, m2s_MDR_res_CTS_size, 10000) != HAL_OK) { +#ifdef TESTING_ENABLE + sprintf((char*)debug_buf, "CTS size: %d\r\n", MDR_CTS_ostream.bytes_written); + HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); + memset(debug_buf, 0, 128); + uint8_t ctsbuf[] = "\tCTS buffer: "; + for(int x=0; x<2; x++) { + sprintf((char*)debug_buf+x, "%x", MDR_CTS_buf[x]); + } + HAL_UART_Transmit(&huart1, ctsbuf, sizeof(ctsbuf), 100); + HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); + HAL_UART_Transmit(&huart1, term, 2, 100); + memset(debug_buf, 0, 128); +#endif /* TESTING_ENABLE */ + + if (HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)I2C_ADDRESS, (uint8_t*)MDR_CTS_buf, 2, 10000) != HAL_OK) { #ifdef DEBUG_ENABLE - sprintf((char*)debug_buf, "Unable to send MDR CTS. I2C error: %ld\r\n", HAL_I2C_GetError(&hi2c1)); - HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); - memset(debug_buf, 0, 128); + sprintf((char*)debug_buf, "Unable to send MDR CTS. I2C error: %ld\r\n", HAL_I2C_GetError(&hi2c1)); + HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); + memset(debug_buf, 0, 128); #endif /* DEBUG_ENABLE */ - } - HAL_GPIO_TogglePin(led_GPIO_Port, led_Pin); } + HAL_GPIO_TogglePin(led_GPIO_Port, led_Pin); uint8_t MDR_buf[256]; AF_error_counter = 0; - while (HAL_I2C_Master_Receive(&hi2c1, (uint8_t)I2C_ADDRESS, (uint8_t*)MDR_buf, MDR_len, 100) != HAL_OK) { + while (HAL_I2C_Master_Receive(&hi2c1, (uint8_t)I2C_ADDRESS, (uint8_t*)MDR_buf, MDR_len, 1000) != HAL_OK) { if (HAL_I2C_GetError(&hi2c1) != HAL_I2C_ERROR_AF) { #ifdef DEBUG_ENABLE sprintf((char*)debug_buf, "Unable to get MDR. I2C error: %ld\r\n", HAL_I2C_GetError(&hi2c1)); @@ -236,13 +248,31 @@ int main(void) #endif /* DEBUG_ENABLE */ break; } - if (++AF_error_counter > 1000) { - break; - } + AF_error_counter++; + /* if (++AF_error_counter > 1000) { */ + /* break; */ + /* } */ } + + #ifdef TESTING_ENABLE + sprintf((char*)debug_buf, "MDR trials: %ld\r\n", AF_error_counter); + HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); + memset(debug_buf, 0, 128); + #endif + +#ifdef TESTING_ENABLE + uint8_t mdrbuf[] = "Got MDR: "; + for (int x=0; x