summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAditya Naik2020-03-26 18:52:11 -0400
committerAditya Naik2020-03-26 18:52:11 -0400
commit4689b224b0aa949dab8996f05a7a6fa926fbe427 (patch)
treee9b44e338c33d5edbbdb7466d6af35afdb0429c5
parentd750b89ec81ab1dd70a0c882bc530501677ebcb8 (diff)
Working MDR req, untested ACK
-rw-r--r--Src/main-hs.c58
-rw-r--r--Src/main.c2
2 files changed, 44 insertions, 16 deletions
diff --git a/Src/main-hs.c b/Src/main-hs.c
index bb206aa..19c666f 100644
--- a/Src/main-hs.c
+++ b/Src/main-hs.c
@@ -48,7 +48,7 @@
#define SET_BIT_FROM_IDX(a, b) a[b>>5]|=(1<<(b%32))
#define COUNTOF(__BUFFER__) (sizeof(__BUFFER__) / sizeof(*(__BUFFER__)))
-#define I2C_ADDRESS 0x30F
+#define I2C_ADDRESS 0x05
/* Macro to toggle between master and slave firmware */
#define MASTER
@@ -124,16 +124,18 @@ int main(void)
/* Handshake variables */
uint8_t hs_sts = IDLE;
uint8_t debug_buf[128], term[] = "\r\n";
- uint8_t MDR_req_buf[8];
+ uint8_t *MDR_req_buf, *MDR_ACK_buf;
size_t MDR_req_size;
-
+
+ m2s_MDR_request MDR_req_message;
+ s2m_MDR_req_ACK MDR_ACK;
+ uint32_t MDR_len;
while (hs_sts != HS_FAILED && hs_sts != HS_REGISTERED) {
switch (hs_sts) {
case (IDLE):
{
- /* MDR_req_buf = malloc(8); */
- m2s_MDR_request MDR_req_message;
+ MDR_req_buf = malloc(8);
pb_ostream_t MDR_req_stream = pb_ostream_from_buffer(MDR_req_buf, 2);
MDR_req_message.record_type = 7; /* Placeholder for default record type */
if(!pb_encode(&MDR_req_stream, m2s_MDR_request_fields, &MDR_req_message)) {
@@ -151,19 +153,44 @@ int main(void)
if (HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)I2C_ADDRESS, (uint8_t*)MDR_req_buf,
MDR_req_buf_len, 10000) != HAL_OK) {
// Error handling for transmit fail
-#ifdef DEBUG_ENABLE
- uint8_t err_buf[] = "I2C error\r\n";
- HAL_UART_Transmit(&huart1, err_buf, sizeof(err_buf), 100);
-#endif /* DEBUG_ENABLE */
hs_sts = HS_FAILED;
}
else {
-#ifdef DEBUG_ENABLE
- uint8_t err_buf[] = "I2C success??\r\n";
- HAL_UART_Transmit(&huart1, err_buf, sizeof(err_buf), 100);
-#endif /* DEBUG_ENABLE */
- hs_sts = HS_REGISTERED; // Placeholder for testing, change this to next step
+ hs_sts = HS_MDR_ACK; // Placeholder for testing, change this to next step
+ }
+ free(MDR_req_buf);
+ break;
+ }
+ case (HS_MDR_ACK):
+ {
+ MDR_ACK_buf = malloc(8);
+ uint32_t AF_error_counter = 0;
+ while (HAL_I2C_Master_Receive(&hi2c1, (uint8_t)I2C_ADDRESS, (uint8_t*)MDR_ACK_buf,
+ s2m_MDR_req_ACK_size, 100) != HAL_OK) {
+ if (HAL_I2C_GetError(&hi2c1) != HAL_I2C_ERROR_AF) {
+ hs_sts = HS_FAILED;
+ }
+ if (++AF_error_counter > 1500) {
+ hs_sts = HS_FAILED;
+ break;
+ }
+ }
+ if (hs_sts == HS_FAILED) {
+ // TODO Error handling on I2C receive fail
+ }
+ else {
+ pb_istream_t MDR_ACK_istream = pb_istream_from_buffer(MDR_ACK_buf, 2);
+ if (!pb_decode(&MDR_ACK_istream, s2m_MDR_req_ACK_fields, &MDR_ACK)) {
+ // TODO Error handling for decoding fail
+ hs_sts = HS_FAILED;
+ }
+ else {
+ MDR_len = MDR_ACK.MDR_res_length;
+ }
+ hs_sts = HS_MDR_CTS;
+ free(MDR_ACK_buf);
}
+ break;
}
}
}
@@ -188,7 +215,8 @@ int main(void)
__TESTING_BLOCK_END:
__asm__("nop");
#endif
-
+
+ Error_Handler();
#else /* MASTER */
diff --git a/Src/main.c b/Src/main.c
index 8c500f9..10d43ed 100644
--- a/Src/main.c
+++ b/Src/main.c
@@ -48,7 +48,7 @@
#define SET_BIT_FROM_IDX(a, b) a[b>>5]|=(1<<(b%32))
#define COUNTOF(__BUFFER__) (sizeof(__BUFFER__) / sizeof(*(__BUFFER__)))
-#define I2C_ADDRESS 0x30F
+#define I2C_ADDRESS 0x05
/* Macro to toggle between master and slave firmware */
#define MASTER