#ifndef Sonde_h #define Sonde_h // RX_TIMEOUT: no header detected // RX_ERROR: header detected, but data not decoded (crc error, etc.) // RX_OK: header and data ok enum RxResult { RX_OK, RX_TIMEOUT, RX_ERROR, RX_UNKNOWN, RX_NOPOS }; #define RX_UPDATERSSI 0xFFFE // Events that change what is displayed (mode, sondenr) // Keys: // 1 Button (short) or Touch (short) // 2 Button (double) or Touch (double) // 3 Button (mid) or Touch (mid) // 4 Button (long) or Touch (long) // 5 Touch1/2 (short) // 6 Touch1/2 (double) // 7 Touch1/2 (mid) // 8 Touch1/2 (long) /* Keypress => Sonde++ / Sonde-- / Display:=N*/ enum Events { EVT_NONE, EVT_KEY1SHORT, EVT_KEY1DOUBLE, EVT_KEY1MID, EVT_KEY1LONG, EVT_KEY2SHORT, EVT_KEY2DOUBLE, EVT_KEY2MID, EVT_KEY2LONG, EVT_VIEWTO, EVT_RXTO, EVT_NORXTO, EVT_MAX }; extern const char *evstring[]; extern const char *RXstr[]; #define EVENTNAME(s) evstring[s] //int8_t actions[EVT_MAX]; #define ACT_NONE 255 #define ACT_DISPLAY(n) (n) #define ACT_MAXDISPLAY 50 #define ACT_DISPLAY_SCANNER 0 #define ACT_DISPLAY_NEXT 64 #define ACT_DISPLAY_DEFAULT 63 #define ACT_DISPLAY_SPECTRUM 62 #define ACT_DISPLAY_WIFI 61 #define ACT_NEXTSONDE 65 #define ACT_PREVSONDE 66 #define ACT_ADDFREQ(n) ((n)+64) #define ACT_SONDE(n) ((n)+128) // 0000nnnn => goto display nnnn // 01000000 => goto sonde -1 // 01000001 => goto sonde +1 #define NSondeTypes 7 enum SondeType { STYPE_DFM06, STYPE_DFM09, STYPE_RS41, STYPE_RS92, STYPE_M10, STYPE_M20, STYPE_DFM }; extern const char *sondeTypeStr[NSondeTypes]; extern const char sondeTypeChar[NSondeTypes]; typedef struct st_sondeinfo { // receiver configuration bool active; SondeType type; float freq; // decoded ID char typestr[5]; // decoded type (use type if *typestr==0) char id[10]; char ser[12]; bool validID; char launchsite[18]; // decoded position float lat; // latitude float lon; // longitude float az; // azimut float vbat; // vbat % int durvolheure; // duree vol heure int durvolminute; // duree vol minute int durvolseconde; // duree vol seconde float alt; // altitude float vs; // vertical speed in m/s float hs; // horizontal speed in m/s float dir; // 0..360 uint8_t sats; // number of sats uint8_t validPos; // bit pattern for validity of above 7 fields; 0x80: position is old // decoded GPS time uint32_t time; uint16_t sec; uint32_t frame; bool validTime; // RSSI from receiver int rssi; // signal strength int32_t afc; // afc correction value // statistics uint8_t rxStat[20]; uint32_t rxStart; // millis() timestamp of continuous rx start uint32_t norxStart; // millis() timestamp of continuous no rx start uint32_t viewStart; // millis() timestamp of viewinf this sonde with current display int8_t lastState; // -1: disabled; 0: norx; 1: rx // shut down timers, currently only for RS41; -1=disabled int16_t launchKT, burstKT, countKT; uint16_t crefKT; // frame number in which countKT was last sent } SondeInfo; // rxStat: 3=undef[empty] 1=timeout[.] 2=errro[E] 0=ok[|] 4=no valid position[°] // Used for interacting with the RX background task typedef struct st_RXTask { // Variables set by Arduino main loop to value >=0 for requesting // mode change to sonde reception for sonde