From 390d0e2cb4a19fb892d24eadfdc7ae3c82feb04a Mon Sep 17 00:00:00 2001 From: Mateusz Lubecki Date: Thu, 23 Sep 2021 10:07:10 +0200 Subject: [PATCH] double wx packet transmit on configuration request --- STM32F100_ParaTNC/src/subdir.mk | 6 +++--- include/config_data.h | 2 ++ include/packet_tx_handler.h | 1 + include/rte_main.h | 2 ++ src/config_data_default.c | 10 ++++++++-- src/config_data_first.c | 10 ++++++++-- src/config_data_second.c | 10 ++++++++-- src/io.c | 2 +- src/main.c | 11 +++++++++-- src/packet_tx_handler.c | 11 +++++++++++ src/rte_main.c | 2 ++ system/src/aprs/dac.c | 2 +- system/src/drivers/analog_anemometer.c | 2 +- system/src/drivers/f1/serial_stm32f1x.c | 2 +- 14 files changed, 58 insertions(+), 15 deletions(-) diff --git a/STM32F100_ParaTNC/src/subdir.mk b/STM32F100_ParaTNC/src/subdir.mk index e2135dc..78d958a 100644 --- a/STM32F100_ParaTNC/src/subdir.mk +++ b/STM32F100_ParaTNC/src/subdir.mk @@ -23,9 +23,9 @@ C_SRCS += \ ../src/pwr_switch.c \ ../src/rte_main.c \ ../src/rte_pv.c \ +../src/rte_pwr.c \ ../src/rte_rtu.c \ ../src/rte_wx.c \ -../src/rtu_pwr.c \ ../src/wx_handler.c \ ../src/wx_handler_humidity.c \ ../src/wx_handler_pressure.c \ @@ -51,9 +51,9 @@ OBJS += \ ./src/pwr_switch.o \ ./src/rte_main.o \ ./src/rte_pv.o \ +./src/rte_pwr.o \ ./src/rte_rtu.o \ ./src/rte_wx.o \ -./src/rtu_pwr.o \ ./src/wx_handler.o \ ./src/wx_handler_humidity.o \ ./src/wx_handler_pressure.o \ @@ -79,9 +79,9 @@ C_DEPS += \ ./src/pwr_switch.d \ ./src/rte_main.d \ ./src/rte_pv.d \ +./src/rte_pwr.d \ ./src/rte_rtu.d \ ./src/rte_wx.d \ -./src/rtu_pwr.d \ ./src/wx_handler.d \ ./src/wx_handler_humidity.d \ ./src/wx_handler_pressure.d \ diff --git a/include/config_data.h b/include/config_data.h index 8cba11d..56a3795 100644 --- a/include/config_data.h +++ b/include/config_data.h @@ -108,6 +108,8 @@ typedef struct config_data_basic_t { uint8_t beacon_transmit_period; + uint8_t wx_double_transmit; + } config_data_basic_t; typedef enum config_data_wx_sources_enum_t { diff --git a/include/packet_tx_handler.h b/include/packet_tx_handler.h index 8cddb87..76be1f0 100644 --- a/include/packet_tx_handler.h +++ b/include/packet_tx_handler.h @@ -20,6 +20,7 @@ typedef struct packet_tx_counter_values_t { } packet_tx_counter_values_t; +void packet_tx_send_wx_frame(void); void packet_tx_configure(uint8_t meteo_interval, uint8_t beacon_interval, config_data_powersave_mode_t powersave); void packet_tx_handler(const config_data_basic_t * const config_basic, const config_data_mode_t * const config_mode); void packet_tx_get_current_counters(packet_tx_counter_values_t * out); diff --git a/include/rte_main.h b/include/rte_main.h index aade457..49b39e4 100644 --- a/include/rte_main.h +++ b/include/rte_main.h @@ -12,5 +12,7 @@ extern uint32_t rte_main_hardfault_lr, rte_main_hardfault_pc; extern uint8_t rte_main_trigger_status; extern uint8_t rte_main_trigger_modbus_status; +extern uint8_t rte_main_trigger_wx_packet; + #endif diff --git a/src/config_data_default.c b/src/config_data_default.c index c4c495c..355e764 100644 --- a/src/config_data_default.c +++ b/src/config_data_default.c @@ -173,9 +173,15 @@ volatile const config_data_basic_t config_data_basic_default = { .beacon_transmit_period = _BCN_INTERVAL, #ifdef _BCN_ON_STARTUP - .beacon_at_bootup = 1 + .beacon_at_bootup = 1, #else - .beacon_at_bootup = 0 + .beacon_at_bootup = 0, +#endif + +#ifdef _WX_DOUBLE_TRANSMIT + .wx_double_transmit = 1 +#else + .wx_double_transmit = 0 #endif }; diff --git a/src/config_data_first.c b/src/config_data_first.c index 3419dfc..fc96197 100644 --- a/src/config_data_first.c +++ b/src/config_data_first.c @@ -176,12 +176,18 @@ const config_data_basic_t __attribute__((section(".config_section_first.basic")) .beacon_transmit_period = _BCN_INTERVAL, + #ifdef _BCN_ON_STARTUP - .beacon_at_bootup = 1 + .beacon_at_bootup = 1, #else - .beacon_at_bootup = 0 + .beacon_at_bootup = 0, #endif +#ifdef _WX_DOUBLE_TRANSMIT + .wx_double_transmit = 1 +#else + .wx_double_transmit = 0 +#endif }; /** diff --git a/src/config_data_second.c b/src/config_data_second.c index 06569fe..5d4750a 100644 --- a/src/config_data_second.c +++ b/src/config_data_second.c @@ -170,12 +170,18 @@ const config_data_basic_t __attribute__((section(".config_section_second.basic") .beacon_transmit_period = _BCN_INTERVAL, + #ifdef _BCN_ON_STARTUP - .beacon_at_bootup = 1 + .beacon_at_bootup = 1, #else - .beacon_at_bootup = 0 + .beacon_at_bootup = 0, #endif +#ifdef _WX_DOUBLE_TRANSMIT + .wx_double_transmit = 1 +#else + .wx_double_transmit = 0 +#endif }; /** diff --git a/src/io.c b/src/io.c index e873978..d8a1d19 100644 --- a/src/io.c +++ b/src/io.c @@ -12,7 +12,7 @@ #ifdef STM32F10X_MD_VL #include -#include +#include #endif #ifdef STM32L471xx #include diff --git a/src/main.c b/src/main.c index 9a548c2..3ea5634 100644 --- a/src/main.c +++ b/src/main.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include #endif #ifdef STM32L471xx @@ -138,7 +138,7 @@ int8_t main_cpu_load = 0; int32_t main_wx_sensors_pool_timer = 65500; // global variable used as a timer to trigger packet sending -int32_t main_one_minute_pool_timer = 60000; +int32_t main_one_minute_pool_timer = 45000; // one second pool interval int32_t main_one_second_pool_timer = 1000; @@ -1095,6 +1095,13 @@ int main(int argc, char* argv[]){ if (main_ten_second_pool_timer < 10) { + if (rte_main_trigger_wx_packet == 1) { + + packet_tx_send_wx_frame(); + + rte_main_trigger_wx_packet = 0; + } + #ifdef STM32L471xx // inhibit any power save switching when modem transmits data if (!main_afsk.sending) { diff --git a/src/packet_tx_handler.c b/src/packet_tx_handler.c index d7c9bc6..b86566f 100644 --- a/src/packet_tx_handler.c +++ b/src/packet_tx_handler.c @@ -45,6 +45,13 @@ uint8_t packet_tx_modbus_status = (uint8_t)(_TELEM_DESCR_INTERVAL - _WX_INTERVAL uint8_t packet_tx_more_than_one = 0; +void packet_tx_send_wx_frame(void) { + main_wait_for_tx_complete(); + + SendWXFrame(rte_wx_average_windspeed, rte_wx_max_windspeed, rte_wx_average_winddirection, rte_wx_temperature_average_external_valid, rte_wx_pressure_valid, rte_wx_humidity_valid); + +} + void packet_tx_configure(uint8_t meteo_interval, uint8_t beacon_interval, config_data_powersave_mode_t powersave) { packet_tx_meteo_interval = meteo_interval; @@ -131,6 +138,10 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con io_ext_watchdog_service(); #endif + if (main_config_data_basic->wx_double_transmit == 1) { + rte_main_trigger_wx_packet = 1; + } + packet_tx_meteo_counter = 0; } diff --git a/src/rte_main.c b/src/rte_main.c index 8646679..4fbb257 100644 --- a/src/rte_main.c +++ b/src/rte_main.c @@ -14,3 +14,5 @@ uint8_t rte_main_boot_cycles = 0, rte_main_hard_faults = 0; uint8_t rte_main_trigger_status = 0; uint8_t rte_main_trigger_modbus_status = 0; +uint8_t rte_main_trigger_wx_packet = 0; + diff --git a/system/src/aprs/dac.c b/system/src/aprs/dac.c index d2c481f..09b2131 100644 --- a/system/src/aprs/dac.c +++ b/system/src/aprs/dac.c @@ -7,7 +7,7 @@ #ifdef STM32F10X_MD_VL #include -#include "antilib_gpio.h" +//#include "antilib_gpio.h" #endif diff --git a/system/src/drivers/analog_anemometer.c b/system/src/drivers/analog_anemometer.c index bae03a4..6f4af20 100644 --- a/system/src/drivers/analog_anemometer.c +++ b/system/src/drivers/analog_anemometer.c @@ -26,7 +26,7 @@ #ifdef STM32F10X_MD_VL #include #include -#include +#include #endif #ifdef STM32L471xx #include diff --git a/system/src/drivers/f1/serial_stm32f1x.c b/system/src/drivers/f1/serial_stm32f1x.c index 8c57715..f554f1b 100644 --- a/system/src/drivers/f1/serial_stm32f1x.c +++ b/system/src/drivers/f1/serial_stm32f1x.c @@ -1,4 +1,4 @@ -#include +#include #include "drivers/serial.h" #include "station_config.h" #include "diag/Trace.h"