[SPORT] Alarm added when a servo is in overload or a sensor is disconnected

This commit is contained in:
Bertrand Songis
2016-03-10 20:22:26 +01:00
parent 75e613331b
commit 0341b9ffce
26 changed files with 226 additions and 306 deletions
+7 -2
View File
@@ -2,7 +2,7 @@
* Copyright (C) OpenTX
*
* Based on code named
* th9x - http://code.google.com/p/th9x
* th9x - http://code.google.com/p/th9x
* er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x
*
@@ -316,7 +316,7 @@ void telemetryWakeup()
}
#endif
#if !defined(CPUARM) && !defined(PCBFLAMENCO)
#if !defined(CPUARM)
if (IS_FRSKY_D_PROTOCOL()) {
// Attempt to transmit any waiting Fr-Sky alarm set packets every 50ms (subject to packet buffer availability)
static uint8_t frskyTxDelay = 5;
@@ -358,10 +358,12 @@ void telemetryWakeup()
SCHEDULE_NEXT_ALARMS_CHECK(1/*second*/);
uint8_t now = TelemetryItem::now();
bool sensor_lost = false;
for (int i=0; i<MAX_SENSORS; i++) {
if (isTelemetryFieldAvailable(i)) {
uint8_t lastReceived = telemetryItems[i].lastReceived;
if (lastReceived < TELEMETRY_VALUE_TIMER_CYCLE && uint8_t(now - lastReceived) > TELEMETRY_VALUE_OLD_THRESHOLD) {
sensor_lost = true;
telemetryItems[i].lastReceived = TELEMETRY_VALUE_OLD;
TelemetrySensor * sensor = & g_model.telemetrySensors[i];
if (sensor->unit == UNIT_DATETIME) {
@@ -371,6 +373,9 @@ void telemetryWakeup()
}
}
}
if (sensor_lost && TELEMETRY_STREAMING()) {
audioEvent(AU_SENSOR_LOST);
}
#if defined(PCBTARANIS)
if ((g_model.moduleData[INTERNAL_MODULE].rfProtocol != RF_PROTO_OFF || g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_XJT) && FRSKY_BAD_ANTENNA()) {
+12 -12
View File
@@ -131,14 +131,14 @@
#define A4_LAST_ID 0x091f
#define AIR_SPEED_FIRST_ID 0x0a00
#define AIR_SPEED_LAST_ID 0x0a0f
#define POWERBOX_BATT1_FIRST_ID 0x0b00
#define POWERBOX_BATT1_LAST_ID 0x0b0f
#define POWERBOX_BATT2_FIRST_ID 0x0b10
#define POWERBOX_BATT2_LAST_ID 0x0b1f
#define POWERBOX_STATE_FIRST_ID 0x0b20
#define POWERBOX_STATE_LAST_ID 0x0b2f
#define POWERBOX_CNSP_FIRST_ID 0x0b30
#define POWERBOX_CNSP_LAST_ID 0x0b3f
#define RBOX_BATT1_FIRST_ID 0x0b00
#define RBOX_BATT1_LAST_ID 0x0b0f
#define RBOX_BATT2_FIRST_ID 0x0b10
#define RBOX_BATT2_LAST_ID 0x0b1f
#define RBOX_STATE_FIRST_ID 0x0b20
#define RBOX_STATE_LAST_ID 0x0b2f
#define RBOX_CNSP_FIRST_ID 0x0b30
#define RBOX_CNSP_LAST_ID 0x0b3f
#define DIY_FIRST_ID 0x5000
#define DIY_LAST_ID 0x50ff
#define RSSI_ID 0xf101
@@ -503,7 +503,7 @@ typedef enum {
// FrSky D Protocol
void processHubPacket(uint8_t id, int16_t value);
void frskyDSendNextAlarm(void);
void frskyDSendNextAlarm();
void frskyDProcessPacket(uint8_t *packet);
// FrSky S.PORT Protocol
@@ -511,7 +511,7 @@ void processSportPacket(uint8_t *packet);
#if defined(PCBTARANIS)
void sportFirmwareUpdate(ModuleIndex module, const char *filename);
#endif
void telemetryWakeup(void);
void telemetryWakeup();
void telemetryReset();
#if defined(CPUARM)
@@ -521,7 +521,7 @@ void telemetryInit(uint8_t protocol);
void telemetryInit(void);
#endif
void telemetryInterrupt10ms(void);
void telemetryInterrupt10ms();
#if defined(CPUARM)
typedef uint16_t frskyCellVoltage_t;
@@ -532,7 +532,7 @@ void telemetryInterrupt10ms(void);
#if defined(CPUARM) || defined(FRSKY_HUB)
void frskySetCellsCount(uint8_t cellscount);
void frskySetCellVoltage(uint8_t battnumber, frskyCellVoltage_t cellVolts);
void frskyUpdateCells(void);
void frskyUpdateCells();
#endif
void processSerialData(uint8_t data);
+32 -33
View File
@@ -2,7 +2,7 @@
* Copyright (C) OpenTX
*
* Based on code named
* th9x - http://code.google.com/p/th9x
* th9x - http://code.google.com/p/th9x
* er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x
*
@@ -18,7 +18,7 @@
* GNU General Public License for more details.
*/
#include "../opentx.h"
#include "opentx.h"
#define PRIM_REQ_POWERUP (0)
#define PRIM_REQ_VERSION (1)
@@ -47,7 +47,7 @@ const FrSkySportSensor sportSensors[] = {
{ ADC1_ID, ADC1_ID, 0, ZSTR_A1, UNIT_VOLTS, 1 },
{ ADC2_ID, ADC2_ID, 0, ZSTR_A2, UNIT_VOLTS, 1 },
{ A3_FIRST_ID, A3_LAST_ID, 0, ZSTR_A3, UNIT_VOLTS, 2 },
{ A4_FIRST_ID, A4_LAST_ID, 0, ZSTR_A4, UNIT_VOLTS, 2 },
{ A4_FIRST_ID, A4_LAST_ID, 0, ZSTR_A4, UNIT_VOLTS, 2 },
{ BATT_ID, BATT_ID, 0, ZSTR_BATT, UNIT_VOLTS, 1 },
{ T1_FIRST_ID, T1_LAST_ID, 0, ZSTR_TEMP1, UNIT_CELSIUS, 0 },
{ T2_FIRST_ID, T2_LAST_ID, 0, ZSTR_TEMP2, UNIT_CELSIUS, 0 },
@@ -68,20 +68,14 @@ const FrSkySportSensor sportSensors[] = {
{ GPS_LONG_LATI_FIRST_ID, GPS_LONG_LATI_LAST_ID, 0, ZSTR_GPS, UNIT_GPS, 0 },
{ FUEL_QTY_FIRST_ID, FUEL_QTY_LAST_ID, 0, ZSTR_FUEL, UNIT_MILLILITERS, 2 },
{ GPS_COURS_FIRST_ID, GPS_COURS_LAST_ID, 0, ZSTR_HDG, UNIT_DEGREE, 2 },
{ POWERBOX_BATT1_FIRST_ID, POWERBOX_BATT1_LAST_ID, 0, ZSTR_BATT1_VOLTAGE, UNIT_VOLTS, 3 },
{ POWERBOX_BATT2_FIRST_ID, POWERBOX_BATT2_LAST_ID, 0, ZSTR_BATT2_VOLTAGE, UNIT_VOLTS, 3 },
{ POWERBOX_BATT1_FIRST_ID, POWERBOX_BATT1_LAST_ID, 1, ZSTR_BATT1_CURRENT, UNIT_AMPS, 2 },
{ POWERBOX_BATT2_FIRST_ID, POWERBOX_BATT2_LAST_ID, 1, ZSTR_BATT2_CURRENT, UNIT_AMPS, 2 },
{ POWERBOX_CNSP_FIRST_ID, POWERBOX_CNSP_LAST_ID, 0, ZSTR_BATT1_CONSUMPTION, UNIT_MAH, 0 },
{ POWERBOX_CNSP_FIRST_ID, POWERBOX_CNSP_LAST_ID, 1, ZSTR_BATT2_CONSUMPTION, UNIT_MAH, 0 },
{ POWERBOX_STATE_FIRST_ID, POWERBOX_STATE_LAST_ID, 0, ZSTR_RX1_FAILSAFE, UNIT_RAW, 0 },
{ POWERBOX_STATE_FIRST_ID, POWERBOX_STATE_LAST_ID, 1, ZSTR_RX1_LOSTFRAME, UNIT_RAW, 0 },
{ POWERBOX_STATE_FIRST_ID, POWERBOX_STATE_LAST_ID, 2, ZSTR_RX2_FAILSAFE, UNIT_RAW, 0 },
{ POWERBOX_STATE_FIRST_ID, POWERBOX_STATE_LAST_ID, 3, ZSTR_RX2_LOSTFRAME, UNIT_RAW, 0 },
{ POWERBOX_STATE_FIRST_ID, POWERBOX_STATE_LAST_ID, 4, ZSTR_RX1_CONN_LOST, UNIT_RAW, 0 },
{ POWERBOX_STATE_FIRST_ID, POWERBOX_STATE_LAST_ID, 5, ZSTR_RX2_CONN_LOST, UNIT_RAW, 0 },
{ POWERBOX_STATE_FIRST_ID, POWERBOX_STATE_LAST_ID, 6, ZSTR_RX1_NO_SIGNAL, UNIT_RAW, 0 },
{ POWERBOX_STATE_FIRST_ID, POWERBOX_STATE_LAST_ID, 7, ZSTR_RX2_NO_SIGNAL, UNIT_RAW, 0 },
{ RBOX_BATT1_FIRST_ID, RBOX_BATT1_LAST_ID, 0, ZSTR_BATT1_VOLTAGE, UNIT_VOLTS, 3 },
{ RBOX_BATT2_FIRST_ID, RBOX_BATT2_LAST_ID, 0, ZSTR_BATT2_VOLTAGE, UNIT_VOLTS, 3 },
{ RBOX_BATT1_FIRST_ID, RBOX_BATT1_LAST_ID, 1, ZSTR_BATT1_CURRENT, UNIT_AMPS, 2 },
{ RBOX_BATT2_FIRST_ID, RBOX_BATT2_LAST_ID, 1, ZSTR_BATT2_CURRENT, UNIT_AMPS, 2 },
{ RBOX_CNSP_FIRST_ID, RBOX_CNSP_LAST_ID, 0, ZSTR_BATT1_CONSUMPTION, UNIT_MAH, 0 },
{ RBOX_CNSP_FIRST_ID, RBOX_CNSP_LAST_ID, 1, ZSTR_BATT2_CONSUMPTION, UNIT_MAH, 0 },
{ RBOX_STATE_FIRST_ID, RBOX_STATE_LAST_ID, 0, ZSTR_CHANS_STATE, UNIT_RAW, 0 },
{ RBOX_STATE_FIRST_ID, RBOX_STATE_LAST_ID, 1, ZSTR_RB_STATE, UNIT_RAW, 0 },
{ 0, 0, 0, NULL, UNIT_RAW, 0 } // sentinel
};
@@ -129,6 +123,8 @@ enum SportUpdateState {
uint8_t sportUpdateState = SPORT_IDLE;
uint32_t sportUpdateAddr = 0;
bool intPwr, extPwr;
uint16_t servosState;
uint16_t rboxState;
void processSportUpdatePacket(uint8_t *packet)
{
@@ -161,7 +157,7 @@ void processSportUpdatePacket(uint8_t *packet)
case PRIM_END_DOWNLOAD :
sportUpdateState = SPORT_COMPLETE ;
break;
case PRIM_DATA_CRC_ERR :
sportUpdateState = SPORT_FAIL ;
break;
@@ -218,7 +214,10 @@ void processSportPacket(uint8_t * packet)
if (id == RSSI_ID) {
frskyStreaming = FRSKY_TIMEOUT10ms; // reset counter only if valid frsky packets are being detected
data = SPORT_DATA_U8(packet);
frskyData.rssi.set(data);
if (data == 0)
frskyData.rssi.reset();
else
frskyData.rssi.set(data);
}
#if defined(PCBTARANIS) && defined(REVPLUS)
else if (id == XJT_VERSION_ID) {
@@ -251,23 +250,23 @@ void processSportPacket(uint8_t * packet)
if (id == ADC1_ID || id == ADC2_ID || id == BATT_ID || id == SWR_ID) {
data = SPORT_DATA_U8(packet);
}
if (id >= POWERBOX_BATT1_FIRST_ID && id <= POWERBOX_BATT2_LAST_ID) {
if (id >= RBOX_BATT1_FIRST_ID && id <= RBOX_BATT2_LAST_ID) {
processSportPacket(id, 0, instance, data & 0xffff);
processSportPacket(id, 1, instance, data >> 16);
}
else if (id >= POWERBOX_CNSP_FIRST_ID && id <= POWERBOX_CNSP_LAST_ID) {
else if (id >= RBOX_CNSP_FIRST_ID && id <= RBOX_CNSP_LAST_ID) {
processSportPacket(id, 0, instance, data & 0xffff);
processSportPacket(id, 1, instance, data >> 16);
}
else if (id >= POWERBOX_STATE_FIRST_ID && id <= POWERBOX_STATE_LAST_ID) {
processSportPacket(id, 0, instance, bool(data & 0x0080000));
processSportPacket(id, 1, instance, bool(data & 0x0100000));
processSportPacket(id, 2, instance, bool(data & 0x0200000));
processSportPacket(id, 3, instance, bool(data & 0x0400000));
processSportPacket(id, 4, instance, bool(data & 0x0800000));
processSportPacket(id, 5, instance, bool(data & 0x1000000));
processSportPacket(id, 6, instance, bool(data & 0x2000000));
processSportPacket(id, 7, instance, bool(data & 0x4000000));
else if (id >= RBOX_STATE_FIRST_ID && id <= RBOX_STATE_LAST_ID) {
uint16_t newServosState = data & 0xffff;
if (servosState == 0 && newServosState != 0) {
audioEvent(AU_SERVO_KO);
}
servosState = newServosState;
rboxState = data >> 16;
processSportPacket(id, 0, instance, servosState);
processSportPacket(id, 1, instance, rboxState);
}
else if (id >= DIY_FIRST_ID && id <= DIY_LAST_ID) {
#if defined(LUA)
@@ -506,16 +505,16 @@ void sportFirmwareUpdate(ModuleIndex module, const char *filename)
result = sportUpdateUploadFile(filename);
if (result)
result = sportUpdateEnd();
if (result == false) {
POPUP_WARNING("Firmware Update Error");
}
#if defined(PCBTARANIS) || defined(PCBHORUS)
INTERNAL_MODULE_OFF();
EXTERNAL_MODULE_OFF();
#endif
sportWaitState(SPORT_IDLE, 1000);
#if defined(PCBTARANIS) || defined(PCBHORUS)