Receiver RESET added
This commit is contained in:
@@ -246,11 +246,14 @@ enum MenuModelSetupItems {
|
||||
#if defined(PXX2)
|
||||
const char * STR_BIND = "Bind";
|
||||
const char * STR_SHARE = "Share";
|
||||
const char * STR_UNBIND = "Unbind";
|
||||
const char * STR_ERASE = "Erase";
|
||||
|
||||
void removePXX2ReceiverIfEmpty(uint8_t moduleIdx, uint8_t receiverIdx)
|
||||
{
|
||||
if (is_memclear(g_model.moduleData[moduleIdx].pxx2.receiverName[receiverIdx], PXX2_LEN_RX_NAME)) {
|
||||
g_model.moduleData[moduleIdx].pxx2.receivers &= ~(1 << receiverIdx);
|
||||
storageDirty(EE_MODEL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -296,6 +299,13 @@ void onPXX2ReceiverMenu(const char * result)
|
||||
memclear(g_model.moduleData[moduleIdx].pxx2.receiverName[receiverIdx], PXX2_LEN_RX_NAME);
|
||||
storageDirty(EE_MODEL);
|
||||
}
|
||||
else if (result == STR_UNBIND || result == STR_ERASE) {
|
||||
memclear(&reusableBuffer.moduleSetup.pxx2, sizeof(reusableBuffer.moduleSetup.pxx2));
|
||||
reusableBuffer.moduleSetup.pxx2.resetReceiverIndex = receiverIdx;
|
||||
reusableBuffer.moduleSetup.pxx2.resetReceiverFlags = (result == STR_ERASE ? 0xFF : 0x01);
|
||||
moduleSettings[moduleIdx].mode = MODULE_MODE_RESET;
|
||||
s_editMode = 1;
|
||||
}
|
||||
else {
|
||||
removePXX2ReceiverIfEmpty(moduleIdx, receiverIdx);
|
||||
}
|
||||
@@ -1338,6 +1348,8 @@ void menuModelSetup(event_t event)
|
||||
POPUP_MENU_ADD_ITEM(STR_OPTIONS);
|
||||
POPUP_MENU_ADD_ITEM(STR_SHARE);
|
||||
POPUP_MENU_ADD_ITEM(STR_DELETE);
|
||||
POPUP_MENU_ADD_ITEM(STR_UNBIND);
|
||||
POPUP_MENU_ADD_ITEM(STR_RESET);
|
||||
POPUP_MENU_START(onPXX2ReceiverMenu);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1136,6 +1136,7 @@ union ReusableBuffer
|
||||
union {
|
||||
uint8_t registerStep;
|
||||
uint8_t bindStep;
|
||||
uint8_t resetStep;
|
||||
};
|
||||
uint32_t bindWaitTimeout;
|
||||
uint8_t registerPopupVerticalPosition;
|
||||
@@ -1149,7 +1150,9 @@ union ReusableBuffer
|
||||
union {
|
||||
uint8_t bindSelectedReceiverIndex;
|
||||
uint8_t shareReceiverIndex;
|
||||
uint8_t resetReceiverIndex;
|
||||
};
|
||||
uint8_t resetReceiverFlags;
|
||||
} pxx2;
|
||||
};
|
||||
} moduleSetup;
|
||||
|
||||
@@ -76,6 +76,7 @@ enum ModuleSettingsMode
|
||||
MODULE_MODE_BIND,
|
||||
MODULE_MODE_SHARE,
|
||||
MODULE_MODE_RANGECHECK,
|
||||
MODULE_MODE_RESET
|
||||
};
|
||||
|
||||
PACK(struct ModuleSettings {
|
||||
|
||||
@@ -245,6 +245,13 @@ void Pxx2Pulses::setupBindFrame(uint8_t module)
|
||||
}
|
||||
}
|
||||
|
||||
void Pxx2Pulses::setupResetFrame(uint8_t module)
|
||||
{
|
||||
addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_RESET);
|
||||
Pxx2Transport::addByte(reusableBuffer.moduleSetup.pxx2.resetReceiverIndex);
|
||||
Pxx2Transport::addByte(reusableBuffer.moduleSetup.pxx2.resetReceiverFlags);
|
||||
}
|
||||
|
||||
void Pxx2Pulses::setupSpectrumAnalyser(uint8_t module)
|
||||
{
|
||||
if (moduleSettings[module].counter > 1000) {
|
||||
@@ -261,7 +268,6 @@ void Pxx2Pulses::setupSpectrumAnalyser(uint8_t module)
|
||||
Pxx2Transport::addWord(reusableBuffer.spectrumAnalyser.step);
|
||||
}
|
||||
|
||||
|
||||
void Pxx2Pulses::setupPowerMeter(uint8_t module)
|
||||
{
|
||||
if (moduleSettings[module].counter > 1000) {
|
||||
@@ -303,6 +309,9 @@ void Pxx2Pulses::setupFrame(uint8_t module)
|
||||
case MODULE_MODE_BIND:
|
||||
setupBindFrame(module);
|
||||
break;
|
||||
case MODULE_MODE_RESET:
|
||||
setupRegisterFrame(module);
|
||||
break;
|
||||
case MODULE_MODE_SPECTRUM_ANALYSER:
|
||||
setupSpectrumAnalyser(module);
|
||||
break;
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#define PXX2_TYPE_ID_RX_SETTINGS 0x05
|
||||
#define PXX2_TYPE_ID_HW_INFO 0x06
|
||||
#define PXX2_TYPE_ID_SHARE 0x07
|
||||
#define PXX2_TYPE_ID_RESET 0x08
|
||||
#define PXX2_TYPE_ID_TELEMETRY 0xFE
|
||||
|
||||
#define PXX2_TYPE_C_POWER_METER 0x02
|
||||
@@ -126,6 +127,11 @@ enum PXX2BindSteps {
|
||||
BIND_OK
|
||||
};
|
||||
|
||||
enum PXX2ResetSteps {
|
||||
RESET_START,
|
||||
RESET_OK
|
||||
};
|
||||
|
||||
enum PXX2ReceiverStatus {
|
||||
PXX2_HARDWARE_INFO,
|
||||
PXX2_SETTINGS_READ,
|
||||
@@ -184,6 +190,8 @@ class Pxx2Pulses: public PxxPulses<Pxx2Transport> {
|
||||
|
||||
void setupBindFrame(uint8_t module);
|
||||
|
||||
void setupResetFrame(uint8_t module);
|
||||
|
||||
void setupShareMode(uint8_t module);
|
||||
|
||||
void setupModuleSettingsFrame(uint8_t module);
|
||||
|
||||
@@ -303,8 +303,8 @@ enum TelemetryProtocol
|
||||
};
|
||||
|
||||
struct TelemetryData {
|
||||
TelemetryValueWithMin swr; // TODO Min not needed
|
||||
TelemetryValueWithMin rssi; // TODO Min not needed
|
||||
TelemetryValue swr;
|
||||
FilteredTelemetryValue rssi;
|
||||
uint16_t xjtVersion;
|
||||
bool varioHighPrecision;
|
||||
};
|
||||
|
||||
@@ -122,7 +122,8 @@ void processRegisterFrame(uint8_t module, uint8_t * frame)
|
||||
reusableBuffer.moduleSetup.pxx2.registerStep = REGISTER_OK;
|
||||
moduleSettings[module].mode = MODULE_MODE_NORMAL;
|
||||
POPUP_INFORMATION(STR_REG_OK);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
TRACE("KO %s %s", &frame[4], reusableBuffer.moduleSetup.pxx2.registerRxName);
|
||||
}
|
||||
}
|
||||
@@ -165,6 +166,19 @@ void processBindFrame(uint8_t module, uint8_t * frame)
|
||||
}
|
||||
}
|
||||
|
||||
void processResetFrame(uint8_t module, uint8_t * frame)
|
||||
{
|
||||
if (moduleSettings[module].mode != MODULE_MODE_RESET) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (reusableBuffer.moduleSetup.pxx2.resetReceiverIndex == frame[3]) {
|
||||
memclear(g_model.moduleData[module].pxx2.receiverName[reusableBuffer.moduleSetup.pxx2.resetReceiverIndex], PXX2_LEN_RX_NAME);
|
||||
}
|
||||
|
||||
moduleSettings[module].mode = MODULE_MODE_NORMAL;
|
||||
}
|
||||
|
||||
void processTelemetryFrame(uint8_t module, uint8_t * frame)
|
||||
{
|
||||
uint8_t origin = (module << 2) + (frame[3] & 0x03);
|
||||
@@ -232,6 +246,10 @@ void processModuleFrame(uint8_t module, uint8_t *frame)
|
||||
case PXX2_TYPE_ID_TELEMETRY:
|
||||
processTelemetryFrame(module, frame);
|
||||
break;
|
||||
|
||||
case PXX2_TYPE_ID_RESET:
|
||||
processResetFrame(module, frame);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -162,13 +162,15 @@ void sportProcessTelemetryPacketWithoutCrc(uint8_t origin, const uint8_t * packe
|
||||
if (dataId == RSSI_ID) {
|
||||
telemetryStreaming = TELEMETRY_TIMEOUT10ms; // reset counter only if valid packets are being detected
|
||||
data = SPORT_DATA_U8(packet);
|
||||
if(g_model.frsky.rssiSource) {
|
||||
if (g_model.frsky.rssiSource) {
|
||||
TelemetrySensor * sensor = & g_model.telemetrySensors[g_model.frsky.rssiSource];
|
||||
if(sensor->instance == instance)
|
||||
if (sensor->instance == instance) {
|
||||
telemetryData.rssi.set(data);
|
||||
}
|
||||
}
|
||||
else
|
||||
else {
|
||||
telemetryData.rssi.set(data);
|
||||
}
|
||||
}
|
||||
else if (dataId == R9_PWR_ID) {
|
||||
uint32_t r9pwr[] = {100, 200, 500, 1000};
|
||||
|
||||
@@ -20,12 +20,12 @@
|
||||
|
||||
#include "opentx.h"
|
||||
|
||||
void TelemetryValueWithMin::reset()
|
||||
void FilteredTelemetryValue::reset()
|
||||
{
|
||||
memclear(this, sizeof(*this));
|
||||
}
|
||||
|
||||
void TelemetryValueWithMin::set(uint8_t value)
|
||||
void FilteredTelemetryValue::set(uint8_t value)
|
||||
{
|
||||
if (this->value == 0) {
|
||||
memset(values, value, TELEMETRY_AVERAGE_COUNT);
|
||||
@@ -44,19 +44,17 @@ void TelemetryValueWithMin::set(uint8_t value)
|
||||
sum += value;
|
||||
this->value = sum/(TELEMETRY_AVERAGE_COUNT+1);
|
||||
}
|
||||
}
|
||||
|
||||
void TelemetryValueWithMin::reset()
|
||||
{
|
||||
memclear(this, sizeof(*this));
|
||||
}
|
||||
|
||||
void TelemetryValueWithMin::set(uint8_t value)
|
||||
{
|
||||
FilteredTelemetryValue::set(value);
|
||||
if (!min || value < min) {
|
||||
min = value;
|
||||
}
|
||||
}
|
||||
|
||||
void TelemetryValueWithMinMax::set(uint8_t value, uint8_t unit)
|
||||
{
|
||||
TelemetryValueWithMin::set(value);
|
||||
if (unit != UNIT_VOLTS) {
|
||||
this->value = value;
|
||||
}
|
||||
if (!max || value > max) {
|
||||
max = value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,19 +25,34 @@
|
||||
|
||||
#define TELEMETRY_AVERAGE_COUNT 3 // we actually average one more reading!
|
||||
#define RAW_FRSKY_MINMAX(v) v.values[TELEMETRY_AVERAGE_COUNT-1]
|
||||
class TelemetryValueWithMin {
|
||||
|
||||
class TelemetryValue {
|
||||
public:
|
||||
uint8_t value; // fitered value (average of last TELEMETRY_AVERAGE_COUNT+1 values)
|
||||
uint8_t min;
|
||||
uint8_t value;
|
||||
void set(uint8_t value)
|
||||
{
|
||||
this->value = value;
|
||||
}
|
||||
|
||||
void reset()
|
||||
{
|
||||
this->value = 0;
|
||||
};
|
||||
};
|
||||
|
||||
class FilteredTelemetryValue: public TelemetryValue {
|
||||
public:
|
||||
uint8_t value; // filtered value (average of last TELEMETRY_AVERAGE_COUNT+1 values)
|
||||
uint8_t values[TELEMETRY_AVERAGE_COUNT];
|
||||
void set(uint8_t value);
|
||||
void reset();
|
||||
};
|
||||
|
||||
class TelemetryValueWithMinMax: public TelemetryValueWithMin {
|
||||
class TelemetryValueWithMin: public FilteredTelemetryValue {
|
||||
public:
|
||||
uint8_t max;
|
||||
void set(uint8_t value, uint8_t unit);
|
||||
uint8_t min;
|
||||
void set(uint8_t value);
|
||||
void reset();
|
||||
};
|
||||
|
||||
#endif // _TELEMETRY_HOLDERS_H_
|
||||
|
||||
Reference in New Issue
Block a user