From 3845ed98abddfcedcc11a1cdedc68a4993afd84a Mon Sep 17 00:00:00 2001 From: Thomas Miric Date: Sun, 28 Jan 2018 08:16:09 +0100 Subject: [PATCH 1/3] Changes from Ledvinap --- src/main/target/SPRACINGF3EVO/target.h | 16 +++---- src/main/telemetry/jetiexbus.c | 64 +++++++++++++------------- 2 files changed, 41 insertions(+), 39 deletions(-) diff --git a/src/main/target/SPRACINGF3EVO/target.h b/src/main/target/SPRACINGF3EVO/target.h index 2c67ef066a..0fe39fe0f9 100644 --- a/src/main/target/SPRACINGF3EVO/target.h +++ b/src/main/target/SPRACINGF3EVO/target.h @@ -39,9 +39,9 @@ #endif // SPRACINGF3MQ // Space reduction measures to make the firmware fit into flash: -#undef USE_TELEMETRY_JETIEXBUS -#undef USE_SERIALRX_JETIEXBUS -#undef USE_TELEMETRY_MAVLINK +//#undef USE_TELEMETRY_JETIEXBUS +//#undef USE_SERIALRX_JETIEXBUS +//#undef USE_TELEMETRY_MAVLINK #define CONFIG_FASTLOOP_PREFERRED_ACC ACC_DEFAULT @@ -100,8 +100,8 @@ #define SERIAL_PORT_COUNT 4 -#define USE_ESCSERIAL -#define ESCSERIAL_TIMER_TX_PIN PA15 // (HARDARE=0,PPM) +//#define USE_ESCSERIAL +//#define ESCSERIAL_TIMER_TX_PIN PA15 // (HARDARE=0,PPM) #define UART1_TX_PIN PA9 #define UART1_RX_PIN PA10 @@ -164,14 +164,14 @@ #define CURRENT_METER_ADC_PIN PA5 #endif -#define USE_OSD +//#define USE_OSD #define DISABLE_EXTENDED_CMS_OSD_MENU #define USE_OSD_OVER_MSP_DISPLAYPORT #define USE_MSP_CURRENT_METER -#define USE_TRANSPONDER +//#define USE_TRANSPONDER -#define ENABLE_BLACKBOX_LOGGING_ON_SDCARD_BY_DEFAULT +//#define ENABLE_BLACKBOX_LOGGING_ON_SDCARD_BY_DEFAULT #define DEFAULT_RX_FEATURE FEATURE_RX_PPM #define DEFAULT_FEATURES (FEATURE_TRANSPONDER | FEATURE_RSSI_ADC | FEATURE_TELEMETRY) diff --git a/src/main/telemetry/jetiexbus.c b/src/main/telemetry/jetiexbus.c index b50c4c066a..d4340b539b 100644 --- a/src/main/telemetry/jetiexbus.c +++ b/src/main/telemetry/jetiexbus.c @@ -30,6 +30,7 @@ #include "fc/runtime_config.h" #include "common/utils.h" +#include "common/bitarray.h" #include "drivers/serial.h" #include "drivers/serial_uart.h" @@ -88,8 +89,6 @@ enum exDataType_e { EX_TYPE_DT = 5, // int22_t Special data type – time and date EX_TYPE_30b = 8, // int30_t Data type 30b (-536870911 ¸536870911) EX_TYPE_GPS = 9, // int30_t Special data type – GPS coordinates: lo/hi minute - lo/hi degree. - EX_TYPE_SENSOR_DISABLED = 240, - EX_TYPE_SENSOR_ENABLED = 250, EX_TYPE_DES = 255 // only for devicedescription }; @@ -107,23 +106,22 @@ typedef struct exBusSensor_s { const char *unit; const uint8_t exDataType; const uint8_t decimals; - uint8_t parameter; } exBusSensor_t; #define DECIMAL_MASK(decimals) (decimals << 5) // list of telemetry messages // after every 15 sensors a new header has to be inserted (e.g. "BF D2") -exBusSensor_t jetiExSensors[] = { - { "BF D1", "", EX_TYPE_DES, EX_TYPE_NONE, EX_TYPE_SENSOR_ENABLED}, // device descripton - { "Voltage", "V", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED}, - { "Current", "A", EX_TYPE_14b, DECIMAL_MASK(2), EX_TYPE_SENSOR_DISABLED}, - { "Altitude", "m", EX_TYPE_14b, DECIMAL_MASK(2), EX_TYPE_SENSOR_DISABLED}, - { "Capacity", "mAh", EX_TYPE_22b, DECIMAL_MASK(0), EX_TYPE_SENSOR_DISABLED}, - { "Power", "W", EX_TYPE_22b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED}, - { "Roll angle", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED}, - { "Pitch angle", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED}, - { "Heading", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED} +const exBusSensor_t jetiExSensors[] = { + { "BF D1", "", EX_TYPE_DES, 0}, // device descripton + { "Voltage", "V", EX_TYPE_14b, DECIMAL_MASK(1)}, + { "Current", "A", EX_TYPE_14b, DECIMAL_MASK(2)}, + { "Altitude", "m", EX_TYPE_14b, DECIMAL_MASK(2)}, + { "Capacity", "mAh", EX_TYPE_22b, DECIMAL_MASK(0)}, + { "Power", "W", EX_TYPE_22b, DECIMAL_MASK(1)}, + { "Roll angle", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1)}, + { "Pitch angle", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1)}, + { "Heading", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1)} }; // after every 15 sensors increment the step by 2 (e.g. ...EX_VAL15, EX_VAL16 = 17) to skip the device description @@ -144,9 +142,11 @@ static uint8_t jetiExBusTelemetryFrame[40]; static uint8_t jetiExBusTransceiveState = EXBUS_TRANS_RX; static uint8_t activeSensorList[JETI_EX_SENSOR_COUNT]; static uint8_t activeSensors; +static uint32_t exSensorEnabled; static uint8_t sendJetiExBusTelemetry(uint8_t packetID, uint8_t item); + // Jeti Ex Telemetry CRC calculations for a frame uint8_t calcCRC8(uint8_t *pt, uint8_t msgLen) { @@ -180,30 +180,32 @@ void initJetiExBusTelemetry(void) jetiExTelemetryFrame[EXTEL_HEADER_LSN_HB] = 0x00; jetiExTelemetryFrame[EXTEL_HEADER_RES] = 0x00; // reserved, by default 0x00 + bitArraySet(&exSensorEnabled, 0); + // Check which sensors are available if (batteryConfig()->voltageMeterSource != VOLTAGE_METER_NONE) { - jetiExSensors[EX_VOLTAGE].parameter = EX_TYPE_SENSOR_ENABLED; + bitArraySet(&exSensorEnabled, EX_VOLTAGE); } if (batteryConfig()->currentMeterSource != CURRENT_METER_NONE) { - jetiExSensors[EX_CURRENT].parameter = EX_TYPE_SENSOR_ENABLED; + bitArraySet(&exSensorEnabled, EX_CURRENT); } if ((batteryConfig()->voltageMeterSource != VOLTAGE_METER_NONE) && (batteryConfig()->currentMeterSource != CURRENT_METER_NONE)) { - jetiExSensors[EX_POWER].parameter = EX_TYPE_SENSOR_ENABLED; - jetiExSensors[EX_CAPACITY].parameter = EX_TYPE_SENSOR_ENABLED; + bitArraySet(&exSensorEnabled, EX_POWER); + bitArraySet(&exSensorEnabled, EX_CAPACITY); } if (sensors(SENSOR_BARO)) { - jetiExSensors[EX_ALTITUDE].parameter = EX_TYPE_SENSOR_ENABLED; + bitArraySet(&exSensorEnabled, EX_ALTITUDE); } if (sensors(SENSOR_ACC)) { - jetiExSensors[EX_ROLL_ANGLE].parameter = EX_TYPE_SENSOR_ENABLED; - jetiExSensors[EX_PITCH_ANGLE].parameter = EX_TYPE_SENSOR_ENABLED; + bitArraySet(&exSensorEnabled, EX_ROLL_ANGLE); + bitArraySet(&exSensorEnabled, EX_PITCH_ANGLE); } if (sensors(SENSOR_MAG)) { - jetiExSensors[EX_HEADING].parameter = EX_TYPE_SENSOR_ENABLED; + bitArraySet(&exSensorEnabled, EX_HEADING); } for (uint8_t item = 0; item < JETI_EX_SENSOR_COUNT; item++ ) { - if (jetiExSensors[item].parameter == EX_TYPE_SENSOR_ENABLED) { + if (bitArrayGet(&exSensorEnabled, item)) { activeSensorList[activeSensors] = item; activeSensors++; } @@ -230,19 +232,19 @@ int32_t getSensorValue(uint8_t sensor) { switch(sensor) { case EX_VOLTAGE: - return (getBatteryVoltageLatest()); + return getBatteryVoltageLatest(); break; case EX_CURRENT: - return (getAmperageLatest()); + return getAmperageLatest(); break; case EX_ALTITUDE: - return (getEstimatedAltitude()); + return getEstimatedAltitude(); break; case EX_CAPACITY: - return (getMAhDrawn()); + return getMAhDrawn(); break; case EX_POWER: @@ -250,15 +252,15 @@ int32_t getSensorValue(uint8_t sensor) break; case EX_ROLL_ANGLE: - return (attitude.values.roll); + return attitude.values.roll; break; case EX_PITCH_ANGLE: - return (attitude.values.pitch); + return attitude.values.pitch; break; case EX_HEADING: - return (attitude.values.yaw); + return attitude.values.yaw; break; default: @@ -298,7 +300,7 @@ uint8_t createExTelemetryValueMessage(uint8_t *exMessage, uint8_t item) } sensorItem = activeSensorList[item]; - if (EXTEL_MAX_PAYLOAD <= ((p-&exMessage[EXTEL_HEADER_ID]) + exDataTypeLen[jetiExSensors[sensorItem].exDataType]) + 1) { + if ((p - &exMessage[EXTEL_HEADER_ID]) + exDataTypeLen[jetiExSensors[sensorItem].exDataType] + 1 >= EXTEL_MAX_PAYLOAD) { break; } } @@ -379,7 +381,7 @@ uint8_t sendJetiExBusTelemetry(uint8_t packetID, uint8_t item) if (requestLoop < 0xFF) { while( ++sensorDescriptionCounter < JETI_EX_SENSOR_COUNT) { - if (jetiExSensors[sensorDescriptionCounter].parameter >= EX_TYPE_SENSOR_ENABLED) { + if (bitArrayGet(&exSensorEnabled, sensorDescriptionCounter)) { break; } } From 2eff8b41585b580c594e86efc058e1ddee128684 Mon Sep 17 00:00:00 2001 From: Thomas Miric Date: Sun, 28 Jan 2018 08:33:34 +0100 Subject: [PATCH 2/3] Revert "Changes from Ledvinap" This reverts commit 3845ed98abddfcedcc11a1cdedc68a4993afd84a. --- src/main/target/SPRACINGF3EVO/target.h | 16 +++---- src/main/telemetry/jetiexbus.c | 64 +++++++++++++------------- 2 files changed, 39 insertions(+), 41 deletions(-) diff --git a/src/main/target/SPRACINGF3EVO/target.h b/src/main/target/SPRACINGF3EVO/target.h index 0fe39fe0f9..2c67ef066a 100644 --- a/src/main/target/SPRACINGF3EVO/target.h +++ b/src/main/target/SPRACINGF3EVO/target.h @@ -39,9 +39,9 @@ #endif // SPRACINGF3MQ // Space reduction measures to make the firmware fit into flash: -//#undef USE_TELEMETRY_JETIEXBUS -//#undef USE_SERIALRX_JETIEXBUS -//#undef USE_TELEMETRY_MAVLINK +#undef USE_TELEMETRY_JETIEXBUS +#undef USE_SERIALRX_JETIEXBUS +#undef USE_TELEMETRY_MAVLINK #define CONFIG_FASTLOOP_PREFERRED_ACC ACC_DEFAULT @@ -100,8 +100,8 @@ #define SERIAL_PORT_COUNT 4 -//#define USE_ESCSERIAL -//#define ESCSERIAL_TIMER_TX_PIN PA15 // (HARDARE=0,PPM) +#define USE_ESCSERIAL +#define ESCSERIAL_TIMER_TX_PIN PA15 // (HARDARE=0,PPM) #define UART1_TX_PIN PA9 #define UART1_RX_PIN PA10 @@ -164,14 +164,14 @@ #define CURRENT_METER_ADC_PIN PA5 #endif -//#define USE_OSD +#define USE_OSD #define DISABLE_EXTENDED_CMS_OSD_MENU #define USE_OSD_OVER_MSP_DISPLAYPORT #define USE_MSP_CURRENT_METER -//#define USE_TRANSPONDER +#define USE_TRANSPONDER -//#define ENABLE_BLACKBOX_LOGGING_ON_SDCARD_BY_DEFAULT +#define ENABLE_BLACKBOX_LOGGING_ON_SDCARD_BY_DEFAULT #define DEFAULT_RX_FEATURE FEATURE_RX_PPM #define DEFAULT_FEATURES (FEATURE_TRANSPONDER | FEATURE_RSSI_ADC | FEATURE_TELEMETRY) diff --git a/src/main/telemetry/jetiexbus.c b/src/main/telemetry/jetiexbus.c index d4340b539b..b50c4c066a 100644 --- a/src/main/telemetry/jetiexbus.c +++ b/src/main/telemetry/jetiexbus.c @@ -30,7 +30,6 @@ #include "fc/runtime_config.h" #include "common/utils.h" -#include "common/bitarray.h" #include "drivers/serial.h" #include "drivers/serial_uart.h" @@ -89,6 +88,8 @@ enum exDataType_e { EX_TYPE_DT = 5, // int22_t Special data type – time and date EX_TYPE_30b = 8, // int30_t Data type 30b (-536870911 ¸536870911) EX_TYPE_GPS = 9, // int30_t Special data type – GPS coordinates: lo/hi minute - lo/hi degree. + EX_TYPE_SENSOR_DISABLED = 240, + EX_TYPE_SENSOR_ENABLED = 250, EX_TYPE_DES = 255 // only for devicedescription }; @@ -106,22 +107,23 @@ typedef struct exBusSensor_s { const char *unit; const uint8_t exDataType; const uint8_t decimals; + uint8_t parameter; } exBusSensor_t; #define DECIMAL_MASK(decimals) (decimals << 5) // list of telemetry messages // after every 15 sensors a new header has to be inserted (e.g. "BF D2") -const exBusSensor_t jetiExSensors[] = { - { "BF D1", "", EX_TYPE_DES, 0}, // device descripton - { "Voltage", "V", EX_TYPE_14b, DECIMAL_MASK(1)}, - { "Current", "A", EX_TYPE_14b, DECIMAL_MASK(2)}, - { "Altitude", "m", EX_TYPE_14b, DECIMAL_MASK(2)}, - { "Capacity", "mAh", EX_TYPE_22b, DECIMAL_MASK(0)}, - { "Power", "W", EX_TYPE_22b, DECIMAL_MASK(1)}, - { "Roll angle", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1)}, - { "Pitch angle", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1)}, - { "Heading", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1)} +exBusSensor_t jetiExSensors[] = { + { "BF D1", "", EX_TYPE_DES, EX_TYPE_NONE, EX_TYPE_SENSOR_ENABLED}, // device descripton + { "Voltage", "V", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED}, + { "Current", "A", EX_TYPE_14b, DECIMAL_MASK(2), EX_TYPE_SENSOR_DISABLED}, + { "Altitude", "m", EX_TYPE_14b, DECIMAL_MASK(2), EX_TYPE_SENSOR_DISABLED}, + { "Capacity", "mAh", EX_TYPE_22b, DECIMAL_MASK(0), EX_TYPE_SENSOR_DISABLED}, + { "Power", "W", EX_TYPE_22b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED}, + { "Roll angle", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED}, + { "Pitch angle", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED}, + { "Heading", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED} }; // after every 15 sensors increment the step by 2 (e.g. ...EX_VAL15, EX_VAL16 = 17) to skip the device description @@ -142,11 +144,9 @@ static uint8_t jetiExBusTelemetryFrame[40]; static uint8_t jetiExBusTransceiveState = EXBUS_TRANS_RX; static uint8_t activeSensorList[JETI_EX_SENSOR_COUNT]; static uint8_t activeSensors; -static uint32_t exSensorEnabled; static uint8_t sendJetiExBusTelemetry(uint8_t packetID, uint8_t item); - // Jeti Ex Telemetry CRC calculations for a frame uint8_t calcCRC8(uint8_t *pt, uint8_t msgLen) { @@ -180,32 +180,30 @@ void initJetiExBusTelemetry(void) jetiExTelemetryFrame[EXTEL_HEADER_LSN_HB] = 0x00; jetiExTelemetryFrame[EXTEL_HEADER_RES] = 0x00; // reserved, by default 0x00 - bitArraySet(&exSensorEnabled, 0); - // Check which sensors are available if (batteryConfig()->voltageMeterSource != VOLTAGE_METER_NONE) { - bitArraySet(&exSensorEnabled, EX_VOLTAGE); + jetiExSensors[EX_VOLTAGE].parameter = EX_TYPE_SENSOR_ENABLED; } if (batteryConfig()->currentMeterSource != CURRENT_METER_NONE) { - bitArraySet(&exSensorEnabled, EX_CURRENT); + jetiExSensors[EX_CURRENT].parameter = EX_TYPE_SENSOR_ENABLED; } if ((batteryConfig()->voltageMeterSource != VOLTAGE_METER_NONE) && (batteryConfig()->currentMeterSource != CURRENT_METER_NONE)) { - bitArraySet(&exSensorEnabled, EX_POWER); - bitArraySet(&exSensorEnabled, EX_CAPACITY); + jetiExSensors[EX_POWER].parameter = EX_TYPE_SENSOR_ENABLED; + jetiExSensors[EX_CAPACITY].parameter = EX_TYPE_SENSOR_ENABLED; } if (sensors(SENSOR_BARO)) { - bitArraySet(&exSensorEnabled, EX_ALTITUDE); + jetiExSensors[EX_ALTITUDE].parameter = EX_TYPE_SENSOR_ENABLED; } if (sensors(SENSOR_ACC)) { - bitArraySet(&exSensorEnabled, EX_ROLL_ANGLE); - bitArraySet(&exSensorEnabled, EX_PITCH_ANGLE); + jetiExSensors[EX_ROLL_ANGLE].parameter = EX_TYPE_SENSOR_ENABLED; + jetiExSensors[EX_PITCH_ANGLE].parameter = EX_TYPE_SENSOR_ENABLED; } if (sensors(SENSOR_MAG)) { - bitArraySet(&exSensorEnabled, EX_HEADING); + jetiExSensors[EX_HEADING].parameter = EX_TYPE_SENSOR_ENABLED; } for (uint8_t item = 0; item < JETI_EX_SENSOR_COUNT; item++ ) { - if (bitArrayGet(&exSensorEnabled, item)) { + if (jetiExSensors[item].parameter == EX_TYPE_SENSOR_ENABLED) { activeSensorList[activeSensors] = item; activeSensors++; } @@ -232,19 +230,19 @@ int32_t getSensorValue(uint8_t sensor) { switch(sensor) { case EX_VOLTAGE: - return getBatteryVoltageLatest(); + return (getBatteryVoltageLatest()); break; case EX_CURRENT: - return getAmperageLatest(); + return (getAmperageLatest()); break; case EX_ALTITUDE: - return getEstimatedAltitude(); + return (getEstimatedAltitude()); break; case EX_CAPACITY: - return getMAhDrawn(); + return (getMAhDrawn()); break; case EX_POWER: @@ -252,15 +250,15 @@ int32_t getSensorValue(uint8_t sensor) break; case EX_ROLL_ANGLE: - return attitude.values.roll; + return (attitude.values.roll); break; case EX_PITCH_ANGLE: - return attitude.values.pitch; + return (attitude.values.pitch); break; case EX_HEADING: - return attitude.values.yaw; + return (attitude.values.yaw); break; default: @@ -300,7 +298,7 @@ uint8_t createExTelemetryValueMessage(uint8_t *exMessage, uint8_t item) } sensorItem = activeSensorList[item]; - if ((p - &exMessage[EXTEL_HEADER_ID]) + exDataTypeLen[jetiExSensors[sensorItem].exDataType] + 1 >= EXTEL_MAX_PAYLOAD) { + if (EXTEL_MAX_PAYLOAD <= ((p-&exMessage[EXTEL_HEADER_ID]) + exDataTypeLen[jetiExSensors[sensorItem].exDataType]) + 1) { break; } } @@ -381,7 +379,7 @@ uint8_t sendJetiExBusTelemetry(uint8_t packetID, uint8_t item) if (requestLoop < 0xFF) { while( ++sensorDescriptionCounter < JETI_EX_SENSOR_COUNT) { - if (bitArrayGet(&exSensorEnabled, sensorDescriptionCounter)) { + if (jetiExSensors[sensorDescriptionCounter].parameter >= EX_TYPE_SENSOR_ENABLED) { break; } } From 5b66fa1b9b52a27f4129e2b9fb6310d069a1e002 Mon Sep 17 00:00:00 2001 From: Thomas Miric Date: Sun, 28 Jan 2018 13:36:04 +0100 Subject: [PATCH 3/3] applied changes from ledvinap --- src/main/telemetry/jetiexbus.c | 75 +++++++++++++++++----------------- 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/src/main/telemetry/jetiexbus.c b/src/main/telemetry/jetiexbus.c index b50c4c066a..172ce91789 100644 --- a/src/main/telemetry/jetiexbus.c +++ b/src/main/telemetry/jetiexbus.c @@ -30,6 +30,7 @@ #include "fc/runtime_config.h" #include "common/utils.h" +#include "common/bitarray.h" #include "drivers/serial.h" #include "drivers/serial_uart.h" @@ -88,8 +89,6 @@ enum exDataType_e { EX_TYPE_DT = 5, // int22_t Special data type – time and date EX_TYPE_30b = 8, // int30_t Data type 30b (-536870911 ¸536870911) EX_TYPE_GPS = 9, // int30_t Special data type – GPS coordinates: lo/hi minute - lo/hi degree. - EX_TYPE_SENSOR_DISABLED = 240, - EX_TYPE_SENSOR_ENABLED = 250, EX_TYPE_DES = 255 // only for devicedescription }; @@ -107,23 +106,22 @@ typedef struct exBusSensor_s { const char *unit; const uint8_t exDataType; const uint8_t decimals; - uint8_t parameter; } exBusSensor_t; #define DECIMAL_MASK(decimals) (decimals << 5) // list of telemetry messages // after every 15 sensors a new header has to be inserted (e.g. "BF D2") -exBusSensor_t jetiExSensors[] = { - { "BF D1", "", EX_TYPE_DES, EX_TYPE_NONE, EX_TYPE_SENSOR_ENABLED}, // device descripton - { "Voltage", "V", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED}, - { "Current", "A", EX_TYPE_14b, DECIMAL_MASK(2), EX_TYPE_SENSOR_DISABLED}, - { "Altitude", "m", EX_TYPE_14b, DECIMAL_MASK(2), EX_TYPE_SENSOR_DISABLED}, - { "Capacity", "mAh", EX_TYPE_22b, DECIMAL_MASK(0), EX_TYPE_SENSOR_DISABLED}, - { "Power", "W", EX_TYPE_22b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED}, - { "Roll angle", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED}, - { "Pitch angle", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED}, - { "Heading", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1), EX_TYPE_SENSOR_DISABLED} +const exBusSensor_t jetiExSensors[] = { + {"BF D1", "", EX_TYPE_DES, 0 }, // device descripton + {"Voltage", "V", EX_TYPE_14b, DECIMAL_MASK(1)}, + {"Current", "A", EX_TYPE_14b, DECIMAL_MASK(2)}, + {"Altitude", "m", EX_TYPE_14b, DECIMAL_MASK(2)}, + {"Capacity", "mAh", EX_TYPE_22b, DECIMAL_MASK(0)}, + {"Power", "W", EX_TYPE_22b, DECIMAL_MASK(1)}, + {"Roll angle", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1)}, + {"Pitch angle", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1)}, + {"Heading", "\xB0", EX_TYPE_14b, DECIMAL_MASK(1)} }; // after every 15 sensors increment the step by 2 (e.g. ...EX_VAL15, EX_VAL16 = 17) to skip the device description @@ -144,6 +142,7 @@ static uint8_t jetiExBusTelemetryFrame[40]; static uint8_t jetiExBusTransceiveState = EXBUS_TRANS_RX; static uint8_t activeSensorList[JETI_EX_SENSOR_COUNT]; static uint8_t activeSensors; +static uint32_t exSensorEnabled; static uint8_t sendJetiExBusTelemetry(uint8_t packetID, uint8_t item); @@ -160,10 +159,10 @@ uint8_t calcCRC8(uint8_t *pt, uint8_t msgLen) } /* -* ----------------------------------------------- -* Jeti Ex Bus Telemetry -* ----------------------------------------------- -*/ + * ----------------------------------------------- + * Jeti Ex Bus Telemetry + * ----------------------------------------------- + */ void initJetiExBusTelemetry(void) { // Init Ex Bus Frame header @@ -180,30 +179,32 @@ void initJetiExBusTelemetry(void) jetiExTelemetryFrame[EXTEL_HEADER_LSN_HB] = 0x00; jetiExTelemetryFrame[EXTEL_HEADER_RES] = 0x00; // reserved, by default 0x00 + + bitArraySet(&exSensorEnabled, 0); // Check which sensors are available if (batteryConfig()->voltageMeterSource != VOLTAGE_METER_NONE) { - jetiExSensors[EX_VOLTAGE].parameter = EX_TYPE_SENSOR_ENABLED; + bitArraySet(&exSensorEnabled, EX_VOLTAGE); } if (batteryConfig()->currentMeterSource != CURRENT_METER_NONE) { - jetiExSensors[EX_CURRENT].parameter = EX_TYPE_SENSOR_ENABLED; + bitArraySet(&exSensorEnabled, EX_CURRENT); } if ((batteryConfig()->voltageMeterSource != VOLTAGE_METER_NONE) && (batteryConfig()->currentMeterSource != CURRENT_METER_NONE)) { - jetiExSensors[EX_POWER].parameter = EX_TYPE_SENSOR_ENABLED; - jetiExSensors[EX_CAPACITY].parameter = EX_TYPE_SENSOR_ENABLED; + bitArraySet(&exSensorEnabled, EX_POWER); + bitArraySet(&exSensorEnabled, EX_CAPACITY); } if (sensors(SENSOR_BARO)) { - jetiExSensors[EX_ALTITUDE].parameter = EX_TYPE_SENSOR_ENABLED; + bitArraySet(&exSensorEnabled, EX_ALTITUDE); } if (sensors(SENSOR_ACC)) { - jetiExSensors[EX_ROLL_ANGLE].parameter = EX_TYPE_SENSOR_ENABLED; - jetiExSensors[EX_PITCH_ANGLE].parameter = EX_TYPE_SENSOR_ENABLED; + bitArraySet(&exSensorEnabled, EX_ROLL_ANGLE); + bitArraySet(&exSensorEnabled, EX_PITCH_ANGLE); } if (sensors(SENSOR_MAG)) { - jetiExSensors[EX_HEADING].parameter = EX_TYPE_SENSOR_ENABLED; + bitArraySet(&exSensorEnabled, EX_HEADING); } for (uint8_t item = 0; item < JETI_EX_SENSOR_COUNT; item++ ) { - if (jetiExSensors[item].parameter == EX_TYPE_SENSOR_ENABLED) { + if (bitArrayGet(&exSensorEnabled, item)) { activeSensorList[activeSensors] = item; activeSensors++; } @@ -230,35 +231,35 @@ int32_t getSensorValue(uint8_t sensor) { switch(sensor) { case EX_VOLTAGE: - return (getBatteryVoltageLatest()); + return getBatteryVoltageLatest(); break; case EX_CURRENT: - return (getAmperageLatest()); + return getAmperageLatest(); break; case EX_ALTITUDE: - return (getEstimatedAltitude()); + return getEstimatedAltitude(); break; case EX_CAPACITY: - return (getMAhDrawn()); + return getMAhDrawn(); break; case EX_POWER: - return (getBatteryVoltageLatest() * getAmperageLatest()/100); + return (getBatteryVoltageLatest() * getAmperageLatest() / 100); break; case EX_ROLL_ANGLE: - return (attitude.values.roll); + return attitude.values.roll; break; case EX_PITCH_ANGLE: - return (attitude.values.pitch); + return attitude.values.pitch; break; case EX_HEADING: - return (attitude.values.yaw); + return attitude.values.yaw; break; default: @@ -298,8 +299,8 @@ uint8_t createExTelemetryValueMessage(uint8_t *exMessage, uint8_t item) } sensorItem = activeSensorList[item]; - if (EXTEL_MAX_PAYLOAD <= ((p-&exMessage[EXTEL_HEADER_ID]) + exDataTypeLen[jetiExSensors[sensorItem].exDataType]) + 1) { - break; + if ((p - &exMessage[EXTEL_HEADER_ID]) + exDataTypeLen[jetiExSensors[sensorItem].exDataType] + 1 >= EXTEL_MAX_PAYLOAD) { + break; } } @@ -379,7 +380,7 @@ uint8_t sendJetiExBusTelemetry(uint8_t packetID, uint8_t item) if (requestLoop < 0xFF) { while( ++sensorDescriptionCounter < JETI_EX_SENSOR_COUNT) { - if (jetiExSensors[sensorDescriptionCounter].parameter >= EX_TYPE_SENSOR_ENABLED) { + if (bitArrayGet(&exSensorEnabled, sensorDescriptionCounter)) { break; } }