mirror of
https://github.com/opentx/opentx.git
synced 2025-07-23 16:25:16 +03:00
[Taranis] Telemetry (only FrSky D) through serial port inside the
battery compartment added
This commit is contained in:
parent
d2ce28f897
commit
e96578c857
18 changed files with 68 additions and 32 deletions
|
@ -1388,7 +1388,7 @@ void menuGeneralHardware(uint8_t event)
|
||||||
case ITEM_SETUP_HW_UART3_MODE:
|
case ITEM_SETUP_HW_UART3_MODE:
|
||||||
g_eeGeneral.uart3Mode = selectMenuItem(HW_SETTINGS_COLUMN, y, STR_UART3MODE, STR_UART3MODES, g_eeGeneral.uart3Mode, 0, UART_MODE_MAX, attr, event);
|
g_eeGeneral.uart3Mode = selectMenuItem(HW_SETTINGS_COLUMN, y, STR_UART3MODE, STR_UART3MODES, g_eeGeneral.uart3Mode, 0, UART_MODE_MAX, attr, event);
|
||||||
if (checkIncDec_Ret) {
|
if (checkIncDec_Ret) {
|
||||||
uart3Init(g_eeGeneral.uart3Mode);
|
uart3Init(g_eeGeneral.uart3Mode, g_model.telemetryProtocol);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5589,7 +5589,7 @@ void menuModelTelemetry(uint8_t event)
|
||||||
|
|
||||||
#if defined(CPUARM)
|
#if defined(CPUARM)
|
||||||
case ITEM_TELEMETRY_PROTOCOL_TYPE:
|
case ITEM_TELEMETRY_PROTOCOL_TYPE:
|
||||||
g_model.telemetryProtocol = selectMenuItem(TELEM_COL2, y, STR_TELEMETRY_TYPE, "\006S.PORTD\0 ", g_model.telemetryProtocol, PROTOCOL_FRSKY_SPORT, PROTOCOL_FRSKY_D, attr, event);
|
g_model.telemetryProtocol = selectMenuItem(TELEM_COL2, y, STR_TELEMETRY_TYPE, "\016FrSky S.PORT\0 FrSky D\0 FrSky D (batt)", g_model.telemetryProtocol, PROTOCOL_TELEMETRY_FIRST, PROTOCOL_TELEMETRY_LAST, attr, event);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -287,8 +287,8 @@ enum BeeperMode {
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
enum uartModes {
|
enum uartModes {
|
||||||
UART_MODE_NONE,
|
UART_MODE_NONE,
|
||||||
UART_MODE_SPORT,
|
UART_MODE_TELEMETRY_MIRROR,
|
||||||
// UART_MODE_VIRTUAL_SP2UART,
|
UART_MODE_TELEMETRY,
|
||||||
#if defined(DEBUG)
|
#if defined(DEBUG)
|
||||||
UART_MODE_DEBUG,
|
UART_MODE_DEBUG,
|
||||||
#endif
|
#endif
|
||||||
|
@ -1695,8 +1695,11 @@ enum ThrottleSources {
|
||||||
|
|
||||||
enum TelemetryProtocol
|
enum TelemetryProtocol
|
||||||
{
|
{
|
||||||
PROTOCOL_FRSKY_SPORT,
|
PROTOCOL_TELEMETRY_FIRST,
|
||||||
|
PROTOCOL_FRSKY_SPORT = PROTOCOL_TELEMETRY_FIRST,
|
||||||
PROTOCOL_FRSKY_D,
|
PROTOCOL_FRSKY_D,
|
||||||
|
PROTOCOL_FRSKY_D_SECONDARY,
|
||||||
|
PROTOCOL_TELEMETRY_LAST = PROTOCOL_FRSKY_D_SECONDARY
|
||||||
};
|
};
|
||||||
|
|
||||||
PACK(typedef struct t_ModelData {
|
PACK(typedef struct t_ModelData {
|
||||||
|
|
|
@ -3362,7 +3362,7 @@ inline void opentxInit(OPENTX_INIT_ARGS)
|
||||||
backlightOn();
|
backlightOn();
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
uart3Init(g_eeGeneral.uart3Mode);
|
uart3Init(g_eeGeneral.uart3Mode, g_model.telemetryProtocol);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CPUARM)
|
#if defined(CPUARM)
|
||||||
|
|
|
@ -115,7 +115,7 @@ void delaysInit(void);
|
||||||
|
|
||||||
#define DEBUG_BAUDRATE 115200
|
#define DEBUG_BAUDRATE 115200
|
||||||
|
|
||||||
void uart3Init(unsigned int mode);
|
void uart3Init(unsigned int mode, unsigned int protocol);
|
||||||
void uart3Putc(const char c);
|
void uart3Putc(const char c);
|
||||||
|
|
||||||
void delaysInit(void);
|
void delaysInit(void);
|
||||||
|
|
|
@ -40,6 +40,11 @@ extern Fifo<512> telemetryFifo;
|
||||||
|
|
||||||
void telemetryPortInit(uint32_t baudrate)
|
void telemetryPortInit(uint32_t baudrate)
|
||||||
{
|
{
|
||||||
|
if (baudrate == 0) {
|
||||||
|
USART_DeInit(USART2);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
USART_InitTypeDef USART_InitStructure;
|
USART_InitTypeDef USART_InitStructure;
|
||||||
GPIO_InitTypeDef GPIO_InitStructure;
|
GPIO_InitTypeDef GPIO_InitStructure;
|
||||||
|
|
||||||
|
@ -77,6 +82,7 @@ void telemetryPortInit(uint32_t baudrate)
|
||||||
USART_Cmd(SPORT, ENABLE);
|
USART_Cmd(SPORT, ENABLE);
|
||||||
|
|
||||||
USART_ITConfig(SPORT, USART_IT_RXNE, ENABLE);
|
USART_ITConfig(SPORT, USART_IT_RXNE, ENABLE);
|
||||||
|
|
||||||
NVIC_EnableIRQ(USART2_IRQn);
|
NVIC_EnableIRQ(USART2_IRQn);
|
||||||
NVIC_SetPriority(USART2_IRQn, 6);
|
NVIC_SetPriority(USART2_IRQn, 6);
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,10 @@
|
||||||
|
|
||||||
#include "../../opentx.h"
|
#include "../../opentx.h"
|
||||||
|
|
||||||
|
bool uart3Telemetry = false;
|
||||||
|
Fifo<512> uart3TxFifo;
|
||||||
|
extern Fifo<512> telemetryFifo;
|
||||||
|
|
||||||
void uart3Setup(unsigned int baudrate)
|
void uart3Setup(unsigned int baudrate)
|
||||||
{
|
{
|
||||||
USART_InitTypeDef USART_InitStructure;
|
USART_InitTypeDef USART_InitStructure;
|
||||||
|
@ -60,7 +64,7 @@ void uart3Setup(unsigned int baudrate)
|
||||||
USART_InitStructure.USART_StopBits = USART_StopBits_1;
|
USART_InitStructure.USART_StopBits = USART_StopBits_1;
|
||||||
USART_InitStructure.USART_Parity = USART_Parity_No;
|
USART_InitStructure.USART_Parity = USART_Parity_No;
|
||||||
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
|
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
|
||||||
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
|
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
|
||||||
|
|
||||||
USART_Init(UART3, &USART_InitStructure);
|
USART_Init(UART3, &USART_InitStructure);
|
||||||
USART_Cmd(UART3, ENABLE);
|
USART_Cmd(UART3, ENABLE);
|
||||||
|
@ -72,12 +76,13 @@ void uart3Setup(unsigned int baudrate)
|
||||||
NVIC_SetPriority(USART3_IRQn, 7);
|
NVIC_SetPriority(USART3_IRQn, 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
void uart3Init(unsigned int mode)
|
void uart3Init(unsigned int mode, unsigned int protocol)
|
||||||
{
|
{
|
||||||
USART_DeInit(USART3);
|
USART_DeInit(USART3);
|
||||||
|
uart3Telemetry = false;
|
||||||
|
|
||||||
switch(mode) {
|
switch (mode) {
|
||||||
case UART_MODE_SPORT:
|
case UART_MODE_TELEMETRY_MIRROR:
|
||||||
uart3Setup(FRSKY_SPORT_BAUDRATE);
|
uart3Setup(FRSKY_SPORT_BAUDRATE);
|
||||||
break;
|
break;
|
||||||
#if defined(DEBUG)
|
#if defined(DEBUG)
|
||||||
|
@ -85,11 +90,15 @@ void uart3Init(unsigned int mode)
|
||||||
uart3Setup(DEBUG_BAUDRATE);
|
uart3Setup(DEBUG_BAUDRATE);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
case UART_MODE_TELEMETRY:
|
||||||
|
if (protocol == PROTOCOL_FRSKY_D_SECONDARY) {
|
||||||
|
uart3Setup(FRSKY_D_BAUDRATE);
|
||||||
|
uart3Telemetry = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Fifo<512> uart3TxFifo;
|
|
||||||
|
|
||||||
void uart3Putc(const char c)
|
void uart3Putc(const char c)
|
||||||
{
|
{
|
||||||
uart3TxFifo.push(c);
|
uart3TxFifo.push(c);
|
||||||
|
@ -105,8 +114,11 @@ void debugPutc(const char c)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define USART_FLAG_ERRORS (USART_FLAG_ORE | USART_FLAG_NE | USART_FLAG_FE | USART_FLAG_PE)
|
||||||
|
|
||||||
extern "C" void USART3_IRQHandler(void)
|
extern "C" void USART3_IRQHandler(void)
|
||||||
{
|
{
|
||||||
|
// Send
|
||||||
if (USART_GetITStatus(UART3, USART_IT_TXE) != RESET) {
|
if (USART_GetITStatus(UART3, USART_IT_TXE) != RESET) {
|
||||||
uint8_t txchar;
|
uint8_t txchar;
|
||||||
if (uart3TxFifo.pop(txchar)) {
|
if (uart3TxFifo.pop(txchar)) {
|
||||||
|
@ -117,4 +129,17 @@ extern "C" void USART3_IRQHandler(void)
|
||||||
USART_ITConfig(UART3, USART_IT_TXE, DISABLE);
|
USART_ITConfig(UART3, USART_IT_TXE, DISABLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Receive
|
||||||
|
uint32_t status = SPORT->SR;
|
||||||
|
while (status & (USART_FLAG_RXNE | USART_FLAG_ERRORS)) {
|
||||||
|
uint8_t data = SPORT->DR;
|
||||||
|
|
||||||
|
if (uart3Telemetry && !(status & USART_FLAG_ERRORS)) {
|
||||||
|
telemetryFifo.push(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
status = SPORT->SR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -161,7 +161,7 @@ NOINLINE void processSerialData(uint8_t data)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
if (g_eeGeneral.uart3Mode == UART_MODE_SPORT) {
|
if (g_eeGeneral.uart3Mode == UART_MODE_TELEMETRY_MIRROR) {
|
||||||
uart3Putc(data);
|
uart3Putc(data);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -572,17 +572,19 @@ void telemetryReset()
|
||||||
void telemetryInit(void)
|
void telemetryInit(void)
|
||||||
{
|
{
|
||||||
#if defined(CPUARM)
|
#if defined(CPUARM)
|
||||||
if (telemetryProtocol == PROTOCOL_FRSKY_SPORT)
|
if (telemetryProtocol == PROTOCOL_FRSKY_D) {
|
||||||
telemetryPortInit(FRSKY_SPORT_BAUDRATE);
|
|
||||||
else
|
|
||||||
telemetryPortInit(FRSKY_D_BAUDRATE);
|
telemetryPortInit(FRSKY_D_BAUDRATE);
|
||||||
|
}
|
||||||
|
else if (telemetryProtocol==PROTOCOL_FRSKY_D_SECONDARY) {
|
||||||
|
telemetryPortInit(0);
|
||||||
|
uart3Init(UART_MODE_TELEMETRY, PROTOCOL_FRSKY_D_SECONDARY);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
telemetryPortInit(FRSKY_SPORT_BAUDRATE);
|
||||||
|
}
|
||||||
#elif !defined(SIMU)
|
#elif !defined(SIMU)
|
||||||
telemetryPortInit();
|
telemetryPortInit();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 0
|
// we don't reset the telemetry here as we would also reset the consumption after model load
|
||||||
// if we call telemetryReset() here we also reset the consumption after model load
|
|
||||||
// right now I don't see why we call it here
|
|
||||||
telemetryReset();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
#define TR_TRNCHN "CH1CH2CH3CH4"
|
#define TR_TRNCHN "CH1CH2CH3CH4"
|
||||||
|
|
||||||
#define LEN_UART3MODES "\017"
|
#define LEN_UART3MODES "\017"
|
||||||
#define TR_UART3MODES "VYP\0 ""S-Port Mirror\0 ""Debug\0 "
|
#define TR_UART3MODES "VYP\0 ""S-Port Mirror\0 ""Telemetry\0 ""Debug\0 "
|
||||||
|
|
||||||
#define LEN_POTTYPES "\017"
|
#define LEN_POTTYPES "\017"
|
||||||
#define TR_POTTYPES "Není\0 ""Potenciometr\0 ""Vícepol. přep.\0"
|
#define TR_POTTYPES "Není\0 ""Potenciometr\0 ""Vícepol. přep.\0"
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
#define TR_TRNCHN "CH1CH2CH3CH4"
|
#define TR_TRNCHN "CH1CH2CH3CH4"
|
||||||
|
|
||||||
#define LEN_UART3MODES "\017"
|
#define LEN_UART3MODES "\017"
|
||||||
#define TR_UART3MODES "AUS\0 ""S-Port Data Out\0""Debug\0 "
|
#define TR_UART3MODES "AUS\0 ""S-Port Data Out\0""Telemetry\0 ""Debug\0 "
|
||||||
|
|
||||||
#define LEN_POTTYPES "\017"
|
#define LEN_POTTYPES "\017"
|
||||||
#define TR_POTTYPES "Kein\0 ""Poti\0 ""Stufen-Schalter "
|
#define TR_POTTYPES "Kein\0 ""Poti\0 ""Stufen-Schalter "
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
#define TR_TRNCHN "CH1CH2CH3CH4"
|
#define TR_TRNCHN "CH1CH2CH3CH4"
|
||||||
|
|
||||||
#define LEN_UART3MODES "\017"
|
#define LEN_UART3MODES "\017"
|
||||||
#define TR_UART3MODES "OFF\0 ""S-Port Mirror\0 ""Debug\0 "
|
#define TR_UART3MODES "OFF\0 ""S-Port Mirror\0 ""Telemetry\0 ""Debug\0 "
|
||||||
|
|
||||||
#define LEN_POTTYPES "\017"
|
#define LEN_POTTYPES "\017"
|
||||||
#define TR_POTTYPES "None\0 ""Pot\0 ""Multipos Switch"
|
#define TR_POTTYPES "None\0 ""Pot\0 ""Multipos Switch"
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
#define TR_TRNCHN "CH1CH2CH3CH4"
|
#define TR_TRNCHN "CH1CH2CH3CH4"
|
||||||
|
|
||||||
#define LEN_UART3MODES "\017"
|
#define LEN_UART3MODES "\017"
|
||||||
#define TR_UART3MODES "OFF\0 ""S-Port Mirror\0 ""Debug\0 "
|
#define TR_UART3MODES "OFF\0 ""S-Port Mirror\0 ""Telemetry\0 ""Debug\0 "
|
||||||
|
|
||||||
#define LEN_POTTYPES "\017"
|
#define LEN_POTTYPES "\017"
|
||||||
#define TR_POTTYPES "None\0 ""Pot\0 ""Multipos Switch"
|
#define TR_POTTYPES "None\0 ""Pot\0 ""Multipos Switch"
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
#define TR_TRNCHN "CH1CH2CH3CH4"
|
#define TR_TRNCHN "CH1CH2CH3CH4"
|
||||||
|
|
||||||
#define LEN_UART3MODES "\017"
|
#define LEN_UART3MODES "\017"
|
||||||
#define TR_UART3MODES "POIS\0 ""S-Port Pelik\0 ""Debug\0 "
|
#define TR_UART3MODES "POIS\0 ""S-Port Pelik\0 ""Telemetry\0 ""Debug\0 "
|
||||||
|
|
||||||
#define LEN_POTTYPES "\017"
|
#define LEN_POTTYPES "\017"
|
||||||
#define TR_POTTYPES "None\0 ""Potikka\0 ""Monias. Kytkin\0"
|
#define TR_POTTYPES "None\0 ""Potikka\0 ""Monias. Kytkin\0"
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
#define TR_TRNCHN "CH1CH2CH3CH4"
|
#define TR_TRNCHN "CH1CH2CH3CH4"
|
||||||
|
|
||||||
#define LEN_UART3MODES "\017"
|
#define LEN_UART3MODES "\017"
|
||||||
#define TR_UART3MODES "OFF\0 ""Recopie S-Port\0""Debug\0 "
|
#define TR_UART3MODES "OFF\0 ""Recopie S-Port\0""Telemetrie\0 ""Debug\0 "
|
||||||
|
|
||||||
#define LEN_POTTYPES "\017"
|
#define LEN_POTTYPES "\017"
|
||||||
#define TR_POTTYPES "Rien\0 ""Potentiomètre\0 ""Inter multi-pos"
|
#define TR_POTTYPES "Rien\0 ""Potentiomètre\0 ""Inter multi-pos"
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
#define TR_TRNCHN "ch1ch2ch3ch4"
|
#define TR_TRNCHN "ch1ch2ch3ch4"
|
||||||
|
|
||||||
#define LEN_UART3MODES "\017"
|
#define LEN_UART3MODES "\017"
|
||||||
#define TR_UART3MODES "OFF\0 ""Replica Porta-S""Debug\0 "
|
#define TR_UART3MODES "OFF\0 ""Replica Porta-S""Telemetry\0 ""Debug\0 "
|
||||||
|
|
||||||
#define LEN_POTTYPES "\017"
|
#define LEN_POTTYPES "\017"
|
||||||
#define TR_POTTYPES "None\0 ""Potenziometro\0 ""Inter. Multipos"
|
#define TR_POTTYPES "None\0 ""Potenziometro\0 ""Inter. Multipos"
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
#define TR_TRNCHN "KN1KN2KN3KN4"
|
#define TR_TRNCHN "KN1KN2KN3KN4"
|
||||||
|
|
||||||
#define LEN_UART3MODES "\017"
|
#define LEN_UART3MODES "\017"
|
||||||
#define TR_UART3MODES "Wyłącz\0 ""S-Port Mirror\0 ""Debug\0 "
|
#define TR_UART3MODES "Wyłącz\0 ""S-Port Mirror\0 ""Telemetry\0 ""Debug\0 "
|
||||||
|
|
||||||
#define LEN_POTTYPES "\017"
|
#define LEN_POTTYPES "\017"
|
||||||
#define TR_POTTYPES "Brak\0 ""Potencjometr\0 ""Przeł.Wielopoz."
|
#define TR_POTTYPES "Brak\0 ""Potencjometr\0 ""Przeł.Wielopoz."
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
#define TR_TRNCHN "CH1CH2CH3CH4"
|
#define TR_TRNCHN "CH1CH2CH3CH4"
|
||||||
|
|
||||||
#define LEN_UART3MODES "\017"
|
#define LEN_UART3MODES "\017"
|
||||||
#define TR_UART3MODES "OFF\0 ""S-Port Mirror\0 ""Debug\0 "
|
#define TR_UART3MODES "OFF\0 ""S-Port Mirror\0 ""Telemetry\0 ""Debug\0 "
|
||||||
|
|
||||||
#define LEN_POTTYPES "\017"
|
#define LEN_POTTYPES "\017"
|
||||||
#define TR_POTTYPES "None\0 ""Pot\0 ""Multipos Switch"
|
#define TR_POTTYPES "None\0 ""Pot\0 ""Multipos Switch"
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
#define TR_TRNCHN "KN1KN2KN3KN4"
|
#define TR_TRNCHN "KN1KN2KN3KN4"
|
||||||
|
|
||||||
#define LEN_UART3MODES "\022"
|
#define LEN_UART3MODES "\022"
|
||||||
#define TR_UART3MODES "Av\0 ""Spegling av S-Port""Debug\0 "
|
#define TR_UART3MODES "Av\0 ""Spegling av S-Port""Telemetry\0 ""Debug\0 "
|
||||||
|
|
||||||
#define LEN_POTTYPES "\020"
|
#define LEN_POTTYPES "\020"
|
||||||
#define TR_POTTYPES "Ingen\0 ""Potentiometer\0 ""Flerlägesväljare"
|
#define TR_POTTYPES "Ingen\0 ""Potentiometer\0 ""Flerlägesväljare"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue