1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-25 01:05:10 +03:00
AUX2 added
This commit is contained in:
3djc 2020-05-15 14:51:36 +02:00 committed by GitHub
parent 1cad34eb73
commit f0d8d340fd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
32 changed files with 323 additions and 17 deletions

View file

@ -666,7 +666,8 @@ PACK(struct TrainerData {
#if defined(PCBHORUS) #if defined(PCBHORUS)
#define EXTRA_GENERAL_FIELDS \ #define EXTRA_GENERAL_FIELDS \
NOBACKUP(uint8_t auxSerialMode); \ NOBACKUP(uint8_t auxSerialMode:4); \
NOBACKUP(uint8_t aux2SerialMode:4); \
swconfig_t switchConfig; \ swconfig_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 */ \

View file

@ -38,6 +38,7 @@ extern "C" {
#endif #endif
uint8_t auxSerialTracesEnabled(); uint8_t auxSerialTracesEnabled();
uint8_t aux2SerialTracesEnabled();
#if defined(SIMU) #if defined(SIMU)
typedef void (*traceCallbackFunc)(const char * text); typedef void (*traceCallbackFunc)(const char * text);

View file

@ -70,7 +70,9 @@ enum MenuRadioHardwareItems {
#if defined(AUX_SERIAL) #if defined(AUX_SERIAL)
ITEM_RADIO_HARDWARE_AUX_SERIAL_MODE, ITEM_RADIO_HARDWARE_AUX_SERIAL_MODE,
#endif #endif
#if defined(AUX2_SERIAL)
ITEM_RADIO_HARDWARE_AUX2_SERIAL_MODE,
#endif
ITEM_RADIO_HARDWARE_JITTER_FILTER, ITEM_RADIO_HARDWARE_JITTER_FILTER,
ITEM_RADIO_HARDWARE_RAS, ITEM_RADIO_HARDWARE_RAS,
@ -89,6 +91,11 @@ enum MenuRadioHardwareItems {
#else #else
#define AUX_SERIAL_ROW #define AUX_SERIAL_ROW
#endif #endif
#if defined(AUX2_SERIAL)
#define AUX2_SERIAL_ROW 0,
#else
#define AUX2_SERIAL_ROW
#endif
#define POTS_ROWS NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1 #define POTS_ROWS NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1
#define SWITCHES_ROWS NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1 #define SWITCHES_ROWS NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1
@ -159,6 +166,7 @@ bool menuRadioHardware(event_t event)
EXTERNAL_ANTENNA_ROW EXTERNAL_ANTENNA_ROW
AUX_SERIAL_ROW /* aux serial mode */ AUX_SERIAL_ROW /* aux serial mode */
AUX2_SERIAL_ROW /* aux2 serial mode */
0, /* ADC filter */ 0, /* ADC filter */
READONLY_ROW /* RAS */, READONLY_ROW /* RAS */,
SPORT_POWER_ROWS SPORT_POWER_ROWS
@ -371,6 +379,19 @@ bool menuRadioHardware(event_t event)
break; break;
#endif #endif
#if defined(AUX2_SERIAL)
case ITEM_RADIO_HARDWARE_AUX2_SERIAL_MODE:
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_AUX2_SERIAL_MODE);
#if defined(RADIO_TX16S)
lcdDrawText(lcdNextPos, y, " (TTL)");
#endif
g_eeGeneral.aux2SerialMode = editChoice(HW_SETTINGS_COLUMN2, y, STR_AUX_SERIAL_MODES, g_eeGeneral.aux2SerialMode, 0, UART_MODE_MAX, attr, event);
if (attr && checkIncDec_Ret) {
aux2SerialInit(g_eeGeneral.aux2SerialMode, modelTelemetryProtocol());
}
break;
#endif
case ITEM_RADIO_HARDWARE_JITTER_FILTER: case ITEM_RADIO_HARDWARE_JITTER_FILTER:
{ {
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_JITTER_FILTER); lcdDrawText(MENUS_MARGIN_LEFT, y, STR_JITTER_FILTER);

View file

@ -1601,6 +1601,13 @@ static int luaSerialWrite(lua_State * L)
while(wr_len--) auxSerialPutc(*p++); while(wr_len--) auxSerialPutc(*p++);
} }
#endif #endif
#if defined(AUX2_SERIAL)
if (aux2SerialMode == UART_MODE_LUA) {
size_t wr_len = len;
const char* p = str;
while(wr_len--) aux2SerialPutc(*p++);
}
#endif
#else #else
debugPrintf("luaSerialWrite: %.*s",len,str); debugPrintf("luaSerialWrite: %.*s",len,str);
#endif #endif

View file

@ -1939,6 +1939,10 @@ void opentxInit()
auxSerialInit(g_eeGeneral.auxSerialMode, modelTelemetryProtocol()); auxSerialInit(g_eeGeneral.auxSerialMode, modelTelemetryProtocol());
#endif #endif
#if defined(AUX2_SERIAL)
aux2SerialInit(g_eeGeneral.aux2SerialMode, modelTelemetryProtocol());
#endif
#if MENUS_LOCK == 1 #if MENUS_LOCK == 1
getMovedSwitch(); getMovedSwitch();
if (TRIMS_PRESSED() && g_eeGeneral.switchUnlockStates==switches_states) { if (TRIMS_PRESSED() && g_eeGeneral.switchUnlockStates==switches_states) {

View file

@ -34,6 +34,10 @@ void serialPutc(char c) {
if (auxSerialTracesEnabled()) if (auxSerialTracesEnabled())
auxSerialPutc(c); auxSerialPutc(c);
#endif #endif
#if defined(AUX2_SERIAL)
if (aux2SerialTracesEnabled())
aux2SerialPutc(c);
#endif
} }
void serialPrintf(const char * format, ...) void serialPrintf(const char * format, ...)

View file

@ -400,7 +400,7 @@ void convertRadioData_218_to_219(RadioData & settings)
#if defined(PCBHORUS) #if defined(PCBHORUS)
// 2 new pots from X10: // 2 new pots from X10:
// - copy btw. 'chkSum' and 'auxSerialMode' (excl.) // - copy btw. 'chkSum' and 'auxSerialMode' (excl.)
memcpy(&settings.chkSum, &oldSettings.chkSum, offsetof(RadioData, auxSerialMode) - offsetof(RadioData, chkSum)); memcpy(&settings.chkSum, &oldSettings.chkSum, offsetof(RadioData, switchConfig) - sizeof(uint8_t) - offsetof(RadioData, chkSum));
// - move calibration data // - move calibration data
memcpy(&settings.calib[NUM_STICKS + 5], &oldSettings.calib[NUM_STICKS + 3], sizeof(CalibData) * (STORAGE_NUM_SLIDERS + STORAGE_NUM_MOUSE_ANALOGS)); memcpy(&settings.calib[NUM_STICKS + 5], &oldSettings.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);

View file

@ -193,5 +193,181 @@ extern "C" void AUX_SERIAL_USART_IRQHandler(void)
} }
#endif #endif
} }
#endif
#if defined(AUX2_SERIAL)
uint8_t aux2SerialMode = 0;
Fifo<uint8_t, 512> aux2SerialTxFifo;
AuxSerialRxFifo aux2SerialRxFifo __DMA (AUX2_SERIAL_DMA_Stream_RX);
void aux2SerialSetup(unsigned int baudrate, bool dma)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_PinAFConfig(AUX2_SERIAL_GPIO, AUX2_SERIAL_GPIO_PinSource_RX, AUX2_SERIAL_GPIO_AF);
GPIO_PinAFConfig(AUX2_SERIAL_GPIO, AUX2_SERIAL_GPIO_PinSource_TX, AUX2_SERIAL_GPIO_AF);
GPIO_InitStructure.GPIO_Pin = AUX2_SERIAL_GPIO_PIN_TX | AUX2_SERIAL_GPIO_PIN_RX;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(AUX2_SERIAL_GPIO, &GPIO_InitStructure);
#if defined(AUX2_SERIAL_PWR_GPIO)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Pin = AUX2_SERIAL_PWR_GPIO_PIN;
GPIO_Init(AUX2_SERIAL_PWR_GPIO, &GPIO_InitStructure);
#endif
USART_InitStructure.USART_BaudRate = baudrate;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_Init(AUX2_SERIAL_USART, &USART_InitStructure);
if (dma) {
DMA_InitTypeDef DMA_InitStructure;
aux2SerialRxFifo.clear();
USART_ITConfig(AUX2_SERIAL_USART, USART_IT_RXNE, DISABLE);
USART_ITConfig(AUX2_SERIAL_USART, USART_IT_TXE, DISABLE);
DMA_InitStructure.DMA_Channel = AUX2_SERIAL_DMA_Channel_RX;
DMA_InitStructure.DMA_PeripheralBaseAddr = CONVERT_PTR_UINT(&AUX2_SERIAL_USART->DR);
DMA_InitStructure.DMA_Memory0BaseAddr = CONVERT_PTR_UINT(aux2SerialRxFifo.buffer());
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
DMA_InitStructure.DMA_BufferSize = aux2SerialRxFifo.size();
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_Low;
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
DMA_Init(AUX2_SERIAL_DMA_Stream_RX, &DMA_InitStructure);
USART_DMACmd(AUX2_SERIAL_USART, USART_DMAReq_Rx, ENABLE);
USART_Cmd(AUX2_SERIAL_USART, ENABLE);
DMA_Cmd(AUX2_SERIAL_DMA_Stream_RX, ENABLE);
}
else {
USART_Cmd(AUX2_SERIAL_USART, ENABLE);
USART_ITConfig(AUX2_SERIAL_USART, USART_IT_RXNE, ENABLE);
USART_ITConfig(AUX2_SERIAL_USART, USART_IT_TXE, DISABLE);
NVIC_SetPriority(AUX2_SERIAL_USART_IRQn, 7);
NVIC_EnableIRQ(AUX2_SERIAL_USART_IRQn);
}
}
void aux2SerialInit(unsigned int mode, unsigned int protocol)
{
aux2SerialStop();
aux2SerialMode = mode;
switch (mode) {
case UART_MODE_TELEMETRY_MIRROR:
#if defined(CROSSFIRE)
if (protocol == PROTOCOL_TELEMETRY_CROSSFIRE) {
aux2SerialSetup(CROSSFIRE_TELEM_MIRROR_BAUDRATE, false);
break;
}
#endif
aux2SerialSetup(FRSKY_TELEM_MIRROR_BAUDRATE, false);
break;
#if defined(DEBUG) || defined(CLI)
case UART_MODE_DEBUG:
aux2SerialSetup(DEBUG_BAUDRATE, false);
break;
#endif
case UART_MODE_TELEMETRY:
if (protocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY) {
aux2SerialSetup(FRSKY_D_BAUDRATE, true);
}
break;
case UART_MODE_LUA:
aux2SerialSetup(DEBUG_BAUDRATE, false);
}
}
void aux2SerialPutc(char c)
{
#if !defined(SIMU)
int n = 0;
while (aux2SerialTxFifo.isFull()) {
delay_ms(1);
if (++n > 100) return;
}
aux2SerialTxFifo.push(c);
USART_ITConfig(AUX2_SERIAL_USART, USART_IT_TXE, ENABLE);
#endif
}
void aux2SerialSbusInit()
{
aux2SerialSetup(SBUS_BAUDRATE, true);
AUX2_SERIAL_USART->CR1 |= USART_CR1_M | USART_CR1_PCE ;
AUX2_SERIAL_POWER_ON();
}
void aux2SerialStop()
{
DMA_DeInit(AUX2_SERIAL_DMA_Stream_RX);
USART_DeInit(AUX2_SERIAL_USART);
}
uint8_t aux2SerialTracesEnabled()
{
#if defined(DEBUG)
return (aux2SerialMode == UART_MODE_DEBUG);
#else
return false;
#endif
}
#if !defined(SIMU)
extern "C" void AUX2_SERIAL_USART_IRQHandler(void)
{
DEBUG_INTERRUPT(INT_SER2);
// Send
if (USART_GetITStatus(AUX2_SERIAL_USART, USART_IT_TXE) != RESET) {
uint8_t txchar;
if (aux2SerialTxFifo.pop(txchar)) {
/* Write one byte to the transmit data register */
USART_SendData(AUX2_SERIAL_USART, txchar);
}
else {
USART_ITConfig(AUX2_SERIAL_USART, USART_IT_TXE, DISABLE);
}
}
#if defined(CLI)
if (getSelectedUsbMode() != USB_SERIAL_MODE) {
// Receive
uint32_t status = AUX2_SERIAL_USART->SR;
while (status & (USART_FLAG_RXNE | USART_FLAG_ERRORS)) {
uint8_t data = AUX2_SERIAL_USART->DR;
if (!(status & USART_FLAG_ERRORS)) {
switch (aux2SerialMode) {
case UART_MODE_DEBUG:
cliRxFifo.push(data);
break;
}
}
status = AUX2_SERIAL_USART->SR;
}
}
#endif
}
#endif
#endif #endif
#endif // AUX_SERIAL #endif // AUX_SERIAL

View file

@ -197,15 +197,15 @@ int main()
RCC_AHB1PeriphClockCmd(PWR_RCC_AHB1Periph | KEYS_RCC_AHB1Periph | RCC_AHB1PeriphClockCmd(PWR_RCC_AHB1Periph | KEYS_RCC_AHB1Periph |
LCD_RCC_AHB1Periph | BACKLIGHT_RCC_AHB1Periph | LCD_RCC_AHB1Periph | BACKLIGHT_RCC_AHB1Periph |
AUX_SERIAL_RCC_AHB1Periph | I2C_RCC_AHB1Periph | AUX_SERIAL_RCC_AHB1Periph | AUX2_SERIAL_RCC_AHB1Periph | I2C_RCC_AHB1Periph |
SD_RCC_AHB1Periph, ENABLE); SD_RCC_AHB1Periph, ENABLE);
RCC_APB1PeriphClockCmd(ROTARY_ENCODER_RCC_APB1Periph | LCD_RCC_APB1Periph | BACKLIGHT_RCC_APB1Periph | RCC_APB1PeriphClockCmd(ROTARY_ENCODER_RCC_APB1Periph | LCD_RCC_APB1Periph | BACKLIGHT_RCC_APB1Periph |
INTERRUPT_xMS_RCC_APB1Periph | I2C_RCC_APB1Periph | INTERRUPT_xMS_RCC_APB1Periph | I2C_RCC_APB1Periph |
AUX_SERIAL_RCC_APB1Periph | AUX_SERIAL_RCC_APB1Periph | AUX2_SERIAL_RCC_APB1Periph |
SD_RCC_APB1Periph, ENABLE); SD_RCC_APB1Periph, ENABLE);
RCC_APB2PeriphClockCmd(LCD_RCC_APB2Periph | BACKLIGHT_RCC_APB2Periph | RCC_APB2Periph_SYSCFG | AUX_SERIAL_RCC_APB2Periph, ENABLE); RCC_APB2PeriphClockCmd(LCD_RCC_APB2Periph | BACKLIGHT_RCC_APB2Periph | RCC_APB2Periph_SYSCFG | AUX_SERIAL_RCC_APB2Periph | AUX2_SERIAL_RCC_APB2Periph, ENABLE);
pwrInit(); pwrInit();
keysInit(); keysInit();
@ -249,6 +249,9 @@ int main()
#if defined(DEBUG) && defined(AUX_SERIAL) #if defined(DEBUG) && defined(AUX_SERIAL)
auxSerialInit(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
#if defined(DEBUG) && defined(AUX2_SERIAL)
aux2SerialInit(UART_MODE_DEBUG, 0); // default serial mode (None if DEBUG not defined)
#endif
__enable_irq(); __enable_irq();

View file

@ -64,8 +64,9 @@ if (PCB STREQUAL X10)
set(HARDWARE_TOUCH YES) set(HARDWARE_TOUCH YES)
set(USB_CHARGER YES) set(USB_CHARGER YES)
set(DEFAULT_THEME "DARKBLUE") set(DEFAULT_THEME "DARKBLUE")
set(AUX_SERIAL ON)
if (NOT BLUETOOTH) if (NOT BLUETOOTH)
set(AUX_SERIAL ON) set(AUX2_SERIAL ON)
endif() endif()
else() else()
set(FLAVOUR x10) set(FLAVOUR x10)
@ -238,6 +239,11 @@ if (AUX_SERIAL)
set(AUX_SERIAL_DRIVER ../common/arm/stm32/aux_serial_driver.cpp) set(AUX_SERIAL_DRIVER ../common/arm/stm32/aux_serial_driver.cpp)
endif() endif()
if (AUX2_SERIAL)
add_definitions(-DAUX2_SERIAL)
set(AUX_SERIAL_DRIVER ../common/arm/stm32/aux_serial_driver.cpp)
endif()
set(FIRMWARE_TARGET_SRC set(FIRMWARE_TARGET_SRC
${FIRMWARE_TARGET_SRC} ${FIRMWARE_TARGET_SRC}
${LCD_DRIVER} ${LCD_DRIVER}

View file

@ -96,6 +96,7 @@ void boardInit()
KEYS_RCC_AHB1Periph | KEYS_RCC_AHB1Periph |
ADC_RCC_AHB1Periph | ADC_RCC_AHB1Periph |
AUX_SERIAL_RCC_AHB1Periph | AUX_SERIAL_RCC_AHB1Periph |
AUX2_SERIAL_RCC_AHB1Periph |
TELEMETRY_RCC_AHB1Periph | TELEMETRY_RCC_AHB1Periph |
TRAINER_RCC_AHB1Periph | TRAINER_RCC_AHB1Periph |
BT_RCC_AHB1Periph | BT_RCC_AHB1Periph |
@ -116,6 +117,7 @@ void boardInit()
TIMER_2MHz_RCC_APB1Periph | TIMER_2MHz_RCC_APB1Periph |
AUDIO_RCC_APB1Periph | AUDIO_RCC_APB1Periph |
AUX_SERIAL_RCC_APB1Periph | AUX_SERIAL_RCC_APB1Periph |
AUX2_SERIAL_RCC_APB1Periph |
TELEMETRY_RCC_APB1Periph | TELEMETRY_RCC_APB1Periph |
TRAINER_RCC_APB1Periph | TRAINER_RCC_APB1Periph |
AUDIO_RCC_APB1Periph | AUDIO_RCC_APB1Periph |
@ -135,6 +137,7 @@ void boardInit()
TELEMETRY_RCC_APB2Periph | TELEMETRY_RCC_APB2Periph |
BT_RCC_APB2Periph | BT_RCC_APB2Periph |
AUX_SERIAL_RCC_APB2Periph | AUX_SERIAL_RCC_APB2Periph |
AUX2_SERIAL_RCC_APB2Periph |
BACKLIGHT_RCC_APB2Periph, BACKLIGHT_RCC_APB2Periph,
ENABLE); ENABLE);
@ -147,6 +150,9 @@ void boardInit()
#if defined(DEBUG) && defined(AUX_SERIAL) #if defined(DEBUG) && defined(AUX_SERIAL)
auxSerialInit(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
#if defined(DEBUG) && defined(AUX2_SERIAL)
aux2SerialInit(UART_MODE_DEBUG, 0); // default serial mode (None if DEBUG not defined)
#endif
TRACE("\nHorus board started :)"); TRACE("\nHorus board started :)");
TRACE("RCC->CSR = %08x", RCC->CSR); TRACE("RCC->CSR = %08x", RCC->CSR);

View file

@ -615,7 +615,7 @@ void sportUpdatePowerInit();
#define IS_SPORT_UPDATE_POWER_ON() (false) #define IS_SPORT_UPDATE_POWER_ON() (false)
#endif #endif
// Second serial port driver // Aux serial port driver
#if defined(AUX_SERIAL_GPIO) #if defined(AUX_SERIAL_GPIO)
#define DEBUG_BAUDRATE 115200 #define DEBUG_BAUDRATE 115200
extern uint8_t auxSerialMode; extern uint8_t auxSerialMode;
@ -635,6 +635,25 @@ void auxSerialPowerOff();
#endif #endif
#endif #endif
// Aux2 serial port driver
#if defined(AUX2_SERIAL)
extern uint8_t aux2SerialMode;
void aux2SerialInit(unsigned int mode, unsigned int protocol);
void aux2SerialPutc(char c);
#define aux2SerialTelemetryInit(protocol) aux2SerialInit(UART_MODE_TELEMETRY, protocol)
void aux2SerialSbusInit();
void aux2SerialStop();
void aux2SerialPowerOn();
void aux2SerialPowerOff();
#if defined(AUX2_SERIAL_PWR_GPIO)
#define AUX2_SERIAL_POWER_ON() aux2SerialPowerOn()
#define AUX2_SERIAL__POWER_OFF() aux2SerialPowerOff()
#else
#define AUX2_SERIAL_POWER_ON()
#define AUX2_SERIAL__POWER_OFF()
#endif
#endif
// Haptic driver // Haptic driver
void hapticInit(); void hapticInit();
void hapticDone(); void hapticDone();

View file

@ -433,6 +433,10 @@
#define AUX2_SERIAL_DMA_Channel_RX DMA_Channel_5 #define AUX2_SERIAL_DMA_Channel_RX DMA_Channel_5
#define AUX2_SERIAL_PWR_GPIO GPIOB #define AUX2_SERIAL_PWR_GPIO GPIOB
#define AUX2_SERIAL_PWR_GPIO_PIN GPIO_Pin_0 // PB.00 #define AUX2_SERIAL_PWR_GPIO_PIN GPIO_Pin_0 // PB.00
#else
#define AUX2_SERIAL_RCC_AHB1Periph 0
#define AUX2_SERIAL_RCC_APB1Periph 0
#define AUX2_SERIAL_RCC_APB2Periph 0
#endif #endif
// Telemetry // Telemetry

View file

@ -787,3 +787,23 @@ void auxSerialStop()
{ {
} }
#endif #endif
#if defined(AUX2_SERIAL)
AuxSerialRxFifo aux2SerialRxFifo(nullptr);
uint8_t aux2SerialMode;
void aux2SerialInit(unsigned int mode, unsigned int protocol)
{
}
void aux2SerialPutc(char c)
{
}
void aux2SerialSbusInit()
{
}
void aux2SerialStop()
{
}
#endif

View file

@ -785,7 +785,7 @@ void hapticOff();
void hapticOn(); void hapticOn();
#endif #endif
// Second serial port driver // Aux serial port driver
#if defined(AUX_SERIAL_GPIO) #if defined(AUX_SERIAL_GPIO)
#define DEBUG_BAUDRATE 115200 #define DEBUG_BAUDRATE 115200
#define AUX_SERIAL #define AUX_SERIAL
@ -796,7 +796,7 @@ void auxSerialPutc(char c);
void auxSerialSbusInit(); void auxSerialSbusInit();
void auxSerialStop(); void auxSerialStop();
#define AUX_SERIAL_POWER_ON() #define AUX_SERIAL_POWER_ON()
#define AUX_SERIAL__POWER_OFF() #define AUX_SERIAL_POWER_OFF()
#endif #endif
// BT driver // BT driver

View file

@ -1323,6 +1323,11 @@
#define AUX_SERIAL_DMA_Channel_RX DMA_Channel_4 #define AUX_SERIAL_DMA_Channel_RX DMA_Channel_4
#endif #endif
// No aux2 on taranis
#define AUX2_SERIAL_RCC_AHB1Periph 0
#define AUX2_SERIAL_RCC_APB1Periph 0
#define AUX2_SERIAL_RCC_APB2Periph 0
// Telemetry // Telemetry
#define TELEMETRY_RCC_AHB1Periph (RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA1) #define TELEMETRY_RCC_AHB1Periph (RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA1)
#define TELEMETRY_RCC_APB1Periph RCC_APB1Periph_USART2 #define TELEMETRY_RCC_APB1Periph RCC_APB1Periph_USART2

View file

@ -201,6 +201,11 @@ void processCrossfireTelemetryData(uint8_t data)
auxSerialPutc(data); auxSerialPutc(data);
} }
#endif #endif
#if defined(AUX2_SERIAL)
if (g_eeGeneral.aux2SerialMode == UART_MODE_TELEMETRY_MIRROR) {
aux2SerialPutc(data);
}
#endif
if (telemetryRxBufferCount == 0 && data != RADIO_ADDRESS) { if (telemetryRxBufferCount == 0 && data != RADIO_ADDRESS) {
TRACE("[XF] address 0x%02X error", data); TRACE("[XF] address 0x%02X error", data);

View file

@ -32,6 +32,11 @@ void processFrskyTelemetryData(uint8_t data)
auxSerialPutc(data); auxSerialPutc(data);
} }
#endif #endif
#if defined(AUX2_SERIAL)
if (g_eeGeneral.aux2SerialMode == UART_MODE_TELEMETRY_MIRROR) {
aux2SerialPutc(data);
}
#endif
if (pushFrskyTelemetryData(data)) { if (pushFrskyTelemetryData(data)) {
if (IS_FRSKY_SPORT_PROTOCOL()) { if (IS_FRSKY_SPORT_PROTOCOL()) {

View file

@ -322,6 +322,12 @@ static void processMultiTelemetryPaket(const uint8_t * packet, uint8_t module)
auxSerialPutc(packet[c]); auxSerialPutc(packet[c]);
} }
#endif #endif
#if defined(AUX2_SERIAL)
if (g_eeGeneral.aux2SerialMode == UART_MODE_TELEMETRY_MIRROR) {
for (uint8_t c=0; c < len; c++)
aux2SerialPutc(packet[c]);
}
#endif
// Switch type // Switch type
switch (type) { switch (type) {

View file

@ -564,6 +564,7 @@ const char STR_ALTITUDE[] = TR_ALTITUDE;
const char STR_SCALE[] = TR_SCALE; const char STR_SCALE[] = TR_SCALE;
const char STR_VIEW_CHANNELS[] = TR_VIEW_CHANNELS; const char STR_VIEW_CHANNELS[] = TR_VIEW_CHANNELS;
const char STR_AUX_SERIAL_MODE[] = TR_AUX_SERIAL_MODE; const char STR_AUX_SERIAL_MODE[] = TR_AUX_SERIAL_MODE;
const char STR_AUX2_SERIAL_MODE[] = TR_AUX2_SERIAL_MODE;
const char STR_THROTTLE_LABEL[] = TR_THROTTLE_LABEL; const char STR_THROTTLE_LABEL[] = TR_THROTTLE_LABEL;
const char STR_SCRIPT[] = TR_SCRIPT; const char STR_SCRIPT[] = TR_SCRIPT;
const char STR_INPUTS[] = TR_INPUTS; const char STR_INPUTS[] = TR_INPUTS;

View file

@ -864,6 +864,7 @@ extern const char STR_SCALE[];
extern const char STR_VIEW_CHANNELS[]; extern const char STR_VIEW_CHANNELS[];
extern const char STR_POTWARNING[]; extern const char STR_POTWARNING[];
extern const char STR_AUX_SERIAL_MODE[]; extern const char STR_AUX_SERIAL_MODE[];
extern const char STR_AUX2_SERIAL_MODE[];
extern const char STR_THROTTLE_LABEL[]; extern const char STR_THROTTLE_LABEL[];
extern const char STR_SCRIPT[]; extern const char STR_SCRIPT[];
extern const char STR_INPUTS[]; extern const char STR_INPUTS[];

View file

@ -981,6 +981,7 @@
#define TR_CHECKLIST TR(INDENT "Poznámky", INDENT "Zobrazit poznámky") #define TR_CHECKLIST TR(INDENT "Poznámky", INDENT "Zobrazit poznámky")
#define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Ofset") #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Ofset")
#define TR_AUX_SERIAL_MODE "Seriový port" #define TR_AUX_SERIAL_MODE "Seriový port"
#define TR_AUX2_SERIAL_MODE "Seriový port 2"
#define TR_SCRIPT "Skript" #define TR_SCRIPT "Skript"
#define TR_INPUTS "Vstupy" #define TR_INPUTS "Vstupy"
#define TR_OUTPUTS "Výstupy" #define TR_OUTPUTS "Výstupy"

View file

@ -987,6 +987,7 @@
#define TR_CHECKLIST TR(INDENT "Checkliste", INDENT "Checkliste anzeigen") //9XR-Pro #define TR_CHECKLIST TR(INDENT "Checkliste", INDENT "Checkliste anzeigen") //9XR-Pro
#define TR_FAS_OFFSET TR(INDENT "FAS-Ofs", INDENT "FAS-Offset") #define TR_FAS_OFFSET TR(INDENT "FAS-Ofs", INDENT "FAS-Offset")
#define TR_AUX_SERIAL_MODE "Serieller Port" #define TR_AUX_SERIAL_MODE "Serieller Port"
#define TR_AUX2_SERIAL_MODE "Serieller Port 2"
#define TR_SCRIPT "Lua-Skript" #define TR_SCRIPT "Lua-Skript"
#define TR_INPUTS "Eingaben" #define TR_INPUTS "Eingaben"
#define TR_OUTPUTS "Ausgaben" #define TR_OUTPUTS "Ausgaben"

View file

@ -985,7 +985,8 @@
#define TR_PREFLIGHT "Preflight Checks" #define TR_PREFLIGHT "Preflight Checks"
#define TR_CHECKLIST TR(INDENT "Checklist", INDENT "Display checklist") #define TR_CHECKLIST TR(INDENT "Checklist", INDENT "Display checklist")
#define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS offset") #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS offset")
#define TR_AUX_SERIAL_MODE "Serial port" #define TR_AUX_SERIAL_MODE "Serial port"
#define TR_AUX2_SERIAL_MODE "Serial port 2"
#define TR_SCRIPT "Script" #define TR_SCRIPT "Script"
#define TR_INPUTS "Inputs" #define TR_INPUTS "Inputs"
#define TR_OUTPUTS "Outputs" #define TR_OUTPUTS "Outputs"

View file

@ -985,6 +985,7 @@
#define TR_CHECKLIST TR(INDENT "Lista verif", INDENT "Lista verificación") #define TR_CHECKLIST TR(INDENT "Lista verif", INDENT "Lista verificación")
#define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset")
#define TR_AUX_SERIAL_MODE "Puerto serie" #define TR_AUX_SERIAL_MODE "Puerto serie"
#define TR_AUX2_SERIAL_MODE "Puerto serie 2"
#define TR_SCRIPT "Script" #define TR_SCRIPT "Script"
#define TR_INPUTS "Entradas" #define TR_INPUTS "Entradas"
#define TR_OUTPUTS "Salidas" #define TR_OUTPUTS "Salidas"

View file

@ -999,7 +999,8 @@
#define TR_PREFLIGHT "Preflight Checks" #define TR_PREFLIGHT "Preflight Checks"
#define TR_CHECKLIST INDENT "Display Checklist" #define TR_CHECKLIST INDENT "Display Checklist"
#define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset")
#define TR_AUX_SERIAL_MODE "Serial port" #define TR_AUX_SERIAL_MODE "Serial port"
#define TR_AUX2_SERIAL_MODE "Serial port 2"
#define TR_SCRIPT "Script" #define TR_SCRIPT "Script"
#define TR_INPUTS "Inputs" #define TR_INPUTS "Inputs"
#define TR_OUTPUTS "Outputs" #define TR_OUTPUTS "Outputs"

View file

@ -1002,6 +1002,7 @@
#define TR_CHECKLIST TR(INDENT "Notes", INDENT "Afficher notes") #define TR_CHECKLIST TR(INDENT "Notes", INDENT "Afficher notes")
#define TR_FAS_OFFSET TR(INDENT "Corr FAS", INDENT "Correction FAS") #define TR_FAS_OFFSET TR(INDENT "Corr FAS", INDENT "Correction FAS")
#define TR_AUX_SERIAL_MODE "Port série" #define TR_AUX_SERIAL_MODE "Port série"
#define TR_AUX2_SERIAL_MODE "Port série 2"
#define TR_SCRIPT "Script" #define TR_SCRIPT "Script"
#define TR_INPUTS "Entrées" #define TR_INPUTS "Entrées"
#define TR_OUTPUTS "Sorties" #define TR_OUTPUTS "Sorties"

View file

@ -1001,7 +1001,8 @@
#define TR_PREFLIGHT "Controlli Prevolo" #define TR_PREFLIGHT "Controlli Prevolo"
#define TR_CHECKLIST INDENT "Mostra Checklist" #define TR_CHECKLIST INDENT "Mostra Checklist"
#define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset")
#define TR_AUX_SERIAL_MODE "Porta Seriale" #define TR_AUX_SERIAL_MODE "Porta Seriale"
#define TR_AUX2_SERIAL_MODE "Porta Seriale 2"
#define TR_SCRIPT "Script" #define TR_SCRIPT "Script"
#define TR_INPUTS "Ingresso" #define TR_INPUTS "Ingresso"
#define TR_OUTPUTS "Uscita" #define TR_OUTPUTS "Uscita"

View file

@ -987,7 +987,8 @@
#define TR_PREFLIGHT "Preflight Checks" #define TR_PREFLIGHT "Preflight Checks"
#define TR_CHECKLIST TR(INDENT "Checklist", INDENT "Toon Checklist") #define TR_CHECKLIST TR(INDENT "Checklist", INDENT "Toon Checklist")
#define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset")
#define TR_AUX_SERIAL_MODE "Seriele poort" #define TR_AUX_SERIAL_MODE "Seriele poort"
#define TR_AUX2_SERIAL_MODE "Seriele poort 2"
#define TR_SCRIPT "Script" #define TR_SCRIPT "Script"
#define TR_INPUTS "Inputs" #define TR_INPUTS "Inputs"
#define TR_OUTPUTS "Outputs" #define TR_OUTPUTS "Outputs"

View file

@ -1000,7 +1000,8 @@
#define TR_PREFLIGHT "Lista Ostrzeżeń" #define TR_PREFLIGHT "Lista Ostrzeżeń"
#define TR_CHECKLIST TR(INDENT "Czeklista",INDENT "Pokaż Listę Ostrzeżeń") #define TR_CHECKLIST TR(INDENT "Czeklista",INDENT "Pokaż Listę Ostrzeżeń")
#define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset")
#define TR_AUX_SERIAL_MODE "Port szreg." #define TR_AUX_SERIAL_MODE "Port szreg."
#define TR_AUX2_SERIAL_MODE "Port szreg. 2"
#define TR_SCRIPT "Skrypt" #define TR_SCRIPT "Skrypt"
#define TR_INPUTS "Wejścia" #define TR_INPUTS "Wejścia"
#define TR_OUTPUTS "Wyjścia" #define TR_OUTPUTS "Wyjścia"

View file

@ -990,7 +990,8 @@
#define TR_PREFLIGHT "Preflight Checks" #define TR_PREFLIGHT "Preflight Checks"
#define TR_CHECKLIST INDENT "Display Checklist" #define TR_CHECKLIST INDENT "Display Checklist"
#define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset")
#define TR_AUX_SERIAL_MODE "Serial port" #define TR_AUX_SERIAL_MODE "Serial port"
#define TR_AUX2_SERIAL_MODE "Serial port 2"
#define TR_SCRIPT "Script" #define TR_SCRIPT "Script"
#define TR_INPUTS "Inputs" #define TR_INPUTS "Inputs"
#define TR_OUTPUTS "Outputs" #define TR_OUTPUTS "Outputs"

View file

@ -1000,7 +1000,8 @@
#define TR_PREFLIGHT "Startkontroller" #define TR_PREFLIGHT "Startkontroller"
#define TR_CHECKLIST TR(INDENT "Checklista", INDENT "Visa Checklista") #define TR_CHECKLIST TR(INDENT "Checklista", INDENT "Visa Checklista")
#define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset")
#define TR_AUX_SERIAL_MODE "Serieporten" #define TR_AUX_SERIAL_MODE "Serieporten"
#define TR_AUX2_SERIAL_MODE "Serieporten 2"
#define TR_SCRIPT "Programkod" #define TR_SCRIPT "Programkod"
#define TR_INPUTS "Input" #define TR_INPUTS "Input"
#define TR_OUTPUTS "Outputs" #define TR_OUTPUTS "Outputs"