diff options
| author | Aditya Naik | 2020-06-01 13:22:51 -0400 |
|---|---|---|
| committer | Aditya Naik | 2020-06-01 13:22:51 -0400 |
| commit | 02935126630c673f61fb61654c961de0cae492f5 (patch) | |
| tree | 635900fee9f48c67de6ce4b4be56b0aca6810769 | |
| parent | 610f284322974bb88021e94b36f9da046b732257 (diff) | |
Renamed master and slave files, small edits to code
| -rw-r--r-- | makefile | 2 | ||||
| -rw-r--r-- | src/main-master.c (renamed from src/main-data.c) | 74 | ||||
| -rw-r--r-- | src/main-slave.c | 24 |
3 files changed, 54 insertions, 46 deletions
@@ -36,7 +36,7 @@ BUILD_DIR = build ######################################
# C sources
C_SOURCES = \
-src/main-data.c \
+src/main-slave.c \
src/stm32f4xx_it.c \
src/stm32f4xx_hal_msp.c \
src/system_stm32f4xx.c \
diff --git a/src/main-data.c b/src/main-master.c index 911a901..a4a278e 100644 --- a/src/main-data.c +++ b/src/main-master.c @@ -99,37 +99,36 @@ int main(void) HAL_UART_Transmit(&huart1, reset_string, sizeof(reset_string), 100); #endif /* MASTER */ #endif /* TESTING_ENABLE */ - - /* Add MDR */ - uint8_t dev_idx = GET_IDX_FROM_ADDR(I2C_ADDRESS); - subs_info[dev_idx] = malloc(sizeof(subscription_info_t)); - subs_info[dev_idx]->mod_idx = subs_info[dev_idx]->entity_idx = - subs_info[dev_idx]->class_idx = subs_info[dev_idx]->i2c_idx = 0; - SET_BIT_FROM_IDX(allocated, dev_idx); - - subs_info[dev_idx]->module_ids[subs_info[dev_idx]->mod_idx++] = 1; //subscribe to self - - _MDR module_MDR = s2m_MDR_response_init_default; - - device_info[dev_idx] = malloc(sizeof(device_info_t)); - device_info[dev_idx]->i2c_addr = I2C_ADDRESS; - device_info[dev_idx]->device_id = dev_idx; + uint8_t priority_counter = 0, debug_buf[128]; + /* Handshake */ + while (1) { + if (priority_counter == 0) { + hs_status_t hs_status; + for (int curr_addr=0; curr_addr < 5; 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); + } + } + } - module_MDR.MDR_version = 1.1; - module_MDR.module_id = 1; - module_MDR.module_class = 1; - module_MDR.entity_id = 32; + else if (priority_counter == 5) { + routing(); + } + else { + for (int device_idx = 0; device_idx < BUS_DEVICE_LIMIT-1; device_idx++) { + if (dev_sts[device_idx] == REGISTERED) { + device_dataflow(GET_ADDR_FROM_IDX(device_idx), SLAVE_TX, 0); + } + } + } + priority_counter = ((priority_counter+1)%10); - device_info[dev_idx]->MDR = module_MDR; - - /* dataflow */ - /* while (1) { */ - device_dataflow(0x05, 1, 0); - HAL_Delay(MASTER_I2C_BUS_INTERVAL); - routing(); - /* HAL_Delay(500); */ - /* } */ + sprintf((char*)debug_buf, "routing ptr: %ld\r\n", routing_ptr); + HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); + memset(debug_buf, 0, 128); + } } hs_status_t handshake(uint32_t i2c_addr) @@ -143,10 +142,10 @@ hs_status_t handshake(uint32_t i2c_addr) uint32_t dev_idx = GET_IDX_FROM_ADDR(i2c_addr); uint32_t MDR_len = 0; - m2s_MDR_request MDR_req_message; - s2m_MDR_req_ACK MDR_ACK; - m2s_MDR_res_CTS MDR_CTS; - s2m_MDR_response MDR_res_message; + m2s_MDR_request MDR_req_message = m2s_MDR_request_init_default; + s2m_MDR_req_ACK MDR_ACK = s2m_MDR_req_ACK_init_default; + m2s_MDR_res_CTS MDR_CTS = m2s_MDR_res_CTS_init_default; + s2m_MDR_response MDR_res_message = s2m_MDR_response_init_default; #if defined(TESTING_ENABLE) || defined(DEBUG_ENABLE) uint8_t debug_buf[128]; @@ -196,6 +195,7 @@ hs_status_t handshake(uint32_t i2c_addr) } case (HS_MDR_ACK): { + HAL_Delay(MASTER_I2C_BUS_INTERVAL); MDR_ACK_buf = malloc(8); AF_error_counter = 0; while (HAL_I2C_Master_Receive(&hi2c1, (uint16_t)i2c_addr, (uint8_t*)MDR_ACK_buf, @@ -316,6 +316,11 @@ hs_status_t handshake(uint32_t i2c_addr) __MDR_DEC_TESTING_END: __asm__("nop"); #endif + device_info[dev_idx] = malloc(sizeof(device_info_t)); + device_info[dev_idx]->i2c_addr = i2c_addr; + device_info[dev_idx]->device_id = dev_idx; + device_info[dev_idx]->MDR = MDR_res_message; + hs_sts = HS_REGISTERED; } } @@ -471,7 +476,7 @@ dataflow_status_t device_dataflow(uint8_t i2c_addr, uint32_t SOR_code, uint8_t r } else { if (HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)i2c_addr, (uint8_t*)SOR_buf, - m2s_SOR_size, 1000) != HAL_OK) { + m2s_SOR_size, 10000) != HAL_OK) { df_status = DF_FAIL; #ifdef DEBUG_ENABLE goto __DF_SOR_I2C_ERROR; @@ -746,7 +751,8 @@ dataflow_status_t device_dataflow(uint8_t i2c_addr, uint32_t SOR_code, uint8_t r memset(debug_buf, 0, 128); goto __DF_SOR_ENC_FAIL_END; __DF_SOR_I2C_ERROR: - sprintf((char*)debug_buf, "Unable to send SOR request. I2C error: %ld\r\n", HAL_I2C_GetError(&hi2c1)); + sprintf((char*)debug_buf, "Unable to send SOR request from %d. I2C error: %ld\r\n", + i2c_addr, HAL_I2C_GetError(&hi2c1)); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); memset(debug_buf, 0, 128); goto __DF_SOR_I2C_ERROR_END; diff --git a/src/main-slave.c b/src/main-slave.c index 98b5550..f5979db 100644 --- a/src/main-slave.c +++ b/src/main-slave.c @@ -85,7 +85,7 @@ int main(void) res.subscriptions.funcs.encode=encode_subscription_callback; pb_ostream_t ostream = pb_ostream_from_buffer(MDR_buf, sizeof(MDR_buf)); - if(!pb_encode(&ostream, s2m_MDR_response_fields, &res)){ + if(!pb_encode(&ostream, s2m_MDR_response_fields, &res)) { #ifdef DEBUG_ENABLE uint8_t err_buf[] = "MDR encoding error\r\n"; HAL_UART_Transmit(&huart1, err_buf, sizeof(err_buf), 100); @@ -226,13 +226,14 @@ int main(void) } } - + HAL_Delay(1000); while (1) { uint8_t SOR_buf[m2s_SOR_size] = {0}, debug_buf[128]; - if (HAL_I2C_Slave_Receive(&hi2c1, (uint8_t*)SOR_buf, m2s_SOR_size, 10000) != HAL_OK) { + if (HAL_I2C_Slave_Receive(&hi2c1, (uint8_t*)SOR_buf, m2s_SOR_size, 100) != 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); + continue; } else { sprintf((char*)debug_buf, "Got SOR\r\n"); @@ -245,11 +246,12 @@ int main(void) sprintf((char*)debug_buf, "SOR decode error\r\n"); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); memset(debug_buf, 0, 128); + continue; } else { sprintf((char*)debug_buf, "SOR decoded; code: %ld\r\n", SOR_message.SOR_code); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); - memset(debug_buf, 0, 128); + memset(debug_buf, 0, 128); } if (SOR_message.SOR_code == 1) { @@ -262,7 +264,7 @@ int main(void) sprintf((char*)debug_buf, "Data encoding error\r\n"); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); memset(debug_buf, 0, 128); - Error_Handler(); + continue; } data_enc_size = data_ostream.bytes_written; @@ -276,7 +278,7 @@ int main(void) sprintf((char*)debug_buf, "DOC encoding error\r\n"); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); memset(debug_buf, 0, 128); - Error_Handler(); + continue; } sprintf((char*)debug_buf, "s2m_DOC encoded length: %d\r\n", doc_ostream.bytes_written); @@ -287,7 +289,7 @@ int main(void) 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); memset(debug_buf, 0, 128); - Error_Handler(); + continue; } else { sprintf((char*)debug_buf, "SENT DOC\r\n"); @@ -301,7 +303,7 @@ int main(void) 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); - Error_Handler(); + continue; } else { sprintf((char*)debug_buf, "Got CTS\r\n"); @@ -313,7 +315,7 @@ int main(void) 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); - Error_Handler(); + continue; } else { sprintf((char*)debug_buf, "SENT DATA\r\n"); @@ -350,7 +352,7 @@ int main(void) s2m_MDR_response MDR_message; pb_istream_t MDR_istream = pb_istream_from_buffer(MDR_buf, MDR_len); pb_istream_t data_istream = pb_istream_from_buffer(data_buf, data_len); - + pb_decode(&MDR_istream, s2m_MDR_response_fields, &MDR_message); pb_decode(&data_istream, _datapoint_fields, &datapoint_message); @@ -364,7 +366,7 @@ int main(void) bool encode_subscription_callback(pb_ostream_t *ostream, const pb_field_t *field, void * const *arg) { if(ostream!=NULL && field->tag == s2m_MDR_response_subscriptions_tag) { - for (int x=0; x<20; x++) { + for (int x=0; x<5; x++) { _subscriptions subs; subs.module_id = x+1; subs.has_module_id=true; |
