1
0
Fork 0
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:
bsongis 2014-06-23 15:41:50 +02:00
parent d2ce28f897
commit e96578c857
18 changed files with 68 additions and 32 deletions

View file

@ -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;
} }

View file

@ -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

View file

@ -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 {

View file

@ -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)

View file

@ -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);

View file

@ -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);
} }

View file

@ -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;
}
} }

View file

@ -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
} }

View file

@ -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"

View file

@ -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 "

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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."

View file

@ -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"

View file

@ -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"