Merge pull request #3194 from mikeller/make_telemetry_inversion_consistent

Apply 'telemetry_inversion' consistently to all protocols.
This commit is contained in:
Michael Keller 2017-06-13 01:38:59 +12:00 committed by GitHub
commit 8fb883a58b
17 changed files with 34 additions and 46 deletions

View File

@ -593,7 +593,7 @@ const clivalue_t valueTable[] = {
// PG_TELEMETRY_CONFIG
#ifdef TELEMETRY
{ "tlm_switch", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, telemetry_switch) },
{ "tlm_inversion", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, telemetry_inversion) },
{ "tlm_inverted", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, telemetry_inverted) },
{ "tlm_halfduplex", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, halfDuplex) },
{ "frsky_default_lat", VAR_INT16 | MASTER_VALUE, .config.minmax = { -9000, 9000 }, PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, gpsNoFixLatitude) },
{ "frsky_default_long", VAR_INT16 | MASTER_VALUE, .config.minmax = { -18000, 18000 }, PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, gpsNoFixLongitude) },

View File

@ -95,7 +95,7 @@ void targetConfiguration(void)
rxConfigMutable()->serialrx_provider = SERIALRX_SBUS;
rxConfigMutable()->sbus_inversion = 0;
serialConfigMutable()->portConfigs[findSerialPortIndexByIdentifier(SERIALRX_UART)].functionMask = FUNCTION_TELEMETRY_FRSKY | FUNCTION_RX_SERIAL;
telemetryConfigMutable()->telemetry_inversion = 0;
telemetryConfigMutable()->telemetry_inverted = true;
featureSet(FEATURE_TELEMETRY);
}

View File

@ -65,7 +65,7 @@ void targetConfiguration(void)
rxConfigMutable()->serialrx_provider = SERIALRX_SBUS;
rxConfigMutable()->sbus_inversion = 0;
serialConfigMutable()->portConfigs[findSerialPortIndexByIdentifier(SERIALRX_UART)].functionMask = FUNCTION_TELEMETRY_FRSKY | FUNCTION_RX_SERIAL;
telemetryConfigMutable()->telemetry_inversion = 0;
telemetryConfigMutable()->telemetry_inverted = true;
batteryConfigMutable()->voltageMeterSource = VOLTAGE_METER_ADC;
batteryConfigMutable()->currentMeterSource = CURRENT_METER_ADC;
featureSet(FEATURE_TELEMETRY);

View File

@ -64,7 +64,7 @@ void targetConfiguration(void)
rxConfigMutable()->serialrx_provider = SERIALRX_SBUS;
rxConfigMutable()->sbus_inversion = 0;
serialConfigMutable()->portConfigs[findSerialPortIndexByIdentifier(SERIALRX_UART)].functionMask = FUNCTION_TELEMETRY_FRSKY | FUNCTION_RX_SERIAL;
telemetryConfigMutable()->telemetry_inversion = 0;
telemetryConfigMutable()->telemetry_inverted = true;
batteryConfigMutable()->voltageMeterSource = VOLTAGE_METER_ADC;
batteryConfigMutable()->currentMeterSource = CURRENT_METER_ADC;
featureSet(FEATURE_TELEMETRY);

View File

@ -53,7 +53,7 @@ void targetPreInit(void)
serialPortConfig_t *portConfig = serialFindPortConfiguration(SERIAL_PORT_USART1);
if (portConfig) {
bool smartportEnabled = (portConfig->functionMask & FUNCTION_TELEMETRY_SMARTPORT);
if (smartportEnabled && (telemetryConfig()->telemetry_inversion) && (feature(FEATURE_TELEMETRY))) {
if (smartportEnabled && (!telemetryConfig()->telemetry_inverted) && (feature(FEATURE_TELEMETRY))) {
high = true;
}
}

View File

@ -55,7 +55,6 @@ void targetConfiguration(void)
serialConfigMutable()->portConfigs[1].functionMask = FUNCTION_MSP; // So Bluetooth users don't have to change anything.
serialConfigMutable()->portConfigs[findSerialPortIndexByIdentifier(TELEMETRY_UART)].functionMask = TELEMETRY_PROVIDER_DEFAULT;
serialConfigMutable()->portConfigs[findSerialPortIndexByIdentifier(GPS_UART)].functionMask = FUNCTION_GPS;
telemetryConfigMutable()->telemetry_inversion = true;
telemetryConfigMutable()->halfDuplex = true;
}
#endif

View File

@ -38,6 +38,6 @@ void targetConfiguration(void)
serialConfigMutable()->portConfigs[1].functionMask = FUNCTION_MSP; // So SPRacingF3OSD users don't have to change anything.
serialConfigMutable()->portConfigs[findSerialPortIndexByIdentifier(TELEMETRY_UART)].functionMask = FUNCTION_TELEMETRY_SMARTPORT;
telemetryConfigMutable()->halfDuplex = 0;
telemetryConfigMutable()->telemetry_inversion = 0;
telemetryConfigMutable()->telemetry_inverted = true;
}
#endif

View File

@ -45,6 +45,6 @@ void targetConfiguration(void)
rxConfigMutable()->serialrx_provider = SERIALRX_SBUS;
rxConfigMutable()->sbus_inversion = 0;
telemetryConfigMutable()->telemetry_inversion = 0;
telemetryConfigMutable()->telemetry_inverted = true;
}
#endif

View File

@ -472,7 +472,7 @@ void configureFrSkyTelemetryPort(void)
return;
}
frskyPort = openSerialPort(portConfig->identifier, FUNCTION_TELEMETRY_FRSKY, NULL, FRSKY_BAUDRATE, FRSKY_INITIAL_PORT_MODE, telemetryConfig()->telemetry_inversion ? SERIAL_INVERTED : SERIAL_NOT_INVERTED);
frskyPort = openSerialPort(portConfig->identifier, FUNCTION_TELEMETRY_FRSKY, NULL, FRSKY_BAUDRATE, FRSKY_INITIAL_PORT_MODE, telemetryConfig()->telemetry_inverted ? SERIAL_NOT_INVERTED : SERIAL_INVERTED);
if (!frskyPort) {
return;
}

View File

@ -330,7 +330,7 @@ static void flushHottRxBuffer(void)
static void workAroundForHottTelemetryOnUsart(serialPort_t *instance, portMode_t mode) {
closeSerialPort(hottPort);
portOptions_t portOptions = SERIAL_NOT_INVERTED;
portOptions_t portOptions = telemetryConfig()->telemetry_inverted ? SERIAL_INVERTED : SERIAL_NOT_INVERTED;
if (telemetryConfig()->halfDuplex) {
portOptions |= SERIAL_BIDIR;

View File

@ -152,7 +152,7 @@ void configureIbusTelemetryPort(void)
return;
}
ibusSerialPort = openSerialPort(ibusSerialPortConfig->identifier, FUNCTION_TELEMETRY_IBUS, NULL, IBUS_BAUDRATE, IBUS_UART_MODE, SERIAL_BIDIR);
ibusSerialPort = openSerialPort(ibusSerialPortConfig->identifier, FUNCTION_TELEMETRY_IBUS, NULL, IBUS_BAUDRATE, IBUS_UART_MODE, SERIAL_BIDIR | (telemetryConfig()->telemetry_inverted ? SERIAL_INVERTED : SERIAL_NOT_INVERTED));
if (!ibusSerialPort) {
return;

View File

@ -283,7 +283,7 @@ void configureLtmTelemetryPort(void)
if (baudRateIndex == BAUD_AUTO) {
baudRateIndex = BAUD_19200;
}
ltmPort = openSerialPort(portConfig->identifier, FUNCTION_TELEMETRY_LTM, NULL, baudRates[baudRateIndex], TELEMETRY_LTM_INITIAL_PORT_MODE, SERIAL_NOT_INVERTED);
ltmPort = openSerialPort(portConfig->identifier, FUNCTION_TELEMETRY_LTM, NULL, baudRates[baudRateIndex], TELEMETRY_LTM_INITIAL_PORT_MODE, telemetryConfig()->telemetry_inverted ? SERIAL_INVERTED : SERIAL_NOT_INVERTED);
if (!ltmPort)
return;
ltmEnabled = true;

View File

@ -158,7 +158,7 @@ void configureMAVLinkTelemetryPort(void)
baudRateIndex = BAUD_57600;
}
mavlinkPort = openSerialPort(portConfig->identifier, FUNCTION_TELEMETRY_MAVLINK, NULL, baudRates[baudRateIndex], TELEMETRY_MAVLINK_INITIAL_PORT_MODE, SERIAL_NOT_INVERTED);
mavlinkPort = openSerialPort(portConfig->identifier, FUNCTION_TELEMETRY_MAVLINK, NULL, baudRates[baudRateIndex], TELEMETRY_MAVLINK_INITIAL_PORT_MODE, telemetryConfig()->telemetry_inverted ? SERIAL_INVERTED : SERIAL_NOT_INVERTED);
if (!mavlinkPort) {
return;

View File

@ -321,15 +321,7 @@ void configureSmartPortTelemetryPort(void)
return;
}
portOptions_t portOptions = 0;
if (telemetryConfig()->halfDuplex) {
portOptions |= SERIAL_BIDIR;
}
if (telemetryConfig()->telemetry_inversion) {
portOptions |= SERIAL_INVERTED;
}
portOptions_t portOptions = (telemetryConfig()->halfDuplex ? SERIAL_BIDIR : SERIAL_UNIDIR) | (telemetryConfig()->telemetry_inverted ? SERIAL_NOT_INVERTED : SERIAL_INVERTED);
smartPortSerialPort = openSerialPort(portConfig->identifier, FUNCTION_TELEMETRY_SMARTPORT, NULL, SMARTPORT_BAUD, SMARTPORT_UART_MODE, portOptions);

View File

@ -56,10 +56,8 @@
PG_REGISTER_WITH_RESET_TEMPLATE(telemetryConfig_t, telemetryConfig, PG_TELEMETRY_CONFIG, 0);
#define TELEMETRY_DEFAULT_INVERSION 1
PG_RESET_TEMPLATE(telemetryConfig_t, telemetryConfig,
.telemetry_inversion = TELEMETRY_DEFAULT_INVERSION,
.telemetry_inverted = false,
.halfDuplex = 1,
.telemetry_switch = 0,
.gpsNoFixLatitude = 0,

View File

@ -41,7 +41,7 @@ typedef struct telemetryConfig_s {
int16_t gpsNoFixLatitude;
int16_t gpsNoFixLongitude;
uint8_t telemetry_switch; // Use aux channel to change serial output & baudrate( MSP / Telemetry ). It disables automatic switching to Telemetry when armed.
uint8_t telemetry_inversion; // also shared with smartport inversion
uint8_t telemetry_inverted;
uint8_t halfDuplex;
frskyGpsCoordFormat_e frsky_coordinate_format;
frskyUnit_e frsky_unit;

View File

@ -90,23 +90,23 @@ static bool telemetryDetermineEnabledState_stub_retval;
void rescheduleTask(cfTaskId_e taskId, uint32_t newPeriodMicros)
{
EXPECT_EQ(taskId, TASK_TELEMETRY);
EXPECT_EQ(newPeriodMicros, 1000);
EXPECT_EQ(TASK_TELEMETRY, taskId);
EXPECT_EQ(1000, newPeriodMicros);
}
serialPortConfig_t *findSerialPortConfig(serialPortFunction_e function)
{
EXPECT_EQ(function, FUNCTION_TELEMETRY_IBUS);
EXPECT_EQ(FUNCTION_TELEMETRY_IBUS, function);
return findSerialPortConfig_stub_retval;
}
portSharing_e determinePortSharing(const serialPortConfig_t *portConfig, serialPortFunction_e function)
{
EXPECT_EQ(portConfig, findSerialPortConfig_stub_retval);
EXPECT_EQ(function, FUNCTION_TELEMETRY_IBUS);
EXPECT_EQ(findSerialPortConfig_stub_retval, portConfig);
EXPECT_EQ(FUNCTION_TELEMETRY_IBUS, function);
return PORTSHARING_UNUSED;
}
@ -122,16 +122,16 @@ bool isSerialPortShared(const serialPortConfig_t *portConfig,
uint16_t functionMask,
serialPortFunction_e sharedWithFunction)
{
EXPECT_EQ(portConfig, findSerialPortConfig_stub_retval);
EXPECT_EQ(functionMask, FUNCTION_RX_SERIAL);
EXPECT_EQ(sharedWithFunction, FUNCTION_TELEMETRY_IBUS);
EXPECT_EQ(findSerialPortConfig_stub_retval, portConfig);
EXPECT_EQ(FUNCTION_RX_SERIAL, functionMask);
EXPECT_EQ(FUNCTION_TELEMETRY_IBUS, sharedWithFunction);
return portIsShared;
}
serialPortConfig_t *findSerialPortConfig(uint16_t mask)
{
EXPECT_EQ(mask, FUNCTION_TELEMETRY_IBUS);
EXPECT_EQ(FUNCTION_TELEMETRY_IBUS, mask);
return findSerialPortConfig_stub_retval ;
}
@ -147,24 +147,23 @@ serialPort_t *openSerialPort(
{
openSerial_called = true;
(void) callback;
EXPECT_EQ(identifier, SERIAL_PORT_DUMMY_IDENTIFIER);
EXPECT_EQ(options, SERIAL_BIDIR);
EXPECT_EQ(function, FUNCTION_TELEMETRY_IBUS);
EXPECT_EQ(baudrate, 115200);
EXPECT_EQ(mode, MODE_RXTX);
EXPECT_EQ(SERIAL_PORT_DUMMY_IDENTIFIER, identifier);
EXPECT_EQ(SERIAL_BIDIR, options);
EXPECT_EQ(FUNCTION_TELEMETRY_IBUS, function);
EXPECT_EQ(115200, baudrate);
EXPECT_EQ(MODE_RXTX, mode);
return &serialTestInstance;
}
void closeSerialPort(serialPort_t *serialPort)
{
EXPECT_EQ(serialPort, &serialTestInstance);
EXPECT_EQ(&serialTestInstance, serialPort);
}
void serialWrite(serialPort_t *instance, uint8_t ch)
{
EXPECT_EQ(instance, &serialTestInstance);
EXPECT_EQ(&serialTestInstance, instance);
EXPECT_LT(serialWriteStub.pos, sizeof(serialWriteStub.buffer));
serialWriteStub.buffer[serialWriteStub.pos++] = ch;
serialReadStub.buffer[serialReadStub.end++] = ch; //characters echoes back on the shared wire
@ -174,7 +173,7 @@ void serialWrite(serialPort_t *instance, uint8_t ch)
uint32_t serialRxBytesWaiting(const serialPort_t *instance)
{
EXPECT_EQ(instance, &serialTestInstance);
EXPECT_EQ(&serialTestInstance, instance);
EXPECT_GE(serialReadStub.end, serialReadStub.pos);
int ret = serialReadStub.end - serialReadStub.pos;
if (ret < 0) {
@ -187,7 +186,7 @@ uint32_t serialRxBytesWaiting(const serialPort_t *instance)
uint8_t serialRead(serialPort_t *instance)
{
EXPECT_EQ(instance, &serialTestInstance);
EXPECT_EQ(&serialTestInstance, instance);
EXPECT_LT(serialReadStub.pos, serialReadStub.end);
const uint8_t ch = serialReadStub.buffer[serialReadStub.pos++];
return ch;
@ -255,7 +254,7 @@ TEST_F(IbusTelemteryInitUnitTest, Test_IbusInitEnabled)
handleIbusTelemetry();
//then all is read from serial port
EXPECT_EQ(serialReadStub.pos, serialReadStub.end);
EXPECT_EQ(serialReadStub.end, serialReadStub.pos);
EXPECT_TRUE(openSerial_called);
}