From c501b689de457912182a71d3e0adb263e2d83a84 Mon Sep 17 00:00:00 2001 From: "XI.CHEN" <2311041011@qq.com> Date: Fri, 20 Dec 2024 16:19:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=AB=8B=E5=8D=B3=E5=85=B3?= =?UTF-8?q?=E9=97=AD=E6=91=84=E5=83=8F=E6=9C=BA=E7=94=B5=E6=BA=90=E5=87=BD?= =?UTF-8?q?=E6=95=B0=EF=BC=8C=E5=AE=9E=E7=8E=B0=E6=89=8B=E5=8A=A8=E5=85=B3?= =?UTF-8?q?=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/GPIOControl.cpp | 24 ++++++++++++++++++++++++ app/src/main/cpp/GPIOControl.h | 20 +++++++++++++++++++- app/src/main/cpp/PhoneDevice.cpp | 31 ++++++++++++++++++++++++------- 3 files changed, 67 insertions(+), 8 deletions(-) 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 ) {