From 2acabd3ce6ed5522a2b3ce6728facc74bbbbd23a Mon Sep 17 00:00:00 2001 From: Aditya Naik Date: Thu, 18 Jun 2020 17:24:49 -0400 Subject: Optimizations for master data and command routing handling and corresponding changes for slave data and command decoding. Master no longer decodes data in order send individual datapoints in a packed data_message field individually, but stores and forwards the encoded data message and MDR to the slaves during routing. This significantly optimizes data routing by reducing the time taken to decode and encode every single packed datapoint. Task List: None --- src/slave-cmd.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'src/slave-cmd.c') diff --git a/src/slave-cmd.c b/src/slave-cmd.c index 5a7153e..c8425fb 100644 --- a/src/slave-cmd.c +++ b/src/slave-cmd.c @@ -160,7 +160,7 @@ int main(void) else if (SOR_buf[0] == 2) { uint8_t CTS_buf[] = {0x0, 0x1}; uint8_t len_buf[4], *MDR_buf, *data_buf; - /* _datapoint datapoints[16]; */ + _datapoint datapoints[16]; HAL_I2C_Slave_Transmit(&hi2c1, CTS_buf, 2, 10000); sprintf((char*)debug_buf, "Sent CTS\r\n"); @@ -181,18 +181,27 @@ int main(void) HAL_I2C_Slave_Transmit(&hi2c1, CTS_buf, 2, 10000); HAL_I2C_Slave_Receive(&hi2c1, MDR_buf, MDR_len, 10000); HAL_I2C_Slave_Receive(&hi2c1, data_buf, data_len, 10000); - - _datapoint datapoint_message; + s2m_MDR_response MDR_message; + s2m_data data_message; + data_idx = 0; + data_message.datapoints.funcs.decode = decode_data_callback; + data_message.datapoints.arg = (void*)datapoints; + 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_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); - - sprintf((char*)debug_buf, "Got data from %ld, running version %f\r\n\tdata 0: %f\r\n", MDR_message.module_id, MDR_message.MDR_version, datapoint_message.data); - HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); - memset(debug_buf, 0, 128); + if (!pb_decode(&data_istream, s2m_data_fields, &data_message)){ + sprintf((char*)debug_buf, "Data decode error\r\n"); + HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); + memset(debug_buf, 0, 128); + } + else { + sprintf((char*)debug_buf, "Got data from %ld\r\n\tEntity: %ld, data : %f, unit: %ld\r\n", MDR_message.module_id, datapoints[0].entity_id, datapoints[0].data, datapoints[0].unit_id); + HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); + memset(debug_buf, 0, 128); + } } else if (SOR_buf[0] == 3) { uint8_t CTS_buf[] = {0x0, 0x1}, len_buf[4], *cmd_buf; -- cgit v1.2.3