kopia lustrzana https://github.com/SP8EBC/ParaTNC
sim800, tcp, new way of disconnecting
rodzic
c9cc5b6109
commit
dbf464eb21
|
@ -15,19 +15,17 @@
|
||||||
|
|
||||||
#define _METEO // Enable meteo station
|
#define _METEO // Enable meteo station
|
||||||
//#define _DIGI // Enable WIDE1-1 digipeater
|
//#define _DIGI // Enable WIDE1-1 digipeater
|
||||||
|
//#define _DIGI_VISCOUS
|
||||||
//#define _DIGI_ONLY_789 // Limit digipeater to handle only -7, -8 and -9 SSIDs
|
//#define _DIGI_ONLY_789 // Limit digipeater to handle only -7, -8 and -9 SSIDs
|
||||||
//#define _VICTRON // Enable support for Victron VE.Direct protocol
|
|
||||||
|
|
||||||
#define _GSM // only for ParaMETEO
|
//#define _VICTRON // Enable support for Victron VE.Direct protocol
|
||||||
|
//#define _GSM // only for ParaMETEO
|
||||||
|
|
||||||
#define _WX_DOUBLE_TRANSMIT
|
#define _WX_DOUBLE_TRANSMIT
|
||||||
|
|
||||||
/* MODES OF OPERATION */
|
/* MODES OF OPERATION */
|
||||||
/* ------------------ */
|
/* ------------------ */
|
||||||
|
|
||||||
//#define PARATNC_HWREV_C
|
|
||||||
#define PARAMETEO
|
|
||||||
|
|
||||||
/* ---------------------------- */
|
/* ---------------------------- */
|
||||||
/* WEATHER/METEO CONFIGURATION */
|
/* WEATHER/METEO CONFIGURATION */
|
||||||
|
|
||||||
|
@ -130,11 +128,13 @@
|
||||||
#define _BCN_ON_STARTUP
|
#define _BCN_ON_STARTUP
|
||||||
|
|
||||||
#define _WX_INTERVAL 5 // WX packet interval in minutes
|
#define _WX_INTERVAL 5 // WX packet interval in minutes
|
||||||
#define _BCN_INTERVAL 45 // Own beacon interval in minutes
|
#define _BCN_INTERVAL 125 // 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 _PTT_PUSHPULL // Uncomment this if you want PTT line to work as Push-pull instead of Open Drain
|
||||||
#define _SERIAL_BAUDRATE 9600
|
#define _SERIAL_BAUDRATE 9600
|
||||||
|
|
||||||
|
#define _DIGI_VISCOUS_DEALY 2
|
||||||
|
|
||||||
// Transmitting delay
|
// Transmitting delay
|
||||||
#define _DELAY_BASE 20 // * 50ms. For example setting 10 gives 500msec delay. Maximum value is 20
|
#define _DELAY_BASE 20 // * 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
|
//#define _RANDOM_DELAY // adds random delay TO fixed time set by _DELAY_BASE. This additional time can be
|
||||||
|
@ -271,13 +271,6 @@
|
||||||
//#define _DIGI
|
//#define _DIGI
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
#if defined(PARATNC_HWREV_A) && (defined (_METEO) || defined (_DALLAS_AS_TELEM)) && !defined(_DALLAS_SPLIT_PIN)
|
|
||||||
#define _DALLAS_SPLIT_PIN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(PARATNC_HWREV_B) && (defined (_METEO) || defined (_DALLAS_AS_TELEM)) && !defined(_DALLAS_SPLIT_PIN)
|
|
||||||
#define _DALLAS_SPLIT_PIN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(_ANEMOMETER_TX20) && defined(_ANEMOMETER_ANALOGUE)
|
#if defined(_ANEMOMETER_TX20) && defined(_ANEMOMETER_ANALOGUE)
|
||||||
#error "You cannot use two anemometers at once!!!"
|
#error "You cannot use two anemometers at once!!!"
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
/*
|
|
||||||
* station_config_target_hw.h
|
|
||||||
*
|
|
||||||
* Created on: May 30, 2021
|
|
||||||
* Author: mateusz
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef STATION_CONFIG_TARGET_HW_H_
|
|
||||||
#define STATION_CONFIG_TARGET_HW_H_
|
|
||||||
|
|
||||||
//#define PARATNC_HWREV_A
|
|
||||||
//#define PARATNC_HWREV_B
|
|
||||||
//#define PARATNC_HWREV_C
|
|
||||||
#define PARAMETEO
|
|
||||||
|
|
||||||
#ifdef PARAMETEO
|
|
||||||
// those defines and an undef are only required for shitty Eclipse indexer to see anything from STM32L471xx target
|
|
||||||
#define STM32L471xx
|
|
||||||
#define USE_FULL_LL_DRIVER
|
|
||||||
#undef STM32F10X_MD_VL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* STATION_CONFIG_TARGET_HW_H_ */
|
|
|
@ -11,14 +11,17 @@
|
||||||
#include "stdint.h"
|
#include "stdint.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
extern volatile uint16_t delay_cnt;
|
extern volatile int32_t delay_cnt;
|
||||||
|
|
||||||
void delay_set(uint16_t delay_in_msecs, uint8_t randomize);
|
void delay_set(uint16_t delay_in_msecs, uint8_t randomize);
|
||||||
void delay_fixed(uint16_t delay_in_msecs);
|
void delay_fixed(int32_t delay_in_msecs);
|
||||||
uint32_t delay_fixed_with_count(uint16_t delay_in_msecs);
|
uint32_t delay_fixed_with_count(int32_t delay_in_msecs);
|
||||||
void delay_from_preset(void);
|
void delay_from_preset(void);
|
||||||
void delay_random(void);
|
void delay_random(void);
|
||||||
|
|
||||||
|
void delay_stop();
|
||||||
|
void delay_start();
|
||||||
|
|
||||||
inline void delay_decrement_counter(void) {
|
inline void delay_decrement_counter(void) {
|
||||||
if (delay_cnt > 0)
|
if (delay_cnt > 0)
|
||||||
delay_cnt -= SYSTICK_TICKS_PERIOD;
|
delay_cnt -= SYSTICK_TICKS_PERIOD;
|
||||||
|
|
10
include/io.h
10
include/io.h
|
@ -21,6 +21,8 @@
|
||||||
#include <stm32l4xx.h>
|
#include <stm32l4xx.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void io_uart_init(void);
|
||||||
|
|
||||||
void io_oc_init(void);
|
void io_oc_init(void);
|
||||||
void io_oc_output_low(void);
|
void io_oc_output_low(void);
|
||||||
void io_oc_output_hiz(void);
|
void io_oc_output_hiz(void);
|
||||||
|
@ -124,6 +126,14 @@ inline void io___cntrl_gprs_pwrkey_release() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void io___cntrl_gprs_dtr_low() {
|
||||||
|
GPIOB->BSRR |= GPIO_BSRR_BR8;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void io___cntrl_gprs_dtr_high() {
|
||||||
|
GPIOB->BSRR |= GPIO_BSRR_BS8;
|
||||||
|
}
|
||||||
|
|
||||||
inline uint8_t io_get_cntrl_vbat_c(void) {
|
inline uint8_t io_get_cntrl_vbat_c(void) {
|
||||||
uint8_t out = 0;
|
uint8_t out = 0;
|
||||||
|
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
#include "drivers/serial.h"
|
#include "drivers/serial.h"
|
||||||
#include "config_data.h"
|
#include "config_data.h"
|
||||||
|
|
||||||
#define SW_VER "EA05"
|
#define SW_VER "EA06"
|
||||||
#define SW_DATE "09052022"
|
#define SW_DATE "14052022"
|
||||||
|
|
||||||
#define SYSTICK_TICKS_PER_SECONDS 100
|
#define SYSTICK_TICKS_PER_SECONDS 100
|
||||||
#define SYSTICK_TICKS_PERIOD 10
|
#define SYSTICK_TICKS_PERIOD 10
|
||||||
|
|
15
src/delay.c
15
src/delay.c
|
@ -7,13 +7,13 @@
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
uint16_t preset_delay_msecs = 0;
|
int32_t preset_delay_msecs = 0;
|
||||||
uint8_t preset_use_random = 0;
|
uint8_t preset_use_random = 0;
|
||||||
|
|
||||||
// counter decrement in Systick handler
|
// counter decrement in Systick handler
|
||||||
volatile uint16_t delay_cnt = 0;
|
volatile int32_t delay_cnt = 0;
|
||||||
|
|
||||||
void delay_fixed(uint16_t delay_in_msecs) {
|
void delay_fixed(int32_t delay_in_msecs) {
|
||||||
|
|
||||||
delay_cnt = delay_in_msecs;
|
delay_cnt = delay_in_msecs;
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ void delay_fixed(uint16_t delay_in_msecs) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t delay_fixed_with_count(uint16_t delay_in_msecs) {
|
uint32_t delay_fixed_with_count(int32_t delay_in_msecs) {
|
||||||
|
|
||||||
uint32_t ret = 0;
|
uint32_t ret = 0;
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ void delay_random(void) {
|
||||||
uint16_t sample = main_get_adc_sample();
|
uint16_t sample = main_get_adc_sample();
|
||||||
|
|
||||||
// random element of delay value could vary from 0 to 300msecs in 20msec steps
|
// random element of delay value could vary from 0 to 300msecs in 20msec steps
|
||||||
delay_cnt = (uint16_t)(preset_delay_msecs / 4) + (sample % 15) * 20;
|
delay_cnt = (int32_t)(preset_delay_msecs / 4) + (sample % 15) * 20;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,11 +60,12 @@ void delay_from_preset(void) {
|
||||||
|
|
||||||
delay_cnt = preset_delay_msecs;
|
delay_cnt = preset_delay_msecs;
|
||||||
|
|
||||||
while(delay_cnt > (uint16_t)0);
|
|
||||||
|
while(delay_cnt > (int32_t)0);
|
||||||
|
|
||||||
if (preset_use_random == 1) {
|
if (preset_use_random == 1) {
|
||||||
delay_random();
|
delay_random();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
95
src/io.c
95
src/io.c
|
@ -35,6 +35,101 @@ static uint8_t io_vbatt_history_it = 0;
|
||||||
#define MINIMUM_SENSEFUL_VBATT_VOLTAGE 512u
|
#define MINIMUM_SENSEFUL_VBATT_VOLTAGE 512u
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
void io_uart_init(void) {
|
||||||
|
|
||||||
|
#if defined(STM32F10X_MD_VL)
|
||||||
|
|
||||||
|
// Configure I/O pins for USART1 (Kiss modem)
|
||||||
|
Configure_GPIO(GPIOA,10,PUD_INPUT); // RX
|
||||||
|
Configure_GPIO(GPIOA,9,AFPP_OUTPUT_2MHZ); // TX
|
||||||
|
|
||||||
|
// Configure I/O pins for USART2 (wx meteo comm)
|
||||||
|
Configure_GPIO(GPIOA,3,PUD_INPUT); // RX
|
||||||
|
Configure_GPIO(GPIOA,2,AFPP_OUTPUT_2MHZ); // TX
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(STM32F10X_MD_VL)
|
||||||
|
Configure_GPIO(GPIOA,8,GPPP_OUTPUT_2MHZ); // re/te
|
||||||
|
GPIO_ResetBits(GPIOA, GPIO_Pin_8);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(STM32L471xx)
|
||||||
|
// USART1 - KISS
|
||||||
|
GPIO_InitTypeDef.Mode = LL_GPIO_MODE_ALTERNATE;
|
||||||
|
GPIO_InitTypeDef.Pin = LL_GPIO_PIN_10;
|
||||||
|
GPIO_InitTypeDef.Pull = LL_GPIO_PULL_NO;
|
||||||
|
GPIO_InitTypeDef.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
|
||||||
|
GPIO_InitTypeDef.Alternate = LL_GPIO_AF_7;
|
||||||
|
GPIO_InitTypeDef.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
||||||
|
LL_GPIO_Init(GPIOA, &GPIO_InitTypeDef); // RX
|
||||||
|
|
||||||
|
GPIO_InitTypeDef.Mode = LL_GPIO_MODE_ALTERNATE;
|
||||||
|
GPIO_InitTypeDef.Pin = LL_GPIO_PIN_9;
|
||||||
|
GPIO_InitTypeDef.Pull = LL_GPIO_PULL_NO;
|
||||||
|
GPIO_InitTypeDef.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
|
||||||
|
GPIO_InitTypeDef.Alternate = LL_GPIO_AF_7;
|
||||||
|
GPIO_InitTypeDef.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
||||||
|
LL_GPIO_Init(GPIOA, &GPIO_InitTypeDef); // TX
|
||||||
|
|
||||||
|
// USART2 - METEO
|
||||||
|
GPIO_InitTypeDef.Mode = LL_GPIO_MODE_ALTERNATE;
|
||||||
|
GPIO_InitTypeDef.Pin = LL_GPIO_PIN_3;
|
||||||
|
GPIO_InitTypeDef.Pull = LL_GPIO_PULL_NO;
|
||||||
|
GPIO_InitTypeDef.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
|
||||||
|
GPIO_InitTypeDef.Alternate = LL_GPIO_AF_7;
|
||||||
|
GPIO_InitTypeDef.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
||||||
|
LL_GPIO_Init(GPIOA, &GPIO_InitTypeDef); // RX
|
||||||
|
|
||||||
|
GPIO_InitTypeDef.Mode = LL_GPIO_MODE_ALTERNATE;
|
||||||
|
GPIO_InitTypeDef.Pin = LL_GPIO_PIN_2;
|
||||||
|
GPIO_InitTypeDef.Pull = LL_GPIO_PULL_NO;
|
||||||
|
GPIO_InitTypeDef.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
|
||||||
|
GPIO_InitTypeDef.Alternate = LL_GPIO_AF_7;
|
||||||
|
GPIO_InitTypeDef.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
||||||
|
LL_GPIO_Init(GPIOA, &GPIO_InitTypeDef); // TX
|
||||||
|
|
||||||
|
// USART3 - GSM
|
||||||
|
GPIO_InitTypeDef.Mode = LL_GPIO_MODE_ALTERNATE; // LL_GPIO_MODE_ALTERNATE
|
||||||
|
GPIO_InitTypeDef.Pin = LL_GPIO_PIN_10;
|
||||||
|
GPIO_InitTypeDef.Pull = LL_GPIO_PULL_NO;
|
||||||
|
GPIO_InitTypeDef.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
|
||||||
|
GPIO_InitTypeDef.Alternate = LL_GPIO_AF_7;
|
||||||
|
GPIO_InitTypeDef.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
||||||
|
LL_GPIO_Init(GPIOB, &GPIO_InitTypeDef); // TX
|
||||||
|
|
||||||
|
GPIO_InitTypeDef.Mode = LL_GPIO_MODE_ALTERNATE; // LL_GPIO_MODE_ALTERNATE
|
||||||
|
GPIO_InitTypeDef.Pin = LL_GPIO_PIN_11;
|
||||||
|
GPIO_InitTypeDef.Pull = LL_GPIO_PULL_NO;
|
||||||
|
GPIO_InitTypeDef.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
|
||||||
|
GPIO_InitTypeDef.Alternate = LL_GPIO_AF_7;
|
||||||
|
GPIO_InitTypeDef.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
||||||
|
LL_GPIO_Init(GPIOB, &GPIO_InitTypeDef); // RX
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(STM32L471xx)
|
||||||
|
GPIO_InitTypeDef.Mode = LL_GPIO_MODE_OUTPUT;
|
||||||
|
GPIO_InitTypeDef.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
||||||
|
GPIO_InitTypeDef.Pin = LL_GPIO_PIN_2;
|
||||||
|
GPIO_InitTypeDef.Pull = LL_GPIO_PULL_NO;
|
||||||
|
GPIO_InitTypeDef.Speed = LL_GPIO_SPEED_FREQ_MEDIUM;
|
||||||
|
GPIO_InitTypeDef.Alternate = LL_GPIO_AF_7;
|
||||||
|
LL_GPIO_Init(GPIOA, &GPIO_InitTypeDef); // RE-TE
|
||||||
|
|
||||||
|
GPIO_InitTypeDef.Mode = LL_GPIO_MODE_OUTPUT;
|
||||||
|
GPIO_InitTypeDef.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
||||||
|
GPIO_InitTypeDef.Pin = LL_GPIO_PIN_8;
|
||||||
|
GPIO_InitTypeDef.Pull = LL_GPIO_PULL_NO;
|
||||||
|
GPIO_InitTypeDef.Speed = LL_GPIO_SPEED_FREQ_MEDIUM;
|
||||||
|
GPIO_InitTypeDef.Alternate = LL_GPIO_AF_7;
|
||||||
|
LL_GPIO_Init(GPIOB, &GPIO_InitTypeDef); // DTR = Disconnect
|
||||||
|
|
||||||
|
io___cntrl_gprs_dtr_high();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void io_oc_init(void) {
|
void io_oc_init(void) {
|
||||||
#ifdef STM32F10X_MD_VL
|
#ifdef STM32F10X_MD_VL
|
||||||
GPIO_InitTypeDef GPIO_InitStructure;
|
GPIO_InitTypeDef GPIO_InitStructure;
|
||||||
|
|
|
@ -177,8 +177,9 @@ void I2C1_ER_IRQHandler(void) {
|
||||||
|
|
||||||
void TIM2_IRQHandler( void ) {
|
void TIM2_IRQHandler( void ) {
|
||||||
TIM2->SR &= ~(1<<0);
|
TIM2->SR &= ~(1<<0);
|
||||||
if (delay_5us > 0)
|
if (delay_5us > 0) {
|
||||||
delay_5us--;
|
delay_5us--;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
82
src/main.c
82
src/main.c
|
@ -546,86 +546,8 @@ int main(int argc, char* argv[]){
|
||||||
// waiting for 1 second to count number of ticks when the CPU is idle
|
// waiting for 1 second to count number of ticks when the CPU is idle
|
||||||
main_idle_cpu_ticks = delay_fixed_with_count(1000);
|
main_idle_cpu_ticks = delay_fixed_with_count(1000);
|
||||||
|
|
||||||
#if defined(STM32F10X_MD_VL)
|
// initializing UART gpio pins
|
||||||
|
io_uart_init();
|
||||||
// Configure I/O pins for USART1 (Kiss modem)
|
|
||||||
Configure_GPIO(GPIOA,10,PUD_INPUT); // RX
|
|
||||||
Configure_GPIO(GPIOA,9,AFPP_OUTPUT_2MHZ); // TX
|
|
||||||
|
|
||||||
// Configure I/O pins for USART2 (wx meteo comm)
|
|
||||||
Configure_GPIO(GPIOA,3,PUD_INPUT); // RX
|
|
||||||
Configure_GPIO(GPIOA,2,AFPP_OUTPUT_2MHZ); // TX
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(STM32L471xx)
|
|
||||||
// USART1 - KISS
|
|
||||||
GPIO_InitTypeDef.Mode = LL_GPIO_MODE_ALTERNATE;
|
|
||||||
GPIO_InitTypeDef.Pin = LL_GPIO_PIN_10;
|
|
||||||
GPIO_InitTypeDef.Pull = LL_GPIO_PULL_NO;
|
|
||||||
GPIO_InitTypeDef.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
|
|
||||||
GPIO_InitTypeDef.Alternate = LL_GPIO_AF_7;
|
|
||||||
GPIO_InitTypeDef.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
|
||||||
LL_GPIO_Init(GPIOA, &GPIO_InitTypeDef); // RX
|
|
||||||
|
|
||||||
GPIO_InitTypeDef.Mode = LL_GPIO_MODE_ALTERNATE;
|
|
||||||
GPIO_InitTypeDef.Pin = LL_GPIO_PIN_9;
|
|
||||||
GPIO_InitTypeDef.Pull = LL_GPIO_PULL_NO;
|
|
||||||
GPIO_InitTypeDef.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
|
|
||||||
GPIO_InitTypeDef.Alternate = LL_GPIO_AF_7;
|
|
||||||
GPIO_InitTypeDef.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
|
||||||
LL_GPIO_Init(GPIOA, &GPIO_InitTypeDef); // TX
|
|
||||||
|
|
||||||
// USART2 - METEO
|
|
||||||
GPIO_InitTypeDef.Mode = LL_GPIO_MODE_ALTERNATE;
|
|
||||||
GPIO_InitTypeDef.Pin = LL_GPIO_PIN_3;
|
|
||||||
GPIO_InitTypeDef.Pull = LL_GPIO_PULL_NO;
|
|
||||||
GPIO_InitTypeDef.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
|
|
||||||
GPIO_InitTypeDef.Alternate = LL_GPIO_AF_7;
|
|
||||||
GPIO_InitTypeDef.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
|
||||||
LL_GPIO_Init(GPIOA, &GPIO_InitTypeDef); // RX
|
|
||||||
|
|
||||||
GPIO_InitTypeDef.Mode = LL_GPIO_MODE_ALTERNATE;
|
|
||||||
GPIO_InitTypeDef.Pin = LL_GPIO_PIN_2;
|
|
||||||
GPIO_InitTypeDef.Pull = LL_GPIO_PULL_NO;
|
|
||||||
GPIO_InitTypeDef.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
|
|
||||||
GPIO_InitTypeDef.Alternate = LL_GPIO_AF_7;
|
|
||||||
GPIO_InitTypeDef.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
|
||||||
LL_GPIO_Init(GPIOA, &GPIO_InitTypeDef); // TX
|
|
||||||
|
|
||||||
// USART3 - GSM
|
|
||||||
GPIO_InitTypeDef.Mode = LL_GPIO_MODE_ALTERNATE; // LL_GPIO_MODE_ALTERNATE
|
|
||||||
GPIO_InitTypeDef.Pin = LL_GPIO_PIN_10;
|
|
||||||
GPIO_InitTypeDef.Pull = LL_GPIO_PULL_NO;
|
|
||||||
GPIO_InitTypeDef.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
|
|
||||||
GPIO_InitTypeDef.Alternate = LL_GPIO_AF_7;
|
|
||||||
GPIO_InitTypeDef.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
|
||||||
LL_GPIO_Init(GPIOB, &GPIO_InitTypeDef); // TX
|
|
||||||
|
|
||||||
GPIO_InitTypeDef.Mode = LL_GPIO_MODE_ALTERNATE; // LL_GPIO_MODE_ALTERNATE
|
|
||||||
GPIO_InitTypeDef.Pin = LL_GPIO_PIN_11;
|
|
||||||
GPIO_InitTypeDef.Pull = LL_GPIO_PULL_NO;
|
|
||||||
GPIO_InitTypeDef.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
|
|
||||||
GPIO_InitTypeDef.Alternate = LL_GPIO_AF_7;
|
|
||||||
GPIO_InitTypeDef.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
|
||||||
LL_GPIO_Init(GPIOB, &GPIO_InitTypeDef); // RX
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(STM32F10X_MD_VL)
|
|
||||||
Configure_GPIO(GPIOA,8,GPPP_OUTPUT_2MHZ); // re/te
|
|
||||||
GPIO_ResetBits(GPIOA, GPIO_Pin_8);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(STM32L471xx)
|
|
||||||
GPIO_InitTypeDef.Mode = LL_GPIO_MODE_OUTPUT;
|
|
||||||
GPIO_InitTypeDef.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
|
||||||
GPIO_InitTypeDef.Pin = LL_GPIO_PIN_2;
|
|
||||||
GPIO_InitTypeDef.Pull = LL_GPIO_PULL_NO;
|
|
||||||
GPIO_InitTypeDef.Speed = LL_GPIO_SPEED_FREQ_MEDIUM;
|
|
||||||
GPIO_InitTypeDef.Alternate = LL_GPIO_AF_7;
|
|
||||||
LL_GPIO_Init(GPIOA, &GPIO_InitTypeDef); // RE-TE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(STM32F10X_MD_VL)
|
#if defined(STM32F10X_MD_VL)
|
||||||
// enabling the clock for both USARTs
|
// enabling the clock for both USARTs
|
||||||
|
|
|
@ -20,6 +20,7 @@ extern const char * ENABLE_EDGE;
|
||||||
extern const char * START_GPRS;
|
extern const char * START_GPRS;
|
||||||
extern const char * GET_IP_ADDRESS;
|
extern const char * GET_IP_ADDRESS;
|
||||||
extern const char * GET_CONNECTION_STATUS;
|
extern const char * GET_CONNECTION_STATUS;
|
||||||
|
extern const char * CONFIGURE_DTR;
|
||||||
|
|
||||||
extern int8_t gsm_sim800_gprs_ready;
|
extern int8_t gsm_sim800_gprs_ready;
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,25 @@ volatile char timm = 0;
|
||||||
|
|
||||||
dallas_struct_t dallas;
|
dallas_struct_t dallas;
|
||||||
|
|
||||||
|
static void dallas_delay_stop(void) {
|
||||||
|
TIM2->CR1 &= (0xFFFFFFFF ^ TIM_CR1_CEN);
|
||||||
|
|
||||||
|
NVIC_DisableIRQ( TIM2_IRQn );
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dallas_delay_start(void) {
|
||||||
|
TIM2->CR1 &= (0xFFFFFFFF ^ TIM_CR1_CEN);
|
||||||
|
|
||||||
|
NVIC_SetPriority(TIM2_IRQn, 1);
|
||||||
|
TIM2->PSC = 0;
|
||||||
|
TIM2->ARR = 119;
|
||||||
|
TIM2->CR1 |= TIM_CR1_DIR;
|
||||||
|
TIM2->CR1 &= (0xFFFFFFFF ^ TIM_CR1_DIR);
|
||||||
|
TIM2->CR1 |= TIM_CR1_CEN;
|
||||||
|
TIM2->DIER |= 1;
|
||||||
|
NVIC_EnableIRQ( TIM2_IRQn ); // enabling in case that it wasn't been enabled earlier
|
||||||
|
}
|
||||||
|
|
||||||
void dallas_init(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, uint16_t GPIO_PinSource, dallas_average_t* average) {
|
void dallas_init(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, uint16_t GPIO_PinSource, dallas_average_t* average) {
|
||||||
|
|
||||||
#ifdef STM32F10X_MD_VL
|
#ifdef STM32F10X_MD_VL
|
||||||
|
@ -88,14 +107,9 @@ void dallas_config_timer(void) {
|
||||||
NVIC_DisableIRQ( TIM7_IRQn ); // data transmission initializer
|
NVIC_DisableIRQ( TIM7_IRQn ); // data transmission initializer
|
||||||
//NVIC_DisableIRQ( 25 ); // TODO: probably remainder of TX20 driver to be deleted
|
//NVIC_DisableIRQ( 25 ); // TODO: probably remainder of TX20 driver to be deleted
|
||||||
|
|
||||||
NVIC_SetPriority(TIM2_IRQn, 1);
|
|
||||||
TIM2->PSC = 0;
|
dallas_delay_start();
|
||||||
TIM2->ARR = 119;
|
|
||||||
TIM2->CR1 |= TIM_CR1_DIR;
|
|
||||||
TIM2->CR1 &= (0xFFFFFFFF ^ TIM_CR1_DIR);
|
|
||||||
TIM2->CR1 |= TIM_CR1_CEN;
|
|
||||||
TIM2->DIER |= 1;
|
|
||||||
NVIC_EnableIRQ( TIM2_IRQn ); // enabling in case that it weren't been enabled earlier
|
|
||||||
//timm = 1;
|
//timm = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,14 +121,7 @@ void dallas_deconfig_timer(void) {
|
||||||
NVIC_EnableIRQ( TIM7_IRQn ); // data transmission initializer
|
NVIC_EnableIRQ( TIM7_IRQn ); // data transmission initializer
|
||||||
//NVIC_EnableIRQ( 25 ); // TODO: probably remainder of TX20 driver to be deleted
|
//NVIC_EnableIRQ( 25 ); // TODO: probably remainder of TX20 driver to be deleted
|
||||||
|
|
||||||
// reverting back to APRS timings
|
dallas_delay_stop();
|
||||||
//NVIC_SetPriority(TIM4_IRQn, 1);
|
|
||||||
//TIM4->PSC = 0;
|
|
||||||
//TIM4->ARR = 2499;
|
|
||||||
//TIM4->CR1 |= TIM_CR1_DIR;
|
|
||||||
//TIM4->CR1 &= (0xFFFFFFFF ^ TIM_CR1_DIR);
|
|
||||||
//TIM4->DIER |= 1;
|
|
||||||
// NVIC_EnableIRQ( TIM4_IRQn );
|
|
||||||
//timm = 0;
|
//timm = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -456,6 +456,29 @@ void gsm_sim800_initialization_pool(srl_context_t * srl_context, gsm_sim800_stat
|
||||||
gsm_time_of_last_command_send_to_module = main_get_master_time();
|
gsm_time_of_last_command_send_to_module = main_get_master_time();
|
||||||
}
|
}
|
||||||
else if (gsm_at_command_sent_last == TRANSPARENT_MODE_ON) {
|
else if (gsm_at_command_sent_last == TRANSPARENT_MODE_ON) {
|
||||||
|
|
||||||
|
srl_send_data(srl_context, (const uint8_t*) CONFIGURE_DTR, SRL_MODE_ZERO, strlen(CONFIGURE_DTR), SRL_INTERNAL);
|
||||||
|
|
||||||
|
// wait for command completion
|
||||||
|
srl_wait_for_tx_completion(srl_context);
|
||||||
|
|
||||||
|
gsm_at_command_sent_last = CONFIGURE_DTR;
|
||||||
|
|
||||||
|
gsm_waiting_for_command_response = 1;
|
||||||
|
|
||||||
|
srl_receive_data_with_callback(srl_context, gsm_sim800_rx_terminating_callback);
|
||||||
|
|
||||||
|
// starting GPRS session has maximum response time of 65 seconds
|
||||||
|
srl_switch_timeout(srl_context, 1, 1000); // TODO
|
||||||
|
|
||||||
|
// start timeout calculation
|
||||||
|
srl_context->srl_rx_timeout_calc_started = 1;
|
||||||
|
|
||||||
|
// record when the command has been sent
|
||||||
|
gsm_time_of_last_command_send_to_module = main_get_master_time();
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (gsm_at_command_sent_last == CONFIGURE_DTR) {
|
||||||
// create GPRS APN configuration string
|
// create GPRS APN configuration string
|
||||||
sim800_gprs_create_apn_config_str((char * )srl_context->srl_tx_buf_pointer, srl_context->srl_tx_buf_ln);
|
sim800_gprs_create_apn_config_str((char * )srl_context->srl_tx_buf_pointer, srl_context->srl_tx_buf_ln);
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ const char * ENABLE_EDGE = "AT+CEGPRS=1,10\r\0";
|
||||||
const char * START_GPRS = "AT+CIICR\r\0";
|
const char * START_GPRS = "AT+CIICR\r\0";
|
||||||
const char * GET_IP_ADDRESS = "AT+CIFSR\r\0";
|
const char * GET_IP_ADDRESS = "AT+CIFSR\r\0";
|
||||||
const char * GET_CONNECTION_STATUS = "AT+CIPSTATUS\r\0";
|
const char * GET_CONNECTION_STATUS = "AT+CIPSTATUS\r\0";
|
||||||
|
const char * CONFIGURE_DTR = "AT&D1\r\0";
|
||||||
|
|
||||||
|
|
||||||
static const char * OK = "OK\r\n\0";
|
static const char * OK = "OK\r\n\0";
|
||||||
|
@ -121,6 +122,9 @@ void sim800_gprs_response_callback(srl_context_t * srl_context, gsm_sim800_state
|
||||||
|
|
||||||
gsm_sim800_replace_non_printable_with_space(gsm_sim800_ip_address);
|
gsm_sim800_replace_non_printable_with_space(gsm_sim800_ip_address);
|
||||||
}
|
}
|
||||||
|
else if (gsm_at_command_sent_last == CONFIGURE_DTR) {
|
||||||
|
comparision_result = strncmp(OK, (const char *)(srl_context->srl_rx_buf_pointer + gsm_response_start_idx), 2);
|
||||||
|
}
|
||||||
else if (gsm_at_command_sent_last == GET_CONNECTION_STATUS ) {
|
else if (gsm_at_command_sent_last == GET_CONNECTION_STATUS ) {
|
||||||
|
|
||||||
memset(gsm_sim800_connection_status_str, 0x00, 24);
|
memset(gsm_sim800_connection_status_str, 0x00, 24);
|
||||||
|
@ -162,6 +166,7 @@ void sim800_gprs_response_callback(srl_context_t * srl_context, gsm_sim800_state
|
||||||
comparision_result = strncmp(OK, (const char *)(srl_context->srl_rx_buf_pointer + gsm_response_start_idx), 2);
|
comparision_result = strncmp(OK, (const char *)(srl_context->srl_rx_buf_pointer + gsm_response_start_idx), 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// check if modem response is the same with what the library actualy expects to get
|
// check if modem response is the same with what the library actualy expects to get
|
||||||
if (comparision_result != 0) {
|
if (comparision_result != 0) {
|
||||||
*state = SIM800_NOT_YET_COMM; // if not reset the state to start reinitializing
|
*state = SIM800_NOT_YET_COMM; // if not reset the state to start reinitializing
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "delay.h"
|
#include "delay.h"
|
||||||
|
#include "io.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
@ -229,51 +230,59 @@ void gsm_sim800_tcpip_close(srl_context_t * srl_context, gsm_sim800_state_t * st
|
||||||
|
|
||||||
uint8_t receive_result = 0;
|
uint8_t receive_result = 0;
|
||||||
|
|
||||||
volatile uint8_t escape_counter = 0;
|
|
||||||
|
|
||||||
if (*state == SIM800_TCP_CONNECTED || force == 1) {
|
if (*state == SIM800_TCP_CONNECTED || force == 1) {
|
||||||
|
|
||||||
do {
|
// do {
|
||||||
// set default timeout of 1200msec
|
// // set default timeout of 1200msec
|
||||||
srl_switch_timeout(srl_context, SRL_TIMEOUT_ENABLE, 2222);
|
// srl_switch_timeout(srl_context, SRL_TIMEOUT_ENABLE, 2222);
|
||||||
|
//
|
||||||
|
// // send escape sequence to exit connection mode
|
||||||
|
// srl_send_data(srl_context, (const uint8_t*) ESCAPE, SRL_MODE_ZERO, strlen(ESCAPE), SRL_INTERNAL);
|
||||||
|
//
|
||||||
|
// // wait for transmission to finish
|
||||||
|
// srl_wait_for_tx_completion(srl_context);
|
||||||
|
//
|
||||||
|
// // wait for OK to be received
|
||||||
|
// srl_receive_data(srl_context, 4, SRL_NO_START_CHR, SRL_NO_STOP_CHR, SRL_ECHO_DISABLE, 0x7F, 0);
|
||||||
|
//
|
||||||
|
// // start timeout calculation
|
||||||
|
// srl_switch_timeout_for_waiting(srl_context, SRL_TIMEOUT_ENABLE);
|
||||||
|
//
|
||||||
|
// // wait for it to finish
|
||||||
|
// srl_wait_for_rx_completion_or_timeout(srl_context, & receive_result);
|
||||||
|
//
|
||||||
|
// // check if we escaped from data mode
|
||||||
|
// if (strncmp((const char *) (srl_context->srl_rx_buf_pointer), NEWLINE, 1) == 0) {
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// else if (strncmp((const char *) (srl_context->srl_rx_buf_pointer), OK, 2) == 0) {
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// else if (strncmp((const char *) (srl_context->srl_rx_buf_pointer), ESCAPE, 3) == 0) {
|
||||||
|
// // if module has already returned to command mode it will echo all input
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// else {
|
||||||
|
// if (receive_result == SRL_OK) {
|
||||||
|
// delay_fixed(200);
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// } while(escape_counter++ < 3);
|
||||||
|
|
||||||
// send escape sequence to exit connection mode
|
io___cntrl_gprs_dtr_low();
|
||||||
srl_send_data(srl_context, (const uint8_t*) ESCAPE, SRL_MODE_ZERO, strlen(ESCAPE), SRL_INTERNAL);
|
|
||||||
|
|
||||||
// wait for transmission to finish
|
// one second delay
|
||||||
srl_wait_for_tx_completion(srl_context);
|
delay_fixed(500);
|
||||||
|
|
||||||
// wait for OK to be received
|
// release DTR
|
||||||
srl_receive_data(srl_context, 4, SRL_NO_START_CHR, SRL_NO_STOP_CHR, SRL_ECHO_DISABLE, 0x7F, 0);
|
io___cntrl_gprs_dtr_high();
|
||||||
|
|
||||||
// start timeout calculation
|
delay_fixed(500);
|
||||||
srl_switch_timeout_for_waiting(srl_context, SRL_TIMEOUT_ENABLE);
|
|
||||||
|
|
||||||
// wait for it to finish
|
// send tcp close command
|
||||||
srl_wait_for_rx_completion_or_timeout(srl_context, & receive_result);
|
|
||||||
|
|
||||||
// check if we escaped from data mode
|
|
||||||
if (strncmp((const char *) (srl_context->srl_rx_buf_pointer), NEWLINE, 1) == 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else if (strncmp((const char *) (srl_context->srl_rx_buf_pointer), OK, 2) == 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else if (strncmp((const char *) (srl_context->srl_rx_buf_pointer), ESCAPE, 3) == 0) {
|
|
||||||
// if module has already returned to command mode it will echo all input
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (receive_result == SRL_OK) {
|
|
||||||
delay_fixed(200);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
} while(escape_counter++ < 3);
|
|
||||||
|
|
||||||
// send escape sequence to exit connection mode
|
|
||||||
srl_send_data(srl_context, (const uint8_t*) CLOSE_TCP, SRL_MODE_ZERO, strlen(CLOSE_TCP), SRL_INTERNAL);
|
srl_send_data(srl_context, (const uint8_t*) CLOSE_TCP, SRL_MODE_ZERO, strlen(CLOSE_TCP), SRL_INTERNAL);
|
||||||
|
|
||||||
// wait for transmission to finish
|
// wait for transmission to finish
|
||||||
|
|
Ładowanie…
Reference in New Issue