1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-26 01:35:21 +03:00

GET / SET RX SETTINGS now working

This commit is contained in:
Bertrand Songis 2019-03-12 11:13:33 +01:00
parent 9a4f88c2a1
commit cde023c64b
5 changed files with 70 additions and 58 deletions

View file

@ -1932,64 +1932,62 @@ void menuModelReceiverOptions(event_t event)
drawReceiverName(FW * 13, 0, reusableBuffer.receiverSetup.receiverId); drawReceiverName(FW * 13, 0, reusableBuffer.receiverSetup.receiverId);
lcdInvertLine(0); lcdInvertLine(0);
if (event == EVT_ENTRY || (reusableBuffer.receiverSetup.state == RECEIVER_OK && get_tmr10ms() >= reusableBuffer.receiverSetup.updateTime)) { if (event == EVT_ENTRY || (reusableBuffer.receiverSetup.state == RECEIVER_SETTINGS_READ && get_tmr10ms() >= reusableBuffer.receiverSetup.updateTime)) {
reusableBuffer.receiverSetup.updateTime = get_tmr10ms() + 500/*5s*/; reusableBuffer.receiverSetup.updateTime = get_tmr10ms() + 500/*5s*/;
moduleSettings[reusableBuffer.receiverSetup.moduleIdx].mode = MODULE_MODE_RECEIVER_SETTINGS; moduleSettings[reusableBuffer.receiverSetup.moduleIdx].mode = MODULE_MODE_RECEIVER_SETTINGS;
} }
if (!s_editMode && reusableBuffer.receiverSetup.dirty && (reusableBuffer.receiverSetup.state != RECEIVER_SETTINGS_WRITE || get_tmr10ms() >= reusableBuffer.receiverSetup.updateTime)) {
reusableBuffer.receiverSetup.state = RECEIVER_SETTINGS_WRITE;
reusableBuffer.receiverSetup.dirty = 0;
reusableBuffer.receiverSetup.timeout = 0;
reusableBuffer.receiverSetup.updateTime = get_tmr10ms() + 100/*1s*/;
moduleSettings[reusableBuffer.receiverSetup.moduleIdx].mode = MODULE_MODE_RECEIVER_SETTINGS;
}
#if defined(SIMU) #if defined(SIMU)
reusableBuffer.receiverSetup.state = 0xFF; reusableBuffer.receiverSetup.state = 0xFF;
#endif #endif
if (reusableBuffer.receiverSetup.state != RECEIVER_WAITING_RESPONSE) { if (reusableBuffer.receiverSetup.state > RECEIVER_SETTINGS_READ) {
bool changed = false;
for (uint8_t k=0; k<LCD_LINES-1; k++) { for (uint8_t k=0; k<LCD_LINES-1; k++) {
uint8_t previousValue = 0;
coord_t y = MENU_HEADER_HEIGHT + 1 + k*FH; coord_t y = MENU_HEADER_HEIGHT + 1 + k*FH;
uint8_t i = k + menuVerticalOffset; uint8_t i = k + menuVerticalOffset;
LcdFlags attr = (sub==i ? (s_editMode>0 ? BLINK|INVERS : INVERS) : 0); LcdFlags attr = (sub==i ? (s_editMode>0 ? BLINK|INVERS : INVERS) : 0);
uint8_t pin = i - ITEM_RECEIVER_PINMAP_FIRST;
uint8_t channel = reusableBuffer.receiverSetup.channelMapping[pin];
int32_t channelValue = channelOutputs[channel];
switch (i) { switch (i) {
case ITEM_RECEIVER_TELEMETRY: case ITEM_RECEIVER_TELEMETRY:
previousValue = reusableBuffer.receiverSetup.telemetryEnabled; reusableBuffer.receiverSetup.telemetryEnabled = editCheckBox(reusableBuffer.receiverSetup.telemetryEnabled, RECEIVER_OPTIONS_2ND_COLUMN, y, "Telemetry", attr, event);
reusableBuffer.receiverSetup.telemetryEnabled = editCheckBox(reusableBuffer.receiverSetup.telemetryEnabled, RECEIVER_OPTIONS_2ND_COLUMN, y, if (attr && checkIncDec_Ret) {
"Telemetry", attr, event); reusableBuffer.receiverSetup.dirty = true;
if (previousValue != reusableBuffer.receiverSetup.telemetryEnabled) {
changed = true;
TRACE("TELEM CHANGED (%d , %d)", previousValue, reusableBuffer.receiverSetup.telemetryEnabled);
} }
break; break;
case ITEM_RECEIVER_PWM_RATE: case ITEM_RECEIVER_PWM_RATE:
previousValue = reusableBuffer.receiverSetup.pwmRate;
reusableBuffer.receiverSetup.pwmRate = editCheckBox(reusableBuffer.receiverSetup.pwmRate, RECEIVER_OPTIONS_2ND_COLUMN, y, "9ms PWM", attr, event); reusableBuffer.receiverSetup.pwmRate = editCheckBox(reusableBuffer.receiverSetup.pwmRate, RECEIVER_OPTIONS_2ND_COLUMN, y, "9ms PWM", attr, event);
TRACE("pwmRate : %d", reusableBuffer.receiverSetup.pwmRate); if (attr && checkIncDec_Ret) {
if (previousValue != reusableBuffer.receiverSetup.pwmRate) { reusableBuffer.receiverSetup.dirty = true;
changed = true;
TRACE("pwmRate CHANGED (%d , %d)", previousValue, reusableBuffer.receiverSetup.pwmRate);
} }
break; break;
default: default:
// Pin // Pin
{
uint8_t pin = i - ITEM_RECEIVER_PINMAP_FIRST;
uint8_t channel = reusableBuffer.receiverSetup.channelMapping[pin];
int32_t channelValue = channelOutputs[channel];
lcdDrawText(0, y, "Pin"); lcdDrawText(0, y, "Pin");
lcdDrawNumber(lcdLastRightPos + 1, y, pin + 1); lcdDrawNumber(lcdLastRightPos + 1, y, pin + 1);
putsChn(7 * FW, y, channel + 1, attr);
// Channel // Channel
if ((menuVerticalPosition - ITEM_RECEIVER_PINMAP_FIRST)== pin) { if (attr) {
if (s_editMode > 0) { channel = checkIncDec(event, channel, 0, sentModuleChannels(g_moduleIdx) - 1);
channel = checkIncDec(event, channel, 0, sentModuleChannels(g_moduleIdx));
if (checkIncDec_Ret) { if (checkIncDec_Ret) {
reusableBuffer.receiverSetup.channelMapping[pin] = channel; reusableBuffer.receiverSetup.channelMapping[pin] = channel;
changed = true; reusableBuffer.receiverSetup.dirty = true;
} }
} }
}
putsChn(7 * FW, y, channel + 1, attr);
// Bargraph // Bargraph
#if !defined(PCBX7) // X7 LCD doesn't like too many horizontal lines #if !defined(PCBX7) // X7 LCD doesn't like too many horizontal lines
@ -2002,9 +2000,6 @@ void menuModelReceiverOptions(event_t event)
break; break;
} }
} }
if (changed) {
reusableBuffer.receiverSetup.timeout = 0;
moduleSettings[reusableBuffer.receiverSetup.moduleIdx].mode = MODULE_MODE_RECEIVER_SETTINGS;
} }
} }
else { else {

View file

@ -1149,6 +1149,7 @@ union ReusableBuffer
uint8_t channelMapping[24]; uint8_t channelMapping[24];
uint8_t telemetryEnabled; uint8_t telemetryEnabled;
uint8_t pwmRate; uint8_t pwmRate;
uint8_t dirty;
} receiverSetup; } receiverSetup;
// 103 bytes // 103 bytes

View file

@ -147,6 +147,14 @@ void Pxx2Pulses::setupRegisterFrame(uint8_t module)
void Pxx2Pulses::setupReceiverSettingsFrame(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 {
addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_RX_SETTINGS); addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_RX_SETTINGS);
Pxx2Transport::addByte(reusableBuffer.receiverSetup.state + reusableBuffer.receiverSetup.receiverId); Pxx2Transport::addByte(reusableBuffer.receiverSetup.state + reusableBuffer.receiverSetup.receiverId);
uint8_t flag1 = 0; uint8_t flag1 = 0;
@ -157,9 +165,8 @@ void Pxx2Pulses::setupReceiverSettingsFrame(uint8_t module)
for (int i = 0; i < channelsCount; i++) { for (int i = 0; i < channelsCount; i++) {
Pxx2Transport::addByte(reusableBuffer.receiverSetup.channelMapping[i]); Pxx2Transport::addByte(reusableBuffer.receiverSetup.channelMapping[i]);
} }
reusableBuffer.receiverSetup.timeout = get_tmr10ms() + 20/*200ms*/; reusableBuffer.receiverSetup.timeout = get_tmr10ms() + 30/*300ms*/;
reusableBuffer.receiverSetup.state = RECEIVER_WAITING_RESPONSE; }
moduleSettings[module].mode = MODULE_MODE_NORMAL;
} }
void Pxx2Pulses::setupBindFrame(uint8_t module) void Pxx2Pulses::setupBindFrame(uint8_t module)

View file

@ -62,9 +62,11 @@ enum PXX2BindSteps {
}; };
enum PXX2ReceiverStatus { enum PXX2ReceiverStatus {
RECEIVER_WAITING_RESPONSE, RECEIVER_SETTINGS_READ = 0x00,
RECEIVER_OK RECEIVER_SETTINGS_OK,
RECEIVER_SETTINGS_WRITE = 0x40
}; };
extern ModuleFifo intmoduleFifo; extern ModuleFifo intmoduleFifo;
extern ModuleFifo extmoduleFifo; extern ModuleFifo extmoduleFifo;

View file

@ -62,15 +62,22 @@ void processGetHardwareInfoFrame(uint8_t module, uint8_t * frame)
void processReceiverSettingsFrame(uint8_t module, uint8_t * frame) void processReceiverSettingsFrame(uint8_t module, uint8_t * frame)
{ {
if (moduleSettings[module].mode != MODULE_MODE_RECEIVER_SETTINGS) {
return;
}
uint8_t channelsCount = sentModuleChannels(module); uint8_t channelsCount = sentModuleChannels(module);
for (uint8_t pin = 0; pin < channelsCount; pin++) { for (uint8_t pin = 0; pin < channelsCount; pin++) {
reusableBuffer.receiverSetup.channelMapping[pin] = frame[5 + pin]; reusableBuffer.receiverSetup.channelMapping[pin] = frame[5 + pin];
} }
if (frame[4] & PXX2_RX_SETTINGS_FLAG1_FASTPWM) if (frame[4] & PXX2_RX_SETTINGS_FLAG1_FASTPWM)
reusableBuffer.receiverSetup.pwmRate = 1; reusableBuffer.receiverSetup.pwmRate = 1;
// if (frame[4] & PXX2_RECV_OPTION_MASK_TELEMETRY) // if (frame[4] & PXX2_RECV_OPTION_MASK_TELEMETRY)
// reusableBuffer.receiverSetup.telemetryEnabled = 1; // reusableBuffer.receiverSetup.telemetryEnabled = 1;
reusableBuffer.receiverSetup.state = RECEIVER_OK;
reusableBuffer.receiverSetup.state = RECEIVER_SETTINGS_OK;
reusableBuffer.receiverSetup.timeout = 0; reusableBuffer.receiverSetup.timeout = 0;
moduleSettings[module].mode = MODULE_MODE_NORMAL; moduleSettings[module].mode = MODULE_MODE_NORMAL;
} }