summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAditya Naik2020-06-01 13:22:51 -0400
committerAditya Naik2020-06-01 13:22:51 -0400
commit02935126630c673f61fb61654c961de0cae492f5 (patch)
tree635900fee9f48c67de6ce4b4be56b0aca6810769
parent610f284322974bb88021e94b36f9da046b732257 (diff)
Renamed master and slave files, small edits to code
-rw-r--r--makefile2
-rw-r--r--src/main-master.c (renamed from src/main-data.c)74
-rw-r--r--src/main-slave.c24
3 files changed, 54 insertions, 46 deletions
diff --git a/makefile b/makefile
index 9526108..91fca11 100644
--- a/makefile
+++ b/makefile
@@ -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;