Merge pull request #5755 from mikeller/make_frsky_spi_telemetry_configurable

Made FrSky SPI telemetry and external telemetry values configurable.
This commit is contained in:
Michael Keller 2018-04-25 00:16:37 +12:00 committed by GitHub
commit ec583cf9e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 32 additions and 11 deletions

View File

@ -956,6 +956,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

View File

@ -24,11 +24,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;
uint8_t useExternalAdc;
} rxFrSkySpiConfig_t;
PG_DECLARE(rxFrSkySpiConfig_t, rxFrSkySpiConfig);

View File

@ -32,6 +32,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"
@ -104,14 +106,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)
@ -294,7 +301,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)
if (feature(FEATURE_TELEMETRY)) {
telemetryEnabled = initFrSkyHubTelemetryExternal(frSkyDTelemetryWriteByte);
}
#endif
}
#endif

View File

@ -80,7 +80,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,
@ -91,6 +91,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)

View File

@ -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"
@ -183,10 +185,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;
@ -528,7 +535,9 @@ rx_spi_received_e frSkyXHandlePacket(uint8_t * const packet, uint8_t * const pro
void frSkyXInit(void)
{
#if defined(USE_TELEMETRY_SMARTPORT)
if (feature(FEATURE_TELEMETRY)) {
telemetryEnabled = initSmartPortTelemetryExternal(frSkyXTelemetryWriteFrame);
}
#endif
}