mirror of
https://github.com/opentx/opentx.git
synced 2025-07-24 00:35:18 +03:00
Custom popup for receiver registration
This commit is contained in:
parent
f83ed1b355
commit
6d4e908de0
21 changed files with 160 additions and 220 deletions
|
@ -53,21 +53,8 @@ extern uint8_t noHighlightCounter;
|
|||
#define NO_HIGHLIGHT() (noHighlightCounter > 0)
|
||||
#define START_NO_HIGHLIGHT() do { noHighlightCounter = 25; } while(0)
|
||||
|
||||
|
||||
void drawSlider(coord_t x, coord_t y, uint8_t value, uint8_t max, uint8_t attr);
|
||||
|
||||
#if defined(NAVIGATION_POT1)
|
||||
extern int16_t p1valdiff;
|
||||
#else
|
||||
#define p1valdiff 0
|
||||
#endif
|
||||
|
||||
#if defined(NAVIGATION_POT2)
|
||||
extern int8_t p2valdiff;
|
||||
#else
|
||||
#define p2valdiff 0
|
||||
#endif
|
||||
|
||||
extern int8_t checkIncDec_Ret; // global helper vars
|
||||
|
||||
#define EDIT_SELECT_MENU -1
|
||||
|
|
|
@ -126,7 +126,7 @@ void menuModelFlightModeOne(event_t event)
|
|||
lcdDrawTextAlignedLeft(y, STR_ROTARY_ENCODER);
|
||||
for (uint8_t t=0; t<NUM_ROTARY_ENCODERS; t++) {
|
||||
putsRotaryEncoderMode(MIXES_2ND_COLUMN+(t*FW), y, s_currIdx, t, menuHorizontalPosition==t ? attr : 0);
|
||||
if (attr && menuHorizontalPosition==t && ((editMode>0) || p1valdiff)) {
|
||||
if (attr && menuHorizontalPosition == t && editMode > 0) {
|
||||
int16_t v = flightModeAddress(s_currIdx)->rotaryEncoders[t];
|
||||
if (v < ROTARY_ENCODER_MAX) v = ROTARY_ENCODER_MAX;
|
||||
v = checkIncDec(event, v, ROTARY_ENCODER_MAX, ROTARY_ENCODER_MAX+MAX_FLIGHT_MODES-1, EE_MODEL);
|
||||
|
@ -175,7 +175,7 @@ void menuModelFlightModeOne(event_t event)
|
|||
else {
|
||||
lcdDrawText(9*FW, y, STR_OWN, posHorz==1 ? attr : 0);
|
||||
}
|
||||
if (attr && s_currIdx>0 && posHorz==1 && (editMode>0 || p1valdiff)) {
|
||||
if (attr && s_currIdx>0 && posHorz==1 && editMode > 0) {
|
||||
if (v < GVAR_MAX) v = GVAR_MAX;
|
||||
v = checkIncDec(event, v, GVAR_MAX, GVAR_MAX+MAX_FLIGHT_MODES-1, EE_MODEL);
|
||||
if (checkIncDec_Ret) {
|
||||
|
|
|
@ -113,7 +113,7 @@ void menuModelLimitsOne(event_t event)
|
|||
coord_t y = MENU_HEADER_HEIGHT + 1 + k*FH;
|
||||
uint8_t i = k + menuVerticalOffset;
|
||||
uint8_t attr = (sub==i ? (s_editMode>0 ? BLINK|INVERS : INVERS) : 0);
|
||||
uint8_t active = (attr && (s_editMode>0 || p1valdiff)) ;
|
||||
uint8_t active = (attr && s_editMode > 0) ;
|
||||
int limit = (g_model.extendedLimits ? LIMIT_EXT_MAX : 1000);
|
||||
|
||||
switch (i) {
|
||||
|
|
|
@ -89,12 +89,6 @@ void menuModelSelect(event_t event)
|
|||
|
||||
check_submenu_simple(_event_, MAX_MODELS - HEADER_LINE);
|
||||
|
||||
#if defined(NAVIGATION_POT2)
|
||||
if (event==0 && p2valdiff<0) {
|
||||
event = EVT_KEY_FIRST(KEY_RIGHT);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (s_editMode > 0) s_editMode = 0;
|
||||
|
||||
|
||||
|
|
|
@ -236,8 +236,8 @@ enum MenuModelSetupItems {
|
|||
|
||||
void onPXX2BindMenu(const char * result)
|
||||
{
|
||||
reusableBuffer.modelsetup.pxx2_bind_selected_receiver_index = (result - reusableBuffer.modelsetup.pxx2_bind_candidate_receivers_names[0]) / sizeof(reusableBuffer.modelsetup.pxx2_bind_candidate_receivers_names[0]);
|
||||
reusableBuffer.modelsetup.pxx2_bind_step = BIND_RX_NAME_SELECTED;
|
||||
reusableBuffer.modelSetup.pxx2.bindSelectedReceiverIndex = (result - reusableBuffer.modelSetup.pxx2.bindCandidateReceiversNames[0]) / sizeof(reusableBuffer.modelSetup.pxx2.bindCandidateReceiversNames[0]);
|
||||
reusableBuffer.modelSetup.pxx2.bindStep = BIND_RX_NAME_SELECTED;
|
||||
}
|
||||
|
||||
void onBindMenu(const char * result)
|
||||
|
@ -267,6 +267,61 @@ void onBindMenu(const char * result)
|
|||
moduleSettings[moduleIdx].mode = MODULE_MODE_BIND;
|
||||
}
|
||||
|
||||
void runPopupRegister(event_t event)
|
||||
{
|
||||
menuVerticalPosition = reusableBuffer.modelSetup.pxx2.registerPopupVerticalPosition;
|
||||
menuHorizontalPosition = reusableBuffer.modelSetup.pxx2.registerPopupHorizontalPosition;
|
||||
s_editMode = reusableBuffer.modelSetup.pxx2.registerPopupEditMode;
|
||||
uint8_t backupVerticalOffset = menuVerticalOffset;
|
||||
|
||||
switch (event) {
|
||||
case EVT_KEY_BREAK(KEY_ENTER):
|
||||
if (menuVerticalPosition != 2) {
|
||||
break;
|
||||
}
|
||||
else if (menuHorizontalPosition == 0) {
|
||||
// [Enter] pressed
|
||||
moduleSettings[INTERNAL_MODULE].mode = MODULE_MODE_REGISTER;
|
||||
}
|
||||
// no break
|
||||
|
||||
case EVT_KEY_LONG(KEY_EXIT):
|
||||
s_editMode = 0;
|
||||
// no break;
|
||||
|
||||
case EVT_KEY_BREAK(KEY_EXIT):
|
||||
if (s_editMode <= 0) {
|
||||
warningText = NULL;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (warningText) {
|
||||
const uint8_t dialogRows[] = { 0, 0, 1};
|
||||
check(event, 0, nullptr, 0, dialogRows, 2, 2);
|
||||
|
||||
drawMessageBox();
|
||||
|
||||
lcdDrawText(WARNING_LINE_X, WARNING_LINE_Y - 3, "Reg. ID");
|
||||
editName(WARNING_LINE_X + 8*FW, WARNING_LINE_Y - 3, g_model.modelRegistrationID, PXX2_LEN_REGISTRATION_ID, event, menuVerticalPosition == 0);
|
||||
|
||||
lcdDrawText(WARNING_LINE_X, WARNING_LINE_Y - 2 + FH, "Rx Name");
|
||||
editName(WARNING_LINE_X + 8*FW, WARNING_LINE_Y - 2 + FH, reusableBuffer.modelSetup.pxx2.registerRxName, PXX2_LEN_RX_NAME, event, menuVerticalPosition == 1);
|
||||
|
||||
// lcdDrawText(WARNING_LINE_X, WARNING_LINE_Y+2*FH + 2, STR_POPUPS_ENTER_EXIT);
|
||||
lcdDrawText(WARNING_LINE_X, WARNING_LINE_Y+2*FH + 2, TR_ENTER, menuVerticalPosition == 2 && menuHorizontalPosition == 0 ? INVERS : 0);
|
||||
lcdDrawText(WARNING_LINE_X + 8*FW, WARNING_LINE_Y+2*FH + 2, TR_EXIT, menuVerticalPosition == 2 && menuHorizontalPosition == 1 ? INVERS : 0);
|
||||
|
||||
reusableBuffer.modelSetup.pxx2.registerPopupVerticalPosition = menuVerticalPosition;
|
||||
reusableBuffer.modelSetup.pxx2.registerPopupHorizontalPosition = menuHorizontalPosition;
|
||||
reusableBuffer.modelSetup.pxx2.registerPopupEditMode = s_editMode;
|
||||
}
|
||||
|
||||
menuVerticalPosition = ITEM_MODEL_INTERNAL_MODULE_PXX2_RANGE_REGISTER + HEADER_LINE;
|
||||
menuHorizontalPosition = 1;
|
||||
menuVerticalOffset = backupVerticalOffset;
|
||||
s_editMode = (moduleSettings[INTERNAL_MODULE].mode == MODULE_MODE_REGISTER ? EDIT_MODIFY_FIELD : 0);
|
||||
}
|
||||
|
||||
void menuModelSetup(event_t event)
|
||||
{
|
||||
|
@ -370,7 +425,7 @@ void menuModelSetup(event_t event)
|
|||
TITLE(STR_MENUSETUP);
|
||||
|
||||
if (event == EVT_ENTRY) {
|
||||
reusableBuffer.modelsetup.r9mPower = g_model.moduleData[EXTERNAL_MODULE].pxx.power;
|
||||
reusableBuffer.modelSetup.r9mPower = g_model.moduleData[EXTERNAL_MODULE].pxx.power;
|
||||
}
|
||||
|
||||
uint8_t sub = menuVerticalPosition - HEADER_LINE;
|
||||
|
@ -405,7 +460,7 @@ void menuModelSetup(event_t event)
|
|||
drawStringWithIndex(0*FW, y, STR_TIMER, timerIdx+1);
|
||||
drawTimerMode(MODEL_SETUP_2ND_COLUMN, y, timer->mode, menuHorizontalPosition==0 ? attr : 0);
|
||||
drawTimer(MODEL_SETUP_2ND_COLUMN+5*FW-2+5*FWNUM+1, y, timer->start, RIGHT | (menuHorizontalPosition==1 ? attr : 0), menuHorizontalPosition==2 ? attr : 0);
|
||||
if (attr && (editMode>0 || p1valdiff)) {
|
||||
if (attr && editMode > 0) {
|
||||
div_t qr = div(timer->start, 60);
|
||||
switch (menuHorizontalPosition) {
|
||||
case 0:
|
||||
|
@ -736,7 +791,7 @@ void menuModelSetup(event_t event)
|
|||
lcdDrawTextAtIndex(x, y, STR_RETA123, i, ((menuHorizontalPosition==i) && attr) ? BLINK|INVERS : (((g_model.beepANACenter & ((BeepANACenter)1<<i)) || (attr && CURSOR_ON_LINE())) ? INVERS : 0 ) );
|
||||
}
|
||||
if (attr && CURSOR_ON_CELL) {
|
||||
if (event==EVT_KEY_BREAK(KEY_ENTER) || p1valdiff) {
|
||||
if (event == EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
if (READ_ONLY_UNLOCKED()) {
|
||||
s_editMode = 0;
|
||||
g_model.beepANACenter ^= ((BeepANACenter)1<<menuHorizontalPosition);
|
||||
|
@ -799,7 +854,7 @@ void menuModelSetup(event_t event)
|
|||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_MULTI_PROTOCOLS, multi_rfProto, menuHorizontalPosition==1 ? attr : 0);
|
||||
}
|
||||
#endif
|
||||
if (attr && (editMode>0 || p1valdiff)) {
|
||||
if (attr && editMode > 0) {
|
||||
switch (menuHorizontalPosition) {
|
||||
case 0:
|
||||
g_model.moduleData[EXTERNAL_MODULE].type = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].type,
|
||||
|
@ -877,7 +932,7 @@ void menuModelSetup(event_t event)
|
|||
if (pdef->subTypeString != nullptr)
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, pdef->subTypeString, g_model.moduleData[EXTERNAL_MODULE].subType, attr);
|
||||
}
|
||||
if (attr && (editMode > 0 || p1valdiff)) {
|
||||
if (attr && editMode > 0) {
|
||||
switch (menuHorizontalPosition) {
|
||||
case 0:
|
||||
if (multi_rfProto == MM_RF_CUSTOM_SELECTED)
|
||||
|
@ -971,7 +1026,7 @@ void menuModelSetup(event_t event)
|
|||
lcdDrawNumber(lcdLastRightPos, y, g_model.trainerData.channelsStart+1, LEFT | (menuHorizontalPosition==0 ? attr : 0));
|
||||
lcdDrawChar(lcdLastRightPos, y, '-');
|
||||
lcdDrawNumber(lcdLastRightPos + FW+1, y, g_model.trainerData.channelsStart + 8 + g_model.trainerData.channelsCount, LEFT | (menuHorizontalPosition==1 ? attr : 0));
|
||||
if (attr && (editMode>0 || p1valdiff)) {
|
||||
if (attr && editMode > 0) {
|
||||
switch (menuHorizontalPosition) {
|
||||
case 0:
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.trainerData.channelsStart, 32-8-g_model.trainerData.channelsCount);
|
||||
|
@ -1001,7 +1056,7 @@ void menuModelSetup(event_t event)
|
|||
lcdDrawNumber(lcdLastRightPos, y, moduleData.channelsStart+1, LEFT | (menuHorizontalPosition==0 ? attr : 0));
|
||||
lcdDrawChar(lcdLastRightPos, y, '-');
|
||||
lcdDrawNumber(lcdLastRightPos + FW+1, y, moduleData.channelsStart+sentModuleChannels(moduleIdx), LEFT | (menuHorizontalPosition==1 ? attr : 0));
|
||||
if (attr && (editMode>0 || p1valdiff)) {
|
||||
if (attr && editMode > 0) {
|
||||
switch (menuHorizontalPosition) {
|
||||
case 0:
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, moduleData.channelsStart, 32-8-moduleData.channelsCount);
|
||||
|
@ -1026,7 +1081,7 @@ void menuModelSetup(event_t event)
|
|||
lcdDrawChar(MODEL_SETUP_2ND_COLUMN+8*FW+2, y, 'u');
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN+8*FW+2, y, (g_model.trainerData.delay*50)+300, RIGHT | ((CURSOR_ON_LINE() || menuHorizontalPosition==1) ? attr : 0));
|
||||
lcdDrawChar(MODEL_SETUP_2ND_COLUMN+10*FW, y, g_model.trainerData.pulsePol ? '+' : '-', (CURSOR_ON_LINE() || menuHorizontalPosition==2) ? attr : 0);
|
||||
if (attr && (editMode>0 || p1valdiff)) {
|
||||
if (attr && editMode > 0) {
|
||||
switch (menuHorizontalPosition) {
|
||||
case 0:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.trainerData.frameLength, -20, 35);
|
||||
|
@ -1062,22 +1117,21 @@ void menuModelSetup(event_t event)
|
|||
lcdDrawTextAlignedLeft(y, INDENT "Module");
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_RANGE, (menuHorizontalPosition==0 ? attr : 0) );
|
||||
lcdDrawText(lcdLastRightPos, y, "[Reg]", (menuHorizontalPosition==1 ? attr : 0) );
|
||||
if (attr && s_editMode>0 && menuHorizontalPosition == 0 ) {
|
||||
if (attr) {
|
||||
if (moduleSettings[INTERNAL_MODULE].mode == MODULE_MODE_NORMAL && s_editMode > 0) {
|
||||
if (menuHorizontalPosition == 1) {
|
||||
reusableBuffer.modelSetup.pxx2.registerPopupVerticalPosition = 0;
|
||||
reusableBuffer.modelSetup.pxx2.registerPopupEditMode = 0;
|
||||
s_editMode = 0;
|
||||
POPUP_INPUT("", runPopupRegister);
|
||||
}
|
||||
else {
|
||||
moduleSettings[INTERNAL_MODULE].mode = MODULE_MODE_RANGECHECK;
|
||||
}
|
||||
if (attr && menuHorizontalPosition == 1) {
|
||||
if (event == EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
moduleSettings[INTERNAL_MODULE].mode ^= MODULE_MODE_REGISTER;
|
||||
}
|
||||
if (moduleSettings[INTERNAL_MODULE].mode == MODULE_MODE_REGISTER) {
|
||||
s_editMode = 1;
|
||||
}
|
||||
}
|
||||
if (attr && s_editMode==0) {
|
||||
if (s_editMode == 0) {
|
||||
moduleSettings[INTERNAL_MODULE].mode = MODULE_MODE_NORMAL;
|
||||
}
|
||||
if (attr && moduleSettings[INTERNAL_MODULE].mode == MODULE_MODE_NORMAL) {
|
||||
s_editMode = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1147,16 +1201,16 @@ void menuModelSetup(event_t event)
|
|||
if (attr) {
|
||||
if (menuHorizontalPosition == 0) {
|
||||
if (event == EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
reusableBuffer.modelsetup.pxx2_bind_step = BIND_START;
|
||||
reusableBuffer.modelsetup.pxx2_bind_candidate_receivers_count = 0;
|
||||
reusableBuffer.modelSetup.pxx2.bindStep = BIND_START;
|
||||
reusableBuffer.modelSetup.pxx2.bindCandidateReceiversCount = 0;
|
||||
moduleSettings[INTERNAL_MODULE].mode ^= MODULE_MODE_BIND;
|
||||
}
|
||||
if (moduleSettings[INTERNAL_MODULE].mode == MODULE_MODE_BIND) {
|
||||
s_editMode = 1;
|
||||
if (reusableBuffer.modelsetup.pxx2_bind_step == BIND_RX_NAME_RECEIVED) {
|
||||
popupMenuItemsCount = min<uint8_t>(reusableBuffer.modelsetup.pxx2_bind_candidate_receivers_count, PXX2_MAX_RECEIVERS_PER_MODULE);
|
||||
if (reusableBuffer.modelSetup.pxx2.bindStep == BIND_RX_NAME_RECEIVED) {
|
||||
popupMenuItemsCount = min<uint8_t>(reusableBuffer.modelSetup.pxx2.bindCandidateReceiversCount, PXX2_MAX_RECEIVERS_PER_MODULE);
|
||||
for (uint8_t i=0; i<popupMenuItemsCount; i++) {
|
||||
popupMenuItems[i] = reusableBuffer.modelsetup.pxx2_bind_candidate_receivers_names[i];
|
||||
popupMenuItems[i] = reusableBuffer.modelSetup.pxx2.bindCandidateReceiversNames[i];
|
||||
}
|
||||
POPUP_MENU_START(onPXX2BindMenu);
|
||||
}
|
||||
|
@ -1164,8 +1218,8 @@ void menuModelSetup(event_t event)
|
|||
else {
|
||||
s_editMode = 0;
|
||||
}
|
||||
if (reusableBuffer.modelsetup.pxx2_bind_step == BIND_OK) {
|
||||
memcpy(g_model.moduleData[INTERNAL_MODULE].pxx2.receivers[receiverIdx].rxName, reusableBuffer.modelsetup.pxx2_bind_candidate_receivers_ids[reusableBuffer.modelsetup.pxx2_bind_selected_receiver_index], PXX2_LEN_RX_NAME);
|
||||
if (reusableBuffer.modelSetup.pxx2.bindStep == BIND_OK) {
|
||||
memcpy(g_model.moduleData[INTERNAL_MODULE].pxx2.receivers[receiverIdx].rxName, reusableBuffer.modelSetup.pxx2.bindCandidateReceiversIds[reusableBuffer.modelSetup.pxx2.bindSelectedReceiverIndex], PXX2_LEN_RX_NAME);
|
||||
}
|
||||
}
|
||||
else if (menuHorizontalPosition == 1 && s_editMode > 0) {
|
||||
|
@ -1200,7 +1254,7 @@ void menuModelSetup(event_t event)
|
|||
lcdDrawChar(MODEL_SETUP_2ND_COLUMN+8*FW+2, y, 'u');
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN+8*FW+2, y, (moduleData.ppm.delay*50)+300, RIGHT | ((CURSOR_ON_LINE() || menuHorizontalPosition==1) ? attr : 0));
|
||||
lcdDrawChar(MODEL_SETUP_2ND_COLUMN+10*FW, y, moduleData.ppm.pulsePol ? '+' : '-', (CURSOR_ON_LINE() || menuHorizontalPosition==2) ? attr : 0);
|
||||
if (attr && (editMode>0 || p1valdiff)) {
|
||||
if (attr && editMode > 0) {
|
||||
switch (menuHorizontalPosition) {
|
||||
case 0:
|
||||
CHECK_INCDEC_MODELVAR(event, moduleData.ppm.frameLength, -20, 35);
|
||||
|
@ -1246,7 +1300,7 @@ void menuModelSetup(event_t event)
|
|||
if (xOffsetBind)
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.header.modelId[moduleIdx], (l_posHorz==0 ? attr : 0) | LEADING0|LEFT, 2);
|
||||
if (attr && l_posHorz == 0) {
|
||||
if (editMode>0 || p1valdiff) {
|
||||
if (editMode > 0) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.header.modelId[moduleIdx], MAX_RX_NUM(moduleIdx));
|
||||
if (checkIncDec_Ret) {
|
||||
modelHeaders[g_eeGeneral.currModel].modelId[moduleIdx] = g_model.header.modelId[moduleIdx];
|
||||
|
@ -1369,7 +1423,7 @@ void menuModelSetup(event_t event)
|
|||
if (moduleData.failsafeMode != FAILSAFE_CUSTOM)
|
||||
menuHorizontalPosition = 0;
|
||||
if (menuHorizontalPosition == 0) {
|
||||
if (editMode > 0 || p1valdiff) {
|
||||
if (editMode > 0) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, moduleData.failsafeMode, FAILSAFE_LAST);
|
||||
if (checkIncDec_Ret) SEND_FAILSAFE_NOW(moduleIdx);
|
||||
}
|
||||
|
@ -1484,11 +1538,11 @@ void menuModelSetup(event_t event)
|
|||
if (attr) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.moduleData[moduleIdx].pxx.power, R9M_LBT_POWER_MAX);
|
||||
}
|
||||
if (attr && editMode == 0 && reusableBuffer.modelsetup.r9mPower != g_model.moduleData[moduleIdx].pxx.power) {
|
||||
if((reusableBuffer.modelsetup.r9mPower + g_model.moduleData[moduleIdx].pxx.power) < 5) { //switching between mode 2 and 3 does not require rebind
|
||||
if (attr && editMode == 0 && reusableBuffer.modelSetup.r9mPower != g_model.moduleData[moduleIdx].pxx.power) {
|
||||
if((reusableBuffer.modelSetup.r9mPower + g_model.moduleData[moduleIdx].pxx.power) < 5) { //switching between mode 2 and 3 does not require rebind
|
||||
POPUP_WARNING(STR_REBIND);
|
||||
}
|
||||
reusableBuffer.modelsetup.r9mPower = g_model.moduleData[moduleIdx].pxx.power;
|
||||
reusableBuffer.modelSetup.r9mPower = g_model.moduleData[moduleIdx].pxx.power;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1550,7 +1604,7 @@ void menuModelSetup(event_t event)
|
|||
lcdDrawNumber(lcdLastRightPos, y, g_model.moduleData[1].channelsStart+1, LEFT | (menuHorizontalPosition<=0 ? attr : 0));
|
||||
lcdDrawChar(lcdLastRightPos, y, '-');
|
||||
lcdDrawNumber(lcdLastRightPos + FW+1, y, g_model.moduleData[1].channelsStart+8+g_model.moduleData[1].channelsCount, LEFT | (menuHorizontalPosition!=0 ? attr : 0));
|
||||
if (attr && (editMode>0 || p1valdiff)) {
|
||||
if (attr && editMode > 0) {
|
||||
switch (menuHorizontalPosition) {
|
||||
case 0:
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.moduleData[1].channelsStart, 32-8-g_model.moduleData[1].channelsCount);
|
||||
|
@ -1571,7 +1625,7 @@ void menuModelSetup(event_t event)
|
|||
lcdDrawChar(MODEL_SETUP_2ND_COLUMN+8*FW+2, y, 'u');
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN+8*FW+2, y, (g_model.moduleData[1].ppmDelay*50)+300, RIGHT | ((menuHorizontalPosition < 0 || menuHorizontalPosition==1) ? attr : 0));
|
||||
lcdDrawChar(MODEL_SETUP_2ND_COLUMN+10*FW, y, g_model.moduleData[1].ppmPulsePol ? '+' : '-', (menuHorizontalPosition < 0 || menuHorizontalPosition==2) ? attr : 0);
|
||||
if (attr && (editMode>0 || p1valdiff)) {
|
||||
if (attr && editMode > 0) {
|
||||
switch (menuHorizontalPosition) {
|
||||
case 0:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[1].ppmFrameLength, -20, 35);
|
||||
|
|
|
@ -186,7 +186,7 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
|||
uint8_t func = CFN_FUNC(cfn);
|
||||
for (uint8_t j=0; j<5; j++) {
|
||||
uint8_t attr = ((sub==k && menuHorizontalPosition==j) ? ((s_editMode>0) ? BLINK|INVERS : INVERS) : 0);
|
||||
uint8_t active = (attr && (s_editMode>0 || p1valdiff));
|
||||
uint8_t active = (attr && s_editMode > 0);
|
||||
switch (j) {
|
||||
case 0:
|
||||
if (sub==k && menuHorizontalPosition < 1 && CFN_SWITCH(cfn) == SWSRC_NONE) {
|
||||
|
|
|
@ -588,7 +588,7 @@ void menuModelTelemetryFrsky(event_t event)
|
|||
}
|
||||
lcdDrawNumber(TELEM_COL2, y, -10+g_model.frsky.varioMin, ((CURSOR_ON_LINE() || menuHorizontalPosition==0) ? attr : 0)|LEFT);
|
||||
lcdDrawNumber(TELEM_COL2+4*FW, y, 10+g_model.frsky.varioMax, ((CURSOR_ON_LINE() || menuHorizontalPosition==1) ? attr : 0)|LEFT);
|
||||
if (attr && (s_editMode>0 || p1valdiff)) {
|
||||
if (attr && s_editMode > 0) {
|
||||
switch (menuHorizontalPosition) {
|
||||
case 0:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioMin, -7, 7);
|
||||
|
@ -605,7 +605,7 @@ void menuModelTelemetryFrsky(event_t event)
|
|||
lcdDrawNumber(TELEM_COL2, y, -5+g_model.frsky.varioCenterMin, ((CURSOR_ON_LINE() || menuHorizontalPosition==0) ? attr : 0)|PREC1|LEFT);
|
||||
lcdDrawNumber(TELEM_COL2+4*FW, y, 5+g_model.frsky.varioCenterMax, ((CURSOR_ON_LINE() || menuHorizontalPosition==1) ? attr : 0)|PREC1|LEFT);
|
||||
lcdDrawTextAtIndex(TELEM_COL2+8*FW, y, STR_VVARIOCENTER, g_model.frsky.varioCenterSilent, (menuHorizontalPosition==2 ? attr : 0));
|
||||
if (attr && (s_editMode>0 || p1valdiff)) {
|
||||
if (attr && s_editMode > 0) {
|
||||
switch (menuHorizontalPosition) {
|
||||
case 0:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioCenterMin, -16, 5+min<int8_t>(10, g_model.frsky.varioCenterMax+5));
|
||||
|
|
|
@ -161,11 +161,11 @@ void menuRadioSetup(event_t event)
|
|||
switch (j) {
|
||||
case 0:
|
||||
lcdDrawNumber(RADIO_SETUP_DATE_COLUMN, y, t.tm_year+TM_YEAR_BASE, rowattr|RIGHT);
|
||||
if (rowattr && (s_editMode>0 || p1valdiff)) t.tm_year = checkIncDec(event, t.tm_year, 112, 200, 0);
|
||||
if (rowattr && s_editMode > 0) t.tm_year = checkIncDec(event, t.tm_year, 112, 200, 0);
|
||||
break;
|
||||
case 1:
|
||||
lcdDrawNumber(RADIO_SETUP_DATE_COLUMN+3*FW-2, y, t.tm_mon+1, rowattr|LEADING0|RIGHT, 2);
|
||||
if (rowattr && (s_editMode>0 || p1valdiff)) t.tm_mon = checkIncDec(event, t.tm_mon, 0, 11, 0);
|
||||
if (rowattr && s_editMode > 0) t.tm_mon = checkIncDec(event, t.tm_mon, 0, 11, 0);
|
||||
break;
|
||||
case 2:
|
||||
{
|
||||
|
@ -174,7 +174,7 @@ void menuRadioSetup(event_t event)
|
|||
static const uint8_t dmon[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
|
||||
dlim += dmon[t.tm_mon];
|
||||
lcdDrawNumber(RADIO_SETUP_DATE_COLUMN+6*FW-4, y, t.tm_mday, rowattr|LEADING0|RIGHT, 2);
|
||||
if (rowattr && (s_editMode>0 || p1valdiff)) t.tm_mday = checkIncDec(event, t.tm_mday, 1, dlim, 0);
|
||||
if (rowattr && s_editMode > 0) t.tm_mday = checkIncDec(event, t.tm_mday, 1, dlim, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -192,15 +192,15 @@ void menuRadioSetup(event_t event)
|
|||
switch (j) {
|
||||
case 0:
|
||||
lcdDrawNumber(RADIO_SETUP_TIME_COLUMN, y, t.tm_hour, rowattr|LEADING0|RIGHT, 2);
|
||||
if (rowattr && (s_editMode>0 || p1valdiff)) t.tm_hour = checkIncDec(event, t.tm_hour, 0, 23, 0);
|
||||
if (rowattr && s_editMode > 0) t.tm_hour = checkIncDec(event, t.tm_hour, 0, 23, 0);
|
||||
break;
|
||||
case 1:
|
||||
lcdDrawNumber(RADIO_SETUP_TIME_COLUMN+3*FWNUM, y, t.tm_min, rowattr|LEADING0|RIGHT, 2);
|
||||
if (rowattr && (s_editMode>0 || p1valdiff)) t.tm_min = checkIncDec(event, t.tm_min, 0, 59, 0);
|
||||
if (rowattr && s_editMode > 0) t.tm_min = checkIncDec(event, t.tm_min, 0, 59, 0);
|
||||
break;
|
||||
case 2:
|
||||
lcdDrawNumber(RADIO_SETUP_TIME_COLUMN+6*FWNUM, y, t.tm_sec, rowattr|LEADING0|RIGHT, 2);
|
||||
if (rowattr && (s_editMode>0 || p1valdiff)) t.tm_sec = checkIncDec(event, t.tm_sec, 0, 59, 0);
|
||||
if (rowattr && s_editMode > 0) t.tm_sec = checkIncDec(event, t.tm_sec, 0, 59, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -304,7 +304,7 @@ void menuModelSetup(event_t event)
|
|||
MENU_CHECK(STR_MENUSETUP, menuTabModel, MENU_MODEL_SETUP, ITEM_MODEL_SETUP_MAX);
|
||||
|
||||
if (event == EVT_ENTRY) {
|
||||
reusableBuffer.modelsetup.r9mPower = g_model.moduleData[EXTERNAL_MODULE].pxx.power;
|
||||
reusableBuffer.modelSetup.r9mPower = g_model.moduleData[EXTERNAL_MODULE].pxx.power;
|
||||
}
|
||||
|
||||
#if (defined(DSM2) || defined(PXX))
|
||||
|
@ -1182,10 +1182,10 @@ void menuModelSetup(event_t event)
|
|||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_LBT_POWER_VALUES, g_model.moduleData[moduleIdx].pxx.power, LEFT | attr);
|
||||
if (attr)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].pxx.power, 0, R9M_LBT_POWER_MAX);
|
||||
if (attr && s_editMode == 0 && reusableBuffer.modelsetup.r9mPower != g_model.moduleData[moduleIdx].pxx.power) {
|
||||
if((reusableBuffer.modelsetup.r9mPower + g_model.moduleData[moduleIdx].pxx.power) < 5) //switching between mode 2 and 3 does not require rebind
|
||||
if (attr && s_editMode == 0 && reusableBuffer.modelSetup.r9mPower != g_model.moduleData[moduleIdx].pxx.power) {
|
||||
if((reusableBuffer.modelSetup.r9mPower + g_model.moduleData[moduleIdx].pxx.power) < 5) //switching between mode 2 and 3 does not require rebind
|
||||
POPUP_WARNING(STR_REBIND);
|
||||
reusableBuffer.modelsetup.r9mPower = g_model.moduleData[moduleIdx].pxx.power;
|
||||
reusableBuffer.modelSetup.r9mPower = g_model.moduleData[moduleIdx].pxx.power;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -102,14 +102,14 @@ enum MenuModelSetupItems {
|
|||
|
||||
void checkModelIdUnique(uint8_t moduleIdx)
|
||||
{
|
||||
char* warn_buf = reusableBuffer.modelsetup.msg;
|
||||
char* warn_buf = reusableBuffer.modelSetup.msg;
|
||||
|
||||
// cannot rely exactly on WARNING_LINE_LEN so using WARNING_LINE_LEN-2
|
||||
size_t warn_buf_len = sizeof(reusableBuffer.modelsetup.msg) - WARNING_LINE_LEN - 2;
|
||||
size_t warn_buf_len = sizeof(reusableBuffer.modelSetup.msg) - WARNING_LINE_LEN - 2;
|
||||
if (!modelslist.isModelIdUnique(moduleIdx,warn_buf,warn_buf_len)) {
|
||||
if (warn_buf[0] != 0) {
|
||||
POPUP_WARNING(STR_MODELIDUSED);
|
||||
SET_WARNING_INFO(warn_buf, sizeof(reusableBuffer.modelsetup.msg), 0);
|
||||
SET_WARNING_INFO(warn_buf, sizeof(reusableBuffer.modelSetup.msg), 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -293,7 +293,7 @@ bool menuModelSetup(event_t event)
|
|||
TRAINER_LINE2_ROWS });
|
||||
|
||||
if (event == EVT_ENTRY) {
|
||||
reusableBuffer.modelsetup.r9mPower = g_model.moduleData[EXTERNAL_MODULE].pxx.power;
|
||||
reusableBuffer.modelSetup.r9mPower = g_model.moduleData[EXTERNAL_MODULE].pxx.power;
|
||||
}
|
||||
|
||||
if (menuEvent) {
|
||||
|
@ -1103,12 +1103,12 @@ bool menuModelSetup(event_t event)
|
|||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_LBT_POWER_VALUES, g_model.moduleData[moduleIdx].pxx.power, LEFT | attr);
|
||||
if (attr)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].pxx.power, 0, R9M_LBT_POWER_MAX);
|
||||
if (attr && s_editMode == 0 && reusableBuffer.modelsetup.r9mPower != g_model.moduleData[moduleIdx].pxx.power) {
|
||||
if((reusableBuffer.modelsetup.r9mPower + g_model.moduleData[moduleIdx].pxx.power) < 5) { //switching between mode 2 and 3 does not require rebind
|
||||
if (attr && s_editMode == 0 && reusableBuffer.modelSetup.r9mPower != g_model.moduleData[moduleIdx].pxx.power) {
|
||||
if((reusableBuffer.modelSetup.r9mPower + g_model.moduleData[moduleIdx].pxx.power) < 5) { //switching between mode 2 and 3 does not require rebind
|
||||
POPUP_WARNING(STR_WARNING);
|
||||
SET_WARNING_INFO(STR_REBIND, sizeof(TR_REBIND), 0);
|
||||
}
|
||||
reusableBuffer.modelsetup.r9mPower = g_model.moduleData[moduleIdx].pxx.power;
|
||||
reusableBuffer.modelSetup.r9mPower = g_model.moduleData[moduleIdx].pxx.power;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,14 +27,6 @@ uint8_t menuCalibrationState;
|
|||
vertpos_t menuVerticalPosition;
|
||||
horzpos_t menuHorizontalPosition;
|
||||
|
||||
#if defined(NAVIGATION_POT1)
|
||||
int16_t p1valdiff;
|
||||
#endif
|
||||
|
||||
#if defined(NAVIGATION_POT2)
|
||||
int8_t p2valdiff;
|
||||
#endif
|
||||
|
||||
int8_t checkIncDec_Ret;
|
||||
|
||||
#define DBLKEYS_PRESSED_RGT_LFT(in) ((in & (KEYS_GPIO_PIN_RIGHT + KEYS_GPIO_PIN_LEFT)) == (KEYS_GPIO_PIN_RIGHT + KEYS_GPIO_PIN_LEFT))
|
||||
|
@ -126,12 +118,6 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, unsigned int i_fla
|
|||
newval = !val;
|
||||
}
|
||||
|
||||
#if defined(NAVIGATION_POT1)
|
||||
// change values based on P1
|
||||
newval -= p1valdiff;
|
||||
p1valdiff = 0;
|
||||
#endif
|
||||
|
||||
#if defined(AUTOSWITCH)
|
||||
if (i_flags & INCDEC_SWITCH) {
|
||||
newval = checkIncDecMovedSwitch(newval);
|
||||
|
@ -172,7 +158,6 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, unsigned int i_fla
|
|||
return newval;
|
||||
}
|
||||
|
||||
#define SCROLL_TH 64
|
||||
#define SCROLL_POT1_TH 32
|
||||
|
||||
#define CURSOR_NOT_ALLOWED_IN_ROW(row) ((int8_t)MAXCOL(row) < 0)
|
||||
|
@ -192,36 +177,6 @@ void check(event_t event, uint8_t curr, const MenuHandlerFunc *menuTab, uint8_t
|
|||
|
||||
uint8_t maxcol = MAXCOL(l_posVert);
|
||||
|
||||
#if defined(NAVIGATION_POT1)
|
||||
// check pot 1 - if changed -> scroll values
|
||||
static int16_t p1val;
|
||||
static int16_t p1valprev;
|
||||
p1valdiff = (p1val-calibratedAnalogs[CALIBRATED_POT1]) / SCROLL_POT1_TH;
|
||||
if (p1valdiff) {
|
||||
p1valdiff = (p1valprev-calibratedAnalogs[CALIBRATED_POT1]) / 2;
|
||||
p1val = calibratedAnalogs[CALIBRATED_POT1];
|
||||
}
|
||||
p1valprev = calibratedAnalogs[CALIBRATED_POT1];
|
||||
#endif
|
||||
|
||||
#if defined(NAVIGATION_POT2)
|
||||
// check pot 2 - if changed -> scroll menu
|
||||
static int16_t p2valprev;
|
||||
p2valdiff = (p2valprev-calibratedAnalogs[CALIBRATED_POT2]) / SCROLL_TH;
|
||||
if (p2valdiff) p2valprev = calibratedAnalogs[CALIBRATED_POT2];
|
||||
#endif
|
||||
|
||||
#if defined(NAVIGATION_POT3)
|
||||
// check pot 3 if changed -> cursor down/up
|
||||
static int16_t p3valprev;
|
||||
int8_t scrollUD = (p3valprev-calibratedAnalogs[CALIBRATED_POT3]) / SCROLL_TH;
|
||||
if (scrollUD) p3valprev = calibratedAnalogs[CALIBRATED_POT3];
|
||||
#else
|
||||
#define scrollUD 0
|
||||
#endif
|
||||
|
||||
if (p2valdiff || scrollUD || p1valdiff) backlightOn(); // on keypress turn the light on
|
||||
|
||||
if (menuTab) {
|
||||
uint8_t attr = 0;
|
||||
|
||||
|
@ -230,10 +185,6 @@ void check(event_t event, uint8_t curr, const MenuHandlerFunc *menuTab, uint8_t
|
|||
|
||||
int8_t cc = curr;
|
||||
|
||||
if (p2valdiff) {
|
||||
cc = limit((int8_t)0, (int8_t)(cc - p2valdiff), (int8_t)(menuTabSize-1));
|
||||
}
|
||||
|
||||
switch (event) {
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
case EVT_ROTARY_BREAK:
|
||||
|
@ -289,19 +240,6 @@ void check(event_t event, uint8_t curr, const MenuHandlerFunc *menuTab, uint8_t
|
|||
|
||||
}
|
||||
|
||||
DISPLAY_PROGRESS_BAR(menuTab ? lcdLastRightPos-2*FW-((curr+1)/10*FWNUM)-2 : 20*FW+1);
|
||||
|
||||
if (s_editMode<=0) {
|
||||
if (scrollUD) {
|
||||
l_posVert = limit((int8_t)0, (int8_t)(l_posVert - scrollUD), (int8_t)maxrow);
|
||||
l_posHorz = min((uint8_t)l_posHorz, MAXCOL(l_posVert));
|
||||
}
|
||||
|
||||
if (p2valdiff && l_posVert>0) {
|
||||
l_posHorz = limit((int8_t)0, (int8_t)((uint8_t)l_posHorz - p2valdiff), (int8_t)maxcol);
|
||||
}
|
||||
}
|
||||
|
||||
switch (event)
|
||||
{
|
||||
case EVT_ENTRY:
|
||||
|
|
|
@ -230,7 +230,6 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, unsigned int i_fla
|
|||
return newval;
|
||||
}
|
||||
|
||||
#define SCROLL_TH 64
|
||||
#define SCROLL_POT1_TH 32
|
||||
|
||||
#define CURSOR_NOT_ALLOWED_IN_ROW(row) ((int8_t)MAXCOL(row) < 0)
|
||||
|
@ -285,8 +284,6 @@ void check(event_t event, uint8_t curr, const MenuHandlerFunc * menuTab, uint8_t
|
|||
drawScreenIndex(curr, menuTabSize, 0);
|
||||
}
|
||||
|
||||
DISPLAY_PROGRESS_BAR(menuTab ? lcdLastRightPos-2*FW-((curr+1)/10*FWNUM)-2 : 20*FW+1);
|
||||
|
||||
switch (event) {
|
||||
case EVT_ENTRY:
|
||||
menuEntryTime = get_tmr10ms();
|
||||
|
|
|
@ -393,8 +393,6 @@ void check(const char * name, event_t event, uint8_t curr, const MenuHandlerFunc
|
|||
lcdDrawFilledRect(0, 0, LCD_W, MENU_HEADER_HEIGHT, SOLID, FILL_WHITE|GREY_DEFAULT);
|
||||
}
|
||||
|
||||
DISPLAY_PROGRESS_BAR(menuTab ? lcdLastRightPos-2*FW-((curr+1)/10*FWNUM)-2 : 20*FW+1);
|
||||
|
||||
switch (event) {
|
||||
case EVT_ENTRY:
|
||||
menuEntryTime = get_tmr10ms();
|
||||
|
|
|
@ -292,7 +292,6 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, unsigned int i_fla
|
|||
return newval;
|
||||
}
|
||||
|
||||
#define SCROLL_TH 64
|
||||
#define SCROLL_POT1_TH 32
|
||||
|
||||
#define CURSOR_NOT_ALLOWED_IN_ROW(row) ((int8_t)MAXCOL(row) < 0)
|
||||
|
@ -375,8 +374,6 @@ void check(event_t event, uint8_t curr, const MenuHandlerFunc *menuTab, uint8_t
|
|||
drawScreenIndex(curr, menuTabSize, attr);
|
||||
}
|
||||
|
||||
DISPLAY_PROGRESS_BAR(menuTab ? lcdLastRightPos-2*FW-((curr+1)/10*FWNUM)-2 : 20*FW+1);
|
||||
|
||||
switch (event)
|
||||
{
|
||||
case EVT_ENTRY:
|
||||
|
|
|
@ -368,16 +368,16 @@ void checkModelIdUnique(uint8_t index, uint8_t module)
|
|||
{
|
||||
uint8_t modelId = g_model.header.modelId[module];
|
||||
uint8_t additionalOnes = 0;
|
||||
char * name = reusableBuffer.modelsetup.msg;
|
||||
char * name = reusableBuffer.modelSetup.msg;
|
||||
|
||||
memset(reusableBuffer.modelsetup.msg, 0, sizeof(reusableBuffer.modelsetup.msg));
|
||||
memset(reusableBuffer.modelSetup.msg, 0, sizeof(reusableBuffer.modelSetup.msg));
|
||||
|
||||
if (modelId != 0) {
|
||||
for (uint8_t i = 0; i < MAX_MODELS; i++) {
|
||||
if (i != index) {
|
||||
if (modelId == modelHeaders[i].modelId[module]) {
|
||||
if ((WARNING_LINE_LEN - 4 - (name - reusableBuffer.modelsetup.msg)) > (signed)(modelHeaders[i].name[0] ? zlen(modelHeaders[i].name, LEN_MODEL_NAME) : sizeof(TR_MODEL) + 2)) { // you cannot rely exactly on WARNING_LINE_LEN so using WARNING_LINE_LEN-2 (-2 for the ",")
|
||||
if (reusableBuffer.modelsetup.msg[0] != 0) {
|
||||
if ((WARNING_LINE_LEN - 4 - (name - reusableBuffer.modelSetup.msg)) > (signed)(modelHeaders[i].name[0] ? zlen(modelHeaders[i].name, LEN_MODEL_NAME) : sizeof(TR_MODEL) + 2)) { // you cannot rely exactly on WARNING_LINE_LEN so using WARNING_LINE_LEN-2 (-2 for the ",")
|
||||
if (reusableBuffer.modelSetup.msg[0] != 0) {
|
||||
name = strAppend(name, ", ");
|
||||
}
|
||||
if (modelHeaders[i].name[0] == 0) {
|
||||
|
@ -402,9 +402,9 @@ void checkModelIdUnique(uint8_t index, uint8_t module)
|
|||
name = strAppend(name, ")");
|
||||
}
|
||||
|
||||
if (reusableBuffer.modelsetup.msg[0] != 0) {
|
||||
if (reusableBuffer.modelSetup.msg[0] != 0) {
|
||||
POPUP_WARNING(STR_MODELIDUSED);
|
||||
SET_WARNING_INFO(reusableBuffer.modelsetup.msg, sizeof(reusableBuffer.modelsetup.msg), 0);
|
||||
SET_WARNING_INFO(reusableBuffer.modelSetup.msg, sizeof(reusableBuffer.modelSetup.msg), 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1118,20 +1118,26 @@ union ReusableBuffer
|
|||
char msg[64];
|
||||
uint8_t r9mPower;
|
||||
union {
|
||||
uint8_t pxx2_register_step;
|
||||
uint8_t pxx2_bind_step;
|
||||
struct {
|
||||
union {
|
||||
uint8_t registerStep;
|
||||
uint8_t bindStep;
|
||||
};
|
||||
uint32_t pxx2_bind_wait_timeout;
|
||||
uint8_t pxx2_register_rx_id[PXX2_LEN_RX_NAME];
|
||||
char pxx2_bind_candidate_receivers_ids[PXX2_MAX_RECEIVERS_PER_MODULE][PXX2_LEN_RX_NAME];
|
||||
char pxx2_bind_candidate_receivers_names[PXX2_MAX_RECEIVERS_PER_MODULE][3*PXX2_LEN_RX_NAME+1];
|
||||
uint8_t pxx2_bind_candidate_receivers_count;
|
||||
uint8_t pxx2_bind_selected_receiver_index;
|
||||
} modelsetup;
|
||||
uint32_t bindWaitTimeout;
|
||||
uint8_t registerPopupVerticalPosition;
|
||||
uint8_t registerPopupHorizontalPosition;
|
||||
int8_t registerPopupEditMode;
|
||||
char registerRxName[PXX2_LEN_RX_NAME];
|
||||
char bindCandidateReceiversIds[PXX2_MAX_RECEIVERS_PER_MODULE][PXX2_LEN_RX_NAME];
|
||||
char bindCandidateReceiversNames[PXX2_MAX_RECEIVERS_PER_MODULE][3*PXX2_LEN_RX_NAME+1];
|
||||
uint8_t bindCandidateReceiversCount;
|
||||
uint8_t bindSelectedReceiverIndex;
|
||||
} pxx2;
|
||||
};
|
||||
} modelSetup;
|
||||
|
||||
// 103 bytes
|
||||
struct
|
||||
{
|
||||
struct {
|
||||
int16_t midVals[NUM_STICKS+NUM_POTS+NUM_SLIDERS+NUM_MOUSE_ANALOGS];
|
||||
int16_t loVals[NUM_STICKS+NUM_POTS+NUM_SLIDERS+NUM_MOUSE_ANALOGS];
|
||||
int16_t hiVals[NUM_STICKS+NUM_POTS+NUM_SLIDERS+NUM_MOUSE_ANALOGS];
|
||||
|
@ -1148,8 +1154,7 @@ union ReusableBuffer
|
|||
|
||||
#if defined(SDCARD)
|
||||
// 274 bytes
|
||||
struct
|
||||
{
|
||||
struct {
|
||||
char lines[NUM_BODY_LINES][SD_SCREEN_FILE_LENGTH+1+1]; // the last char is used to store the flags (directory) of the line
|
||||
uint32_t available;
|
||||
uint16_t offset;
|
||||
|
@ -1158,8 +1163,7 @@ union ReusableBuffer
|
|||
} sdmanager;
|
||||
#endif
|
||||
|
||||
struct
|
||||
{
|
||||
struct {
|
||||
uint8_t stickMode;
|
||||
} generalSettings;
|
||||
|
||||
|
|
|
@ -58,7 +58,7 @@ bool Pxx2Pulses::setupRegisterFrame(uint8_t module)
|
|||
{
|
||||
addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_REGISTER);
|
||||
|
||||
if (reusableBuffer.modelsetup.pxx2_register_step == REGISTER_COUNTER_ID_RECEIVED) {
|
||||
if (reusableBuffer.modelSetup.pxx2.registerStep == REGISTER_COUNTER_ID_RECEIVED) {
|
||||
Pxx2Transport::addByte(0x01);
|
||||
for (uint8_t i=0; i<PXX2_LEN_RX_NAME; i++) {
|
||||
Pxx2Transport::addByte(0x00);
|
||||
|
@ -78,8 +78,8 @@ bool Pxx2Pulses::setupBindFrame(uint8_t module)
|
|||
{
|
||||
addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_BIND);
|
||||
|
||||
if (reusableBuffer.modelsetup.pxx2_bind_step == BIND_WAIT) {
|
||||
if (get_tmr10ms() > reusableBuffer.modelsetup.pxx2_bind_wait_timeout) {
|
||||
if (reusableBuffer.modelSetup.pxx2.bindStep == BIND_WAIT) {
|
||||
if (get_tmr10ms() > reusableBuffer.modelSetup.pxx2.bindWaitTimeout) {
|
||||
moduleSettings[module].mode = MODULE_MODE_NORMAL;
|
||||
POPUP_INFORMATION(STR_BIND_OK);
|
||||
}
|
||||
|
@ -87,10 +87,10 @@ bool Pxx2Pulses::setupBindFrame(uint8_t module)
|
|||
return false;
|
||||
}
|
||||
}
|
||||
else if (reusableBuffer.modelsetup.pxx2_bind_step == BIND_RX_NAME_SELECTED) {
|
||||
else if (reusableBuffer.modelSetup.pxx2.bindStep == BIND_RX_NAME_SELECTED) {
|
||||
Pxx2Transport::addByte(0x01);
|
||||
for (uint8_t i=0; i<PXX2_LEN_RX_NAME; i++) {
|
||||
Pxx2Transport::addByte(reusableBuffer.modelsetup.pxx2_bind_candidate_receivers_ids[reusableBuffer.modelsetup.pxx2_bind_selected_receiver_index][i]);
|
||||
Pxx2Transport::addByte(reusableBuffer.modelSetup.pxx2.bindCandidateReceiversIds[reusableBuffer.modelSetup.pxx2.bindSelectedReceiverIndex][i]);
|
||||
}
|
||||
Pxx2Transport::addByte(g_model.header.modelId[INTERNAL_MODULE]);
|
||||
}
|
||||
|
|
|
@ -29,8 +29,6 @@ void eeDeleteModel( uint8_t id ) ;
|
|||
bool eeCopyModel(uint8_t dst, uint8_t src);
|
||||
void eeSwapModels(uint8_t id1, uint8_t id2);
|
||||
|
||||
#define DISPLAY_PROGRESS_BAR(x)
|
||||
|
||||
#if defined(SDCARD)
|
||||
const char * eeBackupModel(uint8_t i_fileSrc);
|
||||
const char * eeRestoreModel(uint8_t i_fileDst, char *model_name);
|
||||
|
|
|
@ -615,9 +615,6 @@ void RlcFile::writeRlc(uint8_t i_fileId, uint8_t typ, uint8_t *buf, uint16_t i_l
|
|||
m_rlc_buf = buf;
|
||||
m_rlc_len = i_len;
|
||||
m_cur_rlc_len = 0;
|
||||
#if defined (EEPROM_PROGRESS_BAR)
|
||||
m_ratio = (typ == FILE_TYP_MODEL ? 100 : 10);
|
||||
#endif
|
||||
|
||||
do {
|
||||
nextRlcWriteStep();
|
||||
|
@ -742,17 +739,6 @@ void RlcFile::flush()
|
|||
ENABLE_SYNC_WRITE(false);
|
||||
}
|
||||
|
||||
#if defined (EEPROM_PROGRESS_BAR)
|
||||
void RlcFile::drawProgressBar(uint8_t x)
|
||||
{
|
||||
if (storageDirtyMsk || isWriting() || eeprom_buffer_size) {
|
||||
uint8_t len = storageDirtyMsk ? 1 : limit((uint8_t)1, (uint8_t)(7 - (m_rlc_len/m_ratio)), (uint8_t)7);
|
||||
lcdDrawFilledRect(x+1, 0, 5, FH, SOLID, ERASE);
|
||||
lcdDrawFilledRect(x+2, 7-len, 3, len);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// For conversions ...
|
||||
uint16_t eeLoadGeneralSettingsData()
|
||||
{
|
||||
|
|
|
@ -122,9 +122,6 @@ class RlcFile: public EFile
|
|||
uint8_t m_write1_byte;
|
||||
uint8_t m_write_len;
|
||||
uint8_t * m_write_buf;
|
||||
#if defined (EEPROM_PROGRESS_BAR)
|
||||
uint8_t m_ratio;
|
||||
#endif
|
||||
|
||||
public:
|
||||
|
||||
|
@ -147,10 +144,6 @@ class RlcFile: public EFile
|
|||
|
||||
// read from opened file and decode rlc-coded data
|
||||
uint16_t readRlc(uint8_t *buf, uint16_t i_len);
|
||||
|
||||
#if defined (EEPROM_PROGRESS_BAR)
|
||||
void drawProgressBar(uint8_t x);
|
||||
#endif
|
||||
};
|
||||
|
||||
extern RlcFile theFile; //used for any file operation
|
||||
|
@ -172,12 +165,6 @@ inline void eepromWriteProcess()
|
|||
theFile.nextWriteStep();
|
||||
}
|
||||
|
||||
#if defined (EEPROM_PROGRESS_BAR)
|
||||
#define DISPLAY_PROGRESS_BAR(x) theFile.drawProgressBar(x)
|
||||
#else
|
||||
#define DISPLAY_PROGRESS_BAR(x)
|
||||
#endif
|
||||
|
||||
bool eeCopyModel(uint8_t dst, uint8_t src);
|
||||
void eeSwapModels(uint8_t id1, uint8_t id2);
|
||||
void eeDeleteModel(uint8_t idx);
|
||||
|
|
|
@ -79,14 +79,14 @@ void processRegisterFrame(uint8_t module, uint8_t * frame)
|
|||
|
||||
if (frame[3] == 0x00) {
|
||||
// RX_NAME follows, we store it for the next step
|
||||
memcpy(reusableBuffer.modelsetup.pxx2_register_rx_id, &frame[4], PXX2_LEN_RX_NAME);
|
||||
reusableBuffer.modelsetup.pxx2_register_step = REGISTER_COUNTER_ID_RECEIVED;
|
||||
memcpy(reusableBuffer.modelSetup.pxx2.registerRxName, &frame[4], PXX2_LEN_RX_NAME);
|
||||
reusableBuffer.modelSetup.pxx2.registerStep = REGISTER_COUNTER_ID_RECEIVED;
|
||||
}
|
||||
else if (frame[3] == 0x01) {
|
||||
// RX_NAME + PASSWORD follow, we check they are good
|
||||
if (memcmp(&frame[4], reusableBuffer.modelsetup.pxx2_register_rx_id, PXX2_LEN_RX_NAME) == 0 &&
|
||||
if (memcmp(&frame[4], reusableBuffer.modelSetup.pxx2.registerRxName, PXX2_LEN_RX_NAME) == 0 &&
|
||||
memcmp(&frame[12], g_model.modelRegistrationID, PXX2_LEN_REGISTRATION_ID) == 0) {
|
||||
reusableBuffer.modelsetup.pxx2_register_step = REGISTER_OK;
|
||||
reusableBuffer.modelSetup.pxx2.registerStep = REGISTER_OK;
|
||||
moduleSettings[module].mode = MODULE_MODE_NORMAL;
|
||||
POPUP_INFORMATION(STR_REG_OK);
|
||||
}
|
||||
|
@ -101,15 +101,15 @@ void processBindFrame(uint8_t module, uint8_t * frame)
|
|||
|
||||
if (frame[3] == 0x00) {
|
||||
bool found = false;
|
||||
for (uint8_t i=0; i<reusableBuffer.modelsetup.pxx2_bind_candidate_receivers_count; i++) {
|
||||
if (memcmp(reusableBuffer.modelsetup.pxx2_bind_candidate_receivers_ids[i], &frame[4], PXX2_LEN_RX_NAME) == 0) {
|
||||
for (uint8_t i=0; i<reusableBuffer.modelSetup.pxx2.bindCandidateReceiversCount; i++) {
|
||||
if (memcmp(reusableBuffer.modelSetup.pxx2.bindCandidateReceiversIds[i], &frame[4], PXX2_LEN_RX_NAME) == 0) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found && reusableBuffer.modelsetup.pxx2_bind_candidate_receivers_count < PXX2_MAX_RECEIVERS_PER_MODULE) {
|
||||
memcpy(reusableBuffer.modelsetup.pxx2_bind_candidate_receivers_ids[reusableBuffer.modelsetup.pxx2_bind_candidate_receivers_count], &frame[4], PXX2_LEN_RX_NAME);
|
||||
char * c = reusableBuffer.modelsetup.pxx2_bind_candidate_receivers_names[reusableBuffer.modelsetup.pxx2_bind_candidate_receivers_count];
|
||||
if (!found && reusableBuffer.modelSetup.pxx2.bindCandidateReceiversCount < PXX2_MAX_RECEIVERS_PER_MODULE) {
|
||||
memcpy(reusableBuffer.modelSetup.pxx2.bindCandidateReceiversIds[reusableBuffer.modelSetup.pxx2.bindCandidateReceiversCount], &frame[4], PXX2_LEN_RX_NAME);
|
||||
char * c = reusableBuffer.modelSetup.pxx2.bindCandidateReceiversNames[reusableBuffer.modelSetup.pxx2.bindCandidateReceiversCount];
|
||||
for (uint8_t i=0; i<PXX2_LEN_RX_NAME; i++) {
|
||||
uint8_t byte = frame[4 + i];
|
||||
uint8_t quartet = (byte >> 4);
|
||||
|
@ -119,14 +119,14 @@ void processBindFrame(uint8_t module, uint8_t * frame)
|
|||
*c++ = ' ';
|
||||
}
|
||||
*c = '\0';
|
||||
++reusableBuffer.modelsetup.pxx2_bind_candidate_receivers_count;
|
||||
reusableBuffer.modelsetup.pxx2_bind_step = BIND_RX_NAME_RECEIVED;
|
||||
++reusableBuffer.modelSetup.pxx2.bindCandidateReceiversCount;
|
||||
reusableBuffer.modelSetup.pxx2.bindStep = BIND_RX_NAME_RECEIVED;
|
||||
}
|
||||
}
|
||||
else if (frame[3] == 0x01) {
|
||||
if (memcmp(reusableBuffer.modelsetup.pxx2_bind_candidate_receivers_ids[reusableBuffer.modelsetup.pxx2_bind_selected_receiver_index], &frame[4], PXX2_LEN_RX_NAME) == 0) {
|
||||
reusableBuffer.modelsetup.pxx2_bind_step = BIND_WAIT;
|
||||
reusableBuffer.modelsetup.pxx2_bind_wait_timeout = get_tmr10ms() + 30;
|
||||
if (memcmp(reusableBuffer.modelSetup.pxx2.bindCandidateReceiversIds[reusableBuffer.modelSetup.pxx2.bindSelectedReceiverIndex], &frame[4], PXX2_LEN_RX_NAME) == 0) {
|
||||
reusableBuffer.modelSetup.pxx2.bindStep = BIND_WAIT;
|
||||
reusableBuffer.modelSetup.pxx2.bindWaitTimeout = get_tmr10ms() + 30;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue