fix(AFHDS3): Rx configuration not updated when switching model, manual exit bind (#3385)
This commit is contained in:
@@ -249,8 +249,8 @@ class ProtoState
|
||||
ModuleState state;
|
||||
|
||||
bool modelIDSet;
|
||||
bool modelcfgGet;
|
||||
uint8_t modelID;
|
||||
|
||||
/**
|
||||
* Command count used for counting actual number of commands sent in run mode
|
||||
*/
|
||||
@@ -405,9 +405,6 @@ void ProtoState::setupFrame()
|
||||
modelID = g_model.header.modelId[module_index];
|
||||
trsp.sendFrame(COMMAND::MODEL_ID, FRAME_TYPE::REQUEST_SET_EXPECT_DATA,
|
||||
&g_model.header.modelId[module_index], 1);
|
||||
|
||||
// always fetch config after setting model ID
|
||||
trsp.enqueue(COMMAND::MODULE_GET_CONFIG, FRAME_TYPE::REQUEST_GET_DATA);
|
||||
return;
|
||||
}
|
||||
} else if (modelID != g_model.header.modelId[module_index]) {
|
||||
@@ -426,12 +423,18 @@ void ProtoState::setupFrame()
|
||||
// exit bind
|
||||
if (this->state == STATE_BINDING) {
|
||||
TRACE("AFHDS3 [EXIT BIND]");
|
||||
modelcfgGet = true;
|
||||
auto mode = (uint8_t)MODULE_MODE_E::RUN;
|
||||
trsp.sendFrame(COMMAND::MODULE_MODE, FRAME_TYPE::REQUEST_SET_EXPECT_DATA, &mode, 1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (modelcfgGet){
|
||||
trsp.enqueue(COMMAND::MODULE_GET_CONFIG, FRAME_TYPE::REQUEST_GET_DATA);
|
||||
return;
|
||||
}
|
||||
|
||||
if (cmdCount++ >= 150) {
|
||||
|
||||
cmdCount = 0;
|
||||
@@ -550,13 +553,12 @@ void ProtoState::parseData(uint8_t* rxBuffer, uint8_t rxBufferCount)
|
||||
}
|
||||
break;
|
||||
case COMMAND::MODULE_GET_CONFIG: {
|
||||
modelcfgGet = false;
|
||||
size_t len = min<size_t>(sizeof(cfg.buffer), rxBufferCount);
|
||||
std::memcpy((void*) cfg.buffer, &responseFrame->value, len);
|
||||
// TRACE(
|
||||
// "AFHDS3 [MODULE_GET_CONFIG] bind power %d run power %d mode %d "
|
||||
// "pwm/ppm %d ibus/sbus %d",
|
||||
// cfg.config.bindPower, cfg.config.runPower, cfg.config.telemetry,
|
||||
// cfg.config.pulseMode, cfg.config.serialMode);
|
||||
moduleData->afhds3.emi = cfg.v0.EMIStandard;
|
||||
moduleData->afhds3.telemetry = cfg.v0.IsTwoWay;
|
||||
moduleData->afhds3.phyMode = cfg.v0.PhyMode;
|
||||
} break;
|
||||
case COMMAND::MODULE_VERSION:
|
||||
std::memcpy((void*) &version, &responseFrame->value, sizeof(version));
|
||||
@@ -580,6 +582,11 @@ void ProtoState::parseData(uint8_t* rxBuffer, uint8_t rxBufferCount)
|
||||
}
|
||||
TRACE("AFHDS3 [MODULE_SET_CONFIG], %02X", responseFrame->value);
|
||||
break;
|
||||
case COMMAND::MODEL_ID:
|
||||
if (responseFrame->value == CMD_RESULT::SUCCESS) {
|
||||
modelcfgGet = true;
|
||||
}
|
||||
break;
|
||||
case COMMAND::TELEMETRY_DATA:
|
||||
{
|
||||
uint8_t* telemetry = &responseFrame->value;
|
||||
|
||||
Reference in New Issue
Block a user