From b642c3c540e840990b1df1c3acb0ecff90117db8 Mon Sep 17 00:00:00 2001 From: Mateusz Lubecki Date: Sun, 12 Nov 2023 11:09:11 +0100 Subject: [PATCH] kiss communication. did: bugfix in lengh of response, get_version: bugfix in overwriting first byte of a response --- .settings/language.settings.xml | 4 ++-- STM32F100_ParaTNC/src/subdir.mk | 6 ++++++ include/software_version.h | 4 ++-- src/kiss_protocol/kiss_callback.c | 6 ++++-- src/kiss_protocol/kiss_did.c | 27 ++++++++++++++------------- 5 files changed, 28 insertions(+), 19 deletions(-) diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index 9a355c7..68f6579 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/STM32F100_ParaTNC/src/subdir.mk b/STM32F100_ParaTNC/src/subdir.mk index 9ba4be8..7b27756 100644 --- a/STM32F100_ParaTNC/src/subdir.mk +++ b/STM32F100_ParaTNC/src/subdir.mk @@ -8,6 +8,7 @@ C_SRCS += \ ../src/PathConfig.c \ ../src/TimerConfig.c \ ../src/_write.c \ +../src/backup_registers.c \ ../src/button_paratnc.c \ ../src/delay.c \ ../src/dummy.c \ @@ -21,6 +22,7 @@ C_SRCS += \ ../src/rte_rtu.c \ ../src/rte_wx.c \ ../src/software_version.c \ +../src/variant_parameteo.c \ ../src/wx_handler.c \ ../src/wx_handler_humidity.c \ ../src/wx_handler_pressure.c \ @@ -32,6 +34,7 @@ OBJS += \ ./src/PathConfig.o \ ./src/TimerConfig.o \ ./src/_write.o \ +./src/backup_registers.o \ ./src/button_paratnc.o \ ./src/delay.o \ ./src/dummy.o \ @@ -45,6 +48,7 @@ OBJS += \ ./src/rte_rtu.o \ ./src/rte_wx.o \ ./src/software_version.o \ +./src/variant_parameteo.o \ ./src/wx_handler.o \ ./src/wx_handler_humidity.o \ ./src/wx_handler_pressure.o \ @@ -56,6 +60,7 @@ C_DEPS += \ ./src/PathConfig.d \ ./src/TimerConfig.d \ ./src/_write.d \ +./src/backup_registers.d \ ./src/button_paratnc.d \ ./src/delay.d \ ./src/dummy.d \ @@ -69,6 +74,7 @@ C_DEPS += \ ./src/rte_rtu.d \ ./src/rte_wx.d \ ./src/software_version.d \ +./src/variant_parameteo.d \ ./src/wx_handler.d \ ./src/wx_handler_humidity.d \ ./src/wx_handler_pressure.d \ diff --git a/include/software_version.h b/include/software_version.h index 6f360ba..1842344 100644 --- a/include/software_version.h +++ b/include/software_version.h @@ -8,8 +8,8 @@ #ifndef SOFTWARE_VERSION_H_ #define SOFTWARE_VERSION_H_ -#define SW_VER "EB02" -#define SW_DATE "31102023" +#define SW_VER "EB03" +#define SW_DATE "12112023" #define SW_KISS_PROTO "B" extern const char software_version_str[5]; diff --git a/src/kiss_protocol/kiss_callback.c b/src/kiss_protocol/kiss_callback.c index 30b5643..99aea94 100644 --- a/src/kiss_protocol/kiss_callback.c +++ b/src/kiss_protocol/kiss_callback.c @@ -124,9 +124,9 @@ int32_t kiss_callback_get_version_id(uint8_t* input_frame_from_host, uint16_t in uint8_t config_payload_size = 0; #ifdef PARAMETEO - config_payload_size = snprintf((char *)response_buffer + 3, buffer_size, "METEO-%s-%s", SW_VER, SW_KISS_PROTO); + config_payload_size = snprintf((char *)response_buffer + 4, buffer_size, "METEO-%s-%s", SW_VER, SW_KISS_PROTO); #else - config_payload_size = snprintf((char *)response_buffer + 3, buffer_size, "TNC-%s-%s", SW_VER, SW_KISS_PROTO); + config_payload_size = snprintf((char *)response_buffer + 4, buffer_size, "TNC-%s-%s", SW_VER, SW_KISS_PROTO); #endif // construct a response @@ -229,6 +229,8 @@ int32_t kiss_callback_read_did(uint8_t* input_frame_from_host, uint16_t input_le int32_t out = 0; + memset(response_buffer, 0x00, buffer_size); + // identifier uint16_t did = *(input_frame_from_host + 2) | (*(input_frame_from_host + 3) << 8); diff --git a/src/kiss_protocol/kiss_did.c b/src/kiss_protocol/kiss_did.c index a01e964..4289b63 100644 --- a/src/kiss_protocol/kiss_did.c +++ b/src/kiss_protocol/kiss_did.c @@ -242,7 +242,7 @@ static int kiss_did_validate(kiss_did_numeric_definition_t * definition, uint8_t */ uint8_t kiss_did_response(uint16_t identifier, uint8_t * output_buffer, uint16_t buffer_ln) { - uint8_t out = 0xFF; + uint8_t out = 0; // iterator to go through DID definition int i = 0; @@ -325,12 +325,19 @@ uint8_t kiss_did_response(uint16_t identifier, uint8_t * output_buffer, uint16_t // move after DID value and size_byte output_buffer += 3; + // room for size byte + out++; + + // and for DID value itself + out += 2; + //append first data source memcpy(output_buffer, found.first_data, found.first_data_size); //move forward a poiner to response buffer output_buffer += found.first_data_size; + // room for first value returned by DID out += found.first_data_size; if (number_of_data_source > 1) { @@ -353,12 +360,6 @@ uint8_t kiss_did_response(uint16_t identifier, uint8_t * output_buffer, uint16_t out += found.third_data_size; } - // also include size_byte in this calculation - out++; - - // include DID value itself - out += 2; - } else if (found.identifier != 0xFFFFu && is_valid == 1 && is_float == 1) { @@ -376,6 +377,12 @@ uint8_t kiss_did_response(uint16_t identifier, uint8_t * output_buffer, uint16_t // move after DID value and size_byte output_buffer += 3; + // room for size byte stored in output buffer + out++; + + // room for DID number in output buffer + out += 2; + //append first data source memcpy(output_buffer, found.first_data, sizeof(float)); @@ -404,12 +411,6 @@ uint8_t kiss_did_response(uint16_t identifier, uint8_t * output_buffer, uint16_t out += sizeof(float); } - // also include size_byte in this calculation - out++; - - // include DID value itself - out += 2; - } else if (found.identifier != 0xFFFFu && is_string == 1) {