diff --git a/include/it_handlers.h b/include/it_handlers.h index a990d71..995fe2b 100644 --- a/include/it_handlers.h +++ b/include/it_handlers.h @@ -8,6 +8,7 @@ #ifndef IT_HANDLERS_H_ #define IT_HANDLERS_H_ +extern uint8_t it_handlers_inhibit_radiomodem_dcd_led; void it_handlers_set_priorities(void); diff --git a/include/station_config.h~ b/include/station_config.h~ new file mode 100644 index 0000000..d19d141 --- /dev/null +++ b/include/station_config.h~ @@ -0,0 +1,304 @@ +/* + * config.h + * + * Created on: 03.07.2017 + * Author: mateusz + */ + +#ifndef STATION_CONFIG_H_ +#define STATION_CONFIG_H_ + +//#define _POWERSAVE_NORMAL +//#define _POWERSAVE_AGGRESIVE +/* ------------------ */ +/* MODES OF OPERATION */ + +#define _METEO // Enable meteo station + +#define _DIGI // Enable WIDE1-1 digipeater +#define _DIGI_VISCOUS +//#define _DIGI_ONLY_789 // Limit digipeater to handle only -7, -8 and -9 SSIDs + +//#define _GSM // only for ParaMETEO +//#define _GSM_KEEP_MODEM_ALWAYS_ON + +#define _WX_DOUBLE_TRANSMIT + +/* MODES OF OPERATION */ +/* ------------------ */ + +/** + * Enable support for Victron VE.Direct protocol. This is independent from wx sensor configuration + */ +//#define _VICTRON + +/* ---------------------------- */ +/* WEATHER/METEO CONFIGURATION */ + + +/** + * Three defines below enables or disabled listed communication drivers. Enabling any of then doesn't means + * that these are used as a data source automatically. That shall be set in 'DATA SOURCES CONFIG' section. + */ + +//#define _UMB_MASTER +//#define _DAVIS_SERIAL +#define _MODBUS_RTU // use Modbus RTU slave devices as a external meteo data source. For more configuration + // (slave ids, registers...) please look into MODBUS RTU CONFIGURATION section of this file + +#define _INTERNAL_AS_BACKUP // if defined ParaTNC will switch to internal sensors in case of + // the communication with UMB/Dallas Serial/Modbus external sensors will hang up + + +//#define _DALLAS_AS_TELEM // Use Dallas one-wire thermometer as a 5th telemetry channel + // May be used even if _METEO is not enabled +#define _DALLAS_SPLIT_PIN // Must be enabled for all ParaTNC hardware revisions + +/* WEATHER/METEO CONFIGURATION */ +/* ---------------------------- */ + + +/******** INTERNAL SENSORS CONFIGURATION *****************/ + +//#define _ANEMOMETER_TX20 // Use TX20 as an internal anemometer +#define _ANEMOMETER_ANALOGUE // Use analogue/mechanical (like Davis 6410) as an internal anemometr +#define _ANEMOMETER_PULSES_IN_10SEC_PER_ONE_MS_OF_WINDSPEED 10 + +#define _SENSOR_MS5611 +//#define _SENSOR_BME280 +/******** INTERNAL SENSORS CONFIGURATION *****************/ + + +/******** UMB MASTER CONFIGURATION *****************/ +#define _UMB_SLAVE_ID 1 +#define _UMB_SLAVE_CLASS 8 +#define _UMB_CHANNEL_WINDSPEED 460 +#define _UMB_CHANNEL_WINDGUSTS 440 +#define _UMB_CHANNEL_WINDDIRECTION 580 +#define _UMB_CHANNEL_TEMPERATURE 100 +#define _UMB_CHANNEL_QFE 300 +/******** UMB MASTER CONFIGURATION *****************/ + + +/*************** DATA SOURCES CONFIG ***********************/ +#define _TEMPERATURE_INTERNAL +//#define _TEMPERATURE_UMB +//#define _TEMPERATURE_RTU +//#define _TEMPERATURE_DAVIS +// +#define _PRESSURE_INTERNAL +//#define _PRESSURE_UMB +//#define _PRESSURE_RTU +//#define _PRESSURE_DAVIS +// +//#define _HUMIDITY_INTERNAL +//#define _HUMIDITY_UMB +#define _HUMIDITY_RTU +//#define _HUMIDITY_DAVIS +// +// +#define _WIND_INTERNAL +//#define _WIND_UMB +//#define _WIND_RTU +//#define _WIND_FULL_RTU +//#define _WIND_DAVIS +/*************** DATA SOURCES CONFIG ***********************/ + + +/* WEATHER/METEO CONFIGURATION */ +/* ---------------------------- */ + +//#define _MUTE_RF // TODO: Not yet implemented - This will make station RXonly and disable all data transmission +//#define _MUTE_OWN // TODO: Not yet implemented - This will disable all self-generated packets (wx, telemetry, beacon) + // and switch device to "pure" kiss TNC operation. Packets from PC will be transmitted normally. + +// Coordines should be in APRS decimal format DDDMM.SS for Longitude and DDMM.SS for latitude +#define _CALL "SR9WXP" +#define _SSID 0 +#define _LAT 4932.18 +#define _LATNS 'N' +#define _LON 01919.18 +#define _LONWE 'E' +#define _COMMENT "DigiW1 + WX = TXPower 1W = Pilsko, wyciag orczykowy VII, 1400m AMSL = sp8ebc@interia.pl" + +// You can use only one of these below defines to choose symbol. Meteo data are are always transmitted with blue WX symbol +//#define _SYMBOL_DIGI // uncomment if you want digi symbol(green star with D inside) +#define _SYMBOL_WIDE1_DIGI // uncomment if you want 'little' digi symbol (green star with digit 1 overlaid) +//#define _SYMBOL_HOUSE // uncomment if you want house symbol +//#define _SYMBOL_RXIGATE // uncomment if you want rxigate symbol (black diamond with R) +//#define _SYMBOL_IGATE // uncomment if you want igate symol (black diamond with I) +//#define _SYMBOL_SAILBOAT + +// Or you can keep commented all symbol defines and choose custom one based on data from APRS symbols table +//#define _SYMBOL_F '/' +//#define _SYMBOL_S '#' + +// Uncomment one of these two defines to choose what path You want. If you uncommend both of them or +// if you keep both commended path will be completely disabled. CALL-S>AKLPRZ:data +//#define _WIDE1_PATH // CALL-S>AKLPRZ,WIDE1-1:data +//#define _WIDE21_PATH // CALL-S>AKLPRZ,WIDE2-1:data + +// Comment this to disable beacon auto sending during startup (this can be risky if RF feedback occur) +#define _BCN_ON_STARTUP + +#define _WX_INTERVAL 4 // WX packet interval in minutes +#define _BCN_INTERVAL 124 // Own beacon interval in minutes + +#define _PTT_PUSHPULL // Uncomment this if you want PTT line to work as Push-pull instead of Open Drain +#define _SERIAL_BAUDRATE 9600 + +#define _DIGI_VISCOUS_DEALY 2 + +// Transmitting delay +#define _DELAY_BASE 14 // * 50ms. For example setting 10 gives 500msec delay. Maximum value is 20 +//#define _RANDOM_DELAY // adds random delay TO fixed time set by _DELAY_BASE. This additional time can be + // from 100ms up to 1 sec in 100ms steps. Values are drawn from samples going from ADC + // so it is better to use Unsquelched output in radio to provide much more randomness +//After waiting time declared above ParaTNC will check DCD (Data Carrier Detect) flag, which works as some +//kind of semaphore. If radio channel is not occupied by any other transmission TX will be keyed up immediately, +//otherwise software will wait for clear conditions. + +// Few IMPORTANT hints about setting transmit delay properly. +// +// Transmit delay is key parameter to maintain RF network free from packet losses and collisions. If your station will be +// installed on tall object, without any other digi's close to it, you can set _DELAY_BASE to very low value and disable +// _RANDOM_DELAY. If you wanna rather auxiliary station, witch should only fill gap in RF coverage in small area, then +// _DELAY_BASE parameter should be not less than 12 (600msec), the smallest range the higher _DELAY_BASE should be. +// Additionally for gapfillers (auxiliary stations) _RANDOM_DELAY schould be enabled. +// +// This delay will ensure that while other station will be transmitting repeated packets from mobile, Yours will keep +// always quiet and won't jam RF network. This greatly improve DCD based access to channel. Various controllers uses +// various lenght of preamble, some of them produce signal which might be impossible to decode by ParaTNC, so DCD +// is only one part of effective multiaccess to medium. + +/* ---------------------------- */ +/* MODBUS RTU CONFIGURATION */ + +// scaling coefficients are used as follows +// +// A * x ^ 2 + B * x + C +// real value = --------------------------- +// D +// +// because of that D cannot be set to zero +// +// scaling for temperature shall be set to get *10 temperature +// as an output of getter / 123 -> 12.3 oC +#define _RTU_SLAVE_SPEED 9600u +#define _RTU_SLAVE_PARITY 0 +#define _RTU_SLAVE_STOP_BITS 2 + +#define _RTU_SLAVE_ID_1 0x01 +#define _RTU_SLAVE_FUNC_1 0x03 +#define _RTU_SLAVE_ADDR_1 0x00 +#define _RTU_SLAVE_LENGHT_1 0x01 +#define _RTU_SLAVE_SCALING_A_1 0 +#define _RTU_SLAVE_SCALING_B_1 1 +#define _RTU_SLAVE_SCALING_C_1 0 +#define _RTU_SLAVE_SCALING_D_1 1 + +#define _RTU_SLAVE_ID_2 0x01 +#define _RTU_SLAVE_FUNC_2 0x03 +#define _RTU_SLAVE_ADDR_2 0x01 +//#define _RTU_SLAVE_LENGHT_2 0x01 +#define _RTU_SLAVE_SCALING_A_2 0 +#define _RTU_SLAVE_SCALING_B_2 1 +#define _RTU_SLAVE_SCALING_C_2 0 +#define _RTU_SLAVE_SCALING_D_2 1 + +#define _RTU_SLAVE_ID_3 0x01 +#define _RTU_SLAVE_FUNC_3 0x03 +#define _RTU_SLAVE_ADDR_3 0x02 +//#define _RTU_SLAVE_LENGHT_3 0x01 +#define _RTU_SLAVE_SCALING_A_3 0 +#define _RTU_SLAVE_SCALING_B_3 1 +#define _RTU_SLAVE_SCALING_C_3 0 +#define _RTU_SLAVE_SCALING_D_3 1 + +#define _RTU_SLAVE_ID_4 0x01 +#define _RTU_SLAVE_FUNC_4 0x03 +#define _RTU_SLAVE_ADDR_4 0x03 +//#define _RTU_SLAVE_LENGHT_4 0x01 +#define _RTU_SLAVE_SCALING_A_4 0 +#define _RTU_SLAVE_SCALING_B_4 1 +#define _RTU_SLAVE_SCALING_C_4 0 +#define _RTU_SLAVE_SCALING_D_4 1 + +#define _RTU_SLAVE_ID_5 0x00 +#define _RTU_SLAVE_FUNC_5 0x00 +#define _RTU_SLAVE_ADDR_5 0x03 +//#define _RTU_SLAVE_LENGHT_4 0x01 +#define _RTU_SLAVE_SCALING_A_5 0 +#define _RTU_SLAVE_SCALING_B_5 1 +#define _RTU_SLAVE_SCALING_C_5 0 +#define _RTU_SLAVE_SCALING_D_5 1 + + +#define _RTU_SLAVE_ID_6 0x00 +#define _RTU_SLAVE_FUNC_6 0x00 +#define _RTU_SLAVE_ADDR_6 0x00 +//#define _RTU_SLAVE_LENGHT_4 0x01 +#define _RTU_SLAVE_SCALING_A_6 0 +#define _RTU_SLAVE_SCALING_B_6 1 +#define _RTU_SLAVE_SCALING_C_6 0 +#define _RTU_SLAVE_SCALING_D_6 1 + +#define _RTU_SLAVE_TEMPERATURE_SOURCE 1 +#define _RTU_SLAVE_HUMIDITY_SOURCE 2 +//#define _RTU_SLAVE_PRESSURE_SOURCE 3 +//#define _RTU_SLAVE_WIND_DIRECTION_SORUCE 4 +//#define _RTU_SLAVE_WIND_SPEED_SOURCE 4 + + +/* MODBUS RTU CONFIGURATION */ +/* ---------------------------- */ + +// Do not touch this +#if defined (_SYMBOL_DIGI) && !defined (_SYMBOL_WIDE1_DIGI) && !defined (_SYMBOL_HOUSE) && !defined (_SYMOL_RXIGATE) &&\ + !defined (_SYMBOL_IGATE) +#define _SYMBOL_F '/' +#define _SYMBOL_S '#' +#elif !defined (_SYMBOL_DIGI) && defined (_SYMBOL_WIDE1_DIGI) && !defined (_SYMBOL_HOUSE) && !defined (_SYMOL_RXIGATE) &&\ + !defined (_SYMBOL_IGATE) +#define _SYMBOL_F '1' +#define _SYMBOL_S '#' +#elif !defined (_SYMBOL_DIGI) && !defined (_SYMBOL_WIDE1_DIGI) && defined (_SYMBOL_HOUSE) && !defined (_SYMOL_RXIGATE) &&\ + !defined (_SYMBOL_IGATE) +#define _SYMBOL_F '/' +#define _SYMBOL_S '-' +#elif !defined (_SYMBOL_DIGI) && !defined (_SYMBOL_WIDE1_DIGI) && !defined (_SYMBOL_HOUSE) && defined (_SYMOL_RXIGATE) &&\ + !defined (_SYMBOL_IGATE) +#define _SYMBOL_F 'I' +#define _SYMBOL_S '&' +#elif !defined (_SYMBOL_DIGI) && !defined (_SYMBOL_WIDE1_DIGI) && !defined (_SYMBOL_HOUSE) && !defined (_SYMOL_RXIGATE) &&\ + defined (_SYMBOL_IGATE) +#define _SYMBOL_F 'R' +#define _SYMBOL_S '&' +#elif !defined (_SYMBOL_DIGI) && !defined (_SYMBOL_WIDE1_DIGI) && !defined (_SYMBOL_HOUSE) && !defined (_SYMOL_RXIGATE) &&\ + !defined (_SYMBOL_IGATE) && defined(_SYMBOL_SAILBOAT) +#define _SYMBOL_F '/' +#define _SYMBOL_S 'Y' +#elif !defined (_SYMBOL_F) && !defined (_SYMBOL_S) +#error "Missing symbol configuration in station_config.h" +#elif defined (_SYMBOL_F) && defined (_SYMBOL_S) +#else +#error "Wrong symbol configuration in station_config.h" +#endif +//#if defined (_METEO) && !defined (_DIGI) +//#define _DIGI +//#endif + + +#if defined(_ANEMOMETER_TX20) && defined(_ANEMOMETER_ANALOGUE) +#error "You cannot use two anemometers at once!!!" +#endif + +#if defined(_MOBUS_RTU) && defined(_DAVIS_SERIAL) +#error "You cannot use modbus RTU devices and Davis weather station at once!!!" +#endif + +#if !defined(_ANEMOMETER_TX20) && !defined(_ANEMOMETER_ANALOGUE) && !defined(_UMB_MASTER) && defined(_METEO) +#define _ANEMOMETER_TX20 +#endif + +#endif /* STATION_CONFIG_H_ */ diff --git a/src/api.c b/src/api.c index b7fac03..eb76987 100644 --- a/src/api.c +++ b/src/api.c @@ -98,7 +98,7 @@ static void api_construct_url_status(api_endpoint_t endpoint) { static void api_callback(uint16_t http_code, char * content, uint16_t content_lenght) { - //http_client_close(); + http_client_close(); } diff --git a/src/config_data_default.c b/src/config_data_default.c index 8aeb8aa..f8cfa44 100644 --- a/src/config_data_default.c +++ b/src/config_data_default.c @@ -467,8 +467,8 @@ const config_data_rtu_t __attribute__((section(".config_section_default.rtu"))) const config_data_gsm_t __attribute__((section(".config_section_default.gsm"))) config_data_gsm_default = { .pin = "\0\0\0\0\0", - //.apn = "internet\0", // PlusGSM - .apn = "virgin-internet\0", // Virgin Mobile + .apn = "internet\0", // PlusGSM + //.apn = "virgin-internet\0", // Virgin Mobile .username = "\0", @@ -478,12 +478,12 @@ const config_data_gsm_t __attribute__((section(".config_section_default.gsm"))) // 78.88.56.14 //.api_base_url = "http://78.88.56.14:8080/", - .api_base_url = "http://157.25.103.93:22910/", + .api_base_url = "http://157.25.103.93:8080/", // 22910 //.api_base_url = "http://193.33.111.22:8080/meteo_backend", .api_station_name = "abakus", - .aprsis_enable = 1, + .aprsis_enable = 0, .aprsis_passcode = 16823, diff --git a/src/config_data_first.c b/src/config_data_first.c index dfd540a..1992d92 100644 --- a/src/config_data_first.c +++ b/src/config_data_first.c @@ -471,8 +471,8 @@ const config_data_rtu_t __attribute__((section(".config_section_first.rtu"))) co const config_data_gsm_t __attribute__((section(".config_section_first.gsm"))) config_data_gsm_first = { .pin = "\0\0\0\0\0", - //.apn = "internet\0", - .apn = "virgin-internet\0", + .apn = "internet\0", + //.apn = "virgin-internet\0", .username = "\0", @@ -480,12 +480,12 @@ const config_data_gsm_t __attribute__((section(".config_section_first.gsm"))) co .api_enable = 1, - .api_base_url = "http://157.25.103.93:22910/", + .api_base_url = "http://157.25.103.93:8080/", //.api_base_url = "http://193.33.111.22:8080/meteo_backend", .api_station_name = "abakus", - .aprsis_enable = 1, + .aprsis_enable = 0, .aprsis_passcode = 16823, diff --git a/src/config_data_second.c b/src/config_data_second.c index 38f6863..06b5ad6 100644 --- a/src/config_data_second.c +++ b/src/config_data_second.c @@ -465,8 +465,8 @@ const config_data_rtu_t __attribute__((section(".config_section_second.rtu"))) c const config_data_gsm_t __attribute__((section(".config_section_second.gsm"))) config_data_gsm_second = { .pin = "\0\0\0\0\0", - //.apn = "internet\0", - .apn = "virgin-internet\0", + .apn = "internet\0", + //.apn = "virgin-internet\0", .username = "\0", @@ -474,12 +474,12 @@ const config_data_gsm_t __attribute__((section(".config_section_second.gsm"))) c .api_enable = 1, - .api_base_url = "http://157.25.103.93:22910/", + .api_base_url = "http://157.25.103.93:8080/", //.api_base_url = "http://193.33.111.22:8080/meteo_backend", .api_station_name = "abakus", - .aprsis_enable = 1, + .aprsis_enable = 0, .aprsis_passcode = 16823, diff --git a/src/it_handlers.c b/src/it_handlers.c index 9faa50e..7963296 100644 --- a/src/it_handlers.c +++ b/src/it_handlers.c @@ -19,6 +19,8 @@ #include #include "cmsis/stm32l4xx/system_stm32l4xx.h" #include "pwr_save.h" + +uint8_t it_handlers_inhibit_radiomodem_dcd_led = 0; #endif #include "drivers/dallas.h" @@ -143,6 +145,10 @@ void SysTick_Handler(void) { delay_decrement_counter(); + if (it_handlers_inhibit_radiomodem_dcd_led == 0) { + led_control_led1_upper(main_ax25.dcd); + } + } void USART1_IRQHandler(void) { @@ -255,7 +261,6 @@ void TIM7_IRQHandler(void) { // io_ext_watchdog_service(); AdcValue = (short int)(( AdcBuffer[0] + AdcBuffer[1] + AdcBuffer[2] + AdcBuffer[3]) >> 1); AFSK_ADC_ISR(&main_afsk, (AdcValue - 4095) ); - led_control_led1_upper(main_ax25.dcd); ASC = 0; if (ASC2++ == 2) { diff --git a/src/main.c b/src/main.c index 5069f6b..3a9111c 100644 --- a/src/main.c +++ b/src/main.c @@ -897,6 +897,10 @@ int main(int argc, char* argv[]){ #ifdef STM32L471xx if (main_config_data_mode->gsm == 1) { + it_handlers_inhibit_radiomodem_dcd_led = 1; + + led_control_led1_upper(false); + gsm_sim800_init(&main_gsm_state, 1); http_client_init(&main_gsm_state, main_gsm_srl_ctx_ptr, 0); @@ -1212,9 +1216,13 @@ int main(int argc, char* argv[]){ #ifdef STM32L471xx if (main_config_data_mode->gsm == 1) { + if (http_client_connection_errors > HTTP_CLIENT_MAX_CONNECTION_ERRORS) { + NVIC_SystemReset(); + } + gsm_sim800_poolers_one_minute(main_gsm_srl_ctx_ptr, &main_gsm_state); - aprsis_connect_and_login_default(1); + //aprsis_connect_and_login_default(1); // if (gsm_sim800_gprs_ready == 1) { // @@ -1241,6 +1249,13 @@ int main(int argc, char* argv[]){ #ifdef STM32L471xx if (main_config_data_mode->gsm == 1) { + if (gsm_sim800_gprs_ready == 1) { + led_control_led1_upper(true); + } + else { + led_control_led1_upper(false); + } + if (gsm_sim800_gprs_ready == 1) { /*** * @@ -1328,7 +1343,6 @@ int main(int argc, char* argv[]){ #ifdef STM32L471xx if (main_config_data_mode->gsm == 1) { - packet_tx_tcp_handler(); } #endif diff --git a/src/packet_tx_handler.c b/src/packet_tx_handler.c index 49ae122..9f9e51e 100644 --- a/src/packet_tx_handler.c +++ b/src/packet_tx_handler.c @@ -109,19 +109,19 @@ void packet_tx_tcp_handler(void) { aprsis_return_t aprsis_result = APRSIS_UNKNOWN; if ((packet_tx_trigger_tcp & APRSIS_TRIGGER_METEO) != 0) { - - if (aprsis_connected == 0) { - aprsis_result = aprsis_connect_and_login_default(0); - - if (aprsis_result == APRSIS_OK) { - // send APRS-IS frame, if APRS-IS is not connected this function will return immediately - aprsis_send_wx_frame(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); - } - } - else { - // send APRS-IS frame, if APRS-IS is not connected this function will return immediately - aprsis_send_wx_frame(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); - } + // TODO: fixme +// if (aprsis_connected == 0) { +// aprsis_result = aprsis_connect_and_login_default(0); +// +// if (aprsis_result == APRSIS_OK) { +// // send APRS-IS frame, if APRS-IS is not connected this function will return immediately +// aprsis_send_wx_frame(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); +// } +// } +// else { +// // send APRS-IS frame, if APRS-IS is not connected this function will return immediately +// aprsis_send_wx_frame(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); +// } // clear the bit @@ -129,15 +129,16 @@ void packet_tx_tcp_handler(void) { } else if ((packet_tx_trigger_tcp & API_TRIGGER_STATUS) != 0) { - // check if APRS-IS is connected - if (aprsis_connected != 0) { - // disconnect it before call to API - this disconnection has blocking IO - aprsis_disconnect(); - - // remember to reconnect APRSIS after all API comm will be done - packet_tx_trigger_tcp |= RECONNECT_APRSIS; - - } + // TODO: fixme +// // check if APRS-IS is connected +// if (aprsis_connected != 0) { +// // disconnect it before call to API - this disconnection has blocking IO +// aprsis_disconnect(); +// +// // remember to reconnect APRSIS after all API comm will be done +// packet_tx_trigger_tcp |= RECONNECT_APRSIS; +// +// } // send status (async) api_send_json_status(); @@ -147,15 +148,16 @@ void packet_tx_tcp_handler(void) { } else if ((packet_tx_trigger_tcp & API_TRIGGER_METEO) != 0) { - // check if APRS-IS is connected - if (aprsis_connected != 0) { - // disconnect it before call to API - this disconnection has blocking IO - aprsis_disconnect(); - - // remember to reconnect APRSIS after all API comm will be done - packet_tx_trigger_tcp |= RECONNECT_APRSIS; - - } + // TODO: fixme +// // check if APRS-IS is connected +// if (aprsis_connected != 0) { +// // disconnect it before call to API - this disconnection has blocking IO +// aprsis_disconnect(); +// +// // remember to reconnect APRSIS after all API comm will be done +// packet_tx_trigger_tcp |= RECONNECT_APRSIS; +// +// } api_send_json_measuremenets(); @@ -163,11 +165,12 @@ void packet_tx_tcp_handler(void) { packet_tx_trigger_tcp ^= API_TRIGGER_METEO; } else if ((packet_tx_trigger_tcp & RECONNECT_APRSIS) != 0) { - result = aprsis_connect_and_login_default(1); - - if (result == APRSIS_OK) { + // TODO: fixme +// result = aprsis_connect_and_login_default(1); +// +// if (result == APRSIS_OK) { packet_tx_trigger_tcp ^= RECONNECT_APRSIS; - } +// } } #endif } @@ -213,7 +216,8 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con #ifdef STM32L471xx // send wx packet to APRSIS one minute before radio transmission if (packet_tx_meteo_counter == packet_tx_meteo_interval - 1 && packet_tx_meteo_interval != 0) { - packet_tx_trigger_tcp |= APRSIS_TRIGGER_METEO; + // TODO: fixme + //packet_tx_trigger_tcp |= APRSIS_TRIGGER_METEO; //aprsis_send_wx_frame(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); } diff --git a/system/include/http_client/http_client.h b/system/include/http_client/http_client.h index b1d8be4..0d7a9af 100644 --- a/system/include/http_client/http_client.h +++ b/system/include/http_client/http_client.h @@ -27,6 +27,8 @@ #define HTTP_CLIENT_RET_TCPIP_BSY 2 #define HTTP_CLIENT_RET_WRONG_URL 3 +#define HTTP_CLIENT_MAX_CONNECTION_ERRORS 8 + typedef void(*http_client_response_available_t)(uint16_t http_code, char * content, uint16_t content_lenght); /** @@ -47,6 +49,8 @@ extern uint16_t http_client_content_lenght; */ extern uint16_t http_client_max_content_ln; +extern uint8_t http_client_connection_errors; + void http_client_init(gsm_sim800_state_t * state, srl_context_t * serial_context, uint8_t ignore_content_on_http_error); uint8_t http_client_async_get(char * url, uint8_t url_ln, uint16_t response_ln_limit, uint8_t force_disconnect_on_busy, http_client_response_available_t callback_on_response); uint8_t http_client_async_post(char * url, uint8_t url_ln, char * data_to_post, uint16_t data_ln, uint8_t force_disconnect_on_busy, http_client_response_available_t callback_on_response); diff --git a/system/src/http_client/http_client.c b/system/src/http_client/http_client.c index c9075c1..48e293a 100644 --- a/system/src/http_client/http_client.c +++ b/system/src/http_client/http_client.c @@ -52,6 +52,8 @@ srl_context_t * http_client_deticated_serial_context; */ uint8_t http_client_ignore_content_on_http_error; +uint8_t http_client_connection_errors = 0; + /** * Default port for http */ @@ -283,7 +285,9 @@ uint8_t http_client_async_get(char * url, uint8_t url_ln, uint16_t response_ln_l gsm_sim800_tcpip_async_receive(http_client_deticated_serial_context, http_client_deticated_sim800_state, http_client_rx_done_callback, 5000u, http_client_response_done_callback /** FIXME */); } } - + else { + http_client_connection_errors++; + } } else if (split_point == 0xFFFF) { out = HTTP_CLIENT_RET_WRONG_URL; @@ -386,6 +390,9 @@ uint8_t http_client_async_post(char * url, uint8_t url_ln, char * data_to_post, } } + else { + http_client_connection_errors++; + } return out; }