diff --git a/app/src/main/cpp/GPIOControl.cpp b/app/src/main/cpp/GPIOControl.cpp index e17bd754..bef5b2ab 100644 --- a/app/src/main/cpp/GPIOControl.cpp +++ b/app/src/main/cpp/GPIOControl.cpp @@ -198,6 +198,30 @@ size_t GpioControl::TurnOn(const std::vector& cmds) return 0; } +size_t GpioControl::TurnOffImmediately(int cmd) +{ + time_t ts = time(NULL) + 2; + size_t ref = 0; + std::vector::iterator it; + m_locker.lock(); + for (it = m_items.begin(); it != m_items.end(); ++it) + { + if (it->cmd == cmd) + { + ref = it->references; + it->closeCmds++; + it->closeTime = ts; + break; + } + } + m_locker.unlock(); + m_semaphore.release(); +#ifdef _DEBUG + ALOGI("PWR TurnOffNow cmd=%d ref=%u", cmd, (uint32_t)ref); +#endif + return 0; +} + size_t GpioControl::TurnOff(int cmd, uint32_t delayedCloseTime/* = 0*/) { time_t ts = 0; diff --git a/app/src/main/cpp/GPIOControl.h b/app/src/main/cpp/GPIOControl.h index 8083e095..2918d61e 100644 --- a/app/src/main/cpp/GPIOControl.h +++ b/app/src/main/cpp/GPIOControl.h @@ -177,6 +177,7 @@ public: static size_t TurnOff(int cmd, uint32_t delayedCloseTime = 0); static size_t TurnOff(const std::vector& cmds, uint32_t delayedCloseTime = 0); static size_t TurnOff(const std::vector >& cmds); + static size_t TurnOffImmediately(int cmd); static void PowerControlThreadProc(); @@ -532,7 +533,24 @@ public: #ifdef USING_PLZ PowerControl(CMD_SET_PTZ_PWR_ENABLE, CMD_SET_100M_ENABLE, CMD_SET_100M_SWITCH_PWR_ENABLE, CMD_SET_12V_EN_STATE, closeDelayTime) #else // USING_PLZ - PowerControl(CMD_SET_OTG_STATE, CMD_SET_12V_EN_STATE, closeDelayTime) + PowerControl(CMD_SET_OTG_STATE, CMD_SET_12V_EN_STATE, closeDelayTime) +#endif // USING_PLZ +#endif // USING_N938 + { + } +}; + +class SerialCameraPowerCtrl : public PowerControl +{ +public: + SerialCameraPowerCtrl(uint32_t closeDelayTime) : +#ifdef USING_N938 + PowerControl(CMD_SET_SPI_POWER, CMD_SPI2SERIAL_POWER_EN, CMD_RS485_3V3_EN, CMD_SET_PIC1_POWER, CMD_SET_485_EN4, closeDelayTime) +#else // USING_N938 +#ifdef USING_PLZ + PowerControl(CMD_SET_12V_EN_STATE, CMD_SET_485_ENABLE, CMD_SET_3V3_PWR_EN, CMD_SET_SPI_POWER, CMD_SET_PTZ_PWR_ENABLE, closeDelayTime) +#else // USING_PLZ + PowerControl(CMD_SET_12V_EN_STATE, CMD_SET_3V3_PWR_EN, CMD_SET_SPI_POWER, CMD_SET_485_EN_STATE, closeDelayTime) #endif // USING_PLZ #endif // USING_N938 { diff --git a/app/src/main/cpp/PhoneDevice.cpp b/app/src/main/cpp/PhoneDevice.cpp index 25f9fccf..04485234 100644 --- a/app/src/main/cpp/PhoneDevice.cpp +++ b/app/src/main/cpp/PhoneDevice.cpp @@ -4171,19 +4171,36 @@ bool CPhoneDevice::CloseSensors(int sensortype, uint32_t delayedCloseTime) } if(sensortype == CAMERA_SENSOR_OPEN) { + if(delayedCloseTime ==0) + { #ifdef USING_N938 - GpioControl::TurnOff(CMD_SET_PIC1_POWER, delayedCloseTime); - GpioControl::TurnOff(CMD_SET_485_EN4, delayedCloseTime); + GpioControl::TurnOffImmediately(CMD_SET_PIC1_POWER); + GpioControl::TurnOffImmediately(CMD_SET_485_EN4); +#endif + +#ifndef USING_N938 + // GpioControl::TurnOff(CMD_SET_3V3_PWR_ENABLE); +#ifndef USING_PLZ +#else + GpioControl::TurnOffImmediately(CMD_SET_PTZ_PWR_ENABLE); +#endif +#endif + }else + { +#ifdef USING_N938 + GpioControl::TurnOff(CMD_SET_PIC1_POWER, delayedCloseTime); + GpioControl::TurnOff(CMD_SET_485_EN4, delayedCloseTime); // GpioControl::TurnOff(CMD_SET_CAM_3V3_EN_STATE); #endif #ifndef USING_N938 - // GpioControl::TurnOff(CMD_SET_3V3_PWR_ENABLE); - #ifndef USING_PLZ - #else - GpioControl::TurnOff(CMD_SET_PTZ_PWR_ENABLE, delayedCloseTime); - #endif + // GpioControl::TurnOff(CMD_SET_3V3_PWR_ENABLE); +#ifndef USING_PLZ +#else + GpioControl::TurnOff(CMD_SET_PTZ_PWR_ENABLE, delayedCloseTime); +#endif #endif + } } if(sensortype == WEATHER_SENSOR_OPEN ) {