[SPORT] Alarm added when a servo is in overload or a sensor is disconnected
This commit is contained in:
@@ -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
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user