From f34cd1f2387edb69f238a994787808f4444d0a71 Mon Sep 17 00:00:00 2001 From: Aditya Naik Date: Tue, 24 Mar 2020 15:04:49 -0400 Subject: ACK not working?? --- Src/main.c | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/Src/main.c b/Src/main.c index 5f626dd..faa4d8c 100644 --- a/Src/main.c +++ b/Src/main.c @@ -51,7 +51,7 @@ #define I2C_ADDRESS 0x30F /* Macro to toggle between master and slave firmware */ -/* #define MASTER */ +#define MASTER /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ @@ -127,6 +127,7 @@ int main(void) #ifdef MASTER uint8_t MDR_req_buf[64], debug_buf[128], term[]="\r\n"; + uint8_t MDR_ACK_buf[8]; m2s_MDR_request MDR_req_message; pb_ostream_t MDR_req_stream = pb_ostream_from_buffer(MDR_req_buf, sizeof(MDR_req_buf)); MDR_req_message.record_type = 1; /* Placeholder for default record type */ @@ -154,10 +155,32 @@ int main(void) HAL_UART_Transmit(&huart1, term, 2, 100); memset(debug_buf, 0, 128); #endif /* TESTING_ENABLE */ + + /* if (HAL_I2C_IsDeviceReady(&hi2c1, (uint16_t)I2C_ADDRESS, 10, 100) == HAL_OK) { */ + while (HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)I2C_ADDRESS, (uint8_t*)MDR_req_buf, m2s_MDR_request_size, 10000) != HAL_OK); + while (HAL_I2C_Master_Receive(&hi2c1, (uint16_t)I2C_ADDRESS, (uint8_t*)MDR_ACK_buf, 2, 1000) != HAL_OK); + + s2m_MDR_req_ACK MDR_ACK; + pb_istream_t MDR_ACK_istream = pb_istream_from_buffer(MDR_ACK_buf, + sizeof(MDR_ACK_buf)); + if (!pb_decode(&MDR_ACK_istream, s2m_MDR_req_ACK_fields, &MDR_ACK)) { +#ifdef DEBUG_ENABLE + sprintf((char*)debug_buf, "Failed to decode MDR ACK\r\n"); + HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); + memset(debug_buf, 0, 128); +#endif /* DEBUG_ENABLE */ + } - while (HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)I2C_ADDRESS, (uint8_t*)MDR_req_buf, 2, 10000) != HAL_OK); +#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); + memset(debug_buf, 0, 128); +#endif /* TESTING_ENABLE */ + /* } */ HAL_GPIO_TogglePin(led_GPIO_Port, led_Pin); + + #else /* MASTER */ uint8_t buffer[128], debug_buf[128], term[]="\r\n"; size_t MDR_enc_size; @@ -219,7 +242,7 @@ int main(void) uint8_t MDR_req_buf[8]; m2s_MDR_request MDR_req; - if (HAL_I2C_Slave_Receive(&hi2c1, (uint8_t*)MDR_req_buf, 2, 10000) != HAL_OK) { + if (HAL_I2C_Slave_Receive(&hi2c1, (uint8_t*)MDR_req_buf, m2s_MDR_request_size, 10000) != HAL_OK) { #ifdef DEBUG_ENABLE uint8_t debug_buf[] = "Failed to get MDR req\r\n"; HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); @@ -233,17 +256,17 @@ int main(void) for(int x=0; x<2; x++) { sprintf((char*)debug_buf+x, "%x", MDR_req_buf[x]); } - HAL_UART_Transmit(&huart1, debug_buf, MDR_enc_size, 100); + HAL_UART_Transmit(&huart1, debug_buf, MDR_enc_size, 100); HAL_UART_Transmit(&huart1, term, 2, 100); memset(debug_buf, 0, 128); #endif - pb_istream_t MDR_req_istream = pb_istream_from_buffer(MDR_req_buf, 2); + pb_istream_t MDR_req_istream = pb_istream_from_buffer(MDR_req_buf, sizeof(MDR_req_buf)); if(!pb_decode(&MDR_req_istream, m2s_MDR_request_fields, &MDR_req)) { #ifdef DEBUG_ENABLE uint8_t errbuf[] = "MDR request decoding error\r\n"; HAL_UART_Transmit(&huart1, errbuf, sizeof(errbuf), 100); -#endif /* DEBUG_ENABLE */ +#endif /* DEBUG_ENABLE */ continue; } @@ -254,6 +277,12 @@ int main(void) #endif /* TESTING_ENABLE */ HAL_GPIO_TogglePin(led_GPIO_Port, led_Pin); + + if (HAL_I2C_Slave_Transmit(&hi2c1, (uint8_t*)MDR_ACK_buf, 2, 1000) != HAL_OK) { + #ifdef DEBUG_ENABLE + sprintf((char*)debug_buf, "Failed to send MDR ACK to master\r\n"); + #endif /* DEBUG_ENABLE */ + } #endif /* MASTER */ /* USER CODE END WHILE */ -- cgit v1.2.3