1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-17 21:35:44 +03:00

Changes from Ledvinap

This commit is contained in:
Thomas Miric 2018-01-28 08:16:09 +01:00
parent 7f9d289961
commit 3845ed98ab
2 changed files with 41 additions and 39 deletions

View file

@ -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)

View file

@ -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;
}
}