ESP32IGate/include/main.h

206 lines
4.2 KiB
C

/*
Name: ESP32 APRS Internet Gateway
Created: 1-Nov-2021 14:27:23
Author: HS5TQA/Atten
Support IS: host:aprs.dprns.com port:14580
Support IS monitor: http://aprs.dprns.com:14501
Support in LINE Group APRS Only
*/
#ifndef MAIN_H
#define MAIN_H
#define VERSION "0.6"
#define DEBUG
//#define DEBUG_IS
//#define SDCARD
//#define SA818
//#define SR_FRS
#ifdef SR_FRS
#ifndef SA818
#define SA818
#endif
#endif
#define WIFI_OFF_FIX 0
#define WIFI_AP_FIX 1
#define WIFI_STA_FIX 2
#define WIFI_AP_STA_FIX 3
#define IMPLEMENTATION FIFO
#define TZ 0 // (utc+) TZ in hours
#define DST_MN 0 // use 60mn for summer time in some countries
#define TZ_MN ((TZ)*60)
#define TZ_SEC ((TZ)*3600)
#define DST_SEC ((DST_MN)*60)
#define FORMAT_SPIFFS_IF_FAILED true
#define PKGLISTSIZE 10
#define PKGTXSIZE 5
const int timeZone = 7; // Bangkok
#include <Arduino.h>
#include <FS.h>
#include <SD.h>
#include <SPIFFS.h>
#include "soc/rtc_wdt.h"
#include <AX25.h>
#include "HardwareSerial.h"
#include "EEPROM.h"
enum M17Flags
{
DISCONNECTED = 1 << 0,
CONNECTING = 1 << 1,
M17_AUTH = 1 << 2,
M17_CONF = 1 << 3,
M17_OPTS = 1 << 4,
CONNECTED_RW = 1 << 5,
CONNECTED_RO = 1 << 6
};
typedef struct Config_Struct
{
bool synctime;
bool aprs;
bool wifi_client;
bool wifi;
char wifi_mode; // WIFI_AP,WIFI_STA,WIFI_AP_STA,WIFI_OFF
char wifi_ch;
float gps_lat;
float gps_lon;
float gps_alt;
uint8_t aprs_ssid;
uint16_t aprs_port;
uint8_t aprs_moniSSID;
uint32_t api_id;
uint16_t mqtt_port;
bool tnc;
bool rf2inet;
bool inet2rf;
bool tnc_digi = false;
bool tnc_telemetry = false;
int tnc_beacon = 0;
int aprs_beacon;
char aprs_table;
char aprs_symbol;
char aprs_mycall[10];
char aprs_host[20];
char aprs_passcode[10];
char aprs_moniCall[10];
char aprs_filter[30];
char aprs_comment[50];
char aprs_path[72];
char wifi_ssid[20];
char wifi_pass[15];
char wifi_ap_ssid[20];
char wifi_ap_pass[15];
char tnc_path[50];
char tnc_btext[50];
char tnc_comment[50];
char aprs_object[10];
char mqtt_host[20];
char mqtt_user[10];
char mqtt_pass[10];
char wifi_power;
uint16_t tx_timeslot;
uint16_t digi_delay;
bool input_hpf;
#ifdef SA818
float freq_rx;
float freq_tx;
int offset_rx;
int offset_tx;
int tone_rx;
int tone_tx;
uint8_t band;
uint8_t sql_level;
bool rf_power;
uint8_t volume;
#endif
} Configuration;
typedef struct igateTLM_struct
{
uint16_t Sequence;
unsigned long ParmTimeout;
unsigned long TeleTimeout;
uint8_t RF2INET;
uint8_t INET2RF;
uint8_t RX;
uint8_t TX;
uint8_t DROP;
} igateTLMType;
typedef struct pkgListStruct
{
time_t time;
char calsign[11];
char ssid[5];
unsigned int pkg;
bool type;
uint8_t symbol;
} pkgListType;
typedef struct statisticStruct
{
uint32_t allCount;
uint32_t tncCount;
uint32_t isCount;
uint32_t locationCount;
uint32_t wxCount;
uint32_t digiCount;
uint32_t errorCount;
uint32_t dropCount;
uint32_t rf2inet;
uint32_t inet2rf;
} statusType;
typedef struct digiTLM_struct
{
unsigned int Sequence;
unsigned int ParmTimeout;
unsigned int TeleTimeout;
unsigned char RxPkts;
unsigned char TxPkts;
unsigned char DropRx;
unsigned char ErPkts;
} digiTLMType;
typedef struct txQueue_struct
{
bool Active;
long timeStamp;
int Delay;
char Info[300];
} txQueueType;
const char PARM[] = {"PARM.RF->INET,INET->RF,RxPkts,TxPkts,IGateDropRx"};
const char UNIT[] = {"UNIT.Pkts,Pkts,Pkts,Pkts,Pkts"};
const char EQNS[] = {"EQNS.0,1,0,0,1,0,0,1,0,0,1,0,0,1,0"};
const float ctcss[] = {0, 67, 71.9, 74.4, 77, 79.7, 82.5, 85.4, 88.5, 91.5, 94.8, 97.4, 100, 103.5, 107.2, 110.9, 114.8, 118.8, 123, 127.3, 131.8, 136.5, 141.3, 146.2, 151.4, 156.7, 162.2, 167.9, 173.8, 179.9, 186.2, 192.8, 203.5, 210.7, 218.1, 225.7, 233.6, 241.8, 250.3};
const float wifiPwr[12][2] = {{-4, -1}, {8, 2}, {20, 5}, {28, 7}, {34, 8.5}, {44, 11}, {52, 13}, {60, 15}, {68, 17}, {74, 18.5}, {76, 19}, {78, 19.5}};
void saveEEPROM();
void defaultConfig();
String getValue(String data, char separator, int index);
boolean isValidNumber(String str);
void taskAPRS(void *pvParameters);
void taskNetwork(void *pvParameters);
void sort(pkgListType a[], int size);
void sortPkgDesc(pkgListType a[], int size);
int processPacket(String &tnc2);
String send_fix_location();
int digiProcess(AX25Msg &Packet);
void printTime();
bool pkgTxUpdate(const char *info, int delay);
#endif