#ifndef MAIN_H_ #define MAIN_H_ #include #include "main_master_time.h" #include "station_config_target_hw.h" #include "aprs/ax25.h" #include "drivers/serial.h" #include "gsm/sim800_state_t.h" #include "software_version.h" #define SYSTICK_TICKS_PER_SECONDS 100 #define SYSTICK_TICKS_PERIOD 10 //#define INTERNAL_WATCHDOG //#define EXTERNAL_WATCHDOG #define PWR_SWITCH_BOTH #define OWN_APRS_MSG_LN 256u typedef enum main_usart_mode_t { USART_MODE_UNDEF, USART_MODE_KISS, USART_MODE_VICTRON, USART_MODE_DUST_SDS, USART_MODE_DAVIS, USART_MODE_MODBUS, USART_MODE_UMB_MASTER, USART_MODE_UNINIT }main_usart_mode_t; extern const config_data_mode_t * main_config_data_mode; extern const config_data_basic_t * main_config_data_basic; extern const config_data_wx_sources_t * main_config_data_wx_sources; extern const config_data_umb_t * main_config_data_umb; extern const config_data_rtu_t * main_config_data_rtu; #ifdef PARAMETEO extern const config_data_gsm_t * main_config_data_gsm; #endif extern int32_t main_wx_sensors_pool_timer; extern int32_t main_one_minute_pool_timer; extern int32_t main_one_second_pool_timer; extern int32_t main_two_second_pool_timer; extern int32_t main_ten_second_pool_timer; extern AX25Ctx main_ax25; extern Afsk main_afsk; extern AX25Call main_own_path[3]; extern uint8_t main_own_path_ln; extern uint8_t main_own_aprs_msg_len; extern char main_own_aprs_msg[OWN_APRS_MSG_LN]; extern char main_string_latitude[9]; extern char main_string_longitude[9]; extern char main_callsign_with_ssid[10]; extern char main_symbol_f; extern char main_symbol_s; extern srl_context_t* main_kiss_srl_ctx_ptr; extern srl_context_t* main_wx_srl_ctx_ptr; extern srl_context_t* main_gsm_srl_ctx_ptr; extern uint8_t main_kiss_enabled; extern uint8_t main_woken_up; extern int8_t main_cpu_load; extern const float main_test_float; extern const char main_test_string[11]; extern char after_tx_lock; extern unsigned short rx10m, tx10m, digi10m, digidrop10m, kiss10m; extern gsm_sim800_state_t main_gsm_state; //void main_set_monitor(int8_t bit); uint16_t main_get_adc_sample(void); void main_service_cpu_load_ticks(void); void main_reload_internal_wdg(void); uint32_t main_get_nvm_timestamp(void); #if defined(STM32L471xx) extern uint32_t rte_main_rx_total; extern uint32_t rte_main_tx_total; #endif /** * Block I/O function which waits for all transmission to end */ inline void main_wait_for_tx_complete(void) { while(main_afsk.sending == 1); } /** * Reset pooling timers values after waking up from deep sleep, to be sure * than */ inline void main_reset_pooling_timers(void) { main_wx_sensors_pool_timer = 35000; // global variable used as a timer to trigger packet sending main_one_minute_pool_timer = 60000; // one second pool interval main_one_second_pool_timer = 1000; // two second pool interval main_two_second_pool_timer = 2000; // ten second pool interval main_ten_second_pool_timer = 10000; } inline void main_wx_decremenet_counter(void) { if (main_wx_sensors_pool_timer > 0) main_wx_sensors_pool_timer -= SYSTICK_TICKS_PERIOD; } inline void main_packets_tx_decremenet_counter(void) { if (main_one_minute_pool_timer > 0) main_one_minute_pool_timer -= SYSTICK_TICKS_PERIOD; } inline void main_one_second_pool_decremenet_counter(void) { if (main_one_second_pool_timer > 0) main_one_second_pool_timer -= SYSTICK_TICKS_PERIOD; } inline void main_two_second_pool_decrement_counter(void) { main_two_second_pool_timer -= SYSTICK_TICKS_PERIOD; } inline void main_ten_second_pool_decremenet_counter(void) { if (main_ten_second_pool_timer > 0) main_ten_second_pool_timer -= SYSTICK_TICKS_PERIOD; } #endif