From d88bec63a862509aff68da9f883abfbfdb839ab3 Mon Sep 17 00:00:00 2001 From: mikeller Date: Tue, 24 Apr 2018 00:14:50 +1200 Subject: [PATCH 1/2] Made FrSky SPI telemetry and external telemetry values configurable. --- src/main/interface/settings.c | 1 + src/main/rx/cc2500_frsky_common.h | 1 + src/main/rx/cc2500_frsky_d.c | 19 ++++++++++++++----- src/main/rx/cc2500_frsky_shared.c | 1 + src/main/rx/cc2500_frsky_x.c | 17 +++++++++++++---- 5 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/main/interface/settings.c b/src/main/interface/settings.c index 841a1dfac..e1c0c813b 100644 --- a/src/main/interface/settings.c +++ b/src/main/interface/settings.c @@ -948,6 +948,7 @@ const clivalue_t valueTable[] = { { "frsky_spi_offset", VAR_INT8 | MASTER_VALUE, .config.minmax = { -127, 127 }, PG_RX_FRSKY_SPI_CONFIG, offsetof(rxFrSkySpiConfig_t, bindOffset) }, { "frsky_spi_bind_hop_data", VAR_UINT8 | MASTER_VALUE | MODE_ARRAY, .config.array.length = 50, PG_RX_FRSKY_SPI_CONFIG, offsetof(rxFrSkySpiConfig_t, bindHopData) }, { "frsky_x_rx_num", VAR_UINT8 | MASTER_VALUE, .config.minmax = { 0, 255 }, PG_RX_FRSKY_SPI_CONFIG, offsetof(rxFrSkySpiConfig_t, rxNum) }, + { "frsky_spi_use_external_adc", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_RX_FRSKY_SPI_CONFIG, offsetof(rxFrSkySpiConfig_t, useExternalAdc) }, #endif { "led_inversion", VAR_UINT8 | MASTER_VALUE, .config.minmax = { 0, ((1 << STATUS_LED_NUMBER) - 1) }, PG_STATUS_LED_CONFIG, offsetof(statusLedConfig_t, inversion) }, #ifdef USE_DASHBOARD diff --git a/src/main/rx/cc2500_frsky_common.h b/src/main/rx/cc2500_frsky_common.h index 679bc614a..b56f78166 100644 --- a/src/main/rx/cc2500_frsky_common.h +++ b/src/main/rx/cc2500_frsky_common.h @@ -27,6 +27,7 @@ typedef struct rxFrSkySpiConfig_s { int8_t bindOffset; uint8_t bindHopData[50]; uint8_t rxNum; + bool useExternalAdc; } rxFrSkySpiConfig_t; PG_DECLARE(rxFrSkySpiConfig_t, rxFrSkySpiConfig); diff --git a/src/main/rx/cc2500_frsky_d.c b/src/main/rx/cc2500_frsky_d.c index a33c93c54..561d212b6 100644 --- a/src/main/rx/cc2500_frsky_d.c +++ b/src/main/rx/cc2500_frsky_d.c @@ -30,6 +30,8 @@ #include "common/maths.h" #include "common/utils.h" +#include "config/feature.h" + #include "drivers/adc.h" #include "drivers/rx/rx_cc2500.h" #include "drivers/io.h" @@ -102,14 +104,19 @@ static void frSkyDTelemetryWriteByte(const char data) static void buildTelemetryFrame(uint8_t *packet) { - const uint16_t adcExternal1Sample = adcGetChannel(ADC_EXTERNAL1); - const uint16_t adcRssiSample = adcGetChannel(ADC_RSSI); + uint8_t a1Value; + if (rxFrSkySpiConfig()->useExternalAdc) { + a1Value = (adcGetChannel(ADC_EXTERNAL1) & 0xff0) >> 4; + } else { + a1Value = (2 * getBatteryVoltage()) & 0xff; + } + const uint8_t a2Value = (adcGetChannel(ADC_RSSI)) >> 4; telemetryId = packet[4]; frame[0] = 0x11; // length frame[1] = rxFrSkySpiConfig()->bindTxId[0]; frame[2] = rxFrSkySpiConfig()->bindTxId[1]; - frame[3] = (uint8_t)((adcExternal1Sample & 0xff0) >> 4); // A1 - frame[4] = (uint8_t)((adcRssiSample & 0xff0) >> 4); // A2 + frame[3] = a1Value; + frame[4] = a2Value; frame[5] = (uint8_t)rssiDbm; uint8_t bytesUsed = 0; #if defined(USE_TELEMETRY_FRSKY_HUB) @@ -292,7 +299,9 @@ rx_spi_received_e frSkyDHandlePacket(uint8_t * const packet, uint8_t * const pro void frSkyDInit(void) { #if defined(USE_RX_FRSKY_SPI_TELEMETRY) && defined(USE_TELEMETRY_FRSKY_HUB) - telemetryEnabled = initFrSkyHubTelemetryExternal(frSkyDTelemetryWriteByte); + if (feature(FEATURE_TELEMETRY)) { + telemetryEnabled = initFrSkyHubTelemetryExternal(frSkyDTelemetryWriteByte); + } #endif } #endif diff --git a/src/main/rx/cc2500_frsky_shared.c b/src/main/rx/cc2500_frsky_shared.c index 3714a1641..9ea8cd543 100644 --- a/src/main/rx/cc2500_frsky_shared.c +++ b/src/main/rx/cc2500_frsky_shared.c @@ -89,6 +89,7 @@ PG_RESET_TEMPLATE(rxFrSkySpiConfig_t, rxFrSkySpiConfig, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, .rxNum = 0, + .useExternalAdc = false, ); #if defined(USE_RX_FRSKY_SPI_TELEMETRY) diff --git a/src/main/rx/cc2500_frsky_x.c b/src/main/rx/cc2500_frsky_x.c index b86f8b4b4..d899f666f 100644 --- a/src/main/rx/cc2500_frsky_x.c +++ b/src/main/rx/cc2500_frsky_x.c @@ -28,6 +28,8 @@ #include "common/maths.h" #include "common/utils.h" +#include "config/feature.h" + #include "drivers/adc.h" #include "drivers/rx/rx_cc2500.h" #include "drivers/io.h" @@ -181,10 +183,15 @@ static void buildTelemetryFrame(uint8_t *packet) frame[3] = packet[3]; if (evenRun) { - frame[4]=(uint8_t)rssiDbm|0x80; + frame[4] = (uint8_t)rssiDbm | 0x80; } else { - const uint16_t adcExternal1Sample = adcGetChannel(ADC_EXTERNAL1); - frame[4] = (uint8_t)((adcExternal1Sample & 0xfe0) >> 5); // A1; + uint8_t a1Value; + if (rxFrSkySpiConfig()->useExternalAdc) { + a1Value = (uint8_t)((adcGetChannel(ADC_EXTERNAL1) & 0xfe0) >> 5); + } else { + a1Value = getBatteryVoltage() & 0x7f; + } + frame[4] = a1Value; } evenRun = !evenRun; @@ -526,7 +533,9 @@ rx_spi_received_e frSkyXHandlePacket(uint8_t * const packet, uint8_t * const pro void frSkyXInit(void) { #if defined(USE_TELEMETRY_SMARTPORT) - telemetryEnabled = initSmartPortTelemetryExternal(frSkyXTelemetryWriteFrame); + if (feature(FEATURE_TELEMETRY)) { + telemetryEnabled = initSmartPortTelemetryExternal(frSkyXTelemetryWriteFrame); + } #endif } From 373e1d678e1beb4fb35d3dcf7a673a23baafb0bb Mon Sep 17 00:00:00 2001 From: Michael Keller Date: Tue, 24 Apr 2018 08:00:44 +1200 Subject: [PATCH 2/2] Fixes from review. --- src/main/rx/cc2500_frsky_common.h | 4 ++-- src/main/rx/cc2500_frsky_shared.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/rx/cc2500_frsky_common.h b/src/main/rx/cc2500_frsky_common.h index b56f78166..c84b70e4e 100644 --- a/src/main/rx/cc2500_frsky_common.h +++ b/src/main/rx/cc2500_frsky_common.h @@ -22,12 +22,12 @@ #include "rx/rx_spi.h" typedef struct rxFrSkySpiConfig_s { - bool autoBind; + uint8_t autoBind; uint8_t bindTxId[2]; int8_t bindOffset; uint8_t bindHopData[50]; uint8_t rxNum; - bool useExternalAdc; + uint8_t useExternalAdc; } rxFrSkySpiConfig_t; PG_DECLARE(rxFrSkySpiConfig_t, rxFrSkySpiConfig); diff --git a/src/main/rx/cc2500_frsky_shared.c b/src/main/rx/cc2500_frsky_shared.c index 9ea8cd543..97c677ffd 100644 --- a/src/main/rx/cc2500_frsky_shared.c +++ b/src/main/rx/cc2500_frsky_shared.c @@ -78,7 +78,7 @@ static IO_t antSelPin; int16_t rssiDbm; #endif -PG_REGISTER_WITH_RESET_TEMPLATE(rxFrSkySpiConfig_t, rxFrSkySpiConfig, PG_RX_FRSKY_SPI_CONFIG, 0); +PG_REGISTER_WITH_RESET_TEMPLATE(rxFrSkySpiConfig_t, rxFrSkySpiConfig, PG_RX_FRSKY_SPI_CONFIG, 1); PG_RESET_TEMPLATE(rxFrSkySpiConfig_t, rxFrSkySpiConfig, .autoBind = false,