1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-19 14:25:11 +03:00

Bsongis/xlite trainer modes (#6497)

More trainer modes added on XLite(S) and X9Lite
This commit is contained in:
Bertrand Songis 2019-06-14 21:20:22 +02:00 committed by GitHub
parent c3388dc65e
commit 383e723b96
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 157 additions and 238 deletions

View file

@ -21,7 +21,7 @@
#include "opentx.h" #include "opentx.h"
#include "io/frsky_firmware_update.h" #include "io/frsky_firmware_update.h"
#if defined(PCBHORUS) || defined(PCBX7) || defined(PCBXLITE) || defined(USEHORUSBT) #if defined(PCBHORUS) || defined(PCBX7) || defined(PCBXLITE)
#define BLUETOOTH_COMMAND_NAME "AT+NAME" #define BLUETOOTH_COMMAND_NAME "AT+NAME"
#define BLUETOOTH_ANSWER_NAME "OK+" #define BLUETOOTH_ANSWER_NAME "OK+"
#define BLUETOOTH_COMMAND_BAUD_115200 "AT+BAUD115200" #define BLUETOOTH_COMMAND_BAUD_115200 "AT+BAUD115200"
@ -75,7 +75,8 @@ char * Bluetooth::readline(bool error_reset)
while (1) { while (1) {
if (!btRxFifo.pop(byte)) { if (!btRxFifo.pop(byte)) {
#if defined(PCBX9E) && !defined(USEHORUSBT) // X9E BT module can get unresponsive #if defined(PCBX9E)
// X9E BT module can get unresponsive
TRACE("NO RESPONSE FROM BT MODULE"); TRACE("NO RESPONSE FROM BT MODULE");
#endif #endif
return nullptr; return nullptr;
@ -290,7 +291,7 @@ void Bluetooth::receiveTrainer()
} }
} }
#if defined(PCBX9E) && !defined(USEHORUSBT) #if defined(PCBX9E)
void Bluetooth::wakeup(void) void Bluetooth::wakeup(void)
{ {
#if !defined(SIMU) #if !defined(SIMU)

View file

@ -19,7 +19,7 @@
*/ */
enum BluetoothStates { enum BluetoothStates {
#if defined(PCBX9E) && !defined(USEHORUSBT) #if defined(PCBX9E)
BLUETOOTH_INIT, BLUETOOTH_INIT,
BLUETOOTH_WAIT_TTM, BLUETOOTH_WAIT_TTM,
BLUETOOTH_WAIT_BAUDRATE_CHANGE, BLUETOOTH_WAIT_BAUDRATE_CHANGE,

View file

@ -229,14 +229,8 @@ void editTimerCountdown(int timerIdx, coord_t y, LcdFlags attr, event_t event)
#define PORT_CHANNELS_ROWS(x) (x==INTERNAL_MODULE ? INTERNAL_MODULE_CHANNELS_ROWS : (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS : 1)) #define PORT_CHANNELS_ROWS(x) (x==INTERNAL_MODULE ? INTERNAL_MODULE_CHANNELS_ROWS : (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS : 1))
#if defined(BLUETOOTH) && defined(USEHORUSBT) #define TRAINER_LINE1_ROWS (g_model.trainerData.mode == TRAINER_MODE_SLAVE ? (uint8_t)1 : HIDDEN_ROW)
#define TRAINER_LINE1_BLUETOOTH_M_ROWS ((bluetooth.distantAddr[0] == 0 || bluetooth.state == BLUETOOTH_STATE_CONNECTED) ? (uint8_t)0 : (uint8_t)1) #define TRAINER_LINE2_ROWS (g_model.trainerData.mode == TRAINER_MODE_SLAVE ? (uint8_t)2 : HIDDEN_ROW)
#define TRAINER_LINE1_ROWS (g_model.trainerData.mode == TRAINER_MODE_SLAVE ? (uint8_t)1 : (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH ? TRAINER_LINE1_BLUETOOTH_M_ROWS : (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH ? (uint8_t)1 : HIDDEN_ROW)))
#define TRAINER_LINE2_ROWS (g_model.trainerData.mode == TRAINER_MODE_SLAVE ? (uint8_t)2 : HIDDEN_ROW)
#else
#define TRAINER_LINE1_ROWS (g_model.trainerData.mode == TRAINER_MODE_SLAVE ? (uint8_t)1 : HIDDEN_ROW)
#define TRAINER_LINE2_ROWS (g_model.trainerData.mode == TRAINER_MODE_SLAVE ? (uint8_t)2 : HIDDEN_ROW)
#endif
#define TIMER_ROWS(x) 2|NAVIGATION_LINE_BY_LINE, 0, 0, 0, g_model.timers[x].countdownBeep != COUNTDOWN_SILENT ? (uint8_t) 1 : (uint8_t)0 #define TIMER_ROWS(x) 2|NAVIGATION_LINE_BY_LINE, 0, 0, 0, g_model.timers[x].countdownBeep != COUNTDOWN_SILENT ? (uint8_t) 1 : (uint8_t)0
@ -779,12 +773,6 @@ void menuModelSetup(event_t event)
if (attr) { if (attr) {
g_model.trainerData.mode = checkIncDec(event, g_model.trainerData.mode, 0, TRAINER_MODE_MAX(), EE_MODEL, isTrainerModeAvailable); g_model.trainerData.mode = checkIncDec(event, g_model.trainerData.mode, 0, TRAINER_MODE_MAX(), EE_MODEL, isTrainerModeAvailable);
} }
#if defined(BLUETOOTH) && defined(USEHORUSBT)
if (attr && checkIncDec_Ret) {
bluetooth.state = BLUETOOTH_STATE_OFF;
bluetooth.distantAddr[0] = 0;
}
#endif
break; break;
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL: case ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL:
@ -918,48 +906,6 @@ void menuModelSetup(event_t event)
lcdDrawTextAlignedLeft(y, STR_TRAINER); lcdDrawTextAlignedLeft(y, STR_TRAINER);
break; break;
#if defined(BLUETOOTH) && defined(USEHORUSBT)
case ITEM_MODEL_SETUP_TRAINER_LINE1:
if (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH) {
if (attr) {
s_editMode = 0;
}
if (bluetooth.distantAddr[0]) {
lcdDrawText(INDENT_WIDTH, y+1, bluetooth.distantAddr, TINSIZE);
if (bluetooth.state != BLUETOOTH_STATE_CONNECTED) {
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, BUTTON("Bind"), menuHorizontalPosition == 0 ? attr : 0);
lcdDrawText(MODEL_SETUP_2ND_COLUMN+5*FW, y, BUTTON("Clear"), menuHorizontalPosition == 1 ? attr : 0);
}
else {
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, BUTTON("Clear"), attr);
}
if (attr && event == EVT_KEY_FIRST(KEY_ENTER)) {
if (bluetooth.state == BLUETOOTH_STATE_CONNECTED || menuHorizontalPosition == 1) {
bluetooth.state = BLUETOOTH_STATE_OFF;
bluetooth.distantAddr[0] = 0;
}
else {
bluetooth.state = BLUETOOTH_STATE_BIND_REQUESTED;
}
}
}
else {
lcdDrawText(INDENT_WIDTH, y, "---");
if (bluetooth.state < BLUETOOTH_STATE_IDLE)
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, BUTTON("Init"), attr);
else
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, BUTTON("Discover"), attr);
if (attr && event == EVT_KEY_FIRST(KEY_ENTER)) {
if (bluetooth.state < BLUETOOTH_STATE_IDLE)
bluetooth.state = BLUETOOTH_STATE_OFF;
else
bluetooth.state = BLUETOOTH_STATE_DISCOVER_REQUESTED;
}
}
break;
}
// no break
#else
case ITEM_MODEL_SETUP_TRAINER_LINE1: case ITEM_MODEL_SETUP_TRAINER_LINE1:
lcdDrawTextAlignedLeft(y, STR_CHANNELRANGE); lcdDrawTextAlignedLeft(y, STR_CHANNELRANGE);
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_CH, menuHorizontalPosition==0 ? attr : 0); lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_CH, menuHorizontalPosition==0 ? attr : 0);
@ -977,7 +923,6 @@ void menuModelSetup(event_t event)
} }
} }
break; break;
#endif
case ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS: case ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS:
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_CHANNELS: case ITEM_MODEL_SETUP_EXTERNAL_MODULE_CHANNELS:

View file

@ -55,9 +55,6 @@ enum menuRadioHwItems {
CASE_PCBX9E(ITEM_RADIO_HARDWARE_SQ) CASE_PCBX9E(ITEM_RADIO_HARDWARE_SQ)
CASE_PCBX9E(ITEM_RADIO_HARDWARE_SR) CASE_PCBX9E(ITEM_RADIO_HARDWARE_SR)
CASE_BLUETOOTH(ITEM_RADIO_HARDWARE_BLUETOOTH_MODE) CASE_BLUETOOTH(ITEM_RADIO_HARDWARE_BLUETOOTH_MODE)
#if defined(USEHORUSBT)
CASE_BLUETOOTH(ITEM_RADIO_HARDWARE_BLUETOOTH_NAME)
#endif
#if defined(AUX_SERIAL) #if defined(AUX_SERIAL)
ITEM_RADIO_HARDWARE_AUX_SERIAL_MODE, ITEM_RADIO_HARDWARE_AUX_SERIAL_MODE,
#endif #endif
@ -88,10 +85,10 @@ enum menuRadioHwItems {
#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 #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
#endif #endif
#if defined(BLUETOOTH) && defined(USEHORUSBT) #if defined(BLUETOOTH)
#define BLUETOOTH_ROWS 0, uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? -1 : 0), #define BLUETOOTH_ROWS (uint8_t)0,
#else #else
#define BLUETOOTH_ROWS (uint8_t)0, #define BLUETOOTH_ROWS
#endif #endif
#define SWITCH_TYPE_MAX(sw) ((MIXSRC_SF-MIXSRC_FIRST_SWITCH == sw || MIXSRC_SH-MIXSRC_FIRST_SWITCH == sw) ? SWITCH_2POS : SWITCH_3POS) #define SWITCH_TYPE_MAX(sw) ((MIXSRC_SF-MIXSRC_FIRST_SWITCH == sw || MIXSRC_SH-MIXSRC_FIRST_SWITCH == sw) ? SWITCH_2POS : SWITCH_3POS)
@ -218,19 +215,9 @@ void menuRadioHardware(event_t event)
lcdDrawText(INDENT_WIDTH, y, STR_BLUETOOTH); lcdDrawText(INDENT_WIDTH, y, STR_BLUETOOTH);
lcdDrawTextAtIndex(HW_SETTINGS_COLUMN, y, STR_BLUETOOTH_MODES, g_eeGeneral.bluetoothMode, attr); lcdDrawTextAtIndex(HW_SETTINGS_COLUMN, y, STR_BLUETOOTH_MODES, g_eeGeneral.bluetoothMode, attr);
if (attr) { if (attr) {
#if defined(USEHORUSBT)
g_eeGeneral.bluetoothMode = checkIncDecGen(event, g_eeGeneral.bluetoothMode, BLUETOOTH_OFF, BLUETOOTH_TRAINER);
#else
g_eeGeneral.bluetoothMode = checkIncDecGen(event, g_eeGeneral.bluetoothMode, BLUETOOTH_OFF, BLUETOOTH_TELEMETRY); g_eeGeneral.bluetoothMode = checkIncDecGen(event, g_eeGeneral.bluetoothMode, BLUETOOTH_OFF, BLUETOOTH_TELEMETRY);
#endif
} }
break; break;
#if defined(USEHORUSBT)
case ITEM_RADIO_HARDWARE_BLUETOOTH_NAME:
lcdDrawText(INDENT_WIDTH, y, STR_NAME);
editName(HW_SETTINGS_COLUMN, y, g_eeGeneral.bluetoothName, LEN_BLUETOOTH_NAME, event, attr);
break;
#endif
#endif #endif
#if defined(AUX_SERIAL) #if defined(AUX_SERIAL)

View file

@ -698,67 +698,34 @@ bool isTelemetryProtocolAvailable(int protocol)
return true; return true;
} }
#if defined(PCBHORUS)
bool isTrainerModeAvailable(int mode)
{
return true;
}
#elif defined(PCBX9E)
bool isTrainerModeAvailable(int mode) bool isTrainerModeAvailable(int mode)
{ {
#if defined(PCBTARANIS)
if (IS_EXTERNAL_MODULE_ENABLED() && (mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE)) if (IS_EXTERNAL_MODULE_ENABLED() && (mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE))
return false; return false;
#if defined(USEHORUSBT)
else if (mode == TRAINER_MODE_MASTER_BATTERY_COMPARTMENT)
#else
else if (mode == TRAINER_MODE_MASTER_BLUETOOTH || mode == TRAINER_MODE_MASTER_BATTERY_COMPARTMENT || mode == TRAINER_MODE_SLAVE_BLUETOOTH)
#endif
return false;
else
return true;
}
#elif defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX9E)
bool isTrainerModeAvailable(int mode)
{
if (IS_EXTERNAL_MODULE_ENABLED() && (mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE))
return false;
else
return true;
}
#elif defined(PCBX7) || defined(PCBXLITES) || defined(PCBX9LITE)
bool isTrainerModeAvailable(int mode)
{
if (IS_EXTERNAL_MODULE_ENABLED() && (mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE))
return false;
else if (mode == TRAINER_MODE_MASTER_BATTERY_COMPARTMENT)
return false;
#if defined(BLUETOOTH)
else if (g_eeGeneral.bluetoothMode != BLUETOOTH_TRAINER && (mode == TRAINER_MODE_MASTER_BLUETOOTH || mode == TRAINER_MODE_SLAVE_BLUETOOTH))
return false;
#endif #endif
else
return true; #if !defined(PCBSKY9X) && !defined(TRAINER_BATTERY_COMPARTMENT)
} if (mode == TRAINER_MODE_MASTER_BATTERY_COMPARTMENT)
#elif defined(PCBXLITES) return false;
bool isTrainerModeAvailable(int mode) #endif
{
#if defined(PCBX9E)
if (mode == TRAINER_MODE_MASTER_BLUETOOTH || mode == TRAINER_MODE_SLAVE_BLUETOOTH)
return false;
#elif defined(BLUETOOTH)
if (g_eeGeneral.bluetoothMode != BLUETOOTH_TRAINER && (mode == TRAINER_MODE_MASTER_BLUETOOTH || mode == TRAINER_MODE_SLAVE_BLUETOOTH))
return false;
#endif
#if defined(PCBXLITE)
if (mode == TRAINER_MODE_MASTER_TRAINER_JACK || mode == TRAINER_MODE_SLAVE) if (mode == TRAINER_MODE_MASTER_TRAINER_JACK || mode == TRAINER_MODE_SLAVE)
return true;
else if (g_eeGeneral.bluetoothMode == BLUETOOTH_TRAINER && (mode == TRAINER_MODE_MASTER_BLUETOOTH || mode == TRAINER_MODE_SLAVE_BLUETOOTH))
return true;
else
return false; return false;
}
#elif defined(PCBXLITE)
bool isTrainerModeAvailable(int mode)
{
if (g_eeGeneral.bluetoothMode == BLUETOOTH_TRAINER && (mode == TRAINER_MODE_MASTER_BLUETOOTH || mode == TRAINER_MODE_SLAVE_BLUETOOTH))
return true;
else
return false;
}
#endif #endif
return true;
}
bool modelHasNotes() bool modelHasNotes()
{ {
char filename[sizeof(MODELS_PATH)+1+sizeof(g_model.header.name)+sizeof(TEXT_EXT)] = MODELS_PATH "/"; char filename[sizeof(MODELS_PATH)+1+sizeof(g_model.header.name)+sizeof(TEXT_EXT)] = MODELS_PATH "/";

View file

@ -201,7 +201,7 @@
#define IS_FAI_FORBIDDEN(idx) (IS_FAI_ENABLED() && isFaiForbidden(idx)) #define IS_FAI_FORBIDDEN(idx) (IS_FAI_ENABLED() && isFaiForbidden(idx))
#if defined(BLUETOOTH) #if defined(BLUETOOTH)
#if defined(X9E) && !defined(USEHORUSBT) #if defined(X9E)
#define IS_BLUETOOTH_TRAINER() (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH) #define IS_BLUETOOTH_TRAINER() (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH)
#define IS_SLAVE_TRAINER() (g_model.trainerData.mode == TRAINER_MODE_SLAVE) #define IS_SLAVE_TRAINER() (g_model.trainerData.mode == TRAINER_MODE_SLAVE)
#else #else

View file

@ -2,7 +2,6 @@ option(SHUTDOWN_CONFIRMATION "Shutdown confirmation" OFF)
option(LCD_DUAL_BUFFER "Dual LCD Buffer" OFF) option(LCD_DUAL_BUFFER "Dual LCD Buffer" OFF)
option(INTERNAL_MODULE_PPM "Support for PPM internal module hack" OFF) option(INTERNAL_MODULE_PPM "Support for PPM internal module hack" OFF)
option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module replacement" OFF) option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module replacement" OFF)
option(USEHORUSBT "X9E BT module replaced by Horus BT module" OFF)
option(PXX1 "PXX1 protocol support" ON) option(PXX1 "PXX1 protocol support" ON)
option(PXX2 "PXX2 protocol support" OFF) option(PXX2 "PXX2 protocol support" OFF)
@ -184,10 +183,6 @@ else()
${TARGET_SRC} ${TARGET_SRC}
intmodule_pulses_driver.cpp intmodule_pulses_driver.cpp
) )
set(PULSES_SRC
${PULSES_SRC}
../sbus.cpp
)
endif() endif()
if(PCB STREQUAL X9E OR (PCB STREQUAL X7 AND NOT (PCBREV STREQUAL T12)) OR PCB STREQUAL X9LITE) if(PCB STREQUAL X9E OR (PCB STREQUAL X7 AND NOT (PCBREV STREQUAL T12)) OR PCB STREQUAL X9LITE)
@ -246,6 +241,11 @@ if(STATUS_LEDS)
set(LED_DRIVER led_driver.cpp) set(LED_DRIVER led_driver.cpp)
endif() endif()
set(SRC
${SRC}
sbus.cpp
)
set(TARGET_SRC set(TARGET_SRC
${TARGET_SRC} ${TARGET_SRC}
board.cpp board.cpp
@ -286,8 +286,4 @@ if(INTERNAL_MODULE_PXX1)
add_definitions(-DINTERNAL_MODULE_PXX1) add_definitions(-DINTERNAL_MODULE_PXX1)
endif() endif()
if(USEHORUSBT)
add_definitions(-DUSEHORUSBT)
endif(USEHORUSBT)
set(FIRMWARE_DEPENDENCIES ${FIRMWARE_DEPENDENCIES} ${BITMAPS_TARGET}) set(FIRMWARE_DEPENDENCIES ${FIRMWARE_DEPENDENCIES} ${BITMAPS_TARGET})

View file

@ -798,7 +798,7 @@ void auxSerialStop(void);
// BT driver // BT driver
#define BLUETOOTH_BOOTLOADER_BAUDRATE 230400 #define BLUETOOTH_BOOTLOADER_BAUDRATE 230400
#define BLUETOOTH_DEFAULT_BAUDRATE 115200 #define BLUETOOTH_DEFAULT_BAUDRATE 115200
#if defined(PCBX9E) && !defined(USEHORUSBT) #if defined(PCBX9E)
#define BLUETOOTH_FACTORY_BAUDRATE 9600 #define BLUETOOTH_FACTORY_BAUDRATE 9600
#else #else
#define BLUETOOTH_FACTORY_BAUDRATE 57600 #define BLUETOOTH_FACTORY_BAUDRATE 57600

View file

@ -27,8 +27,7 @@ void extmoduleStop()
EXTMODULE_TIMER_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA EXTMODULE_TIMER_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
#if defined(EXTMODULE_USART) #if defined(EXTMODULE_USART)
NVIC_DisableIRQ(EXTMODULE_USART_DMA_STREAM_IRQn); EXTMODULE_USART_TX_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
EXTMODULE_USART_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = EXTMODULE_TX_GPIO_PIN | EXTMODULE_RX_GPIO_PIN; GPIO_InitStructure.GPIO_Pin = EXTMODULE_TX_GPIO_PIN | EXTMODULE_RX_GPIO_PIN;
@ -126,13 +125,6 @@ void extmoduleInvertedSerialStart(uint32_t baudrate)
{ {
EXTERNAL_MODULE_ON(); EXTERNAL_MODULE_ON();
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = EXTMODULE_USART_DMA_STREAM_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /* Not used as 4 bits are used for the pre-emption priority. */;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
// TX + RX Pins // TX + RX Pins
GPIO_PinAFConfig(EXTMODULE_USART_GPIO, EXTMODULE_TX_GPIO_PinSource, EXTMODULE_USART_GPIO_AF); GPIO_PinAFConfig(EXTMODULE_USART_GPIO, EXTMODULE_TX_GPIO_PinSource, EXTMODULE_USART_GPIO_AF);
GPIO_PinAFConfig(EXTMODULE_USART_GPIO, EXTMODULE_RX_GPIO_PinSource, EXTMODULE_USART_GPIO_AF); GPIO_PinAFConfig(EXTMODULE_USART_GPIO, EXTMODULE_RX_GPIO_PinSource, EXTMODULE_USART_GPIO_AF);
@ -167,8 +159,8 @@ void extmoduleInvertedSerialStart(uint32_t baudrate)
void extmoduleSendBuffer(const uint8_t * data, uint8_t size) void extmoduleSendBuffer(const uint8_t * data, uint8_t size)
{ {
DMA_InitTypeDef DMA_InitStructure; DMA_InitTypeDef DMA_InitStructure;
DMA_DeInit(EXTMODULE_USART_DMA_STREAM); DMA_DeInit(EXTMODULE_USART_TX_DMA_STREAM);
DMA_InitStructure.DMA_Channel = EXTMODULE_USART_DMA_CHANNEL; DMA_InitStructure.DMA_Channel = EXTMODULE_USART_TX_DMA_CHANNEL;
DMA_InitStructure.DMA_PeripheralBaseAddr = CONVERT_PTR_UINT(&EXTMODULE_USART->DR); DMA_InitStructure.DMA_PeripheralBaseAddr = CONVERT_PTR_UINT(&EXTMODULE_USART->DR);
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
DMA_InitStructure.DMA_Memory0BaseAddr = CONVERT_PTR_UINT(data); DMA_InitStructure.DMA_Memory0BaseAddr = CONVERT_PTR_UINT(data);
@ -183,15 +175,11 @@ void extmoduleSendBuffer(const uint8_t * data, uint8_t size)
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
DMA_Init(EXTMODULE_USART_DMA_STREAM, &DMA_InitStructure); DMA_Init(EXTMODULE_USART_TX_DMA_STREAM, &DMA_InitStructure);
DMA_Cmd(EXTMODULE_USART_DMA_STREAM, ENABLE); DMA_Cmd(EXTMODULE_USART_TX_DMA_STREAM, ENABLE);
USART_DMACmd(EXTMODULE_USART, USART_DMAReq_Tx, ENABLE); USART_DMACmd(EXTMODULE_USART, USART_DMAReq_Tx, ENABLE);
} }
// TODO remove this when we have adaptative speed
//uint8_t counter = 0;
//#include <stdio.h>
#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)
extern "C" void EXTMODULE_USART_IRQHandler(void) extern "C" void EXTMODULE_USART_IRQHandler(void)
{ {
@ -201,9 +189,6 @@ extern "C" void EXTMODULE_USART_IRQHandler(void)
uint8_t data = EXTMODULE_USART->DR; uint8_t data = EXTMODULE_USART->DR;
if (status & USART_FLAG_ERRORS) { if (status & USART_FLAG_ERRORS) {
extmoduleFifo.errors++; extmoduleFifo.errors++;
// if (!counter++) {
// TRACE_NOCRLF("%02X ", (uint8_t)status);
// }
} }
else { else {
extmoduleFifo.push(data); extmoduleFifo.push(data);

View file

@ -826,7 +826,7 @@
#define INTERNAL_MODULE_PXX1 #define INTERNAL_MODULE_PXX1
#endif #endif
#if defined(PCBXLITE) || defined(PCBX9LITE) #if defined(PCBXLITE) || defined(PCBX9LITE)
#define INTMODULE_RCC_APB1Periph RCC_APB1Periph_TIM3 #define INTMODULE_RCC_APB1Periph 0
#define INTMODULE_RCC_APB2Periph RCC_APB2Periph_USART1 #define INTMODULE_RCC_APB2Periph RCC_APB2Periph_USART1
#if defined(PCBXLITES) || defined(PCBX9LITE) #if defined(PCBXLITES) || defined(PCBX9LITE)
#define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA2) #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA2)
@ -855,10 +855,6 @@
#define INTMODULE_BOOTCMD_GPIO GPIOC #define INTMODULE_BOOTCMD_GPIO GPIOC
#define INTMODULE_BOOTCMD_GPIO_PIN GPIO_Pin_8 // PC.08 #define INTMODULE_BOOTCMD_GPIO_PIN GPIO_Pin_8 // PC.08
#endif #endif
// #define INTMODULE_TIMER TIM3
// #define INTMODULE_TIMER_IRQn TIM3_IRQn
// #define INTMODULE_TIMER_IRQHandler TIM3_IRQHandler
// #define INTMODULE_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1)
#elif defined(PCBX9E) || defined(PCBX9DP) || defined(RADIO_X7) #elif defined(PCBX9E) || defined(PCBX9DP) || defined(RADIO_X7)
#define INTMODULE_PULSES #define INTMODULE_PULSES
#define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2) #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2)
@ -962,9 +958,10 @@
#define EXTMODULE_USART USART6 #define EXTMODULE_USART USART6
#define EXTMODULE_USART_IRQn USART6_IRQn #define EXTMODULE_USART_IRQn USART6_IRQn
#define EXTMODULE_USART_IRQHandler USART6_IRQHandler #define EXTMODULE_USART_IRQHandler USART6_IRQHandler
#define EXTMODULE_USART_DMA_CHANNEL DMA_Channel_5 #define EXTMODULE_USART_TX_DMA_CHANNEL DMA_Channel_5
#define EXTMODULE_USART_DMA_STREAM DMA2_Stream6 #define EXTMODULE_USART_TX_DMA_STREAM DMA2_Stream6
#define EXTMODULE_USART_DMA_STREAM_IRQn DMA2_Stream6_IRQn #define EXTMODULE_USART_RX_DMA_CHANNEL DMA_Channel_5
#define EXTMODULE_USART_RX_DMA_STREAM DMA2_Stream1
#elif defined(RADIO_T12) #elif defined(RADIO_T12)
//Jumper T12v2 external module configured //Jumper T12v2 external module configured
#define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2)
@ -1233,40 +1230,55 @@
#endif #endif
// Trainer / Trainee from the module bay // Trainer / Trainee from the module bay
#if defined(PCBX9LITE) #if defined(PCBX9LITE) || defined(PCBXLITE)
#define TRAINER_MODULE_CPPM #define TRAINER_MODULE_CPPM
#define TRAINER_MODULE_RCC_AHB1Periph EXTMODULE_HEARTBEAT_RCC_AHB1Periph #define TRAINER_MODULE_SBUS
#define TRAINER_MODULE_RCC_APB1Periph RCC_APB1Periph_TIM4 #define TRAINER_MODULE_RCC_AHB1Periph 0
#define TRAINER_MODULE_RCC_APB1Periph RCC_APB1Periph_TIM3
#define TRAINER_MODULE_RCC_APB2Periph 0 #define TRAINER_MODULE_RCC_APB2Periph 0
#define TRAINER_MODULE_CPPM_GPIO EXTMODULE_HEARTBEAT_GPIO #define TRAINER_MODULE_CPPM_GPIO EXTMODULE_USART_GPIO
#define TRAINER_MODULE_CPPM_GPIO_PIN EXTMODULE_HEARTBEAT_GPIO_PIN #define TRAINER_MODULE_CPPM_GPIO_PIN EXTMODULE_RX_GPIO_PIN
#define TRAINER_MODULE_CPPM_GPIO_PinSource EXTMODULE_HEARTBEAT_EXTI_PinSource #define TRAINER_MODULE_CPPM_GPIO_PinSource EXTMODULE_RX_GPIO_PinSource
#define TRAINER_MODULE_CPPM_GPIO_AF GPIO_AF_TIM4 #define TRAINER_MODULE_CPPM_GPIO_AF GPIO_AF_TIM3
#elif defined(PCBXLITE) #define TRAINER_MODULE_CPPM_TIMER TIM3
#define TRAINER_MODULE_CPPM #define TRAINER_MODULE_CPPM_COUNTER_REGISTER TRAINER_MODULE_CPPM_TIMER->CCR2
#define TRAINER_MODULE_RCC_AHB1Periph INTMODULE_HEARTBEAT_RCC_AHB1Periph #define TRAINER_MODULE_CPPM_INTERRUPT_ENABLE TIM_DIER_CC2IE
#define TRAINER_MODULE_RCC_APB1Periph RCC_APB1Periph_TIM4 #define TRAINER_MODULE_CPPM_INTERRUPT_FLAG TIM_SR_CC2IF
#define TRAINER_MODULE_RCC_APB2Periph 0 #define TRAINER_MODULE_CPPM_CCMR1 (TIM_CCMR1_IC2F_0 | TIM_CCMR1_IC2F_1 | TIM_CCMR1_CC2S_0)
#define TRAINER_MODULE_CPPM_GPIO INTMODULE_HEARTBEAT_GPIO #define TRAINER_MODULE_CPPM_CCER TIM_CCER_CC2E
#define TRAINER_MODULE_CPPM_GPIO_PIN INTMODULE_HEARTBEAT_GPIO_PIN #define TRAINER_MODULE_CPPM_TIMER_IRQn TIM3_IRQn
#define TRAINER_MODULE_CPPM_GPIO_PinSource INTMODULE_HEARTBEAT_EXTI_PinSource #define TRAINER_MODULE_CPPM_TIMER_IRQHandler TIM3_IRQHandler
#define TRAINER_MODULE_CPPM_GPIO_AF GPIO_AF_TIM4 #define TRAINER_MODULE_SBUS_GPIO EXTMODULE_USART_GPIO
#define TRAINER_MODULE_SBUS_GPIO_PIN EXTMODULE_RX_GPIO_PIN
#define TRAINER_MODULE_SBUS_GPIO_AF EXTMODULE_USART_GPIO_AF
#define TRAINER_MODULE_SBUS_USART EXTMODULE_USART
#define TRAINER_MODULE_SBUS_GPIO_PinSource EXTMODULE_RX_GPIO_PinSource
#define TRAINER_MODULE_SBUS_DMA_STREAM EXTMODULE_USART_RX_DMA_STREAM
#define TRAINER_MODULE_SBUS_DMA_CHANNEL EXTMODULE_USART_RX_DMA_CHANNEL
#else #else
#define TRAINER_MODULE_CPPM #define TRAINER_MODULE_CPPM
#define TRAINER_MODULE_SBUS #define TRAINER_MODULE_SBUS
#define TRAINER_MODULE_RCC_AHB1Periph RCC_AHB1Periph_GPIOC #define TRAINER_MODULE_RCC_AHB1Periph RCC_AHB1Periph_GPIOC
#define TRAINER_MODULE_RCC_APB2Periph RCC_APB2Periph_USART6 #define TRAINER_MODULE_RCC_APB2Periph RCC_APB2Periph_USART6
#define TRAINER_MODULE_RCC_APB1Periph RCC_APB1Periph_TIM3 #define TRAINER_MODULE_RCC_APB1Periph RCC_APB1Periph_TIM3
#define TRAINER_MODULE_CPPM_TIMER TRAINER_TIMER
#define TRAINER_MODULE_CPPM_GPIO INTMODULE_HEARTBEAT_GPIO #define TRAINER_MODULE_CPPM_GPIO INTMODULE_HEARTBEAT_GPIO
#define TRAINER_MODULE_CPPM_GPIO_PIN INTMODULE_HEARTBEAT_GPIO_PIN #define TRAINER_MODULE_CPPM_GPIO_PIN INTMODULE_HEARTBEAT_GPIO_PIN
#define TRAINER_MODULE_CPPM_GPIO_PinSource INTMODULE_HEARTBEAT_EXTI_PinSource #define TRAINER_MODULE_CPPM_GPIO_PinSource INTMODULE_HEARTBEAT_EXTI_PinSource
#define TRAINER_MODULE_SBUS_GPIO_AF GPIO_AF_USART6 #define TRAINER_MODULE_CPPM_INTERRUPT_ENABLE TIM_DIER_CC2IE
#define TRAINER_MODULE_CPPM_INTERRUPT_FLAG TIM_SR_CC2IF
#define TRAINER_MODULE_CPPM_CCMR1 (TIM_CCMR1_IC2F_0 | TIM_CCMR1_IC2F_1 | TIM_CCMR1_CC2S_0)
#define TRAINER_MODULE_CPPM_CCER TIM_CCER_CC2E
#define TRAINER_MODULE_CPPM_COUNTER_REGISTER TRAINER_TIMER->CCR2
#define TRAINER_MODULE_CPPM_TIMER_IRQn TRAINER_TIMER_IRQn
#define TRAINER_MODULE_CPPM_GPIO_AF GPIO_AF_TIM3 #define TRAINER_MODULE_CPPM_GPIO_AF GPIO_AF_TIM3
#define TRAINER_MODULE_SBUS_GPIO_AF GPIO_AF_USART6
#define TRAINER_MODULE_SBUS_USART USART6 #define TRAINER_MODULE_SBUS_USART USART6
#define TRAINER_MODULE_SBUS_USART_IRQHandler USART6_IRQHandler #define TRAINER_MODULE_SBUS_GPIO INTMODULE_HEARTBEAT_GPIO
#define TRAINER_MODULE_SBUS_USART_IRQn USART6_IRQn #define TRAINER_MODULE_SBUS_GPIO_PIN INTMODULE_HEARTBEAT_GPIO_PIN
#define TRAINER_MODULE_SBUS_DMA_Stream DMA2_Stream1 #define TRAINER_MODULE_SBUS_GPIO_PinSource INTMODULE_HEARTBEAT_EXTI_PinSource
#define TRAINER_MODULE_SBUS_DMA_Channel DMA_Channel_5 #define TRAINER_MODULE_SBUS_DMA_STREAM DMA2_Stream1
#define TRAINER_MODULE_SBUS_DMA_CHANNEL DMA_Channel_5
#endif #endif
// USB // USB

View file

@ -21,7 +21,7 @@
#include "opentx.h" #include "opentx.h"
#if defined(TRAINER_MODULE_SBUS_USART) #if defined(TRAINER_MODULE_SBUS_USART)
DMAFifo<32> heartbeatFifo __DMA (TRAINER_MODULE_SBUS_DMA_Stream); DMAFifo<32> trainerSbusFifo __DMA (TRAINER_MODULE_SBUS_DMA_STREAM);
#endif #endif
void trainerSendNextFrame(); void trainerSendNextFrame();
@ -165,10 +165,10 @@ extern "C" void TRAINER_TIMER_IRQHandler()
} }
#endif #endif
#if defined(TRAINER_MODULE_CPPM) #if defined(TRAINER_MODULE_CPPM) && !defined(TRAINER_MODULE_CPPM_TIMER_IRQHandler)
if ((TRAINER_TIMER->DIER & TIM_DIER_CC2IE) && (TRAINER_TIMER->SR & TIM_SR_CC2IF)) { if ((TRAINER_TIMER->DIER & TRAINER_MODULE_CPPM_INTERRUPT_ENABLE) && (TRAINER_TIMER->SR & TRAINER_MODULE_CPPM_INTERRUPT_FLAG)) {
// capture mode on heartbeat pin (external module) // capture mode on heartbeat pin (external module)
capture = TRAINER_TIMER->CCR2; capture = TRAINER_MODULE_CPPM_COUNTER_REGISTER;
if (currentTrainerMode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) { if (currentTrainerMode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) {
doCapture = true; doCapture = true;
} }
@ -202,6 +202,26 @@ extern "C" void TRAINER_TIMER_IRQHandler()
#endif #endif
} }
#if defined(TRAINER_MODULE_CPPM_TIMER_IRQHandler)
extern "C" void TRAINER_MODULE_CPPM_TIMER_IRQHandler()
{
uint16_t capture = 0;
bool doCapture = false;
if ((TRAINER_MODULE_CPPM_TIMER->DIER & TRAINER_MODULE_CPPM_INTERRUPT_ENABLE) && (TRAINER_MODULE_CPPM_TIMER->SR & TRAINER_MODULE_CPPM_INTERRUPT_FLAG)) {
// capture mode on external module
capture = TRAINER_MODULE_CPPM_COUNTER_REGISTER;
if (currentTrainerMode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) {
doCapture = true;
}
}
if (doCapture) {
captureTrainerPulses(capture);
}
}
#endif
#if defined(TRAINER_MODULE_CPPM) #if defined(TRAINER_MODULE_CPPM)
void init_trainer_module_cppm() void init_trainer_module_cppm()
{ {
@ -217,24 +237,28 @@ void init_trainer_module_cppm()
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(TRAINER_MODULE_CPPM_GPIO, &GPIO_InitStructure); GPIO_Init(TRAINER_MODULE_CPPM_GPIO, &GPIO_InitStructure);
TRAINER_TIMER->ARR = 0xFFFF; TRAINER_MODULE_CPPM_TIMER->ARR = 0xFFFF;
TRAINER_TIMER->PSC = (PERI1_FREQUENCY * TIMER_MULT_APB1) / 2000000 - 1; // 0.5uS TRAINER_MODULE_CPPM_TIMER->PSC = (PERI1_FREQUENCY * TIMER_MULT_APB1) / 2000000 - 1; // 0.5uS
TRAINER_TIMER->CR2 = 0; TRAINER_MODULE_CPPM_TIMER->CR2 = 0;
TRAINER_TIMER->CCMR1 = TIM_CCMR1_IC2F_0 | TIM_CCMR1_IC2F_1 | TIM_CCMR1_CC2S_0; #if defined(TRAINER_MODULE_CPPM_CCMR1)
TRAINER_TIMER->CCER = TIM_CCER_CC2E; TRAINER_MODULE_CPPM_TIMER->CCMR1 = TRAINER_MODULE_CPPM_CCMR1;
TRAINER_TIMER->SR &= ~TIM_SR_CC2IF; // Clear flag #elif defined(TRAINER_MODULE_CPPM_CCMR2)
TRAINER_TIMER->DIER |= TIM_DIER_CC2IE; TRAINER_MODULE_CPPM_TIMER->CCMR2 = TRAINER_MODULE_CPPM_CCMR2;
TRAINER_TIMER->CR1 = TIM_CR1_CEN; #endif
TRAINER_MODULE_CPPM_TIMER->CCER = TRAINER_MODULE_CPPM_CCER;
TRAINER_MODULE_CPPM_TIMER->SR &= ~TRAINER_MODULE_CPPM_INTERRUPT_FLAG; // Clear flag
TRAINER_MODULE_CPPM_TIMER->DIER |= TRAINER_MODULE_CPPM_INTERRUPT_ENABLE;
TRAINER_MODULE_CPPM_TIMER->CR1 = TIM_CR1_CEN;
NVIC_SetPriority(TRAINER_TIMER_IRQn, 7); NVIC_SetPriority(TRAINER_MODULE_CPPM_TIMER_IRQn, 7);
NVIC_EnableIRQ(TRAINER_TIMER_IRQn); NVIC_EnableIRQ(TRAINER_MODULE_CPPM_TIMER_IRQn);
} }
void stop_trainer_module_cppm() void stop_trainer_module_cppm()
{ {
TRAINER_TIMER->DIER = 0; TRAINER_MODULE_CPPM_TIMER->DIER = 0;
TRAINER_TIMER->CR1 &= ~TIM_CR1_CEN; // Stop counter TRAINER_MODULE_CPPM_TIMER->CR1 &= ~TIM_CR1_CEN; // Stop counter
NVIC_DisableIRQ(TRAINER_TIMER_IRQn); // Stop Interrupt NVIC_DisableIRQ(TRAINER_MODULE_CPPM_TIMER_IRQn); // Stop Interrupt
if (!IS_EXTERNAL_MODULE_ENABLED()) { if (!IS_EXTERNAL_MODULE_ENABLED()) {
EXTERNAL_MODULE_OFF(); EXTERNAL_MODULE_OFF();
@ -250,14 +274,14 @@ void init_trainer_module_sbus()
USART_InitTypeDef USART_InitStructure; USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;
GPIO_PinAFConfig(GPIOC, TRAINER_MODULE_CPPM_GPIO_PinSource, TRAINER_MODULE_SBUS_GPIO_AF); GPIO_PinAFConfig(TRAINER_MODULE_SBUS_GPIO, TRAINER_MODULE_SBUS_GPIO_PinSource, TRAINER_MODULE_SBUS_GPIO_AF);
GPIO_InitStructure.GPIO_Pin = TRAINER_MODULE_CPPM_GPIO_PIN; GPIO_InitStructure.GPIO_Pin = TRAINER_MODULE_SBUS_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(TRAINER_MODULE_CPPM_GPIO, &GPIO_InitStructure); GPIO_Init(TRAINER_MODULE_SBUS_GPIO, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 100000; USART_InitStructure.USART_BaudRate = 100000;
USART_InitStructure.USART_WordLength = USART_WordLength_9b; USART_InitStructure.USART_WordLength = USART_WordLength_9b;
@ -268,14 +292,14 @@ void init_trainer_module_sbus()
USART_Init(TRAINER_MODULE_SBUS_USART, &USART_InitStructure); USART_Init(TRAINER_MODULE_SBUS_USART, &USART_InitStructure);
DMA_InitTypeDef DMA_InitStructure; DMA_InitTypeDef DMA_InitStructure;
heartbeatFifo.clear(); trainerSbusFifo.clear();
USART_ITConfig(TRAINER_MODULE_SBUS_USART, USART_IT_RXNE, DISABLE); USART_ITConfig(TRAINER_MODULE_SBUS_USART, USART_IT_RXNE, DISABLE);
USART_ITConfig(TRAINER_MODULE_SBUS_USART, USART_IT_TXE, DISABLE); USART_ITConfig(TRAINER_MODULE_SBUS_USART, USART_IT_TXE, DISABLE);
DMA_InitStructure.DMA_Channel = TRAINER_MODULE_SBUS_DMA_Channel; DMA_InitStructure.DMA_Channel = TRAINER_MODULE_SBUS_DMA_CHANNEL;
DMA_InitStructure.DMA_PeripheralBaseAddr = CONVERT_PTR_UINT(&TRAINER_MODULE_SBUS_USART->DR); DMA_InitStructure.DMA_PeripheralBaseAddr = CONVERT_PTR_UINT(&TRAINER_MODULE_SBUS_USART->DR);
DMA_InitStructure.DMA_Memory0BaseAddr = CONVERT_PTR_UINT(heartbeatFifo.buffer()); DMA_InitStructure.DMA_Memory0BaseAddr = CONVERT_PTR_UINT(trainerSbusFifo.buffer());
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
DMA_InitStructure.DMA_BufferSize = heartbeatFifo.size(); DMA_InitStructure.DMA_BufferSize = trainerSbusFifo.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;
@ -286,19 +310,18 @@ void init_trainer_module_sbus()
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
DMA_Init(TRAINER_MODULE_SBUS_DMA_Stream, &DMA_InitStructure); DMA_Init(TRAINER_MODULE_SBUS_DMA_STREAM, &DMA_InitStructure);
USART_DMACmd(TRAINER_MODULE_SBUS_USART, USART_DMAReq_Rx, ENABLE); USART_DMACmd(TRAINER_MODULE_SBUS_USART, USART_DMAReq_Rx, ENABLE);
USART_Cmd(TRAINER_MODULE_SBUS_USART, ENABLE); USART_Cmd(TRAINER_MODULE_SBUS_USART, ENABLE);
DMA_Cmd(TRAINER_MODULE_SBUS_DMA_Stream, ENABLE); DMA_Cmd(TRAINER_MODULE_SBUS_DMA_STREAM, ENABLE);
} }
void stop_trainer_module_sbus() void stop_trainer_module_sbus()
{ {
DMA_Cmd(TRAINER_MODULE_SBUS_DMA_Stream, DISABLE); DMA_Cmd(TRAINER_MODULE_SBUS_DMA_STREAM, DISABLE);
USART_Cmd(TRAINER_MODULE_SBUS_USART, DISABLE); USART_Cmd(TRAINER_MODULE_SBUS_USART, DISABLE);
USART_DMACmd(TRAINER_MODULE_SBUS_USART, USART_DMAReq_Rx, DISABLE); USART_DMACmd(TRAINER_MODULE_SBUS_USART, USART_DMAReq_Rx, DISABLE);
DMA_DeInit(TRAINER_MODULE_SBUS_DMA_Stream); DMA_DeInit(TRAINER_MODULE_SBUS_DMA_STREAM);
NVIC_DisableIRQ(TRAINER_MODULE_SBUS_USART_IRQn);
if (!IS_EXTERNAL_MODULE_ENABLED()) { if (!IS_EXTERNAL_MODULE_ENABLED()) {
EXTERNAL_MODULE_OFF(); EXTERNAL_MODULE_OFF();
@ -306,13 +329,16 @@ void stop_trainer_module_sbus()
} }
#endif #endif
uint32_t ccount = 0;
#if defined(SBUS) #if defined(SBUS)
int sbusGetByte(uint8_t * byte) int sbusGetByte(uint8_t * byte)
{ {
switch (currentTrainerMode) { switch (currentTrainerMode) {
#if defined(TRAINER_MODULE_SBUS_USART) #if defined(TRAINER_MODULE_SBUS_USART)
case TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE: case TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE:
return heartbeatFifo.pop(*byte); ccount++;
return trainerSbusFifo.pop(*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:

View file

@ -107,8 +107,8 @@ TASK_FUNCTION(mixerTask)
s_pulses_paused = true; s_pulses_paused = true;
while (1) { while (1) {
#if defined(PCBX9D) || defined(PCBX7) #if defined(PCBTARANIS) && defined(SBUS)
// SBUS on Hearbeat PIN (which is a serial RX) // SBUS trainer
processSbusInput(); processSbusInput();
#endif #endif

View file

@ -859,7 +859,7 @@
#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN kód", "PIN kód") #define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN kód", "PIN kód")
#define TR_BAUDRATE "Baudrate BT" #define TR_BAUDRATE "Baudrate BT"
#define LEN_BLUETOOTH_MODES "\012" #define LEN_BLUETOOTH_MODES "\012"
#if defined(PCBX9E) && !defined(USEHORUSBT) #if defined(PCBX9E)
#define TR_BLUETOOTH_MODES "---\0 ""Povoleno\0 " #define TR_BLUETOOTH_MODES "---\0 ""Povoleno\0 "
#else #else
#define TR_BLUETOOTH_MODES "---\0 ""Telemetrie""Trenér\0 " #define TR_BLUETOOTH_MODES "---\0 ""Telemetrie""Trenér\0 "

View file

@ -866,7 +866,7 @@
#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") #define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code")
#define TR_BAUDRATE "BT Baudrate" #define TR_BAUDRATE "BT Baudrate"
#define LEN_BLUETOOTH_MODES "\011" #define LEN_BLUETOOTH_MODES "\011"
#if defined(PCBX9E) && !defined(USEHORUSBT) #if defined(PCBX9E)
#define TR_BLUETOOTH_MODES "---\0 ""Enabled\0 " #define TR_BLUETOOTH_MODES "---\0 ""Enabled\0 "
#else #else
#define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0" #define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0"

View file

@ -861,7 +861,7 @@
#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") #define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code")
#define TR_BAUDRATE "BT Baudrate" #define TR_BAUDRATE "BT Baudrate"
#define LEN_BLUETOOTH_MODES "\011" #define LEN_BLUETOOTH_MODES "\011"
#if defined(PCBX9E) && !defined(USEHORUSBT) #if defined(PCBX9E)
#define TR_BLUETOOTH_MODES "---\0 ""Enabled\0 " #define TR_BLUETOOTH_MODES "---\0 ""Enabled\0 "
#else #else
#define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0" #define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0"

View file

@ -881,7 +881,7 @@
#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") #define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code")
#define TR_BAUDRATE "BT Baudrate" #define TR_BAUDRATE "BT Baudrate"
#define LEN_BLUETOOTH_MODES "\011" #define LEN_BLUETOOTH_MODES "\011"
#if defined(PCBX9E) && !defined(USEHORUSBT) #if defined(PCBX9E)
#define TR_BLUETOOTH_MODES "---\0 ""Enabled\0 " #define TR_BLUETOOTH_MODES "---\0 ""Enabled\0 "
#else #else
#define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0" #define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0"

View file

@ -874,7 +874,7 @@
#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") #define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code")
#define TR_BAUDRATE "BT Baudrate" #define TR_BAUDRATE "BT Baudrate"
#define LEN_BLUETOOTH_MODES "\011" #define LEN_BLUETOOTH_MODES "\011"
#if defined(PCBX9E) && !defined(USEHORUSBT) #if defined(PCBX9E)
#define TR_BLUETOOTH_MODES "---\0 ""Enabled\0 " #define TR_BLUETOOTH_MODES "---\0 ""Enabled\0 "
#else #else
#define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0" #define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0"

View file

@ -876,7 +876,7 @@
#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") #define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code")
#define TR_BAUDRATE "Baudrate BT" #define TR_BAUDRATE "Baudrate BT"
#define LEN_BLUETOOTH_MODES "\012" #define LEN_BLUETOOTH_MODES "\012"
#if defined(PCBX9E) && !defined(USEHORUSBT) #if defined(PCBX9E)
#define TR_BLUETOOTH_MODES "---\0 ""Activé\0 " #define TR_BLUETOOTH_MODES "---\0 ""Activé\0 "
#else #else
#define TR_BLUETOOTH_MODES "---\0 ""Télémétrie""Ecolage\0" #define TR_BLUETOOTH_MODES "---\0 ""Télémétrie""Ecolage\0"

View file

@ -875,7 +875,7 @@
#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") #define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code")
#define TR_BAUDRATE "BT Baudrate" #define TR_BAUDRATE "BT Baudrate"
#define LEN_BLUETOOTH_MODES "\011" #define LEN_BLUETOOTH_MODES "\011"
#if defined(PCBX9E) && !defined(USEHORUSBT) #if defined(PCBX9E)
#define TR_BLUETOOTH_MODES "---\0 ""Enabled\0 " #define TR_BLUETOOTH_MODES "---\0 ""Enabled\0 "
#else #else
#define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0" #define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0"

View file

@ -864,7 +864,7 @@ TR_GYR_VSRCRAW
#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") #define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code")
#define TR_BAUDRATE "BT Baudrate" #define TR_BAUDRATE "BT Baudrate"
#define LEN_BLUETOOTH_MODES "\011" #define LEN_BLUETOOTH_MODES "\011"
#if defined(PCBX9E) && !defined(USEHORUSBT) #if defined(PCBX9E)
#define TR_BLUETOOTH_MODES "---\0 ""Enabled\0 " #define TR_BLUETOOTH_MODES "---\0 ""Enabled\0 "
#else #else
#define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0" #define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0"

View file

@ -875,7 +875,7 @@
#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") #define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code")
#define TR_BAUDRATE "Prędkość BT" #define TR_BAUDRATE "Prędkość BT"
#define LEN_BLUETOOTH_MODES "\011" #define LEN_BLUETOOTH_MODES "\011"
#if defined(PCBX9E) && !defined(USEHORUSBT) #if defined(PCBX9E)
#define TR_BLUETOOTH_MODES "---\0 ""Enabled\0 " #define TR_BLUETOOTH_MODES "---\0 ""Enabled\0 "
#else #else
#define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0" #define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0"

View file

@ -865,7 +865,7 @@
#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") #define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code")
#define TR_BAUDRATE "BT Baudrate" #define TR_BAUDRATE "BT Baudrate"
#define LEN_BLUETOOTH_MODES "\011" #define LEN_BLUETOOTH_MODES "\011"
#if defined(PCBX9E) && !defined(USEHORUSBT) #if defined(PCBX9E)
#define TR_BLUETOOTH_MODES "---\0 ""Enabled\0 " #define TR_BLUETOOTH_MODES "---\0 ""Enabled\0 "
#else #else
#define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0" #define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0"

View file

@ -875,7 +875,7 @@
#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") #define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code")
#define TR_BAUDRATE "BT Baudrate" #define TR_BAUDRATE "BT Baudrate"
#define LEN_BLUETOOTH_MODES "\011" #define LEN_BLUETOOTH_MODES "\011"
#if defined(PCBX9E) && !defined(USEHORUSBT) #if defined(PCBX9E)
#define TR_BLUETOOTH_MODES "---\0 ""Enabled\0 " #define TR_BLUETOOTH_MODES "---\0 ""Enabled\0 "
#else #else
#define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0" #define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0"