mirror of
https://github.com/opentx/opentx.git
synced 2025-07-24 00:35:18 +03:00
Allow registration from hardware setup
This commit is contained in:
parent
2dc061ec44
commit
cbe2ce9887
8 changed files with 107 additions and 90 deletions
|
@ -254,8 +254,8 @@ enum MenuModelSetupItems {
|
|||
|
||||
void onPXX2BindMenu(const char * result)
|
||||
{
|
||||
reusableBuffer.modelSetup.pxx2.bindSelectedReceiverIndex = (result - reusableBuffer.modelSetup.pxx2.bindCandidateReceiversNames[0]) / sizeof(reusableBuffer.modelSetup.pxx2.bindCandidateReceiversNames[0]);
|
||||
reusableBuffer.modelSetup.pxx2.bindStep = BIND_RX_NAME_SELECTED;
|
||||
reusableBuffer.pxx2Setup.pxx2.bindSelectedReceiverIndex = (result - reusableBuffer.pxx2Setup.pxx2.bindCandidateReceiversNames[0]) / sizeof(reusableBuffer.pxx2Setup.pxx2.bindCandidateReceiversNames[0]);
|
||||
reusableBuffer.pxx2Setup.pxx2.bindStep = BIND_RX_NAME_SELECTED;
|
||||
}
|
||||
|
||||
void onBindMenu(const char * result)
|
||||
|
@ -290,9 +290,9 @@ void runPopupRegister(event_t event)
|
|||
uint8_t backupVerticalOffset = menuVerticalOffset;
|
||||
int8_t backupEditMode = s_editMode;
|
||||
|
||||
menuVerticalPosition = reusableBuffer.modelSetup.pxx2.registerPopupVerticalPosition;
|
||||
menuHorizontalPosition = reusableBuffer.modelSetup.pxx2.registerPopupHorizontalPosition;
|
||||
s_editMode = reusableBuffer.modelSetup.pxx2.registerPopupEditMode;
|
||||
menuVerticalPosition = reusableBuffer.pxx2Setup.pxx2.registerPopupVerticalPosition;
|
||||
menuHorizontalPosition = reusableBuffer.pxx2Setup.pxx2.registerPopupHorizontalPosition;
|
||||
s_editMode = reusableBuffer.pxx2Setup.pxx2.registerPopupEditMode;
|
||||
|
||||
switch (event) {
|
||||
case EVT_KEY_BREAK(KEY_ENTER):
|
||||
|
@ -301,7 +301,7 @@ void runPopupRegister(event_t event)
|
|||
}
|
||||
else if (menuHorizontalPosition == 0) {
|
||||
// [Enter] pressed
|
||||
reusableBuffer.modelSetup.pxx2.registerStep = REGISTER_RX_NAME_SELECTED;
|
||||
reusableBuffer.pxx2Setup.pxx2.registerStep = REGISTER_RX_NAME_SELECTED;
|
||||
backupEditMode = EDIT_MODIFY_FIELD; // so that the [Register] button blinks and the REGISTER process can continue
|
||||
}
|
||||
// no break
|
||||
|
@ -326,17 +326,17 @@ void runPopupRegister(event_t event)
|
|||
lcdDrawText(WARNING_LINE_X, WARNING_LINE_Y - 3, STR_REG_ID);
|
||||
editName(WARNING_LINE_X + 8*FW, WARNING_LINE_Y - 3, g_model.modelRegistrationID, PXX2_LEN_REGISTRATION_ID, event, menuVerticalPosition == 0);
|
||||
|
||||
if (reusableBuffer.modelSetup.pxx2.registerStep >= REGISTER_RX_NAME_RECEIVED) {
|
||||
if (reusableBuffer.pxx2Setup.pxx2.registerStep >= REGISTER_RX_NAME_RECEIVED) {
|
||||
lcdDrawText(WARNING_LINE_X, WARNING_LINE_Y - 2 + FH, STR_RX_NAME);
|
||||
editName(WARNING_LINE_X + 8*FW, WARNING_LINE_Y - 2 + FH, reusableBuffer.modelSetup.pxx2.registerRxName, PXX2_LEN_RX_NAME, event, menuVerticalPosition == 1);
|
||||
editName(WARNING_LINE_X + 8*FW, WARNING_LINE_Y - 2 + FH, reusableBuffer.pxx2Setup.pxx2.registerRxName, PXX2_LEN_RX_NAME, event, menuVerticalPosition == 1);
|
||||
}
|
||||
|
||||
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;
|
||||
reusableBuffer.pxx2Setup.pxx2.registerPopupVerticalPosition = menuVerticalPosition;
|
||||
reusableBuffer.pxx2Setup.pxx2.registerPopupHorizontalPosition = menuHorizontalPosition;
|
||||
reusableBuffer.pxx2Setup.pxx2.registerPopupEditMode = s_editMode;
|
||||
}
|
||||
|
||||
menuVerticalPosition = ITEM_MODEL_INTERNAL_MODULE_PXX2_RANGE_REGISTER + HEADER_LINE;
|
||||
|
@ -463,7 +463,7 @@ void menuModelSetup(event_t event)
|
|||
TITLE(STR_MENUSETUP);
|
||||
|
||||
if (event == EVT_ENTRY) {
|
||||
reusableBuffer.modelSetup.r9mPower = g_model.moduleData[EXTERNAL_MODULE].pxx.power;
|
||||
reusableBuffer.pxx2Setup.r9mPower = g_model.moduleData[EXTERNAL_MODULE].pxx.power;
|
||||
}
|
||||
|
||||
uint8_t sub = menuVerticalPosition - HEADER_LINE;
|
||||
|
@ -1165,10 +1165,11 @@ void menuModelSetup(event_t event)
|
|||
if (moduleSettings[moduleIdx].mode == MODULE_MODE_NORMAL && s_editMode > 0) {
|
||||
if (menuHorizontalPosition == 1 && event == EVT_KEY_FIRST(KEY_ENTER)) {
|
||||
moduleSettings[moduleIdx].mode = MODULE_MODE_REGISTER;
|
||||
reusableBuffer.modelSetup.pxx2.registerStep = REGISTER_START;
|
||||
reusableBuffer.modelSetup.pxx2.registerPopupVerticalPosition = 0;
|
||||
reusableBuffer.modelSetup.pxx2.registerPopupHorizontalPosition = 0;
|
||||
reusableBuffer.modelSetup.pxx2.registerPopupEditMode = 0;
|
||||
reusableBuffer.pxx2Setup.pxx2.registerStep = REGISTER_START;
|
||||
memcpy(reusableBuffer.pxx2Setup.pxx2.registrationID, g_model.modelRegistrationID, PXX2_LEN_REGISTRATION_ID);
|
||||
reusableBuffer.pxx2Setup.pxx2.registerPopupVerticalPosition = 0;
|
||||
reusableBuffer.pxx2Setup.pxx2.registerPopupHorizontalPosition = 0;
|
||||
reusableBuffer.pxx2Setup.pxx2.registerPopupEditMode = 0;
|
||||
s_editMode = 0;
|
||||
POPUP_INPUT("", runPopupRegister);
|
||||
}
|
||||
|
@ -1266,16 +1267,16 @@ void menuModelSetup(event_t event)
|
|||
if (attr) {
|
||||
if (menuHorizontalPosition == 0) {
|
||||
if (event == EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
reusableBuffer.modelSetup.pxx2.bindStep = BIND_START;
|
||||
reusableBuffer.modelSetup.pxx2.bindCandidateReceiversCount = 0;
|
||||
reusableBuffer.pxx2Setup.pxx2.bindStep = BIND_START;
|
||||
reusableBuffer.pxx2Setup.pxx2.bindCandidateReceiversCount = 0;
|
||||
moduleSettings[moduleIdx].mode ^= MODULE_MODE_BIND;
|
||||
}
|
||||
if (moduleSettings[moduleIdx].mode == MODULE_MODE_BIND) {
|
||||
s_editMode = 1;
|
||||
if (reusableBuffer.modelSetup.pxx2.bindStep == BIND_RX_NAME_RECEIVED) {
|
||||
popupMenuItemsCount = min<uint8_t>(reusableBuffer.modelSetup.pxx2.bindCandidateReceiversCount, PXX2_MAX_RECEIVERS_PER_MODULE);
|
||||
if (reusableBuffer.pxx2Setup.pxx2.bindStep == BIND_RX_NAME_RECEIVED) {
|
||||
popupMenuItemsCount = min<uint8_t>(reusableBuffer.pxx2Setup.pxx2.bindCandidateReceiversCount, PXX2_MAX_RECEIVERS_PER_MODULE);
|
||||
for (uint8_t i=0; i<popupMenuItemsCount; i++) {
|
||||
popupMenuItems[i] = reusableBuffer.modelSetup.pxx2.bindCandidateReceiversNames[i];
|
||||
popupMenuItems[i] = reusableBuffer.pxx2Setup.pxx2.bindCandidateReceiversNames[i];
|
||||
}
|
||||
POPUP_MENU_START(onPXX2BindMenu);
|
||||
}
|
||||
|
@ -1283,8 +1284,8 @@ void menuModelSetup(event_t event)
|
|||
else {
|
||||
s_editMode = 0;
|
||||
}
|
||||
if (reusableBuffer.modelSetup.pxx2.bindStep == BIND_OK) {
|
||||
str2zchar(g_model.moduleData[moduleIdx].pxx2.receivers[receiverIdx].rxName, reusableBuffer.modelSetup.pxx2.bindCandidateReceiversNames[reusableBuffer.modelSetup.pxx2.bindSelectedReceiverIndex], PXX2_LEN_RX_NAME);
|
||||
if (reusableBuffer.pxx2Setup.pxx2.bindStep == BIND_OK) {
|
||||
str2zchar(g_model.moduleData[moduleIdx].pxx2.receivers[receiverIdx].rxName, reusableBuffer.pxx2Setup.pxx2.bindCandidateReceiversNames[reusableBuffer.pxx2Setup.pxx2.bindSelectedReceiverIndex], PXX2_LEN_RX_NAME);
|
||||
}
|
||||
}
|
||||
else if (menuHorizontalPosition == 1 && s_editMode > 0) {
|
||||
|
@ -1603,11 +1604,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.pxx2Setup.r9mPower != g_model.moduleData[moduleIdx].pxx.power) {
|
||||
if((reusableBuffer.pxx2Setup.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.pxx2Setup.r9mPower = g_model.moduleData[moduleIdx].pxx.power;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -158,12 +158,14 @@ enum MenuRadioHardwareItems {
|
|||
#define HW_SETTINGS_COLUMN1 30
|
||||
#define HW_SETTINGS_COLUMN2 (30 + 5*FW)
|
||||
|
||||
void runPopupHWSetupRegister(event_t event)
|
||||
void runHWPopupRegister(event_t event)
|
||||
{
|
||||
menuVerticalPosition = reusableBuffer.hardwareSetup.pxx2.registerPopupVerticalPosition;
|
||||
menuHorizontalPosition = reusableBuffer.hardwareSetup.pxx2.registerPopupHorizontalPosition;
|
||||
s_editMode = reusableBuffer.hardwareSetup.pxx2.registerPopupEditMode;
|
||||
uint8_t backupVerticalOffset = menuVerticalOffset;
|
||||
int8_t backupEditMode = s_editMode;
|
||||
|
||||
menuVerticalPosition = reusableBuffer.pxx2Setup.pxx2.registerPopupVerticalPosition;
|
||||
menuHorizontalPosition = reusableBuffer.pxx2Setup.pxx2.registerPopupHorizontalPosition;
|
||||
s_editMode = reusableBuffer.pxx2Setup.pxx2.registerPopupEditMode;
|
||||
|
||||
switch (event) {
|
||||
case EVT_KEY_BREAK(KEY_ENTER):
|
||||
|
@ -172,7 +174,8 @@ void runPopupHWSetupRegister(event_t event)
|
|||
}
|
||||
else if (menuHorizontalPosition == 0) {
|
||||
// [Enter] pressed
|
||||
moduleSettings[INTERNAL_MODULE].mode = MODULE_MODE_REGISTER;
|
||||
reusableBuffer.pxx2Setup.pxx2.registerStep = REGISTER_RX_NAME_SELECTED;
|
||||
backupEditMode = EDIT_MODIFY_FIELD; // so that the [Register] button blinks and the REGISTER process can continue
|
||||
}
|
||||
// no break
|
||||
|
||||
|
@ -193,24 +196,26 @@ void runPopupHWSetupRegister(event_t event)
|
|||
|
||||
drawMessageBox();
|
||||
|
||||
lcdDrawText(WARNING_LINE_X, WARNING_LINE_Y - 3, "Reg. ID");
|
||||
editName(WARNING_LINE_X + 8*FW, WARNING_LINE_Y - 3, g_eeGeneral.ownerRegistrationID, PXX2_LEN_REGISTRATION_ID, event, menuVerticalPosition == 0);
|
||||
lcdDrawText(WARNING_LINE_X, WARNING_LINE_Y - 3, STR_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.hardwareSetup.pxx2.registerRxName, PXX2_LEN_RX_NAME, event, menuVerticalPosition == 1);
|
||||
if (reusableBuffer.pxx2Setup.pxx2.registerStep >= REGISTER_RX_NAME_RECEIVED) {
|
||||
lcdDrawText(WARNING_LINE_X, WARNING_LINE_Y - 2 + FH, STR_RX_NAME);
|
||||
editName(WARNING_LINE_X + 8*FW, WARNING_LINE_Y - 2 + FH, reusableBuffer.pxx2Setup.pxx2.registerRxName, PXX2_LEN_RX_NAME, event, menuVerticalPosition == 1);
|
||||
}
|
||||
|
||||
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.hardwareSetup.pxx2.registerPopupVerticalPosition = menuVerticalPosition;
|
||||
reusableBuffer.hardwareSetup.pxx2.registerPopupHorizontalPosition = menuHorizontalPosition;
|
||||
reusableBuffer.hardwareSetup.pxx2.registerPopupEditMode = s_editMode;
|
||||
reusableBuffer.pxx2Setup.pxx2.registerPopupVerticalPosition = menuVerticalPosition;
|
||||
reusableBuffer.pxx2Setup.pxx2.registerPopupHorizontalPosition = menuHorizontalPosition;
|
||||
reusableBuffer.pxx2Setup.pxx2.registerPopupEditMode = s_editMode;
|
||||
}
|
||||
|
||||
menuVerticalPosition = ITEM_RADIO_REGISTER_RECEIVER + HEADER_LINE;
|
||||
menuVerticalPosition = ITEM_RADIO_OWNER_ID + HEADER_LINE;
|
||||
menuHorizontalPosition = 1;
|
||||
menuVerticalOffset = backupVerticalOffset;
|
||||
s_editMode = (moduleSettings[INTERNAL_MODULE].mode == MODULE_MODE_REGISTER ? EDIT_MODIFY_FIELD : 0);
|
||||
s_editMode = backupEditMode;
|
||||
}
|
||||
|
||||
void menuRadioHardware(event_t event)
|
||||
|
@ -373,17 +378,27 @@ void menuRadioHardware(event_t event)
|
|||
lcdDrawText(HW_SETTINGS_COLUMN2, y, "[Register]", attr );
|
||||
if (attr) {
|
||||
if (moduleSettings[INTERNAL_MODULE].mode == MODULE_MODE_NORMAL && s_editMode > 0) {
|
||||
|
||||
reusableBuffer.hardwareSetup.pxx2.registerPopupVerticalPosition = 0;
|
||||
reusableBuffer.hardwareSetup.pxx2.registerPopupHorizontalPosition = 0;
|
||||
reusableBuffer.hardwareSetup.pxx2.registerPopupEditMode = 0;
|
||||
if (event == EVT_KEY_FIRST(KEY_ENTER)) {
|
||||
moduleSettings[INTERNAL_MODULE].mode = MODULE_MODE_REGISTER;
|
||||
reusableBuffer.pxx2Setup.pxx2.registerStep = REGISTER_START;
|
||||
memcpy(reusableBuffer.pxx2Setup.pxx2.registrationID, g_model.modelRegistrationID, PXX2_LEN_REGISTRATION_ID);
|
||||
reusableBuffer.pxx2Setup.pxx2.registerPopupVerticalPosition = 0;
|
||||
reusableBuffer.pxx2Setup.pxx2.registerPopupHorizontalPosition = 0;
|
||||
reusableBuffer.pxx2Setup.pxx2.registerPopupEditMode = 0;
|
||||
s_editMode = 0;
|
||||
POPUP_INPUT("", runPopupHWSetupRegister);
|
||||
|
||||
POPUP_INPUT("", runHWPopupRegister);
|
||||
}
|
||||
if (s_editMode == 0) {
|
||||
else if (menuHorizontalPosition == 0) {
|
||||
moduleSettings[INTERNAL_MODULE].mode = MODULE_MODE_RANGECHECK;
|
||||
}
|
||||
}
|
||||
if (s_editMode == 0 && !warningText) {
|
||||
moduleSettings[INTERNAL_MODULE].mode = MODULE_MODE_NORMAL;
|
||||
}
|
||||
if (moduleSettings[INTERNAL_MODULE].mode == MODULE_MODE_NORMAL) {
|
||||
// REGISTER finished
|
||||
s_editMode = 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.pxx2Setup.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.pxx2Setup.r9mPower != g_model.moduleData[moduleIdx].pxx.power) {
|
||||
if((reusableBuffer.pxx2Setup.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.pxx2Setup.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.pxx2Setup.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.pxx2Setup.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.pxx2Setup.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.pxx2Setup.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.pxx2Setup.r9mPower != g_model.moduleData[moduleIdx].pxx.power) {
|
||||
if((reusableBuffer.pxx2Setup.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.pxx2Setup.r9mPower = g_model.moduleData[moduleIdx].pxx.power;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.pxx2Setup.msg;
|
||||
|
||||
memset(reusableBuffer.modelSetup.msg, 0, sizeof(reusableBuffer.modelSetup.msg));
|
||||
memset(reusableBuffer.pxx2Setup.msg, 0, sizeof(reusableBuffer.pxx2Setup.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.pxx2Setup.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.pxx2Setup.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.pxx2Setup.msg[0] != 0) {
|
||||
POPUP_WARNING(STR_MODELIDUSED);
|
||||
SET_WARNING_INFO(reusableBuffer.modelSetup.msg, sizeof(reusableBuffer.modelSetup.msg), 0);
|
||||
SET_WARNING_INFO(reusableBuffer.pxx2Setup.msg, sizeof(reusableBuffer.pxx2Setup.msg), 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1129,12 +1129,13 @@ union ReusableBuffer
|
|||
uint8_t registerPopupHorizontalPosition;
|
||||
int8_t registerPopupEditMode;
|
||||
char registerRxName[PXX2_LEN_RX_NAME];
|
||||
char registrationID[PXX2_LEN_REGISTRATION_ID];
|
||||
char bindCandidateReceiversNames[PXX2_MAX_RECEIVERS_PER_MODULE][PXX2_LEN_RX_NAME];
|
||||
uint8_t bindCandidateReceiversCount;
|
||||
uint8_t bindSelectedReceiverIndex;
|
||||
} pxx2;
|
||||
};
|
||||
} modelSetup, hardwareSetup;
|
||||
} pxx2Setup;
|
||||
|
||||
// 103 bytes
|
||||
struct {
|
||||
|
|
|
@ -58,13 +58,13 @@ bool Pxx2Pulses::setupRegisterFrame(uint8_t module)
|
|||
{
|
||||
addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_REGISTER);
|
||||
|
||||
if (reusableBuffer.modelSetup.pxx2.registerStep == REGISTER_RX_NAME_SELECTED) {
|
||||
if (reusableBuffer.pxx2Setup.pxx2.registerStep == REGISTER_RX_NAME_SELECTED) {
|
||||
Pxx2Transport::addByte(0x01);
|
||||
for (uint8_t i=0; i<PXX2_LEN_RX_NAME; i++) {
|
||||
Pxx2Transport::addByte(zchar2char(reusableBuffer.modelSetup.pxx2.registerRxName[i]));
|
||||
Pxx2Transport::addByte(zchar2char(reusableBuffer.pxx2Setup.pxx2.registerRxName[i]));
|
||||
}
|
||||
for (uint8_t i=0; i<PXX2_LEN_REGISTRATION_ID; i++) {
|
||||
Pxx2Transport::addByte(zchar2char(g_model.modelRegistrationID[i]));
|
||||
Pxx2Transport::addByte(zchar2char(reusableBuffer.pxx2Setup.pxx2.registrationID[i]));
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -78,27 +78,27 @@ bool Pxx2Pulses::setupBindFrame(uint8_t module)
|
|||
{
|
||||
addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_BIND);
|
||||
|
||||
if (reusableBuffer.modelSetup.pxx2.bindStep == BIND_WAIT) {
|
||||
if (get_tmr10ms() > reusableBuffer.modelSetup.pxx2.bindWaitTimeout) {
|
||||
if (reusableBuffer.pxx2Setup.pxx2.bindStep == BIND_WAIT) {
|
||||
if (get_tmr10ms() > reusableBuffer.pxx2Setup.pxx2.bindWaitTimeout) {
|
||||
moduleSettings[module].mode = MODULE_MODE_NORMAL;
|
||||
reusableBuffer.modelSetup.pxx2.bindStep = BIND_OK;
|
||||
reusableBuffer.pxx2Setup.pxx2.bindStep = BIND_OK;
|
||||
POPUP_INFORMATION(STR_BIND_OK);
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (reusableBuffer.modelSetup.pxx2.bindStep == BIND_RX_NAME_SELECTED) {
|
||||
else if (reusableBuffer.pxx2Setup.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.bindCandidateReceiversNames[reusableBuffer.modelSetup.pxx2.bindSelectedReceiverIndex][i]);
|
||||
Pxx2Transport::addByte(reusableBuffer.pxx2Setup.pxx2.bindCandidateReceiversNames[reusableBuffer.pxx2Setup.pxx2.bindSelectedReceiverIndex][i]);
|
||||
}
|
||||
Pxx2Transport::addByte(g_model.header.modelId[INTERNAL_MODULE]);
|
||||
}
|
||||
else {
|
||||
Pxx2Transport::addByte(0x00);
|
||||
for (uint8_t i=0; i<PXX2_LEN_REGISTRATION_ID; i++) {
|
||||
Pxx2Transport::addByte(zchar2char(g_model.modelRegistrationID[i]));
|
||||
Pxx2Transport::addByte(zchar2char(reusableBuffer.pxx2Setup.pxx2.registrationID[i]));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -77,16 +77,16 @@ void processRegisterFrame(uint8_t module, uint8_t * frame)
|
|||
return;
|
||||
}
|
||||
|
||||
if (frame[3] == 0x00 && reusableBuffer.modelSetup.pxx2.registerStep == REGISTER_START) {
|
||||
if (frame[3] == 0x00 && reusableBuffer.pxx2Setup.pxx2.registerStep == REGISTER_START) {
|
||||
// RX_NAME follows, we store it for the next step
|
||||
str2zchar(reusableBuffer.modelSetup.pxx2.registerRxName, (const char *)&frame[4], PXX2_LEN_RX_NAME);
|
||||
reusableBuffer.modelSetup.pxx2.registerStep = REGISTER_RX_NAME_RECEIVED;
|
||||
str2zchar(reusableBuffer.pxx2Setup.pxx2.registerRxName, (const char *)&frame[4], PXX2_LEN_RX_NAME);
|
||||
reusableBuffer.pxx2Setup.pxx2.registerStep = REGISTER_RX_NAME_RECEIVED;
|
||||
}
|
||||
else if (frame[3] == 0x01 && reusableBuffer.modelSetup.pxx2.registerStep == REGISTER_RX_NAME_SELECTED) {
|
||||
else if (frame[3] == 0x01 && reusableBuffer.pxx2Setup.pxx2.registerStep == REGISTER_RX_NAME_SELECTED) {
|
||||
// RX_NAME + PASSWORD follow, we check they are good
|
||||
if (cmpStrWithZchar((char *)&frame[4], reusableBuffer.modelSetup.pxx2.registerRxName, PXX2_LEN_RX_NAME) &&
|
||||
cmpStrWithZchar((char *)&frame[12], g_model.modelRegistrationID, PXX2_LEN_REGISTRATION_ID)) {
|
||||
reusableBuffer.modelSetup.pxx2.registerStep = REGISTER_OK;
|
||||
if (cmpStrWithZchar((char *)&frame[4], reusableBuffer.pxx2Setup.pxx2.registerRxName, PXX2_LEN_RX_NAME) &&
|
||||
cmpStrWithZchar((char *)&frame[12], reusableBuffer.pxx2Setup.pxx2.registrationID, PXX2_LEN_REGISTRATION_ID)) {
|
||||
reusableBuffer.pxx2Setup.pxx2.registerStep = REGISTER_OK;
|
||||
moduleSettings[module].mode = MODULE_MODE_NORMAL;
|
||||
POPUP_INFORMATION(STR_REG_OK);
|
||||
}
|
||||
|
@ -101,22 +101,22 @@ void processBindFrame(uint8_t module, uint8_t * frame)
|
|||
|
||||
if (frame[3] == 0x00) {
|
||||
bool found = false;
|
||||
for (uint8_t i=0; i<reusableBuffer.modelSetup.pxx2.bindCandidateReceiversCount; i++) {
|
||||
if (memcmp(reusableBuffer.modelSetup.pxx2.bindCandidateReceiversNames[i], &frame[4], PXX2_LEN_RX_NAME) == 0) {
|
||||
for (uint8_t i=0; i<reusableBuffer.pxx2Setup.pxx2.bindCandidateReceiversCount; i++) {
|
||||
if (memcmp(reusableBuffer.pxx2Setup.pxx2.bindCandidateReceiversNames[i], &frame[4], PXX2_LEN_RX_NAME) == 0) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found && reusableBuffer.modelSetup.pxx2.bindCandidateReceiversCount < PXX2_MAX_RECEIVERS_PER_MODULE) {
|
||||
memcpy(reusableBuffer.modelSetup.pxx2.bindCandidateReceiversNames[reusableBuffer.modelSetup.pxx2.bindCandidateReceiversCount], &frame[4], PXX2_LEN_RX_NAME);
|
||||
++reusableBuffer.modelSetup.pxx2.bindCandidateReceiversCount;
|
||||
reusableBuffer.modelSetup.pxx2.bindStep = BIND_RX_NAME_RECEIVED;
|
||||
if (!found && reusableBuffer.pxx2Setup.pxx2.bindCandidateReceiversCount < PXX2_MAX_RECEIVERS_PER_MODULE) {
|
||||
memcpy(reusableBuffer.pxx2Setup.pxx2.bindCandidateReceiversNames[reusableBuffer.pxx2Setup.pxx2.bindCandidateReceiversCount], &frame[4], PXX2_LEN_RX_NAME);
|
||||
++reusableBuffer.pxx2Setup.pxx2.bindCandidateReceiversCount;
|
||||
reusableBuffer.pxx2Setup.pxx2.bindStep = BIND_RX_NAME_RECEIVED;
|
||||
}
|
||||
}
|
||||
else if (frame[3] == 0x01) {
|
||||
if (memcmp(reusableBuffer.modelSetup.pxx2.bindCandidateReceiversNames[reusableBuffer.modelSetup.pxx2.bindSelectedReceiverIndex], &frame[4], PXX2_LEN_RX_NAME) == 0) {
|
||||
reusableBuffer.modelSetup.pxx2.bindStep = BIND_WAIT;
|
||||
reusableBuffer.modelSetup.pxx2.bindWaitTimeout = get_tmr10ms() + 30;
|
||||
if (memcmp(reusableBuffer.pxx2Setup.pxx2.bindCandidateReceiversNames[reusableBuffer.pxx2Setup.pxx2.bindSelectedReceiverIndex], &frame[4], PXX2_LEN_RX_NAME) == 0) {
|
||||
reusableBuffer.pxx2Setup.pxx2.bindStep = BIND_WAIT;
|
||||
reusableBuffer.pxx2Setup.pxx2.bindWaitTimeout = get_tmr10ms() + 30;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue