diff --git a/doc/eclipse_debugger_launch/ParaMETEO-STM32L476RG.launch b/doc/eclipse_debugger_launch/ParaMETEO-STM32L476RG.launch
index c6c6350..7f8b913 100644
--- a/doc/eclipse_debugger_launch/ParaMETEO-STM32L476RG.launch
+++ b/doc/eclipse_debugger_launch/ParaMETEO-STM32L476RG.launch
@@ -58,6 +58,6 @@
-
+
diff --git a/include/station_config_test_igate.h b/include/station_config_test_igate.h
new file mode 100644
index 0000000..095e259
--- /dev/null
+++ b/include/station_config_test_igate.h
@@ -0,0 +1,338 @@
+/*
+ * 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
+
+/******** 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
+//!< ---------------------------
+
+
+//!< -------------------------------------
+//!< BASIC CONFIG - CALLSIGN, LOCATION etc
+
+//#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 "SP8EBC"
+#define _SSID 0
+#define _LAT 4948.81
+#define _LATNS 'N'
+#define _LON 01903.50
+#define _LONWE 'E'
+#define _COMMENT "testing"
+
+// 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 5 // 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 19 // * 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.
+
+//!< BASIC CONFIG - CALLSIGN, LOCATION etc
+//!< -------------------------------------
+
+// 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.
+
+//!< -------
+//!< BUTTONS
+
+#define _BUTTON_ONE_LEFT BUTTON_FUNCTION_SEND_BEACON
+#define _BUTTON_TWO_RIGHT BUTTON_FUNCION_RESET_GSM_GPRS
+
+//!< BUTTONS
+//!< -------
+
+//!< ------------------------
+//!< 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
+//!< ------------------------
+
+//!< -----------------------
+//!< GSM and APRS-IS and API
+
+#define _GSM_APN_NAME "internet\0"
+#define _GSM_APN_USER "internet\0"
+#define _GSM_APN_PASS "internet\0"
+
+//#define _GSM_API_ENABLE
+#define _GSM_API_BASE_URL "http://157.25.103.93:22910/"
+#define _GSM_API_STATION_NAME "bielsko"
+
+#define _GSM_APRSIS_ENABLE
+#define _GSM_APRSIS_PASSCODE 23220
+#define _GSM_APRSIS_PORT 14580
+#define _GSM_APRSIS_ADDRES "euro.aprs2.net\0"
+//#define _GSM_APRSIS_ADDRES "78.88.56.14\0"
+
+
+//!< GSM and APRS-IS and API
+//!< -----------------------
+
+//#define ENG1 ENGINEERING1_EARLY_TX_ASSERT | ENGINEERING1_PWRCYCLE_GSM_ON_NOCOMM
+#define ENG1 ENGINEERING1_INH_WX_PWR_HNDL
+//#define ENG2 ENGINEERING2_POWER_CYCLE_R
+
+// 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/main.c b/src/main.c
index f845ff4..8427547 100644
--- a/src/main.c
+++ b/src/main.c
@@ -209,10 +209,10 @@ main_usart_mode_t main_usart1_kiss_mode = USART_MODE_UNDEF;
//! operation mode of USART2 (RS485)
main_usart_mode_t main_usart2_wx_mode = USART_MODE_UNDEF;
-//!
+//! function configuration for left button on ParaMETEO
configuration_button_function_t main_button_one_left;
-//!
+//! function configuration for right button on ParaMETEO
configuration_button_function_t main_button_two_right;
//! a pointer to KISS context
@@ -282,7 +282,11 @@ volatile int i = 0;
#endif
#if defined(PARAMETEO)
+//!< Trigger some reinitnialization after waking up from deep sleep
uint8_t main_woken_up = 0;
+
+//!< Triggers additional check if ADC has properly reinitialized and conversion is working
+uint8_t main_check_adc = 0;
#endif
char after_tx_lock;
@@ -1149,15 +1153,17 @@ int main(int argc, char* argv[]){
ax25_new_msg_rx_flag = 0;
main_ax25.dcd = false;
- DA_Init();
+ //DA_Init();
ADCStartConfig();
DACStartConfig();
AFSK_Init(&main_afsk);
ax25_init(&main_ax25, &main_afsk, 0, message_callback, 0);
- TimerConfig();
+ //TimerConfig();
main_woken_up = 0;
+ main_check_adc = 1;
+
main_set_monitor(1);
}
#endif
@@ -1214,9 +1220,6 @@ int main(int argc, char* argv[]){
gsm_sim800_tx_done_event_handler(main_gsm_srl_ctx_ptr, &main_gsm_state);
}
-// gsm_sim800_engineering_enable(main_gsm_srl_ctx_ptr, &main_gsm_state);
-// gsm_sim800_engineering_request_data(main_gsm_srl_ctx_ptr, &main_gsm_state);
- //gsm_sim800_engineering_disable(main_gsm_srl_ctx_ptr, &main_gsm_state);
}
#endif
@@ -1542,6 +1545,12 @@ int main(int argc, char* argv[]){
}
#ifdef PARAMETEO
+ if (main_check_adc == 1) {
+ AD_Restart();
+
+ main_check_adc = 0;
+ }
+
// inhibit any power save switching when modem transmits data
if (!main_afsk.sending && main_woken_up == 0) {
pwr_save_pooling_handler(main_config_data_mode, main_config_data_basic, packet_tx_get_minutes_to_next_wx(), rte_main_average_battery_voltage);
diff --git a/system/include/aprs/adc.h b/system/include/aprs/adc.h
index 2362fb9..9dd9a69 100644
--- a/system/include/aprs/adc.h
+++ b/system/include/aprs/adc.h
@@ -11,7 +11,7 @@ extern "C"
/*******************************************************************************************************/
/*********************************************************************************************************************/
-void AD_Init(Afsk *af);
+void AD_Restart(void);
/*********************************************************************************************************************/
/*********************************************************************************************************************/
diff --git a/system/src/aprs/adc.c b/system/src/aprs/adc.c
index 75dc699..0e42299 100644
--- a/system/src/aprs/adc.c
+++ b/system/src/aprs/adc.c
@@ -13,50 +13,26 @@
#include
#include
-#define ADC1_DR_Address ((uint32_t)0x4001244C)
-
-
Afsk *adc_afsk;
-volatile uint16_t ADCValue[16];
-
uint16_t max_value;
uint32_t samplecount;
-
-
-
/*********************************************************************************************************************/
-void AD_Init(Afsk *af) {
+void AD_Restart(void) {
/*********************************************************************************************************************/
-// GPIO_InitTypeDef GPIO_InitStructure;
-// NVIC_InitTypeDef NVIC_InitStructure;
-//
-// //Dolacz zegar do GPIOA, ADC1
-// RCC->APB2ENR |= RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1;
-// RCC_ADCCLKConfig(RCC_PCLK2_Div6);
-//
-// //Dolacz zegar do DMA1
-// RCC->AHBENR |= RCC_AHBPeriph_DMA1;
-//
-// //Konfiguracja portu
-// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;
-// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
-// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
-// GPIO_Init(GPIOA, &GPIO_InitStructure);
-//
-// AD_Reset();
-//
-// adc_afsk = af;
-//
-// //Przerwania DMA1 Kanal1
-// NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
-// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
-// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
-// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
-// NVIC_Init(&NVIC_InitStructure);
+ // check if conversion is done or not
+ if ((ADC1->ISR & ADC_ISR_EOC) == 0) {
+ // stop adc conversion
+ ADC1->CR |= ADC_CR_ADSTP;
+ // wait for conversion to shutdown
+ while((ADC1->ISR & ADC_CR_ADSTART) == ADC_CR_ADSTART);
+
+ // start ADC back again
+ ADC1->CR |= ADC_CR_ADSTART;
+ }
}