Added RX options (PWM/PPM, iBUS/SBUS)

This commit is contained in:
Raphael Coeffic
2021-09-19 16:17:47 +02:00
parent 7e3b06bffd
commit e0a8b3d8c3
7 changed files with 71 additions and 12 deletions
+2
View File
@@ -485,6 +485,8 @@ PACK(struct ModuleData {
uint8_t telemetry:1;
uint16_t failsafeTimeout;
uint8_t rx_freq[2];
uint8_t mode:2;
uint8_t reserved:6;
uint16_t rxFreq()
{
return (uint16_t)rx_freq[0] | (((uint16_t)rx_freq[1]) << 8);
+44 -5
View File
@@ -856,12 +856,51 @@ class ModuleWindow : public FormGroup {
[](int v) { return v == FLYSKY_SUBTYPE_AFHDS2A; });
}
#endif
// RX options:
grid.nextLine();
new StaticText(this, grid.getLabelSlot(true), STR_OPTIONS, 0,
COLOR_THEME_PRIMARY1);
// PPM / PWM
if (isModuleAFHDS2A(moduleIdx)) {
new Choice(
this, grid.getFieldSlot(2, 0), STR_FLYSKY_PULSE_PROTO, 0, 1,
[=]() { return g_model.moduleData[moduleIdx].flysky.mode >> 1; },
[=](int v) {
g_model.moduleData[moduleIdx].flysky.mode =
(g_model.moduleData[moduleIdx].flysky.mode & 1) |
((v & 1) << 1);
});
} else {
new Choice(
this, grid.getFieldSlot(2, 0), STR_FLYSKY_PULSE_PROTO, 0, 1,
[=]() { return g_model.moduleData[moduleIdx].afhds3.mode >> 1; },
[=](int v) {
g_model.moduleData[moduleIdx].afhds3.mode =
(g_model.moduleData[moduleIdx].afhds3.mode & 1) |
((v & 1) << 1);
});
}
// SBUS / iBUS
if (isModuleAFHDS2A(moduleIdx)) {
new Choice(
this, grid.getFieldSlot(2, 1), STR_FLYSKY_SERIAL_PROTO, 0, 1,
[=]() { return g_model.moduleData[moduleIdx].flysky.mode & 1; },
[=](int v) {
g_model.moduleData[moduleIdx].flysky.mode =
(g_model.moduleData[moduleIdx].flysky.mode & 2) | (v & 1);
});
} else {
new Choice(
this, grid.getFieldSlot(2, 1), STR_FLYSKY_SERIAL_PROTO, 0, 1,
[=]() { return g_model.moduleData[moduleIdx].afhds3.mode & 1; },
[=](int v) {
g_model.moduleData[moduleIdx].afhds3.mode =
(g_model.moduleData[moduleIdx].afhds3.mode & 2) | (v & 1);
});
}
// TODO:
// - options (currently taken from 'subType'...):
// - PWM / PPM
// - SBUS / iBUS
#if defined(AFHDS3)
if (isModuleAFHDS3(moduleIdx)) {
+13 -6
View File
@@ -549,7 +549,7 @@ inline bool isSbus(uint8_t mode)
inline bool isPWM(uint8_t mode)
{
return mode < 2;
return !(mode & 2);
}
RUN_POWER PulsesData::getMaxRunPower() const
@@ -604,7 +604,9 @@ bool PulsesData::syncSettings()
putFrame(COMMAND::SEND_COMMAND, FRAME_TYPE::REQUEST_SET_EXPECT_DATA, data, sizeof(data));
return true;
}
PULSE_MODE modelPulseMode = isPWM(moduleData->subType) ? PULSE_MODE::PWM_MODE : PULSE_MODE::PPM_MODE;
PULSE_MODE modelPulseMode = isPWM(moduleData->afhds3.mode)
? PULSE_MODE::PWM_MODE
: PULSE_MODE::PPM_MODE;
if (modelPulseMode != cfg.config.pulseMode) {
cfg.config.pulseMode = modelPulseMode;
TRACE("AFHDS3 PWM/PPM %d", modelPulseMode);
@@ -613,7 +615,9 @@ bool PulsesData::syncSettings()
return true;
}
SERIAL_MODE modelSerialMode = isSbus(moduleData->subType) ? SERIAL_MODE::SBUS_MODE : SERIAL_MODE::IBUS;
SERIAL_MODE modelSerialMode = isSbus(moduleData->afhds3.mode)
? SERIAL_MODE::SBUS_MODE
: SERIAL_MODE::IBUS;
if (modelSerialMode != cfg.config.serialMode) {
cfg.config.serialMode = modelSerialMode;
TRACE("AFHDS3 IBUS/SBUS %d", modelSerialMode);
@@ -660,9 +664,12 @@ void PulsesData::setConfigFromModel()
cfg.config.emiStandard = EMI_STANDARD::FCC;
cfg.config.telemetry = moduleData->afhds3.telemetry; //always use bidirectional mode
cfg.config.pwmFreq = moduleData->afhds3.rxFreq();
cfg.config.serialMode = isSbus(moduleData->subType) ? SERIAL_MODE::SBUS_MODE : SERIAL_MODE::IBUS;
cfg.config.pulseMode = isPWM(moduleData->subType) ? PULSE_MODE::PWM_MODE : PULSE_MODE::PPM_MODE;
//use max channels - because channel count can not be changed after bind
cfg.config.serialMode = isSbus(moduleData->afhds3.mode)
? SERIAL_MODE::SBUS_MODE
: SERIAL_MODE::IBUS;
cfg.config.pulseMode = isPWM(moduleData->afhds3.mode) ? PULSE_MODE::PWM_MODE
: PULSE_MODE::PPM_MODE;
// use max channels - because channel count can not be changed after bind
cfg.config.channelCount = MAX_CHANNELS;
cfg.config.failSafeTimout = moduleData->afhds3.failsafeTimeout;
setFailSafe(cfg.config.failSafeMode);
+1 -1
View File
@@ -97,7 +97,7 @@ enum FlySkyModuleState_E {
STATE_SEND_CHANNELS = 19,
};
#define AfhdsPwmMode (gRomData.mode < 2 ? FLYSKY_PWM : FLYSKY_PPM)
#define AfhdsPwmMode (gRomData.mode & 2 ? FLYSKY_PPM : FLYSKY_PWM)
#define AfhdsIbusMode (gRomData.mode & 1 ? FLYSKY_SBUS : FLYSKY_IBUS)
struct rf_info_t {
+2
View File
@@ -75,6 +75,8 @@ ISTR(R9M_PXX2_RF_PROTOCOLS);
ISTR(DSM_PROTOCOLS);
ISTR(AFHDS3_PROTOCOLS);
ISTR(AFHDS3_POWERS);
ISTR(FLYSKY_PULSE_PROTO);
ISTR(FLYSKY_SERIAL_PROTO);
ISTR(CURVE_TYPES);
ISTR(VSENSORTYPES);
ISTR(VFORMULAS);
+3
View File
@@ -187,6 +187,9 @@ extern const char STR_AFHDS3_RX_FREQ[];
extern const char STR_AFHDS3_ACTUAL_POWER[];
extern const char STR_AFHDS3_POWER_SOURCE[];
extern const char STR_FLYSKY_PULSE_PROTO[];
extern const char STR_FLYSKY_SERIAL_PROTO[];
extern const char STR_CURVE_TYPES[];
extern const char STR_VSENSORTYPES[];
extern const char STR_VFORMULAS[];
+6
View File
@@ -176,6 +176,12 @@
#define LEN_AFHDS3_POWERS "\006"
#define TR_AFHDS3_POWERS "25 mW\0""100 mW""500 mW""1 W\0 ""2 W\0 "
#define LEN_FLYSKY_PULSE_PROTO "\x003"
#define TR_FLYSKY_PULSE_PROTO "PWM""PPM"
#define LEN_FLYSKY_SERIAL_PROTO "\x004"
#define TR_FLYSKY_SERIAL_PROTO "iBUS""SBUS"
#define LEN_PPM_POL "\001"
#define TR_PPM_POL "-""+"