summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAditya Naik2020-03-24 15:04:49 -0400
committerAditya Naik2020-03-24 15:04:49 -0400
commitf34cd1f2387edb69f238a994787808f4444d0a71 (patch)
tree7565db28381173f512458bd459d6af04e3856da9
parent553d9c7d470dcf2dadbfefb409cb13314c79fd9d (diff)
ACK not working??
-rw-r--r--Src/main.c41
1 files 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 */