1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-24 16:55:20 +03:00

Merge pull request #3153 from mikeller/mikeller/invert_serial_rx_next

Graft of 'invert_serial_rx' onto next.
This commit is contained in:
Bertrand Songis 2015-12-16 07:04:30 +01:00
commit d7cbd78edf
19 changed files with 80 additions and 4 deletions

View file

@ -847,6 +847,8 @@ ifeq ($(PCB), $(filter $(PCB), SKY9X 9XRPRO AR9X))
ifeq ($(RTCLOCK), YES)
CPPDEFS += -DRTCLOCK
CPPSRC += rtc.cpp targets/sky9x/rtc_driver.cpp
else ifeq ($(PCB), SKY9X)
CPPSRC += targets/sky9x/rtc_driver.cpp
endif
ifeq ($(BLUETOOTH), YES)
CPPDEFS += -DBLUETOOTH

View file

@ -37,6 +37,9 @@
enum menuModelTelemetryItems {
CASE_CPUARM(ITEM_TELEMETRY_PROTOCOL_TYPE)
#if defined(REVX)
ITEM_TELEMETRY_INVERTED_SERIAL,
#endif
#if !defined(CPUARM)
ITEM_TELEMETRY_A1_LABEL,
ITEM_TELEMETRY_A1_RANGE,
@ -184,7 +187,9 @@ enum menuModelTelemetryItems {
#define VARIO_RANGE_ROWS 3
#endif
#if defined(CPUARM)
#if defined(REVX)
#define TELEMETRY_TYPE_ROWS 0, 0,
#elif defined(CPUARM)
#define TELEMETRY_TYPE_ROWS 0,
#else
#define TELEMETRY_TYPE_ROWS
@ -608,6 +613,11 @@ void menuModelTelemetry(uint8_t event)
case ITEM_TELEMETRY_PROTOCOL_TYPE:
g_model.telemetryProtocol = selectMenuItem(TELEM_COL2, y, STR_TELEMETRY_TYPE, "\017FrSky S.PORT\0 FrSky D\0 FrSky D (cable)", g_model.telemetryProtocol, PROTOCOL_TELEMETRY_FIRST, CASE_PCBSKY9X(PROTOCOL_FRSKY_D_SECONDARY) attr, event);
break;
#if defined(REVX)
case ITEM_TELEMETRY_INVERTED_SERIAL:
ON_OFF_MENU_ITEM(g_model.moduleData[EXTERNAL_MODULE].invertedSerial, TELEM_COL2, y, STR_INVERTED_SERIAL, attr, event);
break;
#endif
#endif
#if defined(CPUARM)

View file

@ -505,7 +505,8 @@ PACK(typedef struct {
int8_t rfProtocol:4;
uint8_t channelsStart;
int8_t channelsCount; // 0=8 channels
uint8_t failsafeMode;
uint8_t failsafeMode:7;
uint8_t invertedSerial:1; // telemetry serial inverted from standard
int16_t failsafeChannels[NUM_CHNOUT];
int8_t ppmDelay:6;
uint8_t ppmPulsePol:1;

View file

@ -1520,6 +1520,11 @@ enum AUDIO_SOUNDS {
#include "rtc.h"
#endif
#if defined(REVX)
void setMFP();
void clearMFP();
#endif
#if defined(CPUARM)
extern uint8_t requiredSpeakerVolume;
#endif

View file

@ -280,3 +280,25 @@ void rtcInit()
coprocReadData();
#endif
}
#if defined(REVX)
void writeMFP()
{
__disable_irq();
Rtc_write_pending |= 2;
i2cCheck();
__enable_irq();
}
void setMFP()
{
MFPsetting = 0x80;
writeMFP();
}
void clearMFP()
{
MFPsetting = 0;
writeMFP();
}
#endif

View file

@ -69,6 +69,9 @@ FrskyData frskyData;
#if defined(CPUARM)
uint8_t telemetryProtocol = 255;
#if defined(REVX)
uint8_t serialInversion = 0;
#endif
#define IS_FRSKY_D_PROTOCOL() (telemetryProtocol == PROTOCOL_FRSKY_D)
#define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_FRSKY_SPORT)
#else
@ -283,7 +286,13 @@ void telemetryWakeup()
{
#if defined(CPUARM)
uint8_t requiredTelemetryProtocol = MODEL_TELEMETRY_PROTOCOL();
if (telemetryProtocol != requiredTelemetryProtocol) {
#if defined(REVX)
uint8_t requiredSerialInversion = g_model.moduleData[EXTERNAL_MODULE].invertedSerial;
if (telemetryProtocol != requiredTelemetryProtocol || serialInversion != requiredSerialInversion) {
serialInversion = requiredSerialInversion;
#else
if (telemetryProtocol != requiredTelemetryProtocol) {
#endif
telemetryProtocol = requiredTelemetryProtocol;
telemetryInit();
}
@ -622,6 +631,15 @@ void telemetryInit(void)
else {
telemetryPortInit(FRSKY_SPORT_BAUDRATE);
}
#if defined(REVX) && !defined(SIMU)
if (serialInversion) {
setMFP();
}
else {
clearMFP();
}
#endif
#elif !defined(SIMU)
telemetryPortInit();
#endif

View file

@ -586,6 +586,7 @@ const pm_char STR_MODEL_SELECT[] PROGMEM = TR_MODEL_SELECT;
const pm_char STR_ONLYPOSITIVE[] PROGMEM = TR_ONLYPOSITIVE;
const pm_char STR_FILTER[] PROGMEM = TR_FILTER;
const pm_char STR_TELEMETRYFULL[] PROGMEM = TR_TELEMETRYFULL;
const pm_char STR_INVERTED_SERIAL[] PROGMEM = TR_INVERTED_SERIAL;
const pm_char STR_IGNORE_INSTANCE[] PROGMEM = TR_IGNORE_INSTANCE;
const pm_char STR_DISCOVER_SENSORS[] PROGMEM = TR_DISCOVER_SENSORS;
const pm_char STR_STOP_DISCOVER_SENSORS[] PROGMEM = TR_STOP_DISCOVER_SENSORS;

View file

@ -798,6 +798,7 @@ extern const pm_char STR_MODEL_SELECT[];
extern const pm_char STR_ONLYPOSITIVE[];
extern const pm_char STR_FILTER[];
extern const pm_char STR_TELEMETRYFULL[];
extern const pm_char STR_INVERTED_SERIAL[];
extern const pm_char STR_IGNORE_INSTANCE[];
extern const pm_char STR_DISCOVER_SENSORS[];
extern const pm_char STR_STOP_DISCOVER_SENSORS[];

View file

@ -1086,6 +1086,8 @@
#define TR_ONLYPOSITIVE "Jen kladné"
#define TR_FILTER "Filtr"
#define TR_TELEMETRYFULL "Všechny sloty jsou plné!"
//TODO: translation
#define TR_INVERTED_SERIAL INDENT "Invert"
#define TR_IGNORE_INSTANCE INDENT "Ignoruj chyby ID"
#define TR_DISCOVER_SENSORS INDENT "Detekovat nové senzory"
#define TR_STOP_DISCOVER_SENSORS INDENT "Zastavit autodetekci"

View file

@ -1090,6 +1090,7 @@
#define TR_ONLYPOSITIVE "Nur Positiv"
#define TR_FILTER "Filter aktiv"
#define TR_TELEMETRYFULL "Telemetriezeilen voll!"
#define TR_INVERTED_SERIAL INDENT "Invert."
#define TR_IGNORE_INSTANCE TR(INDENT "Keine ID", INDENT "Keine Multisen-ID") //unklar
#define TR_DISCOVER_SENSORS INDENT "Start Sensorsuche"
#define TR_STOP_DISCOVER_SENSORS INDENT "Stop Sensorsuche"

View file

@ -1117,6 +1117,7 @@
#define TR_ONLYPOSITIVE "Positive"
#define TR_FILTER "Filter"
#define TR_TELEMETRYFULL "All telemetry slots full!"
#define TR_INVERTED_SERIAL INDENT "Invert"
#define TR_IGNORE_INSTANCE TR(INDENT "No inst.", INDENT "Ignore instances")
#define TR_DISCOVER_SENSORS INDENT "Discover new sensors"
#define TR_STOP_DISCOVER_SENSORS INDENT "Stop discovery"

View file

@ -1040,6 +1040,7 @@
#define TR_ONLYPOSITIVE "Positive"
#define TR_FILTER "Filter"
#define TR_TELEMETRYFULL "All telemetry slots full!"
#define TR_INVERTED_SERIAL INDENT "Invert"
#define TR_IGNORE_INSTANCE INDENT "Ignore instance"
#define TR_DISCOVER_SENSORS INDENT "Discover new sensors"
#define TR_STOP_DISCOVER_SENSORS INDENT "Stop discovery"

View file

@ -1040,6 +1040,7 @@
#define TR_ONLYPOSITIVE "Positive"
#define TR_FILTER "Filter"
#define TR_TELEMETRYFULL "All telemetry slots full!"
#define TR_INVERTED_SERIAL INDENT "Invert"
#define TR_IGNORE_INSTANCE INDENT "Ignore instance"
#define TR_DISCOVER_SENSORS INDENT "Discover new sensors"
#define TR_STOP_DISCOVER_SENSORS INDENT "Stop discovery"

View file

@ -1077,6 +1077,7 @@
#define TR_ONLYPOSITIVE "Positive"
#define TR_FILTER "Filtrage"
#define TR_TELEMETRYFULL "Plus de capteurs libres!"
#define TR_INVERTED_SERIAL INDENT "Inverti"
#define TR_IGNORE_INSTANCE TR(INDENT "Ign. inst.",INDENT "Ignorer instance")
#define TR_DISCOVER_SENSORS INDENT "Découvrir capteurs"
#define TR_STOP_DISCOVER_SENSORS INDENT "Terminer découverte"

View file

@ -1088,6 +1088,8 @@
#define TR_ONLYPOSITIVE "Positivo"
#define TR_FILTER "Filtro"
#define TR_TELEMETRYFULL "Tutti gli slot sono pieni!"
//TODO: translation
#define TR_INVERTED_SERIAL INDENT "Invert"
#define TR_IGNORE_INSTANCE TR(INDENT "No inst.","Ignora instanza")
#define TR_DISCOVER_SENSORS INDENT "Cerca nuovi sensori"
#define TR_STOP_DISCOVER_SENSORS INDENT "Ferma ricerca.."

View file

@ -1107,6 +1107,8 @@
#define TR_ONLYPOSITIVE "Geen Negatief"
#define TR_FILTER "Filter aktief"
#define TR_TELEMETRYFULL "Telemetrie slots vol!"
//TODO: translation
#define TR_INVERTED_SERIAL INDENT "Invert"
#define TR_IGNORE_INSTANCE TR(INDENT "Neg. ID ","Negeer ID's")
#define TR_DISCOVER_SENSORS INDENT "Ontdek nieuwe sensors"
#define TR_STOP_DISCOVER_SENSORS INDENT "Stop ontdekking"
@ -1154,4 +1156,4 @@
#define ZSTR_CELLS "Cels"
#define ZSTR_GPSALT "GAlt"
#define ZSTR_GPSDATETIME "Date"
#define ZSTR_GPS "GPS"
#define ZSTR_GPS "GPS"

View file

@ -1089,6 +1089,8 @@
#define TR_ONLYPOSITIVE "Dodatni"
#define TR_FILTER "Filtr"
#define TR_TELEMETRYFULL "Wszyskie miejsca zajęte!"
//TODO: translation
#define TR_INVERTED SERIAL INDENT "Invert"
#define TR_IGNORE_INSTANCE INDENT "Ignoruj przypadek"
#define TR_DISCOVER_SENSORS INDENT "Znajdź nowe czujniki"
#define TR_STOP_DISCOVER_SENSORS INDENT "Szukanie STOP "

View file

@ -1040,6 +1040,7 @@
#define TR_ONLYPOSITIVE "Positive"
#define TR_FILTER "Filter"
#define TR_TELEMETRYFULL "All telemetry slots full!"
#define TR_INVERTED_SERIAL INDENT "Invert"
#define TR_IGNORE_INSTANCE INDENT "Ignore instance"
#define TR_DISCOVER_SENSORS INDENT "Discover new sensors"
#define TR_STOP_DISCOVER_SENSORS INDENT "Stop discovery"

View file

@ -1116,6 +1116,8 @@
#define TR_ONLYPOSITIVE "Positiv"
#define TR_FILTER "Filter"
#define TR_TELEMETRYFULL "Alla telemetriplatser upptagna!"
//TODO: translation
#define TR_INVERTED_SERIAL INDENT "Invert"
#define TR_IGNORE_INSTANCE TR(INDENT "Inst.fel", INDENT "Hantera Instansfel")
#define TR_DISCOVER_SENSORS INDENT "Sök nya sensorer"
#define TR_STOP_DISCOVER_SENSORS INDENT "Avbryt sökning"