diff --git a/app/src/main/cpp/MicroPhoto.cpp b/app/src/main/cpp/MicroPhoto.cpp index 0625e992..f51d70cf 100644 --- a/app/src/main/cpp/MicroPhoto.cpp +++ b/app/src/main/cpp/MicroPhoto.cpp @@ -818,7 +818,7 @@ Java_com_xypower_mpapp_MicroPhotoService_importPublicKeyFile( const char *md5Str = env->GetStringUTFChars(md5, 0); - GpioControl::setCam3V3Enable(true); + CPhoneDevice::TurnOnCameraPower(NULL); GpioControl::setSpiPower(true); NrsecPort nrsec; @@ -831,7 +831,7 @@ Java_com_xypower_mpapp_MicroPhotoService_importPublicKeyFile( } GpioControl::setSpiPower(false); - GpioControl::setCam3V3Enable(false); + CPhoneDevice::TurnOffCameraPower(NULL); env->ReleaseStringUTFChars(md5, md5Str); @@ -853,7 +853,7 @@ Java_com_xypower_mpapp_MicroPhotoService_importPublicKey( return JNI_FALSE; } - GpioControl::setCam3V3Enable(true); + CPhoneDevice::TurnOnCameraPower(NULL); GpioControl::setSpiPower(true); NrsecPort nrsec; @@ -868,7 +868,7 @@ Java_com_xypower_mpapp_MicroPhotoService_importPublicKey( } GpioControl::setSpiPower(false); - GpioControl::setCam3V3Enable(false); + CPhoneDevice::TurnOffCameraPower(NULL); return res ? JNI_TRUE : JNI_FALSE; #else @@ -889,7 +889,8 @@ Java_com_xypower_mpapp_MicroPhotoService_importPrivateKey( return JNI_FALSE; } - GpioControl::setCam3V3Enable(true); + + CPhoneDevice::TurnOnCameraPower(NULL); GpioControl::setSpiPower(true); NrsecPort nrsec; @@ -904,7 +905,7 @@ Java_com_xypower_mpapp_MicroPhotoService_importPrivateKey( } GpioControl::setSpiPower(false); - GpioControl::setCam3V3Enable(false); + CPhoneDevice::TurnOffCameraPower(NULL); return res ? JNI_TRUE : JNI_FALSE; #else @@ -926,7 +927,7 @@ Java_com_xypower_mpapp_MicroPhotoService_genKeys( jclass cls, jint index) { #ifdef USING_NRSEC - GpioControl::setCam3V3Enable(true); + CPhoneDevice::TurnOnCameraPower(NULL); GpioControl::setSpiPower(true); const char *path = NRSEC_PATH; @@ -940,7 +941,7 @@ Java_com_xypower_mpapp_MicroPhotoService_genKeys( } GpioControl::setSpiPower(false); - GpioControl::setCam3V3Enable(false); + CPhoneDevice::TurnOffCameraPower(NULL); return res ? JNI_TRUE : JNI_FALSE; #else @@ -955,7 +956,7 @@ Java_com_xypower_mpapp_MicroPhotoService_querySecVersion( std::string version; #ifdef USING_NRSEC - GpioControl::setCam3V3Enable(true); + CPhoneDevice::TurnOnCameraPower(NULL); GpioControl::setSpiPower(true); const char *path = NRSEC_PATH; @@ -969,7 +970,7 @@ Java_com_xypower_mpapp_MicroPhotoService_querySecVersion( } GpioControl::setSpiPower(false); - GpioControl::setCam3V3Enable(false); + CPhoneDevice::TurnOffCameraPower(NULL); #endif return env->NewStringUTF(version.c_str()); } @@ -985,7 +986,7 @@ Java_com_xypower_mpapp_MicroPhotoService_genCertRequest( } const char *path = NRSEC_PATH; - GpioControl::setCam3V3Enable(true); + CPhoneDevice::TurnOnCameraPower(NULL); GpioControl::setSpiPower(true); uint8_t output[1024] = { 0 }; @@ -1002,6 +1003,9 @@ Java_com_xypower_mpapp_MicroPhotoService_genCertRequest( env->ReleaseStringUTFChars(subject, subjectStr); } + GpioControl::setSpiPower(false); + CPhoneDevice::TurnOffCameraPower(NULL); + if (res) { const char* outputPathStr = env->GetStringUTFChars(outputPath, 0); @@ -1039,7 +1043,7 @@ Java_com_xypower_mpapp_MicroPhotoService_importPrivateKeyFile( const char *path = NRSEC_PATH; - GpioControl::setCam3V3Enable(true); + CPhoneDevice::TurnOnCameraPower(NULL); GpioControl::setSpiPower(true); NrsecPort nrsec; @@ -1051,7 +1055,7 @@ Java_com_xypower_mpapp_MicroPhotoService_importPrivateKeyFile( } GpioControl::setSpiPower(false); - GpioControl::setCam3V3Enable(false); + CPhoneDevice::TurnOffCameraPower(NULL); // const char *md5Str = env->GetStringUTFChars(md5, 0); // env->ReleaseStringUTFChars(md5, md5Str); @@ -1078,7 +1082,7 @@ Java_com_xypower_mpapp_MicroPhotoService_exportPublicKeyFile( uint8_t len = 0; std::vector data(64, 0); - GpioControl::setCam3V3Enable(true); + CPhoneDevice::TurnOnCameraPower(NULL); GpioControl::setSpiPower(true); NrsecPort nrsec; @@ -1090,7 +1094,7 @@ Java_com_xypower_mpapp_MicroPhotoService_exportPublicKeyFile( } GpioControl::setSpiPower(false); - GpioControl::setCam3V3Enable(false); + CPhoneDevice::TurnOffCameraPower(NULL); if (res) { @@ -1117,7 +1121,7 @@ Java_com_xypower_mpapp_MicroPhotoService_exportPrivateFile( const char *path = NRSEC_PATH; - GpioControl::setCam3V3Enable(true); + CPhoneDevice::TurnOnCameraPower(NULL); GpioControl::setSpiPower(true); NrsecPort nrsec; @@ -1133,7 +1137,7 @@ Java_com_xypower_mpapp_MicroPhotoService_exportPrivateFile( nrsec.Close(); GpioControl::setSpiPower(false); - GpioControl::setCam3V3Enable(false); + CPhoneDevice::TurnOffCameraPower(NULL); if (res) { diff --git a/app/src/main/cpp/PhoneDevice.cpp b/app/src/main/cpp/PhoneDevice.cpp index 51e5bc77..d417b18a 100644 --- a/app/src/main/cpp/PhoneDevice.cpp +++ b/app/src/main/cpp/PhoneDevice.cpp @@ -282,7 +282,11 @@ int32_t CPhoneDevice::CJpegCamera::getOutputFormat() const return AIMAGE_FORMAT_JPEG; } -CPhoneDevice::CPhoneDevice(JavaVM* vm, jobject service, const std::string& appPath, unsigned int netId, unsigned int versionCode) : mCameraPowerCount(0), mOtgCount(0), mVersionCode(versionCode) +std::mutex CPhoneDevice::m_powerLocker; +long CPhoneDevice::mCameraPowerCount = 0; +long CPhoneDevice::mOtgCount = 0; + +CPhoneDevice::CPhoneDevice(JavaVM* vm, jobject service, const std::string& appPath, unsigned int netId, unsigned int versionCode) : mVersionCode(versionCode) { mCamera = NULL; m_listener = NULL; @@ -1863,18 +1867,18 @@ void CPhoneDevice::UpdatePosition(double lon, double lat, double radius, time_t void CPhoneDevice::TurnOnCameraPower(JNIEnv* env) { - m_devLocker.lock(); + m_powerLocker.lock(); if (mCameraPowerCount == 0) { GpioControl::setCam3V3Enable(true); } mCameraPowerCount++; - m_devLocker.unlock(); + m_powerLocker.unlock(); } void CPhoneDevice::TurnOffCameraPower(JNIEnv* env) { - m_devLocker.lock(); + m_powerLocker.lock(); if (mCameraPowerCount > 0) { mCameraPowerCount--; @@ -1883,24 +1887,24 @@ void CPhoneDevice::TurnOffCameraPower(JNIEnv* env) GpioControl::setCam3V3Enable(false); } } - m_devLocker.unlock(); + m_powerLocker.unlock(); } void CPhoneDevice::TurnOnOtg(JNIEnv* env) { - m_devLocker.lock(); + m_powerLocker.lock(); if (mOtgCount == 0) { ALOGD("setOtgState 1"); GpioControl::setOtgState(true); } mOtgCount++; - m_devLocker.unlock(); + m_powerLocker.unlock(); } void CPhoneDevice::TurnOffOtg(JNIEnv* env) { - m_devLocker.lock(); + m_powerLocker.lock(); if (mOtgCount > 0) { mOtgCount--; @@ -1910,7 +1914,7 @@ void CPhoneDevice::TurnOffOtg(JNIEnv* env) GpioControl::setOtgState(false); } } - m_devLocker.unlock(); + m_powerLocker.unlock(); } void CPhoneDevice::UpdateSignalLevel(int signalLevel) diff --git a/app/src/main/cpp/PhoneDevice.h b/app/src/main/cpp/PhoneDevice.h index 4472cf1d..b293a795 100644 --- a/app/src/main/cpp/PhoneDevice.h +++ b/app/src/main/cpp/PhoneDevice.h @@ -231,11 +231,11 @@ public: } void UpdateSimcard(const std::string& simcard); - void TurnOnCameraPower(JNIEnv* env); - void TurnOffCameraPower(JNIEnv* env); + static void TurnOnCameraPower(JNIEnv* env); + static void TurnOffCameraPower(JNIEnv* env); - void TurnOnOtg(JNIEnv* env); - void TurnOffOtg(JNIEnv* env); + static void TurnOnOtg(JNIEnv* env); + static void TurnOffOtg(JNIEnv* env); protected: @@ -328,8 +328,9 @@ protected: time_t mHeartbeatStartTime; unsigned int mHeartbeatDuration; - long mCameraPowerCount; - long mOtgCount; + static std::mutex m_powerLocker; + static long mCameraPowerCount; + static long mOtgCount; std::thread m_threadClose; int m_signalLevel;