Fix config updates when updating quickly.
This fixes the pad flickering when dragging the color slider, because it could briefly use an out-of-date configuration (only really visible when going between red and white on the left).
This commit is contained in:
parent
f4e60ef2e0
commit
5e1068d565
@ -297,6 +297,11 @@ void SMX::SMXDevice::SendConfig()
|
|||||||
if(!m_bHaveConfig)
|
if(!m_bHaveConfig)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// If we're still waiting for a previous configuration to read back, don't send
|
||||||
|
// another yet.
|
||||||
|
if(m_bWaitingForConfigResponse)
|
||||||
|
return;
|
||||||
|
|
||||||
// Write configuration command:
|
// Write configuration command:
|
||||||
string sData = ssprintf("w");
|
string sData = ssprintf("w");
|
||||||
int8_t iSize = sizeof(SMXConfig);
|
int8_t iSize = sizeof(SMXConfig);
|
||||||
@ -316,9 +321,16 @@ void SMX::SMXDevice::SendConfig()
|
|||||||
// command below completes.
|
// command below completes.
|
||||||
config = wanted_config;
|
config = wanted_config;
|
||||||
|
|
||||||
|
// Don't send another configuration packet until we receive the response to the above
|
||||||
|
// command. If we're sending updates quickly (eg. dragging the color slider), we can
|
||||||
|
// send multiple updates before we get a response.
|
||||||
|
m_bWaitingForConfigResponse = true;
|
||||||
|
|
||||||
// After we write the configuration, read back the updated configuration to
|
// After we write the configuration, read back the updated configuration to
|
||||||
// verify it.
|
// verify it.
|
||||||
SendCommandLocked("g\n");
|
SendCommandLocked("g\n", [this]() {
|
||||||
|
m_bWaitingForConfigResponse = false;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void SMX::SMXDevice::Update(wstring &sError)
|
void SMX::SMXDevice::Update(wstring &sError)
|
||||||
|
@ -110,6 +110,7 @@ private:
|
|||||||
SMXConfig wanted_config;
|
SMXConfig wanted_config;
|
||||||
bool m_bSendConfig = false;
|
bool m_bSendConfig = false;
|
||||||
bool m_bSendingConfig = false;
|
bool m_bSendingConfig = false;
|
||||||
|
bool m_bWaitingForConfigResponse = false;
|
||||||
|
|
||||||
void CallUpdateCallback(SMXUpdateCallbackReason reason);
|
void CallUpdateCallback(SMXUpdateCallbackReason reason);
|
||||||
void HandlePackets();
|
void HandlePackets();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user