Merge with latest 2.3
This commit is contained in:
@@ -66,6 +66,7 @@ enum MenuModelSetupItems {
|
||||
ITEM_MODEL_SETUP_THROTTLE_REVERSED,
|
||||
ITEM_MODEL_SETUP_THROTTLE_TRACE,
|
||||
ITEM_MODEL_SETUP_THROTTLE_TRIM,
|
||||
ITEM_MODEL_SETUP_THROTTLE_TRIM_SWITCH,
|
||||
ITEM_MODEL_SETUP_PREFLIGHT_LABEL,
|
||||
ITEM_MODEL_SETUP_CHECKLIST_DISPLAY,
|
||||
ITEM_MODEL_SETUP_THROTTLE_WARNING,
|
||||
@@ -101,6 +102,11 @@ enum MenuModelSetupItems {
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_PROTOCOL,
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_STATUS,
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_SYNCSTATUS,
|
||||
#endif
|
||||
#if defined(AFHDS3)
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_AFHDS3_MODE,
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_AFHDS3_STATUS,
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_AFHDS3_POWER_STATUS,
|
||||
#endif
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_CHANNELS,
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE,
|
||||
@@ -110,6 +116,10 @@ enum MenuModelSetupItems {
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_AUTOBIND,
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_DISABLE_TELEM,
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_DISABLE_MAPPING,
|
||||
#endif
|
||||
#if defined(AFHDS3)
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_AFHDS3_RX_FREQ,
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_AFHDS3_ACTUAL_POWER,
|
||||
#endif
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_POWER,
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_FAILSAFE,
|
||||
@@ -247,7 +257,7 @@ void editTimerCountdown(int timerIdx, coord_t y, LcdFlags attr, event_t event)
|
||||
|
||||
inline uint8_t EXTERNAL_MODULE_TYPE_ROW()
|
||||
{
|
||||
if (isModuleXJT(EXTERNAL_MODULE) || isModuleR9MNonAccess(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE))
|
||||
if (isModuleXJT(EXTERNAL_MODULE) || isModuleR9MNonAccess(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleAFHDS3(EXTERNAL_MODULE))
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
@@ -304,6 +314,10 @@ void onBluetoothConnectMenu(const char * result)
|
||||
#if defined(PXX2)
|
||||
#include "common/stdlcd/model_setup_pxx2.cpp"
|
||||
#endif
|
||||
#if defined(AFHDS3)
|
||||
#include "common/stdlcd/model_setup_afhds3.cpp"
|
||||
#endif
|
||||
|
||||
|
||||
void menuModelSetup(event_t event)
|
||||
{
|
||||
@@ -331,6 +345,7 @@ void menuModelSetup(event_t event)
|
||||
0, // Thrxottle reverse
|
||||
0, // Throttle trace source
|
||||
0, // Throttle trim
|
||||
0, // Throttle trim switch
|
||||
|
||||
LABEL(PreflightCheck),
|
||||
0, // Checklist
|
||||
@@ -360,11 +375,13 @@ void menuModelSetup(event_t event)
|
||||
EXTERNAL_MODULE_TYPE_ROW(),
|
||||
MULTIMODULE_TYPE_ROW(EXTERNAL_MODULE)
|
||||
MULTIMODULE_STATUS_ROWS(EXTERNAL_MODULE)
|
||||
AFHDS3_MODE_ROWS(EXTERNAL_MODULE)
|
||||
MODULE_CHANNELS_ROWS(EXTERNAL_MODULE),
|
||||
IF_NOT_ACCESS_MODULE_RF(EXTERNAL_MODULE, MODULE_BIND_ROWS(EXTERNAL_MODULE)),
|
||||
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // RxNum for ACCESS
|
||||
IF_NOT_PXX2_MODULE(EXTERNAL_MODULE, MODULE_OPTION_ROW(EXTERNAL_MODULE)),
|
||||
MULTIMODULE_MODULE_ROWS(EXTERNAL_MODULE)
|
||||
AFHDS3_MODULE_ROWS(EXTERNAL_MODULE)
|
||||
MODULE_POWER_ROW(EXTERNAL_MODULE),
|
||||
FAILSAFE_ROWS(EXTERNAL_MODULE),
|
||||
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 1), // Range check and Register buttons
|
||||
@@ -556,6 +573,13 @@ void menuModelSetup(event_t event)
|
||||
g_model.thrTrim = editCheckBox(g_model.thrTrim, MODEL_SETUP_2ND_COLUMN, y, STR_TTRIM, attr, event);
|
||||
break;
|
||||
|
||||
case ITEM_MODEL_SETUP_THROTTLE_TRIM_SWITCH:
|
||||
lcdDrawTextAlignedLeft(y, STR_TTRIM_SW);
|
||||
if (attr)
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.thrTrimSw, NUM_TRIMS - 1);
|
||||
drawSource(MODEL_SETUP_2ND_COLUMN, y, g_model.getThrottleStickTrimSource(), attr);
|
||||
break;
|
||||
|
||||
case ITEM_MODEL_SETUP_PREFLIGHT_LABEL:
|
||||
lcdDrawTextAlignedLeft(y, STR_PREFLIGHT);
|
||||
break;
|
||||
@@ -810,6 +834,11 @@ void menuModelSetup(event_t event)
|
||||
lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
|
||||
else if (isModuleR9MNonAccess(EXTERNAL_MODULE))
|
||||
lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0));
|
||||
#if defined(AFHDS3)
|
||||
else if (isModuleAFHDS3(EXTERNAL_MODULE)) {
|
||||
lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_AFHDS3_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0));
|
||||
}
|
||||
#endif
|
||||
if (attr && menuHorizontalPosition == 0) {
|
||||
if (s_editMode > 0) {
|
||||
g_model.moduleData[EXTERNAL_MODULE].type = MODULE_TYPE_NONE;
|
||||
@@ -850,6 +879,11 @@ void menuModelSetup(event_t event)
|
||||
MODULE_SUBTYPE_R9M_FCC, MODULE_SUBTYPE_R9M_LAST, EE_MODEL,
|
||||
isR9MModeAvailable);
|
||||
}
|
||||
#if defined(AFHDS3)
|
||||
else if (isModuleAFHDS3(EXTERNAL_MODULE)) {
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, AFHDS_SUBTYPE_FIRST, AFHDS_SUBTYPE_LAST);
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
g_model.moduleData[EXTERNAL_MODULE].subType = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].subType,
|
||||
MODULE_SUBTYPE_PXX1_ACCST_D16, MODULE_SUBTYPE_PXX1_LAST, EE_MODEL,
|
||||
@@ -898,6 +932,7 @@ void menuModelSetup(event_t event)
|
||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_PROTOCOL:
|
||||
{
|
||||
lcdDrawTextAlignedLeft(y, TR_TYPE);
|
||||
|
||||
uint8_t multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol();
|
||||
lcdDrawMultiProtocolString(MODEL_SETUP_2ND_COLUMN, y, EXTERNAL_MODULE, multi_rfProto, menuHorizontalPosition == 0 ? attr : 0);
|
||||
if (MULTIMODULE_HAS_SUBTYPE(EXTERNAL_MODULE))
|
||||
@@ -946,7 +981,6 @@ void menuModelSetup(event_t event)
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case ITEM_MODEL_SETUP_TRAINER_LABEL:
|
||||
lcdDrawTextAlignedLeft(y, STR_TRAINER);
|
||||
break;
|
||||
@@ -955,7 +989,7 @@ void menuModelSetup(event_t event)
|
||||
lcdDrawTextAlignedLeft(y, INDENT TR_MODE);
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_VTRAINERMODES, g_model.trainerData.mode, attr);
|
||||
if (attr) {
|
||||
g_model.trainerData.mode = checkIncDec(event, g_model.trainerData.mode, 0, TRAINER_MODE_MAX, EE_MODEL, isTrainerModeAvailable);
|
||||
g_model.trainerData.mode = checkIncDec(event, g_model.trainerData.mode, 0, TRAINER_MODE_MAX(), EE_MODEL, isTrainerModeAvailable);
|
||||
#if defined(BLUETOOTH)
|
||||
if (checkIncDec_Ret) {
|
||||
bluetooth.state = BLUETOOTH_STATE_OFF;
|
||||
@@ -1135,15 +1169,12 @@ void menuModelSetup(event_t event)
|
||||
if (isModuleRxNumAvailable(moduleIdx)) {
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.header.modelId[moduleIdx], (l_posHorz == 0 ? attr : 0) | LEADING0 | LEFT, 2);
|
||||
bindButtonPos = lcdNextPos + FW;
|
||||
}
|
||||
else if (attr) {
|
||||
l_posHorz += 1;
|
||||
}
|
||||
if (isModuleBindRangeAvailable(moduleIdx)) {
|
||||
if (attr && l_posHorz == 0) {
|
||||
if (s_editMode > 0) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.header.modelId[moduleIdx], getMaxRxNum(moduleIdx));
|
||||
if (checkIncDec_Ret) {
|
||||
if (isModuleCrossfire(moduleIdx))
|
||||
moduleState[EXTERNAL_MODULE].counter = CRSF_FRAME_MODELID;
|
||||
modelHeaders[g_eeGeneral.currModel].modelId[moduleIdx] = g_model.header.modelId[moduleIdx];
|
||||
}
|
||||
else if (event == EVT_KEY_LONG(KEY_ENTER)) {
|
||||
@@ -1156,6 +1187,11 @@ void menuModelSetup(event_t event)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (attr) {
|
||||
l_posHorz += 1;
|
||||
}
|
||||
if (isModuleBindRangeAvailable(moduleIdx)) {
|
||||
lcdDrawText(bindButtonPos, y, STR_MODULE_BIND, l_posHorz == 1 ? attr : 0);
|
||||
if (isModuleRangeAvailable(moduleIdx)) {
|
||||
lcdDrawText(lcdNextPos + FW, y, STR_MODULE_RANGE, l_posHorz == 2 ? attr : 0);
|
||||
@@ -1170,8 +1206,14 @@ void menuModelSetup(event_t event)
|
||||
if (attr && l_posHorz > 0) {
|
||||
if (s_editMode > 0) {
|
||||
if (l_posHorz == 1) {
|
||||
if (isModuleR9MNonAccess(moduleIdx) || isModuleD16(moduleIdx)) {
|
||||
if (isModuleR9MNonAccess(moduleIdx) || isModuleD16(moduleIdx) || isModuleAFHDS3(moduleIdx)) {
|
||||
if (event == EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
#if defined(AFHDS3)
|
||||
if (isModuleAFHDS3(moduleIdx)) {
|
||||
startBindMenuAfhds3(moduleIdx);
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
startBindMenu(moduleIdx);
|
||||
continue;
|
||||
}
|
||||
@@ -1275,14 +1317,35 @@ void menuModelSetup(event_t event)
|
||||
}
|
||||
}
|
||||
|
||||
if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A)
|
||||
optionValue = 50 + 5 * optionValue;
|
||||
int8_t min, max;
|
||||
getMultiOptionValues(multi_proto, min, max);
|
||||
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr);
|
||||
if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A) {
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, 50 + 5 * optionValue, LEFT | attr);
|
||||
}
|
||||
else if (multi_proto == MODULE_SUBTYPE_MULTI_FRSKY_R9) {
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_POWER, optionValue, LEFT | attr);
|
||||
}
|
||||
else if (multi_proto == MODULE_SUBTYPE_MULTI_DSM2) {
|
||||
optionValue = optionValue & 0x01;
|
||||
editCheckBox(optionValue, MODEL_SETUP_2ND_COLUMN, y, "", LEFT | attr, event);
|
||||
}
|
||||
else {
|
||||
if (min == 0 && max == 1)
|
||||
editCheckBox(optionValue, MODEL_SETUP_2ND_COLUMN, y, "", LEFT | attr, event);
|
||||
else
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr);
|
||||
}
|
||||
if (attr) {
|
||||
int8_t min, max;
|
||||
getMultiOptionValues(multi_proto, min, max);
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, min, max);
|
||||
CHECK_INCDEC_MODELVAR(event, optionValue, min, max);
|
||||
if (checkIncDec_Ret) {
|
||||
if (multi_proto == MODULE_SUBTYPE_MULTI_DSM2) {
|
||||
g_model.moduleData[moduleIdx].multi.optionValue = (g_model.moduleData[moduleIdx].multi.optionValue & 0xFE) + optionValue;
|
||||
}
|
||||
else {
|
||||
g_model.moduleData[moduleIdx].multi.optionValue = optionValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -1327,16 +1390,35 @@ void menuModelSetup(event_t event)
|
||||
else if (isModuleMultimodule(moduleIdx)) {
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.lowPowerMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.lowPowerMode, MODEL_SETUP_2ND_COLUMN, y, IS_RX_MULTI(moduleIdx) ? STR_MULTI_LNA_DISABLE : STR_MULTI_LOWPOWER, attr, event);
|
||||
}
|
||||
#endif
|
||||
#if defined(AFHDS3)
|
||||
else if (isModuleAFHDS3(EXTERNAL_MODULE)) {
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_RFPOWER);
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_AFHDS3_POWERS, g_model.moduleData[EXTERNAL_MODULE].afhds3.runPower, LEFT | attr);
|
||||
if (attr)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].afhds3.runPower, afhds3::RUN_POWER::RUN_POWER_FIRST, afhds3::RUN_POWER::RUN_POWER_LAST);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
#if defined (MULTIMODULE)
|
||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_AUTOBIND:
|
||||
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol() == MODULE_SUBTYPE_MULTI_DSM2)
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_DSM_AUTODTECT, attr, event);
|
||||
else
|
||||
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol() == MODULE_SUBTYPE_MULTI_DSM2) {
|
||||
int8_t value = (g_model.moduleData[EXTERNAL_MODULE].multi.optionValue & 0x02) >> 1;
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_MULTI_SERVOFREQ);
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, value ? 11 : 22, attr);
|
||||
lcdDrawText(lcdNextPos, y, "ms", attr);
|
||||
if (attr) {
|
||||
CHECK_INCDEC_MODELVAR(event, value, 0, 1);
|
||||
if (checkIncDec_Ret) {
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = (g_model.moduleData[EXTERNAL_MODULE].multi.optionValue & 0xFD) + (value << 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_AUTOBIND, attr, event);
|
||||
}
|
||||
break;
|
||||
|
||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_DISABLE_TELEM:
|
||||
@@ -1346,25 +1428,63 @@ void menuModelSetup(event_t event)
|
||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_DISABLE_MAPPING:
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.disableMapping = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.disableMapping, MODEL_SETUP_2ND_COLUMN, y, INDENT TR_DISABLE_CH_MAP, attr, event);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(AFHDS3)
|
||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_AFHDS3_RX_FREQ:
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_AFHDS3_RX_FREQ);
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.moduleData[EXTERNAL_MODULE].afhds3.rxFreq(), attr | LEFT);
|
||||
if (attr) {
|
||||
uint16_t rxFreq = g_model.moduleData[EXTERNAL_MODULE].afhds3.rxFreq();
|
||||
CHECK_INCDEC_MODELVAR(event, rxFreq, MIN_FREQ, MAX_FREQ);
|
||||
g_model.moduleData[EXTERNAL_MODULE].afhds3.setRxFreq(rxFreq);
|
||||
}
|
||||
break;
|
||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_AFHDS3_ACTUAL_POWER:
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_AFHDS3_ACTUAL_POWER);
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_AFHDS3_POWERS, actualAfhdsRunPower(EXTERNAL_MODULE), LEFT);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined (MULTIMODULE)
|
||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_STATUS:
|
||||
{
|
||||
lcdDrawTextAlignedLeft(y, STR_MODULE_STATUS);
|
||||
getMultiModuleStatus(EXTERNAL_MODULE).getStatusString(reusableBuffer.moduleSetup.msg);
|
||||
getModuleStatusString(EXTERNAL_MODULE, reusableBuffer.moduleSetup.msg);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, reusableBuffer.moduleSetup.msg);
|
||||
break;
|
||||
}
|
||||
|
||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_SYNCSTATUS:
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_MODULE_SYNC);
|
||||
getModuleSyncStatusString(EXTERNAL_MODULE, reusableBuffer.moduleSetup.msg);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, reusableBuffer.moduleSetup.msg);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined (AFHDS3)
|
||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_AFHDS3_MODE:
|
||||
lcdDrawTextAlignedLeft(y, STR_TYPE);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y,
|
||||
g_model.moduleData[EXTERNAL_MODULE].afhds3.telemetry ? STR_AFHDS3_ONE_TO_ONE_TELEMETRY : TR_AFHDS3_ONE_TO_MANY);
|
||||
break;
|
||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_AFHDS3_STATUS:
|
||||
{
|
||||
lcdDrawTextAlignedLeft(y, STR_MODULE_SYNC);
|
||||
lcdDrawTextAlignedLeft(y, TR_MODULE_STATUS);
|
||||
char statusText[64];
|
||||
getMultiSyncStatus(EXTERNAL_MODULE).getRefreshString(statusText);
|
||||
getModuleStatusString(EXTERNAL_MODULE, statusText);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, statusText);
|
||||
break;
|
||||
}
|
||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_AFHDS3_POWER_STATUS:
|
||||
{
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_AFHDS3_POWER_SOURCE);
|
||||
char statusText[64];
|
||||
getModuleSyncStatusString(EXTERNAL_MODULE, statusText);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, statusText);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(PXX2)
|
||||
case ITEM_MODEL_SETUP_REGISTRATION_ID:
|
||||
lcdDrawTextAlignedLeft(y, STR_REG_ID);
|
||||
|
||||
Reference in New Issue
Block a user