diff --git a/app/src/main/cpp/GPIOControl.cpp b/app/src/main/cpp/GPIOControl.cpp index 83492d05..0316084a 100644 --- a/app/src/main/cpp/GPIOControl.cpp +++ b/app/src/main/cpp/GPIOControl.cpp @@ -209,7 +209,8 @@ size_t GpioControl::TurnOffImmediately(int cmd) if (it->cmd == cmd) { ref = it->references; - it->closeCmds++; + if(it->closeCmds < it->references) + it->closeCmds++; it->closeTime = ts; break; } @@ -237,7 +238,8 @@ size_t GpioControl::TurnOff(int cmd, uint32_t delayedCloseTime/* = 0*/) if (it->cmd == cmd) { ref = it->references; - it->closeCmds++; + if(it->closeCmds < it->references) + it->closeCmds++; if (ts > it->closeTime) { it->closeTime = ts; @@ -270,7 +272,8 @@ size_t GpioControl::TurnOff(const std::vector& cmds, uint32_t delayedCloseT { if (it->cmd == *itCmd) { - it->closeCmds++; + if(it->closeCmds < it->references) + it->closeCmds++; if (ts > it->closeTime) { it->closeTime = ts; @@ -298,7 +301,8 @@ size_t GpioControl::TurnOff(const std::vector >& cmds) { if (it->cmd == itCmd->first) { - it->closeCmds++; + if(it->closeCmds < it->references) + it->closeCmds++; if (itCmd->second != 0) { ts2 = itCmd->second + ts; @@ -354,6 +358,8 @@ void GpioControl::PowerControlThreadProc() else { it->references -= it->closeCmds; + if(it->references < 0) + it->references = 0; } it->closeCmds = 0; } diff --git a/app/src/main/cpp/PhoneDevice.cpp b/app/src/main/cpp/PhoneDevice.cpp index 88a333ed..21b0ae43 100644 --- a/app/src/main/cpp/PhoneDevice.cpp +++ b/app/src/main/cpp/PhoneDevice.cpp @@ -2013,8 +2013,6 @@ bool CPhoneDevice::OpenPTZSensors(uint32_t sec) ReleaseWakelock(wid); return m_cameraStatus; - - } bool CPhoneDevice::ClosePTZSensors(uint32_t delayedCloseTime) @@ -2023,6 +2021,7 @@ bool CPhoneDevice::ClosePTZSensors(uint32_t delayedCloseTime) if(m_sensorsStatus && !m_cameraStatus) { + localDelayTime = GetMicroTimeStamp(); m_shouldStopWaiting.store(true); } else