2019-04-03 15:16:51 +00:00
|
|
|
|
|
|
|
#ifndef Sonde_h
|
|
|
|
#define Sonde_H
|
|
|
|
|
2019-04-15 18:28:50 +00:00
|
|
|
#include "aprs.h"
|
|
|
|
|
2019-04-05 18:05:18 +00:00
|
|
|
// RX_TIMEOUT: no header detected
|
|
|
|
// RX_ERROR: header detected, but data not decoded (crc error, etc.)
|
|
|
|
// RX_OK: header and data ok
|
2019-04-17 12:54:08 +00:00
|
|
|
enum RxResult { RX_OK, RX_TIMEOUT, RX_ERROR, RX_UNKNOWN };
|
2019-04-05 18:05:18 +00:00
|
|
|
|
|
|
|
enum SondeType { STYPE_DFM06, STYPE_DFM09, STYPE_RS41 };
|
|
|
|
extern const char *sondeTypeStr[5];
|
|
|
|
|
2019-04-15 18:28:50 +00:00
|
|
|
typedef struct st_rdzconfig {
|
2019-04-26 17:21:11 +00:00
|
|
|
int button_pin; // PIN port number menu button (for some boards)
|
|
|
|
int led_pout; // POUT port number of LED (used as serial monitor)
|
2019-04-23 11:08:02 +00:00
|
|
|
int oled_sda; // OLED data pin
|
|
|
|
int oled_scl; // OLED clock pin
|
|
|
|
int oled_rst; // OLED reset pin
|
|
|
|
int debug; // show port and config options after reboot
|
|
|
|
int wifi; // connect to known WLAN 0=skip
|
|
|
|
int wifiap; // enable/disable WiFi AccessPoint mode 0=disable
|
|
|
|
int startfreq; // spectrum display start freq (400, 401, ...)
|
|
|
|
int channelbw; // spectrum channel bandwidth (valid: 5, 10, 20, 25, 50, 100 kHz)
|
|
|
|
int spectrum; // show freq spectrum for n seconds 0=disable
|
|
|
|
int timer; // show remaining time in spectrum 0=disable
|
|
|
|
int marker; // show freq marker in spectrum 0=disable
|
|
|
|
int maxsonde; // number of max sonde in scan (range=1-99)
|
2019-04-15 18:28:50 +00:00
|
|
|
int noisefloor; // for spectrum display
|
2019-04-23 11:08:02 +00:00
|
|
|
char call[9]; // APRS callsign
|
|
|
|
char passcode[9]; // APRS passcode
|
2019-04-15 18:28:50 +00:00
|
|
|
// for now, one feed for each type is enough, but might get extended to more?
|
|
|
|
struct st_feedinfo udpfeed; // target for AXUDP messages
|
|
|
|
struct st_feedinfo tcpfeed; // target for APRS-IS TCP connections
|
|
|
|
} RDZConfig;
|
|
|
|
|
2019-04-03 15:16:51 +00:00
|
|
|
typedef struct st_sondeinfo {
|
|
|
|
// receiver configuration
|
2019-04-23 11:08:02 +00:00
|
|
|
bool active;
|
2019-04-05 18:05:18 +00:00
|
|
|
SondeType type;
|
2019-04-03 15:16:51 +00:00
|
|
|
float freq;
|
|
|
|
// decoded ID
|
|
|
|
char id[10];
|
|
|
|
bool validID;
|
2019-04-23 11:08:02 +00:00
|
|
|
char *launchsite;
|
2019-04-03 15:16:51 +00:00
|
|
|
// decoded position
|
2019-04-23 11:08:02 +00:00
|
|
|
float lat; // latitude
|
|
|
|
float lon; // longitude
|
|
|
|
float alt; // altitude
|
|
|
|
float vs; // vertical speed
|
|
|
|
float hs; // horizontal speed
|
|
|
|
float dir; // 0..360
|
2019-04-05 21:32:26 +00:00
|
|
|
uint8_t validPos; // bit pattern for validity of above 6 fields
|
2019-04-03 15:16:51 +00:00
|
|
|
// RSSI from receiver
|
2019-04-23 11:08:02 +00:00
|
|
|
int rssi; // signal strength
|
2019-04-05 18:05:18 +00:00
|
|
|
uint8_t rxStat[20];
|
2019-04-03 15:16:51 +00:00
|
|
|
} SondeInfo;
|
2019-04-05 18:05:18 +00:00
|
|
|
// rxState: 0=undef[empty] 1=timeout[.] 2=errro[E] 3=ok[1]
|
2019-04-03 15:16:51 +00:00
|
|
|
|
2019-04-05 18:05:18 +00:00
|
|
|
|
2019-04-23 11:08:02 +00:00
|
|
|
#define MAXSONDE 99
|
2019-04-03 15:16:51 +00:00
|
|
|
|
|
|
|
class Sonde
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
public:
|
2019-04-15 18:28:50 +00:00
|
|
|
RDZConfig config;
|
2019-04-09 22:29:11 +00:00
|
|
|
int currentSonde = 0;
|
2019-04-08 17:22:08 +00:00
|
|
|
int nSonde;
|
|
|
|
SondeInfo sondeList[MAXSONDE+1];
|
|
|
|
|
2019-04-15 18:59:30 +00:00
|
|
|
Sonde();
|
2019-04-16 15:51:41 +00:00
|
|
|
void setConfig(const char *str);
|
2019-04-15 18:59:30 +00:00
|
|
|
|
2019-04-05 18:05:18 +00:00
|
|
|
void clearSonde();
|
2019-04-23 11:08:02 +00:00
|
|
|
void addSonde(float frequency, SondeType type, int active, char *launchsite);
|
2019-04-05 18:05:18 +00:00
|
|
|
void nextConfig();
|
|
|
|
void setup();
|
|
|
|
|
|
|
|
int receiveFrame();
|
|
|
|
SondeInfo *si();
|
|
|
|
|
2019-04-03 15:16:51 +00:00
|
|
|
void updateDisplayPos();
|
|
|
|
void updateDisplayPos2();
|
|
|
|
void updateDisplayID();
|
|
|
|
void updateDisplayRSSI();
|
|
|
|
void updateDisplayRXConfig();
|
2019-04-05 18:05:18 +00:00
|
|
|
void updateStat();
|
|
|
|
void updateDisplayIP();
|
2019-04-03 15:16:51 +00:00
|
|
|
void updateDisplay();
|
2019-04-05 18:05:18 +00:00
|
|
|
void updateDisplayScanner();
|
|
|
|
void clearDisplay();
|
2019-04-08 17:22:08 +00:00
|
|
|
void setIP(const char *ip, bool isAP);
|
2019-04-26 21:09:09 +00:00
|
|
|
void clearIP();
|
2019-04-03 15:16:51 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
extern Sonde sonde;
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|