2018-02-18 17:13:14 +00:00
|
|
|
#ifndef _H_Global
|
|
|
|
#define _H_Global
|
|
|
|
|
2018-05-01 21:34:14 +00:00
|
|
|
#include <curses.h>
|
|
|
|
|
2016-09-03 06:32:10 +00:00
|
|
|
#define RUNNING 1 // The main program is running
|
|
|
|
#define STOPPED 0 // The main program has stopped
|
2018-05-01 21:34:14 +00:00
|
|
|
|
|
|
|
#define MAX_PAYLOADS 32
|
|
|
|
|
|
|
|
struct TPayload
|
|
|
|
{
|
2018-04-10 16:54:46 +00:00
|
|
|
int InUse;
|
2018-05-01 21:34:14 +00:00
|
|
|
int SendToClients;
|
|
|
|
int Channel;
|
|
|
|
|
|
|
|
time_t LastPacketAt;
|
|
|
|
|
|
|
|
char Telemetry[256];
|
|
|
|
char Payload[32];
|
|
|
|
|
|
|
|
char Time[12];
|
|
|
|
unsigned int Counter, LastCounter;
|
|
|
|
double Longitude, Latitude;
|
|
|
|
int Altitude, PreviousAltitude;
|
|
|
|
float AscentRate;
|
2018-04-10 23:18:23 +00:00
|
|
|
unsigned long LastPositionAt;
|
2018-05-01 21:34:14 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct TLoRaDevice
|
|
|
|
{
|
2021-02-08 14:05:33 +00:00
|
|
|
int Enabled;
|
|
|
|
|
2018-05-01 21:34:14 +00:00
|
|
|
double Frequency;
|
2018-09-12 12:23:52 +00:00
|
|
|
double PPM;
|
2019-06-13 07:48:41 +00:00
|
|
|
double FrequencyOffset;
|
|
|
|
|
2018-05-01 21:34:14 +00:00
|
|
|
double Bandwidth;
|
|
|
|
double CurrentBandwidth;
|
|
|
|
|
|
|
|
int InUse;
|
|
|
|
int DIO0;
|
|
|
|
int DIO5;
|
2016-09-27 19:23:41 +00:00
|
|
|
|
2018-05-01 21:34:14 +00:00
|
|
|
int AFC; // Enable Automatic Frequency Control
|
|
|
|
double MaxAFCStep; // Maximum adjustment, in kHz, per packet
|
|
|
|
int AFCTimeout; // Revert to original frequency if no packets for this period (in seconds)
|
2016-09-27 19:23:41 +00:00
|
|
|
|
|
|
|
int SpeedMode;
|
|
|
|
int Power;
|
|
|
|
int PayloadLength;
|
|
|
|
int ImplicitOrExplicit;
|
|
|
|
int ErrorCoding;
|
|
|
|
int SpreadingFactor;
|
|
|
|
int LowDataRateOptimize;
|
|
|
|
WINDOW * Window;
|
|
|
|
unsigned int TelemetryCount, SSDVCount, BadCRCCount, UnknownCount;
|
|
|
|
int Sending;
|
2016-10-16 16:05:37 +00:00
|
|
|
// unsigned long Seconds;
|
|
|
|
// double PredictedLongitude, PredictedLatitude;
|
|
|
|
// unsigned int Satellites;
|
|
|
|
time_t LastSSDVPacketAt, LastTelemetryPacketAt;
|
2016-09-27 19:23:41 +00:00
|
|
|
time_t ReturnToCallingModeAt;
|
2018-05-01 21:34:14 +00:00
|
|
|
time_t ReturnToOriginalFrequencyAt;
|
2016-09-27 19:23:41 +00:00
|
|
|
int InCallingMode;
|
2018-05-01 21:34:14 +00:00
|
|
|
int ActivityLED;
|
|
|
|
double UplinkFrequency;
|
2016-09-27 19:23:41 +00:00
|
|
|
int UplinkMode;
|
2018-05-01 21:34:14 +00:00
|
|
|
|
|
|
|
// Normal (non TDM) uplink
|
2016-09-27 19:23:41 +00:00
|
|
|
int UplinkTime;
|
2018-05-01 21:34:14 +00:00
|
|
|
int UplinkCycle;
|
|
|
|
int IdleUplink;
|
|
|
|
int SSDVUplink;
|
|
|
|
char UplinkMessage[256];
|
|
|
|
|
|
|
|
// Telnet uplink
|
|
|
|
char Telemetry[256];
|
|
|
|
unsigned char PacketID;
|
|
|
|
int TimeSinceLastTx;
|
|
|
|
int HABAck; // Received message ACKd our last Tx
|
|
|
|
int HABConnected; // 1 if HAB has telnet connection
|
|
|
|
char ToTelnetBuffer[256]; // Buffer for data Telnet --> LoRa
|
|
|
|
int ToTelnetBufferCount;
|
|
|
|
char FromTelnetBuffer[256]; // Buffer for data LoRa --> Telnet
|
|
|
|
int FromTelnetBufferCount;
|
|
|
|
char HABUplink[256];
|
|
|
|
int HABUplinkCount;
|
|
|
|
int GotHABReply;
|
|
|
|
int GotReply;
|
2019-02-27 09:36:18 +00:00
|
|
|
|
|
|
|
// Chat uplink
|
|
|
|
int ChatMode;
|
|
|
|
char ChatPayloadID[32];
|
|
|
|
int TxMessageID;
|
|
|
|
char TxChatMessage[200];
|
|
|
|
int RxMessageID;
|
|
|
|
char RxChatMessage[200];
|
2018-03-26 11:59:38 +00:00
|
|
|
|
|
|
|
// Local data packets
|
|
|
|
int LocalDataCount;
|
|
|
|
char LocalDataBuffer[255];
|
2018-04-10 23:18:23 +00:00
|
|
|
|
|
|
|
// Status
|
|
|
|
int CurrentRSSI;
|
|
|
|
int PacketSNR, PacketRSSI;
|
|
|
|
double FrequencyError;
|
2016-09-27 19:23:41 +00:00
|
|
|
};
|
2018-05-01 21:34:14 +00:00
|
|
|
|
|
|
|
struct TConfig
|
|
|
|
{
|
|
|
|
char Tracker[16]; // Callsign or name of receiver
|
|
|
|
double latitude, longitude; // Receiver's location
|
|
|
|
|
|
|
|
int EnableHabitat;
|
2016-09-27 19:23:41 +00:00
|
|
|
int EnableSSDV;
|
2019-06-26 16:42:32 +00:00
|
|
|
int EnableHablink;
|
2020-05-05 12:48:11 +00:00
|
|
|
char HablinkAddress[32];
|
2016-09-27 19:23:41 +00:00
|
|
|
int EnableTelemetryLogging;
|
|
|
|
int EnablePacketLogging;
|
|
|
|
int CallingTimeout;
|
|
|
|
char SSDVJpegFolder[100];
|
|
|
|
char ftpServer[100];
|
|
|
|
char ftpUser[32];
|
|
|
|
char ftpPassword[32];
|
|
|
|
char ftpFolder[64];
|
2018-05-01 21:34:14 +00:00
|
|
|
struct TLoRaDevice LoRaDevices[2];
|
2016-10-16 16:05:37 +00:00
|
|
|
struct TPayload Payloads[MAX_PAYLOADS];
|
2016-09-27 19:23:41 +00:00
|
|
|
int NetworkLED;
|
|
|
|
int InternetLED;
|
2018-04-06 18:26:07 +00:00
|
|
|
int ServerPort; // JSON port for telemetry, settings
|
2019-02-27 09:36:18 +00:00
|
|
|
int ChatPort; // Chat port
|
2018-04-06 18:26:07 +00:00
|
|
|
int UDPPort; // UDP Broadcast port for raw received data packets
|
2018-05-06 12:19:13 +00:00
|
|
|
int OziPlotterPort; // UDP Broadcast port for OziPlotter formatted packets
|
2018-05-06 13:03:47 +00:00
|
|
|
int OziMuxPort; // UDP Broadcast port for OziMux formatted packets
|
2018-05-01 21:34:14 +00:00
|
|
|
int HABPort; // Telnet style port for comms with HAB
|
|
|
|
int HABTimeout; // Timeout in ms for telnet uplink
|
|
|
|
int HABChannel; // LoRa Channel for uplink
|
2018-03-26 11:59:38 +00:00
|
|
|
int DataPort; // Raw received data packet port
|
2016-09-27 19:23:41 +00:00
|
|
|
char SMSFolder[64];
|
2021-03-19 22:23:22 +00:00
|
|
|
char radio[64];
|
2016-09-27 19:23:41 +00:00
|
|
|
char antenna[64];
|
2018-05-01 21:34:14 +00:00
|
|
|
int EnableDev;
|
|
|
|
char UplinkCode[64];
|
2020-11-25 15:19:17 +00:00
|
|
|
char Version[16];
|
2021-10-15 08:07:15 +00:00
|
|
|
int DumpBuffer;
|
|
|
|
char DumpFile[64];
|
2022-02-12 15:55:05 +00:00
|
|
|
int EnableMQTT;
|
2022-02-13 14:49:28 +00:00
|
|
|
char MQTTHost[128];
|
|
|
|
char MQTTPort[8];
|
|
|
|
char MQTTUser[16];
|
|
|
|
char MQTTPass[32];
|
|
|
|
char MQTTClient[16];
|
2022-02-16 16:54:14 +00:00
|
|
|
char MQTTTopic[128];
|
2016-09-27 19:23:41 +00:00
|
|
|
};
|
2022-02-13 14:49:28 +00:00
|
|
|
|
2018-05-01 21:34:14 +00:00
|
|
|
typedef struct {
|
2016-09-03 06:32:10 +00:00
|
|
|
int parent_status;
|
|
|
|
unsigned long packet_count;
|
|
|
|
} thread_shared_vars_t;
|
|
|
|
|
|
|
|
typedef struct {
|
2018-02-18 17:13:14 +00:00
|
|
|
/* Rx Metadata */
|
2016-09-03 06:32:10 +00:00
|
|
|
short int Channel;
|
2018-02-18 17:13:14 +00:00
|
|
|
time_t Timestamp;
|
|
|
|
double Frequency;
|
|
|
|
double FrequencyError;
|
|
|
|
int ImplicitOrExplicit;
|
|
|
|
double Bandwidth;
|
|
|
|
int ErrorCoding;
|
|
|
|
int SpreadingFactor;
|
|
|
|
int LowDataRateOptimize;
|
|
|
|
int SNR;
|
|
|
|
int RSSI;
|
|
|
|
} rx_metadata_t;
|
|
|
|
|
2018-05-01 21:34:14 +00:00
|
|
|
/* HABpack Telemetry Storage */
|
2018-05-06 12:06:08 +00:00
|
|
|
typedef enum { HB_VALUE_INTEGER, HB_VALUE_REAL, HB_VALUE_STRING } HB_Value_Type;
|
2018-05-01 21:34:14 +00:00
|
|
|
typedef struct habpack_telem_linklist_entry {
|
|
|
|
uint32_t type;
|
|
|
|
char name[32];
|
|
|
|
HB_Value_Type value_type;
|
|
|
|
union {
|
|
|
|
int64_t integer;
|
|
|
|
double real;
|
2018-05-06 12:06:08 +00:00
|
|
|
char *string;
|
2018-05-01 21:34:14 +00:00
|
|
|
} value;
|
|
|
|
struct habpack_telem_linklist_entry *next;
|
|
|
|
} habpack_telem_linklist_entry_t;
|
|
|
|
|
2018-02-18 17:13:14 +00:00
|
|
|
typedef struct {
|
2018-05-01 21:34:14 +00:00
|
|
|
/* Core Telemetry */
|
|
|
|
char Callsign[32];
|
|
|
|
uint64_t SentenceId;
|
|
|
|
uint64_t Time;
|
|
|
|
char TimeString[9];
|
|
|
|
double Latitude;
|
|
|
|
double Longitude;
|
|
|
|
int64_t Altitude;
|
|
|
|
/* Calling Beacon Values */
|
|
|
|
uint64_t DownlinkFrequency;
|
|
|
|
int64_t DownlinkLoraMode;
|
|
|
|
int DownlinkLoraImplicit;
|
|
|
|
int DownlinkLoraErrorCoding;
|
|
|
|
double DownlinkLoraBandwidth;
|
|
|
|
int DownlinkLoraSpreadingFactor;
|
|
|
|
int DownlinkLoraLowDatarateOptimise;
|
|
|
|
/* Linked list of additional telem fields */
|
|
|
|
habpack_telem_linklist_entry_t *habpack_extra;
|
|
|
|
} rx_telemetry_t;
|
|
|
|
|
|
|
|
#define Message_length 257
|
|
|
|
#define UKHASstring_length 257
|
|
|
|
typedef struct {
|
|
|
|
char Message[Message_length];
|
|
|
|
int Bytes;
|
|
|
|
/* UKHAS ASCII Telemetry String for habitat upload */
|
|
|
|
char UKHASstring[UKHASstring_length];
|
2019-06-13 07:48:41 +00:00
|
|
|
char HabitatString[UKHASstring_length];
|
2018-05-01 21:34:14 +00:00
|
|
|
bool isCallingBeacon;
|
|
|
|
double AscentRate;
|
|
|
|
/* Telemetry values */
|
|
|
|
rx_telemetry_t Telemetry;
|
2018-02-18 17:13:14 +00:00
|
|
|
rx_metadata_t Metadata;
|
2018-05-01 21:34:14 +00:00
|
|
|
} received_t;
|
2016-09-03 06:32:10 +00:00
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
short int Channel;
|
|
|
|
char SSDV_Packet[257];
|
|
|
|
int Packet_Number;
|
|
|
|
} ssdv_t;
|
2018-05-01 21:34:14 +00:00
|
|
|
|
2022-02-13 14:49:28 +00:00
|
|
|
typedef struct {
|
|
|
|
char host[128];
|
|
|
|
char port[8];
|
|
|
|
char user[16];
|
|
|
|
char pass[32];
|
|
|
|
char clientId[16];
|
2022-02-16 16:54:14 +00:00
|
|
|
char topic[128];
|
2022-02-13 14:49:28 +00:00
|
|
|
} mqtt_connect_t;
|
|
|
|
|
2018-05-01 21:34:14 +00:00
|
|
|
struct TServerInfo
|
|
|
|
{
|
|
|
|
int Port;
|
|
|
|
int Connected;
|
|
|
|
int ServerIndex;
|
|
|
|
int sockfd;
|
|
|
|
};
|
2016-09-03 06:32:10 +00:00
|
|
|
|
2022-02-13 14:49:28 +00:00
|
|
|
|
2016-09-03 06:32:10 +00:00
|
|
|
extern struct TConfig Config;
|
2018-05-01 21:34:14 +00:00
|
|
|
extern int SSDVSendArrayIndex;
|
|
|
|
extern pthread_mutex_t ssdv_mutex;
|
|
|
|
|
|
|
|
void LogMessage( const char *format, ... );
|
2018-02-18 17:13:14 +00:00
|
|
|
|
|
|
|
#endif /* _H_Global */
|