diff options
Diffstat (limited to 'src/slave-cmd.c')
| -rw-r--r-- | src/slave-cmd.c | 27 |
1 files changed, 18 insertions, 9 deletions
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; |
