split get/set receivers settings

This commit is contained in:
3djc
2019-03-10 11:24:56 +01:00
parent 34a8e676d1
commit 6ad1d8f957
5 changed files with 51 additions and 42 deletions
+4 -9
View File
@@ -1933,19 +1933,16 @@ void menuModelReceiverOptions(event_t event)
drawReceiverName(FW * 13, 0, reusableBuffer.receiverSetup.receiverId);
lcdInvertLine(0);
if (event == EVT_ENTRY || (reusableBuffer.receiverSetup.state == 0xFF && get_tmr10ms() >= reusableBuffer.receiverSetup.updateTime)) {
if (event == EVT_ENTRY || (reusableBuffer.receiverSetup.state == RECEIVER_OK && get_tmr10ms() >= reusableBuffer.receiverSetup.updateTime)) {
reusableBuffer.receiverSetup.updateTime = get_tmr10ms() + 500/*5s*/;
reusableBuffer.receiverSetup.timeout = 0;
reusableBuffer.receiverSetup.state = 0x00; // Get options
moduleSettings[reusableBuffer.receiverSetup.moduleIdx].mode = MODULE_MODE_RECEIVER_SETTINGS;
TRACE("GET polling");
moduleSettings[reusableBuffer.receiverSetup.moduleIdx].mode = MODULE_MODE_RECEIVER_GET_SETTINGS;
}
#if defined(SIMU)
reusableBuffer.receiverSetup.state = 0xFF;
#endif
if (reusableBuffer.receiverSetup.state != 0) {
if (reusableBuffer.receiverSetup.state != RECEIVER_WAITING_RESPONSE) {
bool changed = false;
for (uint8_t k=0; k<LCD_LINES-1; k++) {
uint8_t previousValue = 0;
@@ -2002,10 +1999,8 @@ void menuModelReceiverOptions(event_t event)
}
}
if (changed) {
reusableBuffer.receiverSetup.state = 0x40; // Set options
reusableBuffer.receiverSetup.timeout = 0;
moduleSettings[reusableBuffer.receiverSetup.moduleIdx].mode = MODULE_MODE_RECEIVER_SETTINGS;
TRACE("CHange detected, sending SET");
moduleSettings[reusableBuffer.receiverSetup.moduleIdx].mode = MODULE_MODE_RECEIVER_SET_SETTINGS;
}
}
else {
+2 -1
View File
@@ -74,7 +74,8 @@ enum ModuleSettingsMode
MODULE_MODE_NORMAL,
MODULE_MODE_SPECTRUM_ANALYSER,
MODULE_MODE_GET_HARDWARE_INFO,
MODULE_MODE_RECEIVER_SETTINGS,
MODULE_MODE_RECEIVER_SET_SETTINGS,
MODULE_MODE_RECEIVER_GET_SETTINGS,
MODULE_MODE_BEEP_FIRST,
MODULE_MODE_REGISTER = MODULE_MODE_BEEP_FIRST,
MODULE_MODE_BIND,
+33 -22
View File
@@ -142,29 +142,37 @@ void Pxx2Pulses::setupRegisterFrame(uint8_t module)
}
}
void Pxx2Pulses::setupReceiverSettingsFrame(uint8_t module)
void Pxx2Pulses::setupReceiverSetSettingsFrame(uint8_t module)
{
if (reusableBuffer.receiverSetup.timeout) {
if (get_tmr10ms() > reusableBuffer.receiverSetup.timeout) {
reusableBuffer.receiverSetup.timeout = 0;
reusableBuffer.receiverSetup.state = 0xFF;
moduleSettings[module].mode = MODULE_MODE_NORMAL;
}
setupChannelsFrame(module);
addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_RX_SETTINGS);
Pxx2Transport::addByte(0x40 + reusableBuffer.receiverSetup.receiverId);
uint8_t flag1 = 0;
if (reusableBuffer.receiverSetup.pwmRate)
flag1 |= 0x10;
Pxx2Transport::addByte(flag1);
for (int i = 0; i < 24; i++) {
Pxx2Transport::addByte(reusableBuffer.receiverSetup.channelMapping[i]);
}
else {
TRACE("Frame is %d", reusableBuffer.receiverSetup.state);
addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_RX_SETTINGS);
Pxx2Transport::addByte(reusableBuffer.receiverSetup.state + reusableBuffer.receiverSetup.receiverId);
uint8_t flag1 = 0;
if (reusableBuffer.receiverSetup.pwmRate)
flag1 |= 0x10;
Pxx2Transport::addByte(flag1);
for (int i = 0; i < 24; i++) {
Pxx2Transport::addByte(reusableBuffer.receiverSetup.channelMapping[i]);
}
reusableBuffer.receiverSetup.timeout = get_tmr10ms() + 20/*200ms*/;
reusableBuffer.receiverSetup.timeout = get_tmr10ms() + 20/*200ms*/;
reusableBuffer.receiverSetup.state = RECEIVER_WAITING_RESPONSE; // module will be confirming changes
moduleSettings[module].mode = MODULE_MODE_NORMAL;
}
void Pxx2Pulses::setupReceiverGetSettingsFrame(uint8_t module)
{
addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_RX_SETTINGS);
Pxx2Transport::addByte(reusableBuffer.receiverSetup.state + reusableBuffer.receiverSetup.receiverId);
uint8_t flag1 = 0;
if (reusableBuffer.receiverSetup.pwmRate)
flag1 |= 0x10;
Pxx2Transport::addByte(flag1);
for (int i = 0; i < 24; i++) {
Pxx2Transport::addByte(reusableBuffer.receiverSetup.channelMapping[i]);
}
reusableBuffer.receiverSetup.timeout = get_tmr10ms() + 20/*200ms*/;
reusableBuffer.receiverSetup.state = RECEIVER_WAITING_RESPONSE;
moduleSettings[module].mode = MODULE_MODE_NORMAL;
}
void Pxx2Pulses::setupBindFrame(uint8_t module)
@@ -241,8 +249,11 @@ void Pxx2Pulses::setupFrame(uint8_t module)
case MODULE_MODE_GET_HARDWARE_INFO:
setupHardwareInfoFrame(module);
break;
case MODULE_MODE_RECEIVER_SETTINGS:
setupReceiverSettingsFrame(module);
case MODULE_MODE_RECEIVER_GET_SETTINGS:
setupReceiverGetSettingsFrame(module);
break;
case MODULE_MODE_RECEIVER_SET_SETTINGS:
setupReceiverSetSettingsFrame(module);
break;
case MODULE_MODE_REGISTER:
setupRegisterFrame(module);
+7 -1
View File
@@ -59,6 +59,10 @@ enum PXX2BindSteps {
BIND_OK
};
enum PXX2ReceiverStatus {
RECEIVER_WAITING_RESPONSE,
RECEIVER_OK
};
extern ModuleFifo intmoduleFifo;
extern ModuleFifo extmoduleFifo;
@@ -112,7 +116,9 @@ class Pxx2Pulses: public PxxPulses<Pxx2Transport> {
void setupShareMode(uint8_t module);
void setupReceiverSettingsFrame(uint8_t module);
void setupReceiverSetSettingsFrame(uint8_t module);
void setupReceiverGetSettingsFrame(uint8_t module);
void setupChannelsFrame(uint8_t module);
+5 -9
View File
@@ -62,20 +62,16 @@ void processGetHardwareInfoFrame(uint8_t module, uint8_t * frame)
void processReceiverSettingsFrame(uint8_t module, uint8_t * frame)
{
if (moduleSettings[module].mode != MODULE_MODE_RECEIVER_SETTINGS) {
return;
}
TRACE("Processing Frame");
if (reusableBuffer.receiverSetup.state == 0x00) {
TRACE("Frame is GET");
if (reusableBuffer.receiverSetup.state == RECEIVER_WAITING_RESPONSE) {
for (uint8_t pin = 0; pin < 24; pin++) {
reusableBuffer.receiverSetup.channelMapping[pin] = frame[5 + pin];
}
reusableBuffer.receiverSetup.pwmRate = frame[4] & 0x30;
reusableBuffer.receiverSetup.state = RECEIVER_OK;
reusableBuffer.receiverSetup.timeout = 0;
moduleSettings[module].mode = MODULE_MODE_NORMAL;
}
reusableBuffer.receiverSetup.state = 0xFF;
moduleSettings[module].mode = MODULE_MODE_NORMAL;
}
}
void processRegisterFrame(uint8_t module, uint8_t * frame)
{