diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 5e6b68a0b..c1b913480 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1096,6 +1096,7 @@ void opentxResume(); #else #define SD_SCREEN_FILE_LENGTH 64 #endif + union ReusableBuffer { // ARM 334 bytes @@ -1116,8 +1117,10 @@ union ReusableBuffer struct { char msg[64]; uint8_t r9mPower; - char pxx2_candidate_receivers[5][8]; - uint8_t pxx2_candidate_receivers_count; + uint8_t pxx2_register_or_bind_step; + char pxx2_bind_candidate_receivers[5][8]; + uint8_t pxx2_bind_candidate_receivers_count; + uint8_t pxx2_bind_receiver_index; } modelsetup; // 103 bytes diff --git a/radio/src/pulses/pxx2.cpp b/radio/src/pulses/pxx2.cpp index a46c85051..f313ccad8 100644 --- a/radio/src/pulses/pxx2.cpp +++ b/radio/src/pulses/pxx2.cpp @@ -57,11 +57,9 @@ void Pxx2Pulses::setupChannelsFrame(uint8_t module) void Pxx2Pulses::setupRegisterFrame(uint8_t module) { - unsigned counter = moduleSettings[module].counter; - addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_REGISTER); - if (counter == REGISTER_COUNTER_ID_RECEIVED) { + if (reusableBuffer.modelsetup.pxx2_register_or_bind_step == REGISTER_COUNTER_ID_RECEIVED) { Pxx2Transport::addByte(0x01); for (uint8_t i=0; i { public: diff --git a/radio/src/telemetry/telemetry.cpp b/radio/src/telemetry/telemetry.cpp index 2f60affff..acff000b1 100644 --- a/radio/src/telemetry/telemetry.cpp +++ b/radio/src/telemetry/telemetry.cpp @@ -76,12 +76,13 @@ void processRegisterFrame(uint8_t module, uint8_t * frame) { if (frame[3] == 0x00) { // RX_ID follows, we discard it for now - moduleSettings[module].counter = REGISTER_COUNTER_ID_RECEIVED; + reusableBuffer.modelsetup.pxx2_register_or_bind_step = REGISTER_COUNTER_ID_RECEIVED; } else if (frame[3] == 0x01) { // PASSWORD follows, we check it is good if (memcmp(&frame[4], g_model.modelRegistrationID, PXX2_LEN_REGISTRATION_ID) == 0) { - moduleSettings[module].counter = REGISTER_COUNTER_PASSWORD_RECEIVED; + reusableBuffer.modelsetup.pxx2_register_or_bind_step = REGISTER_OK; + moduleSettings[module].mode = MODULE_MODE_NORMAL; } } } @@ -90,15 +91,22 @@ void processBindFrame(uint8_t module, uint8_t * frame) { if (frame[3] == 0x00) { bool found = false; - for (uint8_t i=0; i