Merge pull request #5736 from opentx/3djc/faimode-review

FAI mode reworks
This commit is contained in:
3djc
2018-03-02 10:10:06 +01:00
committed by GitHub
9 changed files with 93 additions and 40 deletions
+1 -2
View File
@@ -420,8 +420,7 @@ void menuMainView(event_t event)
case EVT_KEY_TELEMETRY:
#if defined(TELEMETRY_FRSKY)
if (!IS_FAI_ENABLED())
chainMenu(menuViewTelemetryFrsky);
chainMenu(menuViewTelemetryFrsky);
#elif defined(TELEMETRY_JETI)
JETI_EnableRXD(); // enable JETI-Telemetry reception
chainMenu(menuViewTelemetryJeti);
+1 -2
View File
@@ -481,8 +481,7 @@ void menuMainView(event_t event)
break;
case EVT_KEY_LONG(KEY_PAGE):
if (!IS_FAI_ENABLED())
chainMenu(menuViewTelemetryFrsky);
chainMenu(menuViewTelemetryFrsky);
killEvents(event);
break;
+1
View File
@@ -587,6 +587,7 @@ or a name (string) of the source.
@retval value current source value (number). Zero is returned for:
* non-existing sources
* for all telemetry source when the telemetry stream is not received
* far all non allowed sensors while FAI MODE is active
@retval table GPS position is returned in a table:
* `lat` (number) latitude, positive is North
+3
View File
@@ -448,6 +448,9 @@ getvalue_t getValue(mixsrc_t i)
#if defined(CPUARM)
else if (i <= MIXSRC_LAST_TELEM) {
if(IS_FAI_FORBIDDEN(i)) {
return 0;
}
i -= MIXSRC_FIRST_TELEM;
div_t qr = div(i, 3);
TelemetryItem & telemetryItem = telemetryItems[qr.quot];
+5 -1
View File
@@ -231,7 +231,11 @@
#define IF_FAI_CHOICE(x)
#endif
#define IS_FAI_FORBIDDEN(idx) (IS_FAI_ENABLED() && idx >= MIXSRC_FIRST_TELEM)
#if defined(CPUARM)
#define IS_FAI_FORBIDDEN(idx) (IS_FAI_ENABLED() && isFaiForbidden(idx))
#else
#define IS_FAI_FORBIDDEN(idx) (IS_FAI_ENABLED() && idx >= MIXSRC_FIRST_TELEM)
#endif
#if defined(BLUETOOTH)
#if defined(X9E) && !defined(USEHORUSBT)
-35
View File
@@ -20,41 +20,6 @@
#include "opentx.h"
struct CrossfireSensor {
const uint8_t id;
const uint8_t subId;
const char * name;
const TelemetryUnit unit;
const uint8_t precision;
};
enum CrossfireSensorIndexes {
RX_RSSI1_INDEX,
RX_RSSI2_INDEX,
RX_QUALITY_INDEX,
RX_SNR_INDEX,
RX_ANTENNA_INDEX,
RF_MODE_INDEX,
TX_POWER_INDEX,
TX_RSSI_INDEX,
TX_QUALITY_INDEX,
TX_SNR_INDEX,
BATT_VOLTAGE_INDEX,
BATT_CURRENT_INDEX,
BATT_CAPACITY_INDEX,
GPS_LATITUDE_INDEX,
GPS_LONGITUDE_INDEX,
GPS_GROUND_SPEED_INDEX,
GPS_HEADING_INDEX,
GPS_ALTITUDE_INDEX,
GPS_SATELLITES_INDEX,
ATTITUDE_PITCH_INDEX,
ATTITUDE_ROLL_INDEX,
ATTITUDE_YAW_INDEX,
FLIGHT_MODE_INDEX,
UNKNOWN_INDEX,
};
const CrossfireSensor crossfireSensors[] = {
{LINK_ID, 0, ZSTR_RX_RSSI1, UNIT_DB, 0},
{LINK_ID, 1, ZSTR_RX_RSSI2, UNIT_DB, 0},
+36
View File
@@ -37,6 +37,42 @@
#define DEVICE_INFO_ID 0x29
#define REQUEST_SETTINGS_ID 0x2A
struct CrossfireSensor {
const uint8_t id;
const uint8_t subId;
const char * name;
const TelemetryUnit unit;
const uint8_t precision;
};
enum CrossfireSensorIndexes {
RX_RSSI1_INDEX,
RX_RSSI2_INDEX,
RX_QUALITY_INDEX,
RX_SNR_INDEX,
RX_ANTENNA_INDEX,
RF_MODE_INDEX,
TX_POWER_INDEX,
TX_RSSI_INDEX,
TX_QUALITY_INDEX,
TX_SNR_INDEX,
BATT_VOLTAGE_INDEX,
BATT_CURRENT_INDEX,
BATT_CAPACITY_INDEX,
GPS_LATITUDE_INDEX,
GPS_LONGITUDE_INDEX,
GPS_GROUND_SPEED_INDEX,
GPS_HEADING_INDEX,
GPS_ALTITUDE_INDEX,
GPS_SATELLITES_INDEX,
ATTITUDE_PITCH_INDEX,
ATTITUDE_ROLL_INDEX,
ATTITUDE_YAW_INDEX,
FLIGHT_MODE_INDEX,
UNKNOWN_INDEX,
};
void processCrossfireTelemetryData(uint8_t data);
void crossfireSetDefault(int index, uint8_t id, uint8_t subId);
bool isCrossfireOutputBufferAvailable();
+45
View File
@@ -23,6 +23,51 @@
TelemetryItem telemetryItems[MAX_TELEMETRY_SENSORS];
uint8_t allowNewSensors;
bool isFaiForbidden(source_t idx)
{
if (idx < MIXSRC_FIRST_TELEM) {
return false;
}
TelemetrySensor * sensor = &g_model.telemetrySensors[(idx-MIXSRC_FIRST_TELEM)/3];
switch (telemetryProtocol) {
case PROTOCOL_FRSKY_SPORT:
if (sensor->id == RSSI_ID) {
return false;
}
else if (sensor->id == BATT_ID) {
return false;
}
break;
case PROTOCOL_FRSKY_D:
if (sensor->id == D_RSSI_ID) {
return false;
}
else if (sensor->id == D_A1_ID) {
return false;
}
break;
#if defined(CROSSFIRE)
case PROTOCOL_PULSES_CROSSFIRE:
if (sensor->id == RX_RSSI1_INDEX) {
return false;
}
else if (sensor->id == RX_RSSI2_INDEX) {
return false;
}
else if (sensor->id == BATT_VOLTAGE_INDEX) {
return false;
}
break;
#endif
}
return true;
}
// TODO in maths
uint32_t getDistFromEarthAxis(int32_t latitude)
{
+1
View File
@@ -136,5 +136,6 @@ class TelemetryItem
extern TelemetryItem telemetryItems[MAX_TELEMETRY_SENSORS];
extern uint8_t allowNewSensors;
bool isFaiForbidden(source_t idx);
#endif // _TELEMETRY_SENSORS_H_