RX SET SETTINGS fix

This commit is contained in:
Bertrand Songis
2019-03-17 14:50:26 +01:00
parent c597c0087c
commit 6b499ea23d
4 changed files with 22 additions and 26 deletions
+9 -10
View File
@@ -1376,11 +1376,13 @@ void menuModelSetup(event_t event)
}
}
else {
// for now we will send the SHARE frame indefinitely (until the user manually stops it)
if (event == EVT_KEY_BREAK(KEY_ENTER)) {
moduleSettings[moduleIdx].mode = MODULE_MODE_SHARE;
moduleSettings[moduleIdx].mode ^= MODULE_MODE_SHARE;
reusableBuffer.moduleSetup.pxx2.shareReceiverIndex = receiverIdx;
s_editMode = 0;
POPUP_INFORMATION("Receiver shared");
}
else if (event == EVT_KEY_BREAK(KEY_EXIT)) {
moduleSettings[moduleIdx].mode &= ~MODULE_MODE_SHARE;
}
}
}
@@ -1947,8 +1949,6 @@ enum MenuModelReceiverOptions {
};
#define RECEIVER_OPTIONS_2ND_COLUMN 80
#define IF_TELEM_DISPLAYED(x) (g_model.moduleData[g_moduleIdx].pxx.receiver_telem_off ? (uint8_t)(x) : HIDDEN_ROW) //Todo need capabilities
#define IF_PWM_RATE_DISPLAYED(x) (g_model.moduleData[g_moduleIdx].pxx.receiver_telem_off ? (uint8_t)(x) : HIDDEN_ROW) //Todo need capabilities
void menuModelReceiverOptions(event_t event)
{
@@ -1967,16 +1967,15 @@ void menuModelReceiverOptions(event_t event)
drawReceiverName(FW * 13, 0, reusableBuffer.receiverSetup.receiverId);
lcdInvertLine(0);
if (event == EVT_ENTRY || (reusableBuffer.receiverSetup.state == RECEIVER_SETTINGS_READ && get_tmr10ms() >= reusableBuffer.receiverSetup.updateTime)) {
reusableBuffer.receiverSetup.updateTime = get_tmr10ms() + 500/*5s*/;
if (event == EVT_ENTRY) {
moduleSettings[g_moduleIdx].mode = MODULE_MODE_RECEIVER_SETTINGS;
}
if (!s_editMode && reusableBuffer.receiverSetup.dirty && (reusableBuffer.receiverSetup.state != RECEIVER_SETTINGS_WRITE || get_tmr10ms() >= reusableBuffer.receiverSetup.updateTime)) {
if (!s_editMode && reusableBuffer.receiverSetup.dirty && reusableBuffer.receiverSetup.state == RECEIVER_SETTINGS_OK) {
reusableBuffer.receiverSetup.state = RECEIVER_SETTINGS_WRITE;
reusableBuffer.receiverSetup.dirty = 0;
reusableBuffer.receiverSetup.timeout = 0;
reusableBuffer.receiverSetup.updateTime = get_tmr10ms() + 100/*1s*/;
reusableBuffer.receiverSetup.dirtyTimeout = get_tmr10ms() + 300/*3s*/;
moduleSettings[g_moduleIdx].mode = MODULE_MODE_RECEIVER_SETTINGS;
}
@@ -1984,7 +1983,7 @@ void menuModelReceiverOptions(event_t event)
reusableBuffer.receiverSetup.state = 0xFF;
#endif
if (reusableBuffer.receiverSetup.state > RECEIVER_SETTINGS_READ) {
if (reusableBuffer.receiverSetup.state == RECEIVER_SETTINGS_OK || get_tmr10ms() < reusableBuffer.receiverSetup.dirtyTimeout) {
for (uint8_t k=0; k<LCD_LINES-1; k++) {
coord_t y = MENU_HEADER_HEIGHT + 1 + k*FH;
uint8_t i = k + menuVerticalOffset;
+1
View File
@@ -1144,6 +1144,7 @@ union ReusableBuffer
struct {
uint8_t state; // 0x00 = READ 0x40 = WRITE
tmr10ms_t timeout;
tmr10ms_t dirtyTimeout;
tmr10ms_t updateTime;
uint8_t receiverId;
uint8_t channelMapping[24];
+9 -13
View File
@@ -148,16 +148,12 @@ void Pxx2Pulses::setupRegisterFrame(uint8_t module)
void Pxx2Pulses::setupReceiverSettingsFrame(uint8_t module)
{
if (reusableBuffer.receiverSetup.timeout) {
if (get_tmr10ms() > reusableBuffer.receiverSetup.timeout) {
reusableBuffer.receiverSetup.timeout = 0;
moduleSettings[module].mode = MODULE_MODE_NORMAL;
}
setupChannelsFrame(module);
}
else {
if (get_tmr10ms() > reusableBuffer.receiverSetup.timeout) {
addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_RX_SETTINGS);
Pxx2Transport::addByte(reusableBuffer.receiverSetup.state + reusableBuffer.receiverSetup.receiverId);
uint8_t flag0 = reusableBuffer.receiverSetup.receiverId;
if (reusableBuffer.receiverSetup.state == RECEIVER_SETTINGS_WRITE)
flag0 |= PXX2_RX_SETTINGS_FLAG0_WRITE;
Pxx2Transport::addByte(flag0);
uint8_t flag1 = 0;
if (reusableBuffer.receiverSetup.pwmRate)
flag1 |= PXX2_RX_SETTINGS_FLAG1_FASTPWM;
@@ -166,7 +162,10 @@ void Pxx2Pulses::setupReceiverSettingsFrame(uint8_t module)
for (int i = 0; i < channelsCount; i++) {
Pxx2Transport::addByte(reusableBuffer.receiverSetup.channelMapping[i]);
}
reusableBuffer.receiverSetup.timeout = get_tmr10ms() + 30/*300ms*/;
reusableBuffer.receiverSetup.timeout = get_tmr10ms() + 30/*next try in 300ms*/;
}
else {
setupChannelsFrame(module);
}
}
@@ -224,10 +223,7 @@ void Pxx2Pulses::setupSpectrumAnalyser(uint8_t module)
void Pxx2Pulses::setupShareMode(uint8_t module)
{
addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_SHARE);
Pxx2Transport::addByte(reusableBuffer.moduleSetup.pxx2.shareReceiverIndex);
moduleSettings[module].mode = MODULE_MODE_NORMAL;
}
void Pxx2Pulses::setupFrame(uint8_t module)
+3 -3
View File
@@ -63,9 +63,9 @@ enum PXX2BindSteps {
};
enum PXX2ReceiverStatus {
RECEIVER_SETTINGS_READ = 0x00,
RECEIVER_SETTINGS_OK,
RECEIVER_SETTINGS_WRITE = PXX2_RX_SETTINGS_FLAG0_WRITE
RECEIVER_SETTINGS_READ,
RECEIVER_SETTINGS_WRITE,
RECEIVER_SETTINGS_OK
};
extern ModuleFifo intmoduleFifo;