/* * SoftRF.h * Copyright (C) 2016-2021 Linar Yusupov * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef SOFTRF_H #define SOFTRF_H #if defined(ARDUINO) #include #endif /* ARDUINO */ #if defined(ENERGIA_ARCH_CC13XX) || defined(ENERGIA_ARCH_CC13X2) #include #endif /* ENERGIA_ARCH_CC13XX || ENERGIA_ARCH_CC13X2 */ #if defined(RASPBERRY_PI) #include #endif /* RASPBERRY_PI */ #define SOFTRF_FIRMWARE_VERSION "1.0-rc9" #define SOFTRF_IDENT "SoftRF-" #define ENTRY_EXPIRATION_TIME 10 /* seconds */ #define LED_EXPIRATION_TIME 5 /* seconds */ #define EXPORT_EXPIRATION_TIME 5 /* seconds */ /* * If you need for SoftRF to operate in wireless * client mode - specify your local AP's SSID/PSK: * * #define MY_ACCESSPOINT_SSID "My_AP_SSID" * #define MY_ACCESSPOINT_PSK "My_AP_PSK" * * If SoftRF's built-in AP is not stable enough for you, consider * to use "reverse" operation when your smartphone is acting * as an AP for the SoftRF unit as a client: * * #define MY_ACCESSPOINT_SSID "AndroidAP" * #define MY_ACCESSPOINT_PSK "12345678" */ // Default mode is AP with // SSID: SoftRF-XXXXXX // KEY: 12345678 // IP: 192.168.1.1 // NETMASK: 255.255.255.0 #define MY_ACCESSPOINT_SSID "" #define MY_ACCESSPOINT_PSK "" #define RELAY_DST_PORT 12390 #define RELAY_SRC_PORT (RELAY_DST_PORT - 1) #define GDL90_DST_PORT 4000 #define NMEA_UDP_PORT 10110 #define NMEA_TCP_PORT 2000 /* * Serial I/O default values. * Can be overridden by platfrom-specific code. */ #if !defined(SERIAL_IN_BR) /* * 9600 is default value of NMEA baud rate * for most of GNSS modules * being used in SoftRF project */ #define SERIAL_IN_BR 9600 #endif #if !defined(SERIAL_IN_BITS) #define SERIAL_IN_BITS SERIAL_8N1 #endif /* * 38400 is known as maximum baud rate * that HC-05 Bluetooth module * can handle without symbols loss. * * Applicable for Standalone Edition. Inherited by most of other SoftRF platforms. */ #define STD_OUT_BR 38400 #define STD_OUT_BITS SERIAL_8N1 #if !defined(SERIAL_OUT_BR) #define SERIAL_OUT_BR STD_OUT_BR #endif #if !defined(SERIAL_OUT_BITS) #define SERIAL_OUT_BITS STD_OUT_BITS #endif #define UAT_RECEIVER_BR 2000000 #if defined(PREMIUM_PACKAGE) && !defined(RASPBERRY_PI) #define ENABLE_AHRS #endif /* PREMIUM_PACKAGE */ typedef struct UFO { uint8_t raw[34]; time_t timestamp; uint8_t protocol; uint32_t addr; uint8_t addr_type; float latitude; float longitude; float altitude; float pressure_altitude; float course; /* CoG */ float speed; /* ground speed in knots */ uint8_t aircraft_type; float vs; /* feet per minute */ bool stealth; bool no_track; int8_t ns[4]; int8_t ew[4]; float geoid_separation; /* metres */ uint16_t hdop; /* cm */ int8_t rssi; /* SX1276 only */ /* 'legacy' specific data */ float distance; float bearing; int8_t alarm_level; /* bitmap of issued voice/tone/ble/... alerts */ uint8_t alert; /* ADS-B (ES, UAT, GDL90) specific data */ uint8_t callsign[8]; } ufo_t; typedef struct hardware_info { byte model; byte revision; byte soc; byte rf; byte gnss; byte baro; byte display; #if defined(ENABLE_AHRS) byte ahrs; #endif /* ENABLE_AHRS */ } hardware_info_t; typedef struct IODev_ops_struct { const char name[16]; void (*setup)(); void (*loop)(); void (*fini)(); int (*available)(void); int (*read)(void); size_t (*write)(const uint8_t *buffer, size_t size); } IODev_ops_t; enum { SOFTRF_MODE_NORMAL, SOFTRF_MODE_WATCHOUT, SOFTRF_MODE_BRIDGE, SOFTRF_MODE_RELAY, SOFTRF_MODE_TXRX_TEST, SOFTRF_MODE_LOOPBACK, SOFTRF_MODE_UAV, SOFTRF_MODE_RECEIVER }; enum { SOFTRF_MODEL_STANDALONE, SOFTRF_MODEL_PRIME, SOFTRF_MODEL_UAV, SOFTRF_MODEL_PRIME_MK2, SOFTRF_MODEL_RASPBERRY, SOFTRF_MODEL_UAT, SOFTRF_MODEL_SKYVIEW, SOFTRF_MODEL_RETRO, SOFTRF_MODEL_SKYWATCH, SOFTRF_MODEL_DONGLE, SOFTRF_MODEL_MULTI, SOFTRF_MODEL_UNI, SOFTRF_MODEL_MINI, SOFTRF_MODEL_BADGE }; enum { SOFTRF_SHUTDOWN_NONE, SOFTRF_SHUTDOWN_DEFAULT, SOFTRF_SHUTDOWN_DEBUG, SOFTRF_SHUTDOWN_ABORT, SOFTRF_SHUTDOWN_WATCHDOG, SOFTRF_SHUTDOWN_NMEA, SOFTRF_SHUTDOWN_BUTTON, SOFTRF_SHUTDOWN_LOWBAT, SOFTRF_SHUTDOWN_SENSOR }; static inline uint32_t DevID_Mapper(uint32_t id) { /* remap address to avoid overlapping with congested FLARM range */ if (((id & 0x00FFFFFF) >= 0xDD0000) && ((id & 0x00FFFFFF) <= 0xDFFFFF)) { id += 0x100000; } return id; } extern ufo_t ThisAircraft; extern hardware_info_t hw_info; extern const float txrx_test_positions[90][2] PROGMEM; extern void shutdown(int); #define TXRX_TEST_NUM_POSITIONS (sizeof(txrx_test_positions) / sizeof(float) / 2) #define TXRX_TEST_ALTITUDE 438.0 #define TXRX_TEST_COURSE 280.0 #define TXRX_TEST_SPEED 50.0 #define TXRX_TEST_VS -300.0 //#define ENABLE_TTN //#define ENABLE_BT_VOICE //#define TEST_PAW_ON_NICERF_SV610_FW466 #define DO_GDL90_FF_EXT #define LOGGER_IS_ENABLED 0 #if LOGGER_IS_ENABLED #define StdOut LogFile #else #define StdOut Serial #endif /* LOGGER_IS_ENABLED */ #endif /* SOFTRF_H */