diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 026da16ed..14b8bc4ca 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -111,9 +111,6 @@ enum MenuModelSetupItems { ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_3_LABEL, ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_3_OPTIONS, ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_3_BIND_SHARE, - ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_4_LABEL, - ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_4_OPTIONS, - ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_4_BIND_SHARE, #endif ITEM_MODEL_EXTERNAL_MODULE_LABEL, ITEM_MODEL_EXTERNAL_MODULE_MODE, @@ -148,9 +145,6 @@ enum MenuModelSetupItems { ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_3_LABEL, ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_3_OPTIONS, ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_3_BIND_SHARE, - ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_4_LABEL, - ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_4_OPTIONS, - ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_4_BIND_SHARE, #if defined(PCBSKY9X) && !defined(REVA) ITEM_MODEL_EXTRA_MODULE_LABEL, ITEM_MODEL_EXTRA_MODULE_CHANNELS, @@ -474,9 +468,6 @@ void menuModelSetup(event_t event) IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 1, 0), // Receiver3 Name + Add/Del buttons IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 2, 0), // Receiver3 Pinmap IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 2, 1), // Receiver3 Bind/Share - IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 2, 0), // Receiver4 Name + Add/Del buttons - IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 3, 0), // Receiver4 Pinmap - IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 3, 1), // Receiver4 Bind/Share LABEL(ExternalModule), EXTERNAL_MODULE_MODE_ROWS, @@ -502,9 +493,6 @@ void menuModelSetup(event_t event) IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 1, 0), // Receiver3 Name + Add/Del buttons IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 2, 0), // Receiver3 Pinmap IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 2, 1), // Receiver3 Bind/Share - IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 2, 0), // Receiver4 Name + Add/Del buttons - IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 3, 0), // Receiver4 Pinmap - IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 3, 1), // Receiver4 Bind/Share TRAINER_ROWS }); @@ -1275,11 +1263,9 @@ void menuModelSetup(event_t event) case ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_1_LABEL: case ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_2_LABEL: case ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_3_LABEL: - case ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_4_LABEL: case ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_1_LABEL: case ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_2_LABEL: case ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_3_LABEL: - case ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_4_LABEL: { uint8_t receiverIdx = CURRENT_RECEIVER_EDITED(k); uint8_t moduleIdx = CURRENT_MODULE_EDITED(k); @@ -1321,7 +1307,7 @@ void menuModelSetup(event_t event) lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_SET, attr); if (event == EVT_KEY_BREAK(KEY_ENTER) && attr) { g_moduleIdx = CURRENT_MODULE_EDITED(k); - memclear(&reusableBuffer.moduleSettings, sizeof(reusableBuffer.moduleSettings)); + memclear(&reusableBuffer.hardwareAndSettings, sizeof(reusableBuffer.hardwareAndSettings)); pushMenu(menuModelModuleOptions); } break; @@ -1329,19 +1315,17 @@ void menuModelSetup(event_t event) case ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_1_OPTIONS: case ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_2_OPTIONS: case ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_3_OPTIONS: - case ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_4_OPTIONS: case ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_1_OPTIONS: case ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_2_OPTIONS: case ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_3_OPTIONS: - case ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_4_OPTIONS: lcdDrawText(INDENT_WIDTH * 2, y, STR_OPTIONS); lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_SET, attr); if (event == EVT_KEY_BREAK(KEY_ENTER) && attr) { g_moduleIdx = CURRENT_MODULE_EDITED(k); uint8_t receiverIdx = CURRENT_RECEIVER_EDITED(k); uint8_t receiverSlot = g_model.moduleData[g_moduleIdx].pxx2.getReceiverSlot(receiverIdx) - 1; - memclear(&reusableBuffer.receiverSettings, sizeof(reusableBuffer.receiverSettings)); - reusableBuffer.receiverSettings.receiverId = receiverSlot; + memclear(&reusableBuffer.hardwareAndSettings, sizeof(reusableBuffer.hardwareAndSettings)); + reusableBuffer.hardwareAndSettings.receiverSettings.receiverId = receiverSlot; pushMenu(menuModelReceiverOptions); } break; @@ -1349,11 +1333,9 @@ void menuModelSetup(event_t event) case ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_1_BIND_SHARE: case ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_2_BIND_SHARE: case ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_3_BIND_SHARE: - case ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_4_BIND_SHARE: case ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_1_BIND_SHARE: case ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_2_BIND_SHARE: case ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_3_BIND_SHARE: - case ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_4_BIND_SHARE: { uint8_t moduleIdx = CURRENT_MODULE_EDITED(k); uint8_t receiverIdx = CURRENT_RECEIVER_EDITED(k); @@ -1961,9 +1943,9 @@ void menuModelFailsafe(event_t event) void onTxOptionsUpdateConfirm(const char * result) { if (result == STR_OK) { - reusableBuffer.moduleSettings.state = PXX2_SETTINGS_WRITE; - reusableBuffer.moduleSettings.dirty = 2; - reusableBuffer.moduleSettings.timeout = 0; + reusableBuffer.hardwareAndSettings.moduleSettings.state = PXX2_SETTINGS_WRITE; + reusableBuffer.hardwareAndSettings.moduleSettings.dirty = 2; + reusableBuffer.hardwareAndSettings.moduleSettings.timeout = 0; moduleSettings[g_moduleIdx].mode = MODULE_MODE_MODULE_SETTINGS; } else { @@ -1984,7 +1966,7 @@ void menuModelModuleOptions(event_t event) if (menuEvent) { moduleSettings[g_moduleIdx].mode = MODULE_MODE_NORMAL; - if (reusableBuffer.moduleSettings.dirty) { + if (reusableBuffer.hardwareAndSettings.moduleSettings.dirty) { abortPopMenu(); POPUP_CONFIRMATION("Update TX options?", onTxOptionsUpdateConfirm); } @@ -1993,7 +1975,7 @@ void menuModelModuleOptions(event_t event) } } - if (reusableBuffer.moduleSettings.dirty == 2 && reusableBuffer.moduleSettings.state == PXX2_SETTINGS_OK) { + if (reusableBuffer.hardwareAndSettings.moduleSettings.dirty == 2 && reusableBuffer.hardwareAndSettings.moduleSettings.state == PXX2_SETTINGS_OK) { popMenu(); } @@ -2004,13 +1986,13 @@ void menuModelModuleOptions(event_t event) if (event == EVT_ENTRY) { #if defined(SIMU) - reusableBuffer.moduleSettings.state = PXX2_SETTINGS_OK; + reusableBuffer.hardwareAndSettings.moduleSettings.state = PXX2_SETTINGS_OK; #else moduleSettings[g_moduleIdx].mode = MODULE_MODE_MODULE_SETTINGS; #endif } - if (reusableBuffer.moduleSettings.state == PXX2_SETTINGS_OK) { + if (reusableBuffer.hardwareAndSettings.moduleSettings.state == PXX2_SETTINGS_OK) { for (uint8_t k=0; k(16, reusableBuffer.receiverSettings.outputsCount); + auto outputsCount = min(16, reusableBuffer.hardwareAndSettings.receiverSettings.outputsCount); SIMPLE_SUBMENU_NOTITLE(ITEM_RECEIVER_PINMAP_FIRST + outputsCount); + if (event == EVT_ENTRY) { +#if defined(SIMU) + reusableBuffer.hardwareAndSettings.receiverSettings.state = PXX2_SETTINGS_OK; + reusableBuffer.hardwareAndSettings.receiverSettings.outputsCount = 8; +#else + // no need to initialize reusableBuffer.hardwareAndSettings.receiverSettings.state to PXX2_HARDWARE_INFO + moduleSettings[g_moduleIdx].mode = MODULE_MODE_GET_HARDWARE_INFO; +#endif + } + + if (reusableBuffer.hardwareAndSettings.receiverSettings.state == PXX2_HARDWARE_INFO && moduleSettings[g_moduleIdx].mode == MODULE_MODE_NORMAL) { + reusableBuffer.hardwareAndSettings.receiverSettings.state = PXX2_SETTINGS_READ; + moduleSettings[g_moduleIdx].mode = MODULE_MODE_RECEIVER_SETTINGS; + } + if (menuEvent) { moduleSettings[g_moduleIdx].mode = MODULE_MODE_NORMAL; - if (reusableBuffer.receiverSettings.dirty) { + if (reusableBuffer.hardwareAndSettings.receiverSettings.dirty) { abortPopMenu(); POPUP_CONFIRMATION("Update RX options?", onRxOptionsUpdateConfirm); } @@ -2092,34 +2089,26 @@ void menuModelReceiverOptions(event_t event) } } - if (event == EVT_KEY_LONG(KEY_ENTER) && reusableBuffer.receiverSettings.dirty) { + if (event == EVT_KEY_LONG(KEY_ENTER) && reusableBuffer.hardwareAndSettings.receiverSettings.dirty) { killEvents(event); - reusableBuffer.receiverSettings.state = PXX2_SETTINGS_WRITE; - reusableBuffer.receiverSettings.dirty = 0; - reusableBuffer.receiverSettings.timeout = 0; + reusableBuffer.hardwareAndSettings.receiverSettings.state = PXX2_SETTINGS_WRITE; + reusableBuffer.hardwareAndSettings.receiverSettings.dirty = 0; + reusableBuffer.hardwareAndSettings.receiverSettings.timeout = 0; moduleSettings[g_moduleIdx].mode = MODULE_MODE_RECEIVER_SETTINGS; } - if (reusableBuffer.receiverSettings.dirty == 2 && reusableBuffer.receiverSettings.state == PXX2_SETTINGS_OK) { + if (reusableBuffer.hardwareAndSettings.receiverSettings.dirty == 2 && reusableBuffer.hardwareAndSettings.receiverSettings.state == PXX2_SETTINGS_OK) { popMenu(); + return; } int8_t sub = menuVerticalPosition; lcdDrawTextAlignedLeft(0, STR_RECEIVER_OPTIONS); - drawReceiverName(FW * 13, 0, reusableBuffer.receiverSettings.receiverId); + drawReceiverName(FW * 13, 0, reusableBuffer.hardwareAndSettings.receiverSettings.receiverId); lcdInvertLine(0); - if (event == EVT_ENTRY) { -#if defined(SIMU) - reusableBuffer.receiverSettings.state = PXX2_SETTINGS_OK; - reusableBuffer.receiverSettings.outputsCount = 8; -#else - moduleSettings[g_moduleIdx].mode = MODULE_MODE_RECEIVER_SETTINGS; -#endif - } - - if (reusableBuffer.receiverSettings.state == PXX2_SETTINGS_OK) { + if (reusableBuffer.hardwareAndSettings.receiverSettings.state == PXX2_SETTINGS_OK) { for (uint8_t k=0; k= reusableBuffer.hardware.updateTime) { + if (event == EVT_ENTRY || get_tmr10ms() >= reusableBuffer.hardwareAndSettings.updateTime) { // menuVerticalOffset = 0; - memclear(&reusableBuffer.hardware.modules, sizeof(reusableBuffer.hardware.modules)); + memclear(&reusableBuffer.hardwareAndSettings.modules, sizeof(reusableBuffer.hardwareAndSettings.modules)); if (isModulePXX2(INTERNAL_MODULE) && IS_INTERNAL_MODULE_ON()) { moduleSettings[INTERNAL_MODULE].mode = MODULE_MODE_GET_HARDWARE_INFO; - reusableBuffer.hardware.modules[INTERNAL_MODULE].current = PXX2_HW_INFO_TX_ID; - reusableBuffer.hardware.modules[INTERNAL_MODULE].maximum = MAX_RECEIVERS_PER_MODULE - 1; + reusableBuffer.hardwareAndSettings.modules[INTERNAL_MODULE].current = PXX2_HW_INFO_TX_ID; + reusableBuffer.hardwareAndSettings.modules[INTERNAL_MODULE].maximum = MAX_RECEIVERS_PER_MODULE - 1; } if (isModulePXX2(EXTERNAL_MODULE) && IS_EXTERNAL_MODULE_ON()) { moduleSettings[EXTERNAL_MODULE].mode = MODULE_MODE_GET_HARDWARE_INFO; - reusableBuffer.hardware.modules[EXTERNAL_MODULE].current = PXX2_HW_INFO_TX_ID; - reusableBuffer.hardware.modules[EXTERNAL_MODULE].maximum = MAX_RECEIVERS_PER_MODULE - 1; + reusableBuffer.hardwareAndSettings.modules[EXTERNAL_MODULE].current = PXX2_HW_INFO_TX_ID; + reusableBuffer.hardwareAndSettings.modules[EXTERNAL_MODULE].maximum = MAX_RECEIVERS_PER_MODULE - 1; } - reusableBuffer.hardware.updateTime = get_tmr10ms() + 1000 /* 10s*/; + reusableBuffer.hardwareAndSettings.updateTime = get_tmr10ms() + 1000 /* 10s*/; } coord_t y = (FH + 1) - menuVerticalOffset * FH; @@ -145,7 +145,7 @@ void menuRadioModulesVersion(event_t event) // Module model if (y >= MENU_BODY_TOP && y < MENU_BODY_BOTTOM) { lcdDrawText(INDENT_WIDTH, y, "Model"); - uint8_t modelId = reusableBuffer.hardware.modules[module].information.modelID; + uint8_t modelId = reusableBuffer.hardwareAndSettings.modules[module].information.modelID; if (modelId >= DIM(modulesModels)) modelId = 0; lcdDrawText(12 * FW, y, modulesModels[modelId]); @@ -155,19 +155,19 @@ void menuRadioModulesVersion(event_t event) // Module version if (y >= MENU_BODY_TOP && y < MENU_BODY_BOTTOM) { lcdDrawText(INDENT_WIDTH, y, "Version"); - if (reusableBuffer.hardware.modules[module].information.modelID) { - drawPXX2FullVersion(12 * FW, y, reusableBuffer.hardware.modules[module].information.hwVersion, reusableBuffer.hardware.modules[module].information.swVersion); + if (reusableBuffer.hardwareAndSettings.modules[module].information.modelID) { + drawPXX2FullVersion(12 * FW, y, reusableBuffer.hardwareAndSettings.modules[module].information.hwVersion, reusableBuffer.hardwareAndSettings.modules[module].information.swVersion); } } y += FH; for (uint8_t receiver=0; receiver= MENU_BODY_TOP && y < MENU_BODY_BOTTOM) { lcdDrawText(INDENT_WIDTH, y, "Receiver"); lcdDrawNumber(lcdLastRightPos + 2, y, receiver + 1); - uint8_t modelId = reusableBuffer.hardware.modules[module].receivers[receiver].information.modelID; + uint8_t modelId = reusableBuffer.hardwareAndSettings.modules[module].receivers[receiver].information.modelID; if (modelId >= DIM(receiversModels)) modelId = 0; lcdDrawText(12 * FW, y, receiversModels[modelId]); @@ -176,7 +176,7 @@ void menuRadioModulesVersion(event_t event) // Receiver version if (y >= MENU_BODY_TOP && y < MENU_BODY_BOTTOM) { - drawPXX2FullVersion(12 * FW, y, reusableBuffer.hardware.modules[module].receivers[receiver].information.hwVersion, reusableBuffer.hardware.modules[module].receivers[receiver].information.swVersion); + drawPXX2FullVersion(12 * FW, y, reusableBuffer.hardwareAndSettings.modules[module].receivers[receiver].information.hwVersion, reusableBuffer.hardwareAndSettings.modules[module].receivers[receiver].information.swVersion); } y += FH; } diff --git a/radio/src/opentx.h b/radio/src/opentx.h index afb419228..acfc457e4 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1139,26 +1139,6 @@ union ReusableBuffer }; } moduleSetup; - struct { - uint8_t state; // 0x00 = READ 0x40 = WRITE - tmr10ms_t timeout; - uint8_t dirty; - uint8_t rfProtocol; - uint8_t externalAntenna; - int8_t txPower; - } moduleSettings; - - struct { - uint8_t state; // 0x00 = READ 0x40 = WRITE - tmr10ms_t timeout; - uint8_t receiverId; - uint8_t dirty; - uint8_t telemetryDisabled; - uint8_t pwmRate; - uint8_t outputsCount; - uint8_t outputsMapping[24]; - } receiverSettings; - // 103 bytes struct { int16_t midVals[NUM_STICKS+NUM_POTS+NUM_SLIDERS+NUM_MOUSE_ANALOGS]; @@ -1196,8 +1176,32 @@ union ReusableBuffer PXX2HardwareInformation information; } receivers[PXX2_MAX_RECEIVERS_PER_MODULE]; } modules[NUM_MODULES]; + uint32_t updateTime; - } hardware; + + union { + struct { + uint8_t state; // 0x00 = READ 0x40 = WRITE + tmr10ms_t timeout; + uint8_t dirty; + uint8_t rfProtocol; + uint8_t externalAntenna; + int8_t txPower; + } moduleSettings; + + struct { + uint8_t state; // 0x00 = READ 0x40 = WRITE + tmr10ms_t timeout; + uint8_t receiverId; + uint8_t dirty; + uint8_t telemetryDisabled; + uint8_t pwmRate; + uint8_t outputsCount; + uint8_t outputsMapping[24]; + } receiverSettings; + }; + + } hardwareAndSettings; struct { uint8_t stickMode; diff --git a/radio/src/pulses/pxx2.cpp b/radio/src/pulses/pxx2.cpp index 066283e34..9876d58ab 100644 --- a/radio/src/pulses/pxx2.cpp +++ b/radio/src/pulses/pxx2.cpp @@ -130,15 +130,15 @@ void Pxx2Pulses::setupTelemetryFrame(uint8_t module) void Pxx2Pulses::setupHardwareInfoFrame(uint8_t module) { - if (reusableBuffer.hardware.modules[module].current <= reusableBuffer.hardware.modules[module].maximum) { - if (reusableBuffer.hardware.modules[module].timeout == 0) { + if (reusableBuffer.hardwareAndSettings.modules[module].current <= reusableBuffer.hardwareAndSettings.modules[module].maximum) { + if (reusableBuffer.hardwareAndSettings.modules[module].timeout == 0) { addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_HW_INFO); - Pxx2Transport::addByte(reusableBuffer.hardware.modules[module].current); - reusableBuffer.hardware.modules[module].timeout = 20; - reusableBuffer.hardware.modules[module].current++; + Pxx2Transport::addByte(reusableBuffer.hardwareAndSettings.modules[module].current); + reusableBuffer.hardwareAndSettings.modules[module].timeout = 20; + reusableBuffer.hardwareAndSettings.modules[module].current++; } else { - reusableBuffer.hardware.modules[module].timeout--; + reusableBuffer.hardwareAndSettings.modules[module].timeout--; setupChannelsFrame(module); } } @@ -169,20 +169,20 @@ void Pxx2Pulses::setupRegisterFrame(uint8_t module) void Pxx2Pulses::setupModuleSettingsFrame(uint8_t module) { - if (get_tmr10ms() > reusableBuffer.moduleSettings.timeout) { + if (get_tmr10ms() > reusableBuffer.hardwareAndSettings.moduleSettings.timeout) { addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_TX_SETTINGS); uint8_t flag0 = 0; - if (reusableBuffer.moduleSettings.state == PXX2_SETTINGS_WRITE) + if (reusableBuffer.hardwareAndSettings.moduleSettings.state == PXX2_SETTINGS_WRITE) flag0 |= PXX2_TX_SETTINGS_FLAG0_WRITE; Pxx2Transport::addByte(flag0); - if (reusableBuffer.moduleSettings.state == PXX2_SETTINGS_WRITE) { - uint8_t flag1 = reusableBuffer.moduleSettings.rfProtocol << 4; - if (reusableBuffer.moduleSettings.externalAntenna) + if (reusableBuffer.hardwareAndSettings.moduleSettings.state == PXX2_SETTINGS_WRITE) { + uint8_t flag1 = reusableBuffer.hardwareAndSettings.moduleSettings.rfProtocol << 4; + if (reusableBuffer.hardwareAndSettings.moduleSettings.externalAntenna) flag1 |= PXX2_TX_SETTINGS_FLAG1_EXTERNAL_ANTENNA; Pxx2Transport::addByte(flag1); - Pxx2Transport::addByte(reusableBuffer.moduleSettings.txPower); + Pxx2Transport::addByte(reusableBuffer.hardwareAndSettings.moduleSettings.txPower); } - reusableBuffer.moduleSettings.timeout = get_tmr10ms() + 200/*next try in 2s*/; + reusableBuffer.hardwareAndSettings.moduleSettings.timeout = get_tmr10ms() + 200/*next try in 2s*/; } else { setupChannelsFrame(module); @@ -191,25 +191,25 @@ void Pxx2Pulses::setupModuleSettingsFrame(uint8_t module) void Pxx2Pulses::setupReceiverSettingsFrame(uint8_t module) { - if (get_tmr10ms() > reusableBuffer.receiverSettings.timeout) { + if (get_tmr10ms() > reusableBuffer.hardwareAndSettings.receiverSettings.timeout) { addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_RX_SETTINGS); - uint8_t flag0 = reusableBuffer.receiverSettings.receiverId; - if (reusableBuffer.receiverSettings.state == PXX2_SETTINGS_WRITE) + uint8_t flag0 = reusableBuffer.hardwareAndSettings.receiverSettings.receiverId; + if (reusableBuffer.hardwareAndSettings.receiverSettings.state == PXX2_SETTINGS_WRITE) flag0 |= PXX2_RX_SETTINGS_FLAG0_WRITE; Pxx2Transport::addByte(flag0); - if (reusableBuffer.receiverSettings.state == PXX2_SETTINGS_WRITE) { + if (reusableBuffer.hardwareAndSettings.receiverSettings.state == PXX2_SETTINGS_WRITE) { uint8_t flag1 = 0; - if (reusableBuffer.receiverSettings.telemetryDisabled) + if (reusableBuffer.hardwareAndSettings.receiverSettings.telemetryDisabled) flag1 |= PXX2_RX_SETTINGS_FLAG1_TELEMETRY_DISABLED; - if (reusableBuffer.receiverSettings.pwmRate) + if (reusableBuffer.hardwareAndSettings.receiverSettings.pwmRate) flag1 |= PXX2_RX_SETTINGS_FLAG1_FASTPWM; Pxx2Transport::addByte(flag1); - uint8_t outputsCount = min(24, reusableBuffer.receiverSettings.outputsCount); + uint8_t outputsCount = min(24, reusableBuffer.hardwareAndSettings.receiverSettings.outputsCount); for (int i = 0; i < outputsCount; i++) { - Pxx2Transport::addByte(min(23, reusableBuffer.receiverSettings.outputsMapping[i])); + Pxx2Transport::addByte(min(23, reusableBuffer.hardwareAndSettings.receiverSettings.outputsMapping[i])); } } - reusableBuffer.receiverSettings.timeout = get_tmr10ms() + 200/*next try in 2s*/; + reusableBuffer.hardwareAndSettings.receiverSettings.timeout = get_tmr10ms() + 200/*next try in 2s*/; } else { setupChannelsFrame(module); diff --git a/radio/src/pulses/pxx2.h b/radio/src/pulses/pxx2.h index f41e821b1..be47b43ab 100644 --- a/radio/src/pulses/pxx2.h +++ b/radio/src/pulses/pxx2.h @@ -70,6 +70,7 @@ enum PXX2BindSteps { }; enum PXX2ReceiverStatus { + PXX2_HARDWARE_INFO, PXX2_SETTINGS_READ, PXX2_SETTINGS_WRITE, PXX2_SETTINGS_OK diff --git a/radio/src/telemetry/frsky_pxx2.cpp b/radio/src/telemetry/frsky_pxx2.cpp index 49006d909..b7e54d887 100644 --- a/radio/src/telemetry/frsky_pxx2.cpp +++ b/radio/src/telemetry/frsky_pxx2.cpp @@ -51,9 +51,9 @@ void processGetHardwareInfoFrame(uint8_t module, uint8_t * frame) uint8_t index = frame[3]; if (index == 0xFF) - memcpy(&reusableBuffer.hardware.modules[module].information, &frame[4], sizeof(PXX2HardwareInformation)); + memcpy(&reusableBuffer.hardwareAndSettings.modules[module].information, &frame[4], sizeof(PXX2HardwareInformation)); else if (index < PXX2_MAX_RECEIVERS_PER_MODULE) - memcpy(&reusableBuffer.hardware.modules[module].receivers[index].information, &frame[4], sizeof(PXX2HardwareInformation)); + memcpy(&reusableBuffer.hardwareAndSettings.modules[module].receivers[index].information, &frame[4], sizeof(PXX2HardwareInformation)); } void processModuleSettingsFrame(uint8_t module, uint8_t * frame) @@ -63,15 +63,15 @@ void processModuleSettingsFrame(uint8_t module, uint8_t * frame) } // Flag1 - reusableBuffer.moduleSettings.txPower = frame[4] >> 4; + reusableBuffer.hardwareAndSettings.moduleSettings.txPower = frame[4] >> 4; if (frame[4] & PXX2_TX_SETTINGS_FLAG1_EXTERNAL_ANTENNA) - reusableBuffer.moduleSettings.externalAntenna = 1; + reusableBuffer.hardwareAndSettings.moduleSettings.externalAntenna = 1; // Power - reusableBuffer.moduleSettings.txPower = frame[5]; + reusableBuffer.hardwareAndSettings.moduleSettings.txPower = frame[5]; - reusableBuffer.moduleSettings.state = PXX2_SETTINGS_OK; - reusableBuffer.moduleSettings.timeout = 0; + reusableBuffer.hardwareAndSettings.moduleSettings.state = PXX2_SETTINGS_OK; + reusableBuffer.hardwareAndSettings.moduleSettings.timeout = 0; moduleSettings[module].mode = MODULE_MODE_NORMAL; } @@ -82,19 +82,19 @@ void processReceiverSettingsFrame(uint8_t module, uint8_t * frame) } if (frame[4] & PXX2_RX_SETTINGS_FLAG1_FASTPWM) - reusableBuffer.receiverSettings.pwmRate = 1; + reusableBuffer.hardwareAndSettings.receiverSettings.pwmRate = 1; if (frame[4] & PXX2_RX_SETTINGS_FLAG1_TELEMETRY_DISABLED) - reusableBuffer.receiverSettings.telemetryDisabled = 1; + reusableBuffer.hardwareAndSettings.receiverSettings.telemetryDisabled = 1; uint8_t outputsCount = min(16, frame[0] - 4); - reusableBuffer.receiverSettings.outputsCount = outputsCount; + reusableBuffer.hardwareAndSettings.receiverSettings.outputsCount = outputsCount; for (uint8_t pin = 0; pin < outputsCount; pin++) { - reusableBuffer.receiverSettings.outputsMapping[pin] = frame[5 + pin]; + reusableBuffer.hardwareAndSettings.receiverSettings.outputsMapping[pin] = frame[5 + pin]; } - reusableBuffer.receiverSettings.state = PXX2_SETTINGS_OK; - reusableBuffer.receiverSettings.timeout = 0; + reusableBuffer.hardwareAndSettings.receiverSettings.state = PXX2_SETTINGS_OK; + reusableBuffer.hardwareAndSettings.receiverSettings.timeout = 0; moduleSettings[module].mode = MODULE_MODE_NORMAL; }