X7 POC for R9 region sensing

This commit is contained in:
3djc
2018-12-12 13:27:11 +01:00
parent edc3d7372e
commit 22c1d5895a
18 changed files with 48 additions and 19 deletions
+18 -17
View File
@@ -97,6 +97,7 @@ enum MenuModelSetupItems {
ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND,
#endif
ITEM_MODEL_EXTERNAL_MODULE_POWER,
ITEM_MODEL_EXTERNAL_MODULE_FREQ,
#if defined(PCBSKY9X) && !defined(REVA)
ITEM_MODEL_EXTRA_MODULE_LABEL,
ITEM_MODEL_EXTRA_MODULE_CHANNELS,
@@ -170,7 +171,7 @@ enum MenuModelSetupItems {
#if defined(PCBSKY9X) && !defined(REVA)
#define EXTRA_MODULE_ROWS LABEL(ExtraModule), 1, 2,
#else
#define EXTRA_MODULE_ROWS
#define EXTRA_MODULE_ROWS isR9MMFlex(EXTERNAL_MODULE) ? (uint8_t)1: (uint8_t)HIDDEN_ROW
#endif
#if defined(PCBX7)
@@ -273,7 +274,7 @@ void menuModelSetup(event_t event)
EXTERNAL_MODULE_OPTION_ROW,
MULTIMODULE_MODULE_ROWS
EXTERNAL_MODULE_POWER_ROW,
EXTRA_MODULE_ROWS
EXTRA_MODULE_ROWS,
FAILSAFE_ROWS(EXTERNAL_MODULE),
TRAINER_ROWS });
#else
@@ -728,7 +729,7 @@ void menuModelSetup(event_t event)
else if (isModuleDSM2(EXTERNAL_MODULE))
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
else if (isR9ModuleRunning(EXTERNAL_MODULE))
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0));
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].subType & 0x03, (menuHorizontalPosition==1 ? attr : 0));
#if defined(MULTIMODULE)
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
int multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
@@ -755,16 +756,6 @@ void menuModelSetup(event_t event)
case 1:
if (isModuleDSM2(EXTERNAL_MODULE))
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
else if (isModuleR9M(EXTERNAL_MODULE)) {
uint8_t newR9MType = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].subType, MODULE_SUBTYPE_R9M_FCC, MODULE_SUBTYPE_R9M_LAST, EE_MODEL, isR9MModeAvailable);
if (newR9MType != g_model.moduleData[EXTERNAL_MODULE].subType && newR9MType > MODULE_SUBTYPE_R9M_EU) {
POPUP_WARNING(STR_R9MFLEXWARN1);
const char * w = STR_R9MFLEXWARN2;
SET_WARNING_INFO(w, strlen(w), 0);
}
g_model.moduleData[EXTERNAL_MODULE].subType = newR9MType;
}
#if defined(MULTIMODULE)
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
@@ -1191,10 +1182,7 @@ void menuModelSetup(event_t event)
}
}
#endif
if (isModuleR9M(moduleIdx)) {
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, TR_R9MFLEX_FREQ, BF_GET(g_model.moduleData[EXTERNAL_MODULE].subType, 0, 1), attr);
}
else if (isModuleSBUS(moduleIdx)) {
if (isModuleSBUS(moduleIdx)) {
lcdDrawTextAlignedLeft(y, STR_WARN_BATTVOLTAGE);
putsVolts(lcdLastRightPos, y, getBatteryVoltage(), attr | PREC2 | LEFT);
}
@@ -1241,6 +1229,19 @@ void menuModelSetup(event_t event)
}
break;
case ITEM_MODEL_EXTERNAL_MODULE_FREQ:
{
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
uint8_t frequency = BF_GET(g_model.moduleData[moduleIdx].subType, 2, 1);
lcdDrawTextAlignedLeft(y, STR_FREQUENCY);
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9MFLEX_FREQ, frequency, LEFT | attr);
if (attr)
{
CHECK_INCDEC_MODELVAR_ZERO(event, frequency, 1);
BF_SET(g_model.moduleData[moduleIdx].subType, frequency, 2, 1);
}
}
#if defined(MULTIMODULE)
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2)
+1
View File
@@ -55,6 +55,7 @@ bool isSwitchAvailableInMixes(int swtch);
bool isSwitchAvailableInTimers(int swtch);
bool isR9MModeAvailable(int mode);
bool isR9ModuleRunning(int module);
bool isR9MMFlex(int module);
bool isModuleAvailable(int module);
bool isRfProtocolAvailable(int protocol);
bool isTelemetryProtocolAvailable(int protocol);
+12 -1
View File
@@ -490,7 +490,7 @@ bool isR9ModuleRunning(int module)
{
#if defined(SIMU)
return g_model.moduleData[module].type == MODULE_TYPE_R9M && TELEMETRY_STREAMING(); // Simu uses telemetry simu to activate/desactivate R9
#else
#else
return g_model.moduleData[module].type == MODULE_TYPE_R9M && R9ModuleStreaming;
#endif
}
@@ -500,6 +500,11 @@ bool isR9MModeAvailable(int mode)
return mode <= MODULE_SUBTYPE_R9M_EUPLUS;
}
bool isR9MMFlex(int module)
{
return g_model.moduleData[module].subType >= MODULE_SUBTYPE_R9M_EUPLUS;
}
bool isModuleAvailable(int module)
{
#if defined(CROSSFIRE)
@@ -521,10 +526,14 @@ bool isModuleAvailable(int module)
return false;
}
#endif
#if !defined(PCBSKY9X)
if (module == MODULE_TYPE_R9M && g_model.moduleData[INTERNAL_MODULE].type != MODULE_TYPE_NONE) {
return false;
}
#endif
return true;
}
bool isRfProtocolAvailable(int protocol)
@@ -539,9 +548,11 @@ bool isRfProtocolAvailable(int protocol)
return false;
}
#endif
#if defined(pxx)
if (protocol != RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_R9M) {
return false;
}
#endif
return true;
}
+2
View File
@@ -166,6 +166,8 @@ void setCustomFailsafe(uint8_t moduleIndex);
#define LEN_R9M_LBT_POWER_VALUES "\015"
#define TR_R9M_FCC_POWER_VALUES "(100 mW)"
#define TR_R9M_LBT_POWER_VALUES "25 mW 8ch\0 ""25 mW 16ch\0 ""100mW no tele"
#define LEN_R9MFLEX_FREQ "\006"
#define TR_R9MFLEX_FREQ "868Mhz""915Mhz"
enum R9MFCCPowerValues {
R9M_FCC_POWER_100 = 0,
+1 -1
View File
@@ -62,7 +62,7 @@ void processFrskyPXX2Data(uint8_t data)
R9ModuleStreaming = TELEMETRY_TIMEOUT10ms; // reset counter only if valid packets are being detected
uint8_t R9Region = (telemetryRxBuffer[3] & 0x30) >> 4;
if (R9Region != 0x04) {
BF_SET(g_model.moduleData[EXTERNAL_MODULE].subType, R9Region, 1, 2); // heading bit holds flex frequency
BF_SET(g_model.moduleData[EXTERNAL_MODULE].subType, R9Region, 0, 2); // heading bit holds flex frequency
}
if (telemetryRxBuffer[2] & 0x80) {
createFrSkyPXX2Sensor(RSSI_ID, telemetryRxBuffer[2] & 0x7f);
+2
View File
@@ -92,6 +92,7 @@ const char STR_OPEN9X[] =
ISTR(VTRAINERMODES)
ISTR(TARANIS_PROTOCOLS)
ISTR(R9M_REGION)
ISTR(R9MFLEX_FREQ)
ISTR(R9M_FCC_POWER_VALUES)
ISTR(R9M_LBT_POWER_VALUES)
ISTR(TELEMETRY_PROTOCOLS)
@@ -144,6 +145,7 @@ const char STR_PPMFRAME[] = TR_PPMFRAME;
const char STR_REFRESHRATE[] = TR_REFRESHRATE;
const char SSTR_WARN_BATTVOLTAGE[] = STR_WARN_BATTVOLTAGE;
const char STR_MS[] = TR_MS;
const char STR_FREQUENCY[] = TR_FREQUENCY;
const char STR_SWITCH[] = TR_SWITCH;
const char STR_TRIMS[] = TR_TRIMS;
const char STR_FADEIN[] = TR_FADEIN;
+1
View File
@@ -363,6 +363,7 @@ extern const char STR_PPMFRAME[];
extern const char STR_REFRESHRATE[];
extern const char SSTR_WARN_BATTVOLTAGE[];
extern const char STR_MS[];
extern const char STR_FREQUENCY[];
extern const char STR_SWITCH[];
extern const char STR_TRIMS[];
extern const char STR_FADEIN[];
+1
View File
@@ -563,6 +563,7 @@
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
#define TR_MS "ms"
#define TR_FREQUENCY INDENT "Frequency"
#define TR_SWITCH "Spínač"
#define TR_TRIMS "Trimy"
#define TR_FADEIN "Přechod Zap"
+1
View File
@@ -568,6 +568,7 @@
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
#define TR_MS "ms"
#define TR_FREQUENCY INDENT "Frequency"
#define TR_SWITCH TR("Schalt.", "Schalter")
#define TR_TRIMS "Trims"
#define TR_FADEIN "Langs. Ein"
+1
View File
@@ -566,6 +566,7 @@
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
#define TR_MS "ms"
#define TR_FREQUENCY INDENT "Frequency"
#define TR_SWITCH "Switch"
#define TR_TRIMS "Trims"
#define TR_FADEIN "Fade in"
+1
View File
@@ -571,6 +571,7 @@
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
#define TR_MS "ms"
#define TR_FREQUENCY INDENT "Frequency"
#define TR_SWITCH "Interr"
#define TR_TRIMS "Trims"
#define TR_FADEIN "Inicio"
+1
View File
@@ -563,6 +563,7 @@
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
#define TR_MS "ms"
#define TR_FREQUENCY INDENT "Frequency"
#define TR_SWITCH "Switch"
#define TR_TRIMS "Trims"
#define TR_FADEIN "Fade In"
+1
View File
@@ -580,6 +580,7 @@
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
#define TR_MS "ms"
#define TR_FREQUENCY INDENT "Frequency"
#define TR_SWITCH TR("Inter", "Interrupteur")
#define TR_TRIMS "Trims"
#define TR_FADEIN "Fondu ON"
+1
View File
@@ -569,6 +569,7 @@
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
#define TR_MS "ms"
#define TR_FREQUENCY INDENT "Frequency"
#define TR_SWITCH "Inter."
#define TR_TRIMS "Trims"
#define TR_FADEIN "Diss.In"
+1
View File
@@ -563,6 +563,7 @@
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
#define TR_MS "ms"
#define TR_FREQUENCY INDENT "Frequency"
#define TR_SWITCH TR("Schak.", "Schakelaar")
#define TR_TRIMS "Trims"
#define TR_FADEIN "Fade in"
+1
View File
@@ -570,6 +570,7 @@
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
#define TR_MS "ms"
#define TR_FREQUENCY INDENT "Frequency"
#define TR_SWITCH "Przełą"
#define TR_TRIMS "Trymy"
#define TR_FADEIN "Pojawia"
+1
View File
@@ -570,6 +570,7 @@
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
#define TR_MS "ms"
#define TR_FREQUENCY INDENT "Frequency"
#define TR_SWITCH "Chave"
#define TR_TRIMS "Trims"
#define TR_FADEIN "Aparecer"
+1
View File
@@ -582,6 +582,7 @@
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
#define TR_MS "ms"
#define TR_FREQUENCY INDENT "Frequency"
#define TR_SWITCH "Brytare"
#define TR_TRIMS "Trimmar"
#define TR_FADEIN "Tona In"