SP8EBC-ParaTNC/include/main.h

154 wiersze
3.6 KiB
C

#ifndef MAIN_H_
#define MAIN_H_
#include <stored_configuration_nvm/config_data.h>
#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