diff --git a/app/src/main/cpp/PhoneDevice.cpp b/app/src/main/cpp/PhoneDevice.cpp index 257869ec..cee3c79b 100644 --- a/app/src/main/cpp/PhoneDevice.cpp +++ b/app/src/main/cpp/PhoneDevice.cpp @@ -407,6 +407,9 @@ CPhoneDevice::CPhoneDevice(JavaVM* vm, jobject service, const std::string& appPa m_signalLevel = 0; m_signalLevelUpdateTime = time(NULL); mBuildTime = 0; + m_cameraStatus = false; + m_sensorsStatus = false; + m_lastTime = 0; RegisterHandlerForSignal(SIGUSR2); @@ -1698,6 +1701,52 @@ bool CPhoneDevice::TakePhoto(const IDevice::PHOTO_INFO& photoInfo, const vector< return res; } +bool CPhoneDevice::OpenPTZSensors(int sec) +{ + { + std::lock_guard lock(m_cameraLocker); + if (!m_cameraStatus && !m_sensorsStatus) { + m_sensorsStatus = true; + OpenSensors(MAIN_POWER_OPEN); + OpenSensors(CAMERA_SENSOR_OPEN); + } + + } + + if(m_sensorsStatus && !m_cameraStatus) + std::this_thread::sleep_for(std::chrono::seconds(sec)); + + { + std::lock_guard lock(m_cameraLocker); + if (!m_cameraStatus && m_sensorsStatus) { + m_cameraStatus = true; + } + } + + return m_cameraStatus; +} + +bool CPhoneDevice::ClosePTZSensors() +{ + std::lock_guard lock(m_cameraLocker); + CloseSensors(CAMERA_SENSOR_OPEN); + CloseSensors(MAIN_POWER_OPEN); + m_cameraStatus = false; + m_sensorsStatus = false; + return true; +} + +bool CPhoneDevice::GetPTZSensorsStatus() +{ + std::lock_guard lock(m_cameraLocker); + return m_sensorsStatus; +} +bool CPhoneDevice::GetCameraStatus() +{ + std::lock_guard lock(m_cameraLocker); + return m_cameraStatus; +} + bool CPhoneDevice::CloseCamera() { if (mCamera != NULL) @@ -3453,7 +3502,7 @@ bool CPhoneDevice::OpenSensors(int sensortype) // GpioControl::setInt(CMD_SET_CAM_3V3_EN_STATE, 1); // 打开3.3Vē”µåŽ‹ // GpioControl::setInt(CMD_SET_3V3_PWR_ENABLE, 1); } - if(sensortype == WEATHER_SENSOR_OPEN || sensortype == ICETHICK_SENSOR_OPEN) + if(sensortype == WEATHER_SENSOR_OPEN) { #ifndef USING_N938 #else @@ -3519,7 +3568,7 @@ bool CPhoneDevice::CloseSensors(int sensortype) #endif #endif } - if(sensortype == WEATHER_SENSOR_OPEN || sensortype == ICETHICK_SENSOR_OPEN) + if(sensortype == WEATHER_SENSOR_OPEN ) { #ifndef USING_N938 #else diff --git a/app/src/main/cpp/PhoneDevice.h b/app/src/main/cpp/PhoneDevice.h index a05da140..f24ca7f1 100644 --- a/app/src/main/cpp/PhoneDevice.h +++ b/app/src/main/cpp/PhoneDevice.h @@ -231,7 +231,10 @@ public: virtual int GetIceData(ICE_INFO *iceInfo, ICE_TAIL *icetail, SENSOR_PARAM *sensorParam); virtual bool OpenSensors(int sensortype); virtual bool CloseSensors(int sensortype); -// bool CapturePhoto(unsigned char channel, unsigned char type); + virtual bool OpenPTZSensors(int sec); + virtual bool ClosePTZSensors(); + virtual bool GetPTZSensorsStatus(); + virtual bool GetCameraStatus(); bool LoadNetworkInfo(); bool GetNextScheduleItem(uint32_t tsBasedZero, uint32_t scheduleTime, vector& items); @@ -389,6 +392,11 @@ protected: std::string m_simcard; + mutable std::mutex m_cameraLocker; + bool m_cameraStatus; + bool m_sensorsStatus; + time_t m_lastTime; + };