mirror of
https://github.com/opentx/opentx.git
synced 2025-07-13 19:40:20 +03:00
Rename serial2 to aux_serial
This commit is contained in:
parent
0dbbfa1670
commit
c9581630ff
30 changed files with 98 additions and 94 deletions
|
@ -661,7 +661,7 @@ PACK(struct TrainerData {
|
||||||
|
|
||||||
#if defined(PCBHORUS)
|
#if defined(PCBHORUS)
|
||||||
#define EXTRA_GENERAL_FIELDS \
|
#define EXTRA_GENERAL_FIELDS \
|
||||||
NOBACKUP(uint8_t serial2Mode); \
|
NOBACKUP(uint8_t auxSerialMode); \
|
||||||
uint32_t switchConfig; \
|
uint32_t switchConfig; \
|
||||||
uint16_t potsConfig; /* two bits per pot */ \
|
uint16_t potsConfig; /* two bits per pot */ \
|
||||||
uint8_t slidersConfig; /* 1 bit per slider */ \
|
uint8_t slidersConfig; /* 1 bit per slider */ \
|
||||||
|
@ -680,7 +680,7 @@ PACK(struct TrainerData {
|
||||||
#define BLUETOOTH_FIELDS
|
#define BLUETOOTH_FIELDS
|
||||||
#endif
|
#endif
|
||||||
#define EXTRA_GENERAL_FIELDS \
|
#define EXTRA_GENERAL_FIELDS \
|
||||||
uint8_t serial2Mode:4; \
|
uint8_t auxSerialMode:4; \
|
||||||
uint8_t slidersConfig:4; \
|
uint8_t slidersConfig:4; \
|
||||||
uint8_t potsConfig; /* two bits per pot */\
|
uint8_t potsConfig; /* two bits per pot */\
|
||||||
uint8_t backlightColor; \
|
uint8_t backlightColor; \
|
||||||
|
|
|
@ -47,7 +47,7 @@ void debugPrintf(const char * format, ...)
|
||||||
#if defined(DEBUG_TRACE_BUFFER)
|
#if defined(DEBUG_TRACE_BUFFER)
|
||||||
static struct TraceElement traceBuffer[TRACE_BUFFER_LEN];
|
static struct TraceElement traceBuffer[TRACE_BUFFER_LEN];
|
||||||
static uint8_t traceBufferPos;
|
static uint8_t traceBufferPos;
|
||||||
extern Fifo<uint8_t, 512> serial2TxFifo;
|
extern Fifo<uint8_t, 512> auxSerialTxFifo;
|
||||||
gtime_t filltm(const gtime_t *t, struct gtm *tp);
|
gtime_t filltm(const gtime_t *t, struct gtm *tp);
|
||||||
|
|
||||||
void trace_event(enum TraceEvent event, uint32_t data)
|
void trace_event(enum TraceEvent event, uint32_t data)
|
||||||
|
@ -93,7 +93,7 @@ void dumpTraceBuffer()
|
||||||
if (traceBuffer[n].time == 0 && traceBuffer[n].time_ms == 0) break;
|
if (traceBuffer[n].time == 0 && traceBuffer[n].time_ms == 0) break;
|
||||||
#if !defined(SIMU)
|
#if !defined(SIMU)
|
||||||
if ((n % 5) == 0) {
|
if ((n % 5) == 0) {
|
||||||
while (!serial2TxFifo.isEmpty()) {
|
while (!auxSerialTxFifo.isEmpty()) {
|
||||||
RTOS_WAIT_TICKS(1);
|
RTOS_WAIT_TICKS(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint8_t serial2TracesEnabled();
|
uint8_t auxSerialTracesEnabled();
|
||||||
|
|
||||||
#if defined(SIMU)
|
#if defined(SIMU)
|
||||||
typedef void (*traceCallbackFunc)(const char * text);
|
typedef void (*traceCallbackFunc)(const char * text);
|
||||||
|
|
|
@ -235,9 +235,9 @@ void menuRadioHardware(event_t event)
|
||||||
|
|
||||||
#if defined(AUX_SERIAL)
|
#if defined(AUX_SERIAL)
|
||||||
case ITEM_RADIO_HARDWARE_UART3_MODE:
|
case ITEM_RADIO_HARDWARE_UART3_MODE:
|
||||||
g_eeGeneral.serial2Mode = editChoice(HW_SETTINGS_COLUMN, y, STR_UART3MODE, STR_UART3MODES, g_eeGeneral.serial2Mode, 0, UART_MODE_MAX, attr, event);
|
g_eeGeneral.auxSerialMode = editChoice(HW_SETTINGS_COLUMN, y, STR_UART3MODE, STR_UART3MODES, g_eeGeneral.auxSerialMode, 0, UART_MODE_MAX, attr, event);
|
||||||
if (attr && checkIncDec_Ret) {
|
if (attr && checkIncDec_Ret) {
|
||||||
serial2Init(g_eeGeneral.serial2Mode, modelTelemetryProtocol());
|
auxSerialInit(g_eeGeneral.auxSerialMode, modelTelemetryProtocol());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -218,9 +218,9 @@ bool menuRadioHardware(event_t event)
|
||||||
#if defined(AUX_SERIAL)
|
#if defined(AUX_SERIAL)
|
||||||
case ITEM_RADIO_HARDWARE_UART3_MODE:
|
case ITEM_RADIO_HARDWARE_UART3_MODE:
|
||||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_UART3MODE);
|
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_UART3MODE);
|
||||||
g_eeGeneral.serial2Mode = editChoice(HW_SETTINGS_COLUMN+50, y, STR_UART3MODES, g_eeGeneral.serial2Mode, 0, UART_MODE_MAX, attr, event);
|
g_eeGeneral.auxSerialMode = editChoice(HW_SETTINGS_COLUMN+50, y, STR_UART3MODES, g_eeGeneral.auxSerialMode, 0, UART_MODE_MAX, attr, event);
|
||||||
if (attr && checkIncDec_Ret) {
|
if (attr && checkIncDec_Ret) {
|
||||||
serial2Init(g_eeGeneral.serial2Mode, modelTelemetryProtocol());
|
auxSerialInit(g_eeGeneral.auxSerialMode, modelTelemetryProtocol());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -686,7 +686,7 @@ bool isRfProtocolAvailable(int protocol)
|
||||||
bool isTelemetryProtocolAvailable(int protocol)
|
bool isTelemetryProtocolAvailable(int protocol)
|
||||||
{
|
{
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
if (protocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY && g_eeGeneral.serial2Mode != UART_MODE_TELEMETRY) {
|
if (protocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY && g_eeGeneral.auxSerialMode != UART_MODE_TELEMETRY) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1363,10 +1363,10 @@ static int luaSerialWrite(lua_State * L)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if defined(AUX_SERIAL)
|
#if defined(AUX_SERIAL)
|
||||||
if (serial2Mode == UART_MODE_LUA) {
|
if (auxSerialMode == UART_MODE_LUA) {
|
||||||
size_t wr_len = len;
|
size_t wr_len = len;
|
||||||
const char* p = str;
|
const char* p = str;
|
||||||
while(wr_len--) serial2Putc(*p++);
|
while(wr_len--) auxSerialPutc(*p++);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -36,10 +36,10 @@
|
||||||
|
|
||||||
#if defined(PCBHORUS)
|
#if defined(PCBHORUS)
|
||||||
#define IS_TRAINER_EXTERNAL_MODULE() false
|
#define IS_TRAINER_EXTERNAL_MODULE() false
|
||||||
#define HAS_WIRELESS_TRAINER_HARDWARE() (g_eeGeneral.serial2Mode==UART_MODE_SBUS_TRAINER)
|
#define HAS_WIRELESS_TRAINER_HARDWARE() (g_eeGeneral.auxSerialMode==UART_MODE_SBUS_TRAINER)
|
||||||
#elif defined(PCBTARANIS)
|
#elif defined(PCBTARANIS)
|
||||||
#define IS_TRAINER_EXTERNAL_MODULE() (g_model.trainerData.mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || g_model.trainerData.mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE)
|
#define IS_TRAINER_EXTERNAL_MODULE() (g_model.trainerData.mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || g_model.trainerData.mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE)
|
||||||
#define HAS_WIRELESS_TRAINER_HARDWARE() (g_eeGeneral.serial2Mode==UART_MODE_SBUS_TRAINER)
|
#define HAS_WIRELESS_TRAINER_HARDWARE() (g_eeGeneral.auxSerialMode==UART_MODE_SBUS_TRAINER)
|
||||||
#else
|
#else
|
||||||
#define IS_TRAINER_EXTERNAL_MODULE() false
|
#define IS_TRAINER_EXTERNAL_MODULE() false
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1812,7 +1812,7 @@ void opentxInit()
|
||||||
#endif // #if !defined(EEPROM)
|
#endif // #if !defined(EEPROM)
|
||||||
|
|
||||||
#if defined(AUX_SERIAL)
|
#if defined(AUX_SERIAL)
|
||||||
serial2Init(g_eeGeneral.serial2Mode, modelTelemetryProtocol());
|
auxSerialInit(g_eeGeneral.auxSerialMode, modelTelemetryProtocol());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
|
|
|
@ -31,8 +31,8 @@ void serialPutc(char c) {
|
||||||
usbSerialPutc(c);
|
usbSerialPutc(c);
|
||||||
#endif
|
#endif
|
||||||
#if defined(AUX_SERIAL)
|
#if defined(AUX_SERIAL)
|
||||||
if (serial2TracesEnabled())
|
if (auxSerialTracesEnabled())
|
||||||
serial2Putc(c);
|
auxSerialPutc(c);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -796,7 +796,7 @@ PACK(typedef struct {
|
||||||
int8_t varioRepeat;
|
int8_t varioRepeat;
|
||||||
int8_t backgroundVolume;
|
int8_t backgroundVolume;
|
||||||
|
|
||||||
TARANIS_FIELD(uint8_t serial2Mode:6)
|
TARANIS_FIELD(uint8_t auxSerialMode:6)
|
||||||
TARANIS_FIELD(uint8_t slidersConfig:2)
|
TARANIS_FIELD(uint8_t slidersConfig:2)
|
||||||
TARANIS_FIELD(uint8_t potsConfig)
|
TARANIS_FIELD(uint8_t potsConfig)
|
||||||
TARANIS_FIELD(uint8_t backlightColor)
|
TARANIS_FIELD(uint8_t backlightColor)
|
||||||
|
@ -867,7 +867,7 @@ void convertRadioData_217_to_218(RadioData &settings)
|
||||||
ConvertSpecialFunctions_217_to_218((CustomFunctionData_v218 *)settings.customFn, settings_v217.customFn);
|
ConvertSpecialFunctions_217_to_218((CustomFunctionData_v218 *)settings.customFn, settings_v217.customFn);
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
settings.serial2Mode = settings_v217.serial2Mode;
|
settings.auxSerialMode = settings_v217.auxSerialMode;
|
||||||
settings.slidersConfig = settings_v217.slidersConfig;
|
settings.slidersConfig = settings_v217.slidersConfig;
|
||||||
settings.potsConfig = settings_v217.potsConfig;
|
settings.potsConfig = settings_v217.potsConfig;
|
||||||
settings.backlightColor = settings_v217.backlightColor;
|
settings.backlightColor = settings_v217.backlightColor;
|
||||||
|
|
|
@ -273,11 +273,11 @@ void convertRadioData_218_to_219(RadioData & settings)
|
||||||
#if defined(PCBHORUS)
|
#if defined(PCBHORUS)
|
||||||
RadioData_v218 settings_v218 = (RadioData_v218 &)settings;
|
RadioData_v218 settings_v218 = (RadioData_v218 &)settings;
|
||||||
|
|
||||||
memcpy(&settings.chkSum, &settings_v218.chkSum, offsetof(RadioData, serial2Mode) - offsetof(RadioData, chkSum));
|
memcpy(&settings.chkSum, &settings_v218.chkSum, offsetof(RadioData, auxSerialMode) - offsetof(RadioData, chkSum));
|
||||||
memcpy(&settings.calib[NUM_STICKS + 5], &settings_v218.calib[NUM_STICKS + 3], sizeof(CalibData) * (STORAGE_NUM_SLIDERS + STORAGE_NUM_MOUSE_ANALOGS));
|
memcpy(&settings.calib[NUM_STICKS + 5], &settings_v218.calib[NUM_STICKS + 3], sizeof(CalibData) * (STORAGE_NUM_SLIDERS + STORAGE_NUM_MOUSE_ANALOGS));
|
||||||
memclear(&settings.calib[NUM_STICKS + 3], sizeof(CalibData) * 2);
|
memclear(&settings.calib[NUM_STICKS + 3], sizeof(CalibData) * 2);
|
||||||
|
|
||||||
settings.serial2Mode = settings_v218.serial2Mode;
|
settings.auxSerialMode = settings_v218.auxSerialMode;
|
||||||
settings.switchConfig = settings_v218.switchConfig;
|
settings.switchConfig = settings_v218.switchConfig;
|
||||||
settings.potsConfig = settings_v218.potsConfig;
|
settings.potsConfig = settings_v218.potsConfig;
|
||||||
settings.slidersConfig = settings_v218.slidersConfig;
|
settings.slidersConfig = settings_v218.slidersConfig;
|
||||||
|
|
|
@ -506,7 +506,7 @@ static inline void check_struct_218()
|
||||||
#if defined(PCBHORUS)
|
#if defined(PCBHORUS)
|
||||||
#define EXTRA_GENERAL_FIELDS_218 \
|
#define EXTRA_GENERAL_FIELDS_218 \
|
||||||
EXTRA_GENERAL_FIELDS_GENERAL_218 \
|
EXTRA_GENERAL_FIELDS_GENERAL_218 \
|
||||||
uint8_t serial2Mode:4; \
|
uint8_t auxSerialMode:4; \
|
||||||
uint8_t slidersConfig:4; \
|
uint8_t slidersConfig:4; \
|
||||||
uint32_t switchConfig; \
|
uint32_t switchConfig; \
|
||||||
uint8_t potsConfig; /* two bits per pot */ \
|
uint8_t potsConfig; /* two bits per pot */ \
|
||||||
|
@ -526,7 +526,7 @@ static inline void check_struct_218()
|
||||||
#endif
|
#endif
|
||||||
#define EXTRA_GENERAL_FIELDS_218 \
|
#define EXTRA_GENERAL_FIELDS_218 \
|
||||||
EXTRA_GENERAL_FIELDS_GENERAL_218 \
|
EXTRA_GENERAL_FIELDS_GENERAL_218 \
|
||||||
uint8_t serial2Mode:4; \
|
uint8_t auxSerialMode:4; \
|
||||||
uint8_t slidersConfig:4; \
|
uint8_t slidersConfig:4; \
|
||||||
uint8_t potsConfig; /* two bits per pot */\
|
uint8_t potsConfig; /* two bits per pot */\
|
||||||
uint8_t backlightColor; \
|
uint8_t backlightColor; \
|
||||||
|
|
|
@ -20,11 +20,11 @@
|
||||||
|
|
||||||
#include "opentx.h"
|
#include "opentx.h"
|
||||||
|
|
||||||
uint8_t serial2Mode = 0;
|
uint8_t auxSerialMode = 0;
|
||||||
Fifo<uint8_t, 512> serial2TxFifo;
|
Fifo<uint8_t, 512> auxSerialTxFifo;
|
||||||
DMAFifo<32> serial2RxFifo __DMA (AUX_SERIAL_DMA_Stream_RX);
|
DMAFifo<32> auxSerialRxFifo __DMA (AUX_SERIAL_DMA_Stream_RX);
|
||||||
|
|
||||||
void uart3Setup(unsigned int baudrate, bool dma)
|
void auxSerialSetup(unsigned int baudrate, bool dma)
|
||||||
{
|
{
|
||||||
USART_InitTypeDef USART_InitStructure;
|
USART_InitTypeDef USART_InitStructure;
|
||||||
GPIO_InitTypeDef GPIO_InitStructure;
|
GPIO_InitTypeDef GPIO_InitStructure;
|
||||||
|
@ -49,14 +49,14 @@ void uart3Setup(unsigned int baudrate, bool dma)
|
||||||
|
|
||||||
if (dma) {
|
if (dma) {
|
||||||
DMA_InitTypeDef DMA_InitStructure;
|
DMA_InitTypeDef DMA_InitStructure;
|
||||||
serial2RxFifo.clear();
|
auxSerialRxFifo.clear();
|
||||||
USART_ITConfig(AUX_SERIAL_USART, USART_IT_RXNE, DISABLE);
|
USART_ITConfig(AUX_SERIAL_USART, USART_IT_RXNE, DISABLE);
|
||||||
USART_ITConfig(AUX_SERIAL_USART, USART_IT_TXE, DISABLE);
|
USART_ITConfig(AUX_SERIAL_USART, USART_IT_TXE, DISABLE);
|
||||||
DMA_InitStructure.DMA_Channel = AUX_SERIAL_DMA_Channel_RX;
|
DMA_InitStructure.DMA_Channel = AUX_SERIAL_DMA_Channel_RX;
|
||||||
DMA_InitStructure.DMA_PeripheralBaseAddr = CONVERT_PTR_UINT(&AUX_SERIAL_USART->DR);
|
DMA_InitStructure.DMA_PeripheralBaseAddr = CONVERT_PTR_UINT(&AUX_SERIAL_USART->DR);
|
||||||
DMA_InitStructure.DMA_Memory0BaseAddr = CONVERT_PTR_UINT(serial2RxFifo.buffer());
|
DMA_InitStructure.DMA_Memory0BaseAddr = CONVERT_PTR_UINT(auxSerialRxFifo.buffer());
|
||||||
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
|
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
|
||||||
DMA_InitStructure.DMA_BufferSize = serial2RxFifo.size();
|
DMA_InitStructure.DMA_BufferSize = auxSerialRxFifo.size();
|
||||||
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
||||||
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
||||||
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
||||||
|
@ -81,66 +81,69 @@ void uart3Setup(unsigned int baudrate, bool dma)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void serial2Init(unsigned int mode, unsigned int protocol)
|
void auxSerialInit(unsigned int mode, unsigned int protocol)
|
||||||
{
|
{
|
||||||
serial2Stop();
|
auxSerialStop();
|
||||||
|
|
||||||
serial2Mode = mode;
|
auxSerialMode = mode;
|
||||||
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case UART_MODE_TELEMETRY_MIRROR:
|
case UART_MODE_TELEMETRY_MIRROR:
|
||||||
#if defined(CROSSFIRE)
|
#if defined(CROSSFIRE)
|
||||||
if (protocol == PROTOCOL_TELEMETRY_CROSSFIRE) {
|
if (protocol == PROTOCOL_TELEMETRY_CROSSFIRE) {
|
||||||
uart3Setup(CROSSFIRE_TELEM_MIRROR_BAUDRATE, false);
|
auxSerialSetup(CROSSFIRE_TELEM_MIRROR_BAUDRATE, false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
uart3Setup(FRSKY_SPORT_BAUDRATE, false);
|
auxSerialSetup(FRSKY_SPORT_BAUDRATE, false);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if defined(DEBUG) || defined(CLI)
|
#if defined(DEBUG) || defined(CLI)
|
||||||
case UART_MODE_DEBUG:
|
case UART_MODE_DEBUG:
|
||||||
uart3Setup(DEBUG_BAUDRATE, false);
|
auxSerialSetup(DEBUG_BAUDRATE, false);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case UART_MODE_TELEMETRY:
|
case UART_MODE_TELEMETRY:
|
||||||
if (protocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY) {
|
if (protocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY) {
|
||||||
uart3Setup(FRSKY_D_BAUDRATE, true);
|
auxSerialSetup(FRSKY_D_BAUDRATE, true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case UART_MODE_LUA:
|
case UART_MODE_LUA:
|
||||||
uart3Setup(DEBUG_BAUDRATE, false);
|
auxSerialSetup(DEBUG_BAUDRATE, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void serial2Putc(char c)
|
void auxSerialPutc(char c)
|
||||||
{
|
{
|
||||||
#if !defined(SIMU)
|
#if !defined(SIMU)
|
||||||
int n = 0;
|
int n = 0;
|
||||||
while (serial2TxFifo.isFull()) {
|
while (auxSerialTxFifo.isFull()) {
|
||||||
delay_ms(1);
|
delay_ms(1);
|
||||||
if (++n > 100) return;
|
if (++n > 100) return;
|
||||||
}
|
}
|
||||||
serial2TxFifo.push(c);
|
auxSerialTxFifo.push(c);
|
||||||
USART_ITConfig(AUX_SERIAL_USART, USART_IT_TXE, ENABLE);
|
USART_ITConfig(AUX_SERIAL_USART, USART_IT_TXE, ENABLE);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void serial2SbusInit()
|
void auxSerialSbusInit()
|
||||||
{
|
{
|
||||||
uart3Setup(SBUS_BAUDRATE, true);
|
auxSerialSetup(SBUS_BAUDRATE, true);
|
||||||
AUX_SERIAL_USART->CR1 |= USART_CR1_M | USART_CR1_PCE ;
|
AUX_SERIAL_USART->CR1 |= USART_CR1_M | USART_CR1_PCE ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void serial2Stop()
|
void auxSerialStop()
|
||||||
{
|
{
|
||||||
DMA_DeInit(AUX_SERIAL_DMA_Stream_RX);
|
DMA_DeInit(AUX_SERIAL_DMA_Stream_RX);
|
||||||
USART_DeInit(AUX_SERIAL_USART);
|
USART_DeInit(AUX_SERIAL_USART);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t serial2TracesEnabled()
|
uint8_t auxSerialTracesEnabled()
|
||||||
{
|
{
|
||||||
#if defined(DEBUG)
|
#if defined(DEBUG)
|
||||||
return (serial2Mode == UART_MODE_DEBUG);
|
return (auxSerialMode == UART_MODE_DEBUG);
|
||||||
#else
|
#else
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
|
@ -153,7 +156,7 @@ extern "C" void AUX_SERIAL_USART_IRQHandler(void)
|
||||||
// Send
|
// Send
|
||||||
if (USART_GetITStatus(AUX_SERIAL_USART, USART_IT_TXE) != RESET) {
|
if (USART_GetITStatus(AUX_SERIAL_USART, USART_IT_TXE) != RESET) {
|
||||||
uint8_t txchar;
|
uint8_t txchar;
|
||||||
if (serial2TxFifo.pop(txchar)) {
|
if (auxSerialTxFifo.pop(txchar)) {
|
||||||
/* Write one byte to the transmit data register */
|
/* Write one byte to the transmit data register */
|
||||||
USART_SendData(AUX_SERIAL_USART, txchar);
|
USART_SendData(AUX_SERIAL_USART, txchar);
|
||||||
}
|
}
|
||||||
|
@ -169,7 +172,7 @@ extern "C" void AUX_SERIAL_USART_IRQHandler(void)
|
||||||
while (status & (USART_FLAG_RXNE | USART_FLAG_ERRORS)) {
|
while (status & (USART_FLAG_RXNE | USART_FLAG_ERRORS)) {
|
||||||
uint8_t data = AUX_SERIAL_USART->DR;
|
uint8_t data = AUX_SERIAL_USART->DR;
|
||||||
if (!(status & USART_FLAG_ERRORS)) {
|
if (!(status & USART_FLAG_ERRORS)) {
|
||||||
switch (serial2Mode) {
|
switch (auxSerialMode) {
|
||||||
case UART_MODE_DEBUG:
|
case UART_MODE_DEBUG:
|
||||||
cliRxFifo.push(data);
|
cliRxFifo.push(data);
|
||||||
break;
|
break;
|
|
@ -116,7 +116,7 @@ else()
|
||||||
${BOOTLOADER_SRC}
|
${BOOTLOADER_SRC}
|
||||||
../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c
|
../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c
|
||||||
../../../../../serial.cpp
|
../../../../../serial.cpp
|
||||||
../serial2_driver.cpp
|
../aux_serial_driver.cpp
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -231,10 +231,11 @@ int main()
|
||||||
delaysInit(); // needed for lcdInit()
|
delaysInit(); // needed for lcdInit()
|
||||||
|
|
||||||
#if defined(DEBUG)
|
#if defined(DEBUG)
|
||||||
serial2Init(UART_MODE_DEBUG, 0); // default serial mode (None if DEBUG not defined)
|
auxSerialInit(UART_MODE_DEBUG, 0); // default serial mode (None if DEBUG not defined)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__enable_irq();
|
__enable_irq();
|
||||||
|
|
||||||
TRACE("\nBootloader started :)");
|
TRACE("\nBootloader started :)");
|
||||||
|
|
||||||
lcdInit();
|
lcdInit();
|
||||||
|
|
|
@ -118,7 +118,7 @@ if(INTERNAL_GPS)
|
||||||
message("Horus: Internal GPS enabled")
|
message("Horus: Internal GPS enabled")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(AUX_SERIAL_DRIVER ../common/arm/stm32/serial2_driver.cpp)
|
set(AUX_SERIAL_DRIVER ../common/arm/stm32/aux_serial_driver.cpp)
|
||||||
|
|
||||||
set(GVAR_SCREEN model_gvars.cpp)
|
set(GVAR_SCREEN model_gvars.cpp)
|
||||||
|
|
||||||
|
|
|
@ -178,7 +178,7 @@ void boardInit()
|
||||||
delaysInit();
|
delaysInit();
|
||||||
|
|
||||||
#if defined(DEBUG)
|
#if defined(DEBUG)
|
||||||
serial2Init(0, 0); // default serial mode (None if DEBUG not defined)
|
auxSerialInit(0, 0); // default serial mode (None if DEBUG not defined)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__enable_irq();
|
__enable_irq();
|
||||||
|
@ -261,7 +261,7 @@ void checkTrainerSettings()
|
||||||
stop_trainer_ppm();
|
stop_trainer_ppm();
|
||||||
break;
|
break;
|
||||||
case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT:
|
case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT:
|
||||||
serial2Stop();
|
auxSerialStop();
|
||||||
}
|
}
|
||||||
|
|
||||||
currentTrainerMode = requiredTrainerMode;
|
currentTrainerMode = requiredTrainerMode;
|
||||||
|
@ -270,8 +270,8 @@ void checkTrainerSettings()
|
||||||
init_trainer_ppm();
|
init_trainer_ppm();
|
||||||
break;
|
break;
|
||||||
case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT:
|
case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT:
|
||||||
if (g_eeGeneral.serial2Mode == UART_MODE_SBUS_TRAINER) {
|
if (g_eeGeneral.auxSerialMode == UART_MODE_SBUS_TRAINER) {
|
||||||
serial2SbusInit();
|
auxSerialSbusInit();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// no break
|
// no break
|
||||||
|
|
|
@ -631,18 +631,18 @@ void gpsSendByte(uint8_t byte);
|
||||||
// Second serial port driver
|
// Second serial port driver
|
||||||
#define AUX_SERIAL
|
#define AUX_SERIAL
|
||||||
#define DEBUG_BAUDRATE 115200
|
#define DEBUG_BAUDRATE 115200
|
||||||
extern uint8_t serial2Mode;
|
extern uint8_t auxSerialMode;
|
||||||
void serial2Init(unsigned int mode, unsigned int protocol);
|
void auxSerialInit(unsigned int mode, unsigned int protocol);
|
||||||
void serial2Putc(char c);
|
void auxSerialPutc(char c);
|
||||||
#define serial2TelemetryInit(protocol) serial2Init(UART_MODE_TELEMETRY, protocol)
|
#define auxSerialTelemetryInit(protocol) auxSerialInit(UART_MODE_TELEMETRY, protocol)
|
||||||
void serial2SbusInit(void);
|
void auxSerialSbusInit(void);
|
||||||
void serial2Stop(void);
|
void auxSerialStop(void);
|
||||||
#define USART_FLAG_ERRORS (USART_FLAG_ORE | USART_FLAG_NE | USART_FLAG_FE | USART_FLAG_PE)
|
#define USART_FLAG_ERRORS (USART_FLAG_ORE | USART_FLAG_NE | USART_FLAG_FE | USART_FLAG_PE)
|
||||||
|
|
||||||
// BT driver
|
// BT driver
|
||||||
#define BT_TX_FIFO_SIZE 64
|
#define BT_TX_FIFO_SIZE 64
|
||||||
#define BT_RX_FIFO_SIZE 128
|
#define BT_RX_FIFO_SIZE 128
|
||||||
#define BLUETOOTH_BOOTLOADER_BAUDRATE 230400
|
#define BLUETOOTH_BOOTLOADER_BAUDRATE 230400
|
||||||
#define BLUETOOTH_FACTORY_BAUDRATE 57600
|
#define BLUETOOTH_FACTORY_BAUDRATE 57600
|
||||||
#define BLUETOOTH_DEFAULT_BAUDRATE 115200
|
#define BLUETOOTH_DEFAULT_BAUDRATE 115200
|
||||||
void bluetoothInit(uint32_t baudrate, bool enable);
|
void bluetoothInit(uint32_t baudrate, bool enable);
|
||||||
|
@ -657,7 +657,7 @@ void checkTrainerSettings(void);
|
||||||
#include "fifo.h"
|
#include "fifo.h"
|
||||||
#include "dmafifo.h"
|
#include "dmafifo.h"
|
||||||
extern DMAFifo<512> telemetryFifo;
|
extern DMAFifo<512> telemetryFifo;
|
||||||
extern DMAFifo<32> serial2RxFifo;
|
extern DMAFifo<32> auxSerialRxFifo;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if NUM_PWMSTICKS > 0
|
#if NUM_PWMSTICKS > 0
|
||||||
|
|
|
@ -121,7 +121,7 @@ set(TARGET_SRC
|
||||||
haptic_driver.cpp
|
haptic_driver.cpp
|
||||||
sdcard_driver.cpp
|
sdcard_driver.cpp
|
||||||
massstorage.cpp
|
massstorage.cpp
|
||||||
serial2_driver.cpp
|
aux_serial_driver.cpp
|
||||||
audio_driver.cpp
|
audio_driver.cpp
|
||||||
trainer_driver.cpp
|
trainer_driver.cpp
|
||||||
)
|
)
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
/** Pins description corresponding to Rxd,Txd, (UART pins) */
|
/** Pins description corresponding to Rxd,Txd, (UART pins) */
|
||||||
#define SECOND_SERIAL_PINS {PINS_UART}
|
#define SECOND_SERIAL_PINS {PINS_UART}
|
||||||
|
|
||||||
Fifo<uint8_t, 512> serial2RxFifo;
|
Fifo<uint8_t, 512> auxSerialRxFifo;
|
||||||
|
|
||||||
#if !defined(SIMU)
|
#if !defined(SIMU)
|
||||||
/*
|
/*
|
||||||
|
@ -37,7 +37,7 @@ Fifo<uint8_t, 512> serial2RxFifo;
|
||||||
* This function is synchronous (i.e. uses polling).
|
* This function is synchronous (i.e. uses polling).
|
||||||
* c Character to send.
|
* c Character to send.
|
||||||
*/
|
*/
|
||||||
void serial2Putc(const unsigned char c)
|
void auxSerialPutc(const unsigned char c)
|
||||||
{
|
{
|
||||||
Uart *pUart = SECOND_SERIAL_UART;
|
Uart *pUart = SECOND_SERIAL_UART;
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ void serial2Putc(const unsigned char c)
|
||||||
pUart->UART_THR = c;
|
pUart->UART_THR = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t serial2TracesEnabled()
|
uint8_t auxSerialTracesEnabled()
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,7 @@ extern "C" void UART0_IRQHandler()
|
||||||
{
|
{
|
||||||
if ( SECOND_SERIAL_UART->UART_SR & UART_SR_RXRDY )
|
if ( SECOND_SERIAL_UART->UART_SR & UART_SR_RXRDY )
|
||||||
{
|
{
|
||||||
serial2RxFifo.push(SECOND_SERIAL_UART->UART_RHR);
|
auxSerialRxFifo.push(SECOND_SERIAL_UART->UART_RHR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,14 +110,14 @@ extern "C" void UART0_IRQHandler()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(TELEMETRY_FRSKY)
|
#if defined(TELEMETRY_FRSKY)
|
||||||
void serial2TelemetryInit(unsigned int /*protocol*/)
|
void auxSerialTelemetryInit(unsigned int /*protocol*/)
|
||||||
{
|
{
|
||||||
SECOND_UART_Configure(FRSKY_D_BAUDRATE, Master_frequency);
|
SECOND_UART_Configure(FRSKY_D_BAUDRATE, Master_frequency);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool telemetrySecondPortReceive(uint8_t & data)
|
bool telemetrySecondPortReceive(uint8_t & data)
|
||||||
{
|
{
|
||||||
return serial2RxFifo.pop(data);
|
return auxSerialRxFifo.pop(data);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -388,8 +388,8 @@ void rxPdcUsart( void (*pChProcess)(uint8_t x) );
|
||||||
void sportSendBuffer(const uint8_t * buffer, uint32_t size);
|
void sportSendBuffer(const uint8_t * buffer, uint32_t size);
|
||||||
|
|
||||||
// Second UART driver
|
// Second UART driver
|
||||||
void serial2TelemetryInit(unsigned int protocol);
|
void auxSerialTelemetryInit(unsigned int protocol);
|
||||||
void serial2Putc(const unsigned char c);
|
void auxSerialPutc(const unsigned char c);
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
bool telemetrySecondPortReceive(uint8_t & data);
|
bool telemetrySecondPortReceive(uint8_t & data);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -23,7 +23,7 @@ if(PCB STREQUAL X9E)
|
||||||
top_lcd_driver.cpp
|
top_lcd_driver.cpp
|
||||||
startup_stm32f40_41xxx.s
|
startup_stm32f40_41xxx.s
|
||||||
)
|
)
|
||||||
set(AUX_SERIAL_DRIVER ../common/arm/stm32/serial2_driver.cpp)
|
set(AUX_SERIAL_DRIVER ../common/arm/stm32/aux_serial_driver.cpp)
|
||||||
if(STICKS STREQUAL HORUS)
|
if(STICKS STREQUAL HORUS)
|
||||||
add_definitions(-DHORUS_STICKS)
|
add_definitions(-DHORUS_STICKS)
|
||||||
endif()
|
endif()
|
||||||
|
@ -48,7 +48,7 @@ elseif(PCB STREQUAL X9D+)
|
||||||
set(BITMAPS_TARGET taranis_bitmaps)
|
set(BITMAPS_TARGET taranis_bitmaps)
|
||||||
set(FONTS_TARGET taranis_fonts)
|
set(FONTS_TARGET taranis_fonts)
|
||||||
set(LCD_DRIVER lcd_driver_spi.cpp)
|
set(LCD_DRIVER lcd_driver_spi.cpp)
|
||||||
set(AUX_SERIAL_DRIVER ../common/arm/stm32/serial2_driver.cpp)
|
set(AUX_SERIAL_DRIVER ../common/arm/stm32/aux_serial_driver.cpp)
|
||||||
set(GVAR_SCREEN model_gvars.cpp)
|
set(GVAR_SCREEN model_gvars.cpp)
|
||||||
set(STATUS_LEDS NO)
|
set(STATUS_LEDS NO)
|
||||||
elseif(PCB STREQUAL X9D)
|
elseif(PCB STREQUAL X9D)
|
||||||
|
@ -65,7 +65,7 @@ elseif(PCB STREQUAL X9D)
|
||||||
set(BITMAPS_TARGET taranis_bitmaps)
|
set(BITMAPS_TARGET taranis_bitmaps)
|
||||||
set(FONTS_TARGET taranis_fonts)
|
set(FONTS_TARGET taranis_fonts)
|
||||||
set(LCD_DRIVER lcd_driver_aspi.cpp)
|
set(LCD_DRIVER lcd_driver_aspi.cpp)
|
||||||
set(AUX_SERIAL_DRIVER ../common/arm/stm32/serial2_driver.cpp)
|
set(AUX_SERIAL_DRIVER ../common/arm/stm32/aux_serial_driver.cpp)
|
||||||
set(GVAR_SCREEN model_gvars.cpp)
|
set(GVAR_SCREEN model_gvars.cpp)
|
||||||
set(STATUS_LEDS NO)
|
set(STATUS_LEDS NO)
|
||||||
elseif(PCB STREQUAL X7)
|
elseif(PCB STREQUAL X7)
|
||||||
|
|
|
@ -228,7 +228,7 @@ void boardInit()
|
||||||
usbInit();
|
usbInit();
|
||||||
|
|
||||||
#if defined(DEBUG) && defined(AUX_SERIAL_GPIO)
|
#if defined(DEBUG) && defined(AUX_SERIAL_GPIO)
|
||||||
serial2Init(0, 0); // default serial mode (None if DEBUG not defined)
|
auxSerialInit(0, 0); // default serial mode (None if DEBUG not defined)
|
||||||
TRACE("\nTaranis board started :)");
|
TRACE("\nTaranis board started :)");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -369,7 +369,7 @@ void checkTrainerSettings()
|
||||||
break;
|
break;
|
||||||
#if defined(TRAINER_BATTERY_COMPARTMENT)
|
#if defined(TRAINER_BATTERY_COMPARTMENT)
|
||||||
case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT:
|
case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT:
|
||||||
serial2Stop();
|
auxSerialStop();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -386,8 +386,8 @@ void checkTrainerSettings()
|
||||||
break;
|
break;
|
||||||
#if defined(TRAINER_BATTERY_COMPARTMENT)
|
#if defined(TRAINER_BATTERY_COMPARTMENT)
|
||||||
case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT:
|
case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT:
|
||||||
if (g_eeGeneral.serial2Mode == UART_MODE_SBUS_TRAINER) {
|
if (g_eeGeneral.auxSerialMode == UART_MODE_SBUS_TRAINER) {
|
||||||
serial2SbusInit();
|
auxSerialSbusInit();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// no break
|
// no break
|
||||||
|
|
|
@ -773,12 +773,12 @@ void hapticOff(void);
|
||||||
#if defined(AUX_SERIAL_GPIO)
|
#if defined(AUX_SERIAL_GPIO)
|
||||||
#define DEBUG_BAUDRATE 115200
|
#define DEBUG_BAUDRATE 115200
|
||||||
#define AUX_SERIAL
|
#define AUX_SERIAL
|
||||||
extern uint8_t serial2Mode;
|
extern uint8_t auxSerialMode;
|
||||||
void serial2Init(unsigned int mode, unsigned int protocol);
|
void auxSerialInit(unsigned int mode, unsigned int protocol);
|
||||||
void serial2Putc(char c);
|
void auxSerialPutc(char c);
|
||||||
#define serial2TelemetryInit(protocol) serial2Init(UART_MODE_TELEMETRY, protocol)
|
#define auxSerialTelemetryInit(protocol) auxSerialInit(UART_MODE_TELEMETRY, protocol)
|
||||||
void serial2SbusInit(void);
|
void auxSerialSbusInit(void);
|
||||||
void serial2Stop(void);
|
void auxSerialStop(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// BT driver
|
// BT driver
|
||||||
|
@ -876,7 +876,7 @@ void checkTrainerSettings(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern Fifo<uint8_t, TELEMETRY_FIFO_SIZE> telemetryFifo;
|
extern Fifo<uint8_t, TELEMETRY_FIFO_SIZE> telemetryFifo;
|
||||||
extern DMAFifo<32> serial2RxFifo;
|
extern DMAFifo<32> auxSerialRxFifo;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Gyro driver
|
// Gyro driver
|
||||||
|
|
|
@ -186,8 +186,8 @@ uint8_t telemetryGetByte(uint8_t * byte)
|
||||||
{
|
{
|
||||||
#if defined(AUX_SERIAL)
|
#if defined(AUX_SERIAL)
|
||||||
if (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY) {
|
if (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY) {
|
||||||
if (serial2Mode == UART_MODE_TELEMETRY)
|
if (auxSerialMode == UART_MODE_TELEMETRY)
|
||||||
return serial2RxFifo.pop(*byte);
|
return auxSerialRxFifo.pop(*byte);
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -311,7 +311,7 @@ int sbusGetByte(uint8_t * byte)
|
||||||
#endif
|
#endif
|
||||||
#if defined(AUX_SERIAL_USART)
|
#if defined(AUX_SERIAL_USART)
|
||||||
case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT:
|
case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT:
|
||||||
return serial2RxFifo.pop(*byte);
|
return auxSerialRxFifo.pop(*byte);
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -185,8 +185,8 @@ void processCrossfireTelemetryFrame()
|
||||||
void processCrossfireTelemetryData(uint8_t data)
|
void processCrossfireTelemetryData(uint8_t data)
|
||||||
{
|
{
|
||||||
#if defined(AUX_SERIAL)
|
#if defined(AUX_SERIAL)
|
||||||
if (g_eeGeneral.serial2Mode == UART_MODE_TELEMETRY_MIRROR) {
|
if (g_eeGeneral.auxSerialMode == UART_MODE_TELEMETRY_MIRROR) {
|
||||||
serial2Putc(data);
|
auxSerialPutc(data);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,8 @@ void processFrskyTelemetryData(uint8_t data)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(AUX_SERIAL)
|
#if defined(AUX_SERIAL)
|
||||||
if (g_eeGeneral.serial2Mode == UART_MODE_TELEMETRY_MIRROR) {
|
if (g_eeGeneral.auxSerialMode == UART_MODE_TELEMETRY_MIRROR) {
|
||||||
serial2Putc(data);
|
auxSerialPutc(data);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -288,7 +288,7 @@ void telemetryInit(uint8_t protocol)
|
||||||
#if defined(AUX_SERIAL) || defined(PCBSKY9X)
|
#if defined(AUX_SERIAL) || defined(PCBSKY9X)
|
||||||
else if (protocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY) {
|
else if (protocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY) {
|
||||||
telemetryPortInit(0, TELEMETRY_SERIAL_DEFAULT);
|
telemetryPortInit(0, TELEMETRY_SERIAL_DEFAULT);
|
||||||
serial2TelemetryInit(PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY);
|
auxSerialTelemetryInit(PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue