diff --git a/app/src/main/cpp/GPIOControl.cpp b/app/src/main/cpp/GPIOControl.cpp index f90d6838..11102abc 100644 --- a/app/src/main/cpp/GPIOControl.cpp +++ b/app/src/main/cpp/GPIOControl.cpp @@ -11,6 +11,7 @@ #include #include +#include #include "GPIOControl.h" @@ -22,12 +23,15 @@ #define IOT_PARAM_READ 0xAF std::mutex GpioControl::m_locker; -std::vector> GpioControl::m_references; +CSemaphore GpioControl::m_semaphore; +std::vector GpioControl::m_items; +std::thread GpioControl::m_thread; +bool GpioControl::m_exitSignal = false; -int GpioControl::turnOnImpl(const IOT_PARAM& param) +size_t GpioControl::turnOnImpl(const IOT_PARAM& param) { - uint32_t references = 1; - std::vector >::iterator it; + size_t references = 1; + std::vector::iterator it; int res = 0; int fd = -1; @@ -37,54 +41,20 @@ int GpioControl::turnOnImpl(const IOT_PARAM& param) res = ioctl(fd, IOT_PARAM_WRITE, ¶m); close(fd); // check res??? - for (it = m_references.begin(); it != m_references.end(); ++it) + for (it = m_items.begin(); it != m_items.end(); ++it) { - if (it->first == param.cmd) + if (it->cmd == param.cmd) { - it->second++; - references = it->second; + it->references++; + it->closeTime = 0; + references = it->references; break; } } - if (it == m_references.end()) + if (it == m_items.end()) { - m_references.push_back(std::pair(param.cmd, references)); - } - } - - return references; -} - -int GpioControl::turnOffImpl(const IOT_PARAM& param) -{ - uint32_t references = 0; - std::vector >::iterator it; - int res = 0; - int fd = -1; - - for (it = m_references.begin(); it != m_references.end(); ++it) - { - if (it->first == param.cmd) - { - if (it->second > 0) - { - it->second--; - } - references = it->second; - break; - } - } - - if (references == 0) - { - fd = open(GPIO_NODE_MP, O_RDONLY); - if (fd > 0) - { - res = ioctl(fd, IOT_PARAM_WRITE, ¶m); -#ifdef _DEBUG - ALOGI("setInt cmd=%d,value=%d,result=%d\r\n",param.cmd, param.value, param.result); -#endif - close(fd); + ITEM item = {param.cmd, references, 0, 0}; + m_items.push_back(item); } } @@ -97,47 +67,14 @@ void GpioControl::setInt(int cmd, int value) // param.cmd = cmd; // param.value = value; - if (value) - { - m_locker.lock(); - turnOnImpl(param); - m_locker.unlock(); - } - else - { - m_locker.lock(); - turnOffImpl(param); - m_locker.unlock(); - } -} - -void GpioControl::setInt(const std::vector& cmds, int value) -{ - IOT_PARAM param = { 0, value, 0 }; - // param.cmd = cmd; - // param.value = value; - - std::vector::const_iterator it; - - if (value) - { - m_locker.lock(); - for (it = cmds.cbegin(); it != cmds.cend(); ++it) - { - param.cmd = *it; - turnOnImpl(param); - } - m_locker.unlock(); - } - else + int fd = open(GPIO_NODE_MP, O_RDONLY); + if (fd > 0) { - m_locker.lock(); - for (it = cmds.cbegin(); it != cmds.cend(); ++it) - { - param.cmd = *it; - turnOffImpl(param); - } - m_locker.unlock(); + int res = ioctl(fd, IOT_PARAM_WRITE, ¶m); +#ifdef _DEBUG + ALOGI("setInt cmd=%d,value=%d,result=%d\r\n",param.cmd, param.value, param.result); +#endif + close(fd); } } @@ -226,3 +163,214 @@ std::string GpioControl::getString(int cmd) return ""; } +/////////////////////////// Power Control ///////////////////////////////// + +size_t GpioControl::TurnOn(int cmd) +{ + IOT_PARAM param = { cmd, 1, 0 }; + // param.cmd = cmd; + // param.value = value; + + m_locker.lock(); + size_t ref = turnOnImpl(param); + m_locker.unlock(); + return ref; +} + +size_t GpioControl::TurnOn(const std::vector& cmds) +{ + IOT_PARAM param = { 0, 1, 0 }; + // param.cmd = cmd; + // param.value = value; + + std::vector::const_iterator it; + m_locker.lock(); + for (it = cmds.cbegin(); it != cmds.cend(); ++it) + { + param.cmd = *it; + turnOnImpl(param); + } + m_locker.unlock(); + + return 0; +} + +size_t GpioControl::TurnOff(int cmd, uint32_t delayedCloseTime/* = 0*/) +{ + time_t ts = 0; + if (delayedCloseTime > 0) + { + ts = time(NULL) + delayedCloseTime; + } + std::vector::iterator it; + m_locker.lock(); + for (it = m_items.begin(); it != m_items.end(); ++it) + { + if (it->cmd == cmd) + { + it->closeCmds++; + if (ts > it->closeTime) + { + it->closeTime = ts; + } + break; + } + } + m_locker.unlock(); + + return 0; +} + +size_t GpioControl::TurnOff(const std::vector& cmds, uint32_t delayedCloseTime/* = 0*/) +{ + time_t ts = 0; + if (delayedCloseTime > 0) + { + ts = time(NULL) + delayedCloseTime; + } + std::vector::iterator it; + std::vector::const_iterator itCmd; + m_locker.lock(); + // turnOnImpl(param); + for (itCmd = cmds.cbegin(); itCmd != cmds.end(); ++itCmd) + { + for (it = m_items.begin(); it != m_items.end(); ++it) + { + if (it->cmd == *itCmd) + { + it->closeCmds++; + if (ts > it->closeTime) + { + it->closeTime = ts; + } + break; + } + } + } + + return 0; +} + +size_t GpioControl::TurnOff(const std::vector >& cmds) +{ + time_t ts = time(NULL); + time_t ts2; + std::vector::iterator it; + std::vector >::const_iterator itCmd; + m_locker.lock(); + for (itCmd = cmds.cbegin(); itCmd != cmds.end(); ++itCmd) + { + for (it = m_items.begin(); it != m_items.end(); ++it) + { + if (it->cmd == itCmd->first) + { + it->closeCmds++; + if (itCmd->second != 0) + { + ts2 = itCmd->second + ts; + if (ts2 > it->closeTime) + { + it->closeTime = ts2; + } + } + break; + } + } + } + + return 0; +} + +void GpioControl::PowerControlThreadProc() +{ + time_t ts = 0; + std::vector::iterator it; + std::vector items; + time_t minDelayTime = 0; + time_t delayTime = 0; + int fd = -1; + int res = -1; + + while(1) + { + // Check if there is close cmd + ts = time(NULL); + + minDelayTime = std::numeric_limits::max(); + + m_locker.lock(); + for (it = m_items.begin(); it != m_items.end(); ++it) + { + if (it->references == 0 && it->closeCmds == 0 && it->closeTime == 0) + { + continue; + } + + if (it->closeCmds > 0) + { + if (it->references <= it->closeCmds) + { + it->references = 0; + } + else + { + it->references -= it->closeCmds; + } + it->closeCmds = 0; + } + + if (it->references == 0) + { + // Should turn off the power + if ((it->closeTime == 0) || (it->closeTime <= ts)) + { + // close it directly + setInt(it->cmd, 0); + it->closeTime = 0; + } + else + { + // Check Time + delayTime = ts - it->closeTime; + if (delayTime < minDelayTime) + { + minDelayTime = delayTime; + } + } + } + + } + m_locker.unlock(); + + if (minDelayTime < std::numeric_limits::max()) + { + m_semaphore.try_acquire_for(std::chrono::seconds(1)); + } + else + { + m_semaphore.acquire(); + } + + if (m_exitSignal) + { + break; + } + } +} + +bool GpioControl::Startup() +{ + // if (m_thread.) + m_exitSignal = false; + m_thread = std::thread(PowerControlThreadProc); + + return true; +} + +void GpioControl::Stop() +{ + // Notify + m_exitSignal = true; + m_semaphore.release(); + m_thread.detach(); +} \ No newline at end of file diff --git a/app/src/main/cpp/GPIOControl.h b/app/src/main/cpp/GPIOControl.h index e862e2a8..3177cf3a 100644 --- a/app/src/main/cpp/GPIOControl.h +++ b/app/src/main/cpp/GPIOControl.h @@ -12,7 +12,7 @@ #include #include - +#include #ifndef USING_N938 @@ -129,18 +129,42 @@ typedef struct class GpioControl { +public: + struct ITEM + { + int cmd; + size_t references; + size_t closeCmds; + time_t closeTime; + }; + private: - static std::mutex m_locker; - static std::vector> m_references; + static std::mutex m_locker; + static CSemaphore m_semaphore; + static std::vector m_items; + static bool m_exitSignal; + static std::thread m_thread; protected: - static int turnOnImpl(const IOT_PARAM& param); - static int turnOffImpl(const IOT_PARAM& param); + static size_t turnOnImpl(const IOT_PARAM& param); + static size_t turnOffImpl(const IOT_PARAM& param); public: - static void setInt(int cmd, int value); - static void setInt(const std::vector& cmds, int value); + // Power + static size_t TurnOn(int cmd); + static size_t TurnOn(const std::vector& cmds); + 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 void PowerControlThreadProc(); + + static bool Startup(); + static void Stop(); + +public: + static void setInt(int cmd, int value); static int getInt(int cmd); static void setLong(int cmd, long value); static long getLong(int cmd); @@ -150,7 +174,7 @@ public: static void setOtgState(bool on) { #ifndef USING_N938 - setInt(CMD_SET_OTG_STATE, on ? 1 : 0); + on ? TurnOn(CMD_SET_OTG_STATE) : TurnOff(CMD_SET_OTG_STATE); #endif } @@ -165,10 +189,42 @@ public: static void setCam3V3Enable(bool enabled) { -#ifdef ENABLE_3V3_ALWAYS - setInt(CMD_SET_CAM_3V3_EN_STATE, 1); -#else - setInt(CMD_SET_CAM_3V3_EN_STATE, enabled ? 1 : 0); + enabled ? TurnOn(CMD_SET_CAM_3V3_EN_STATE) : TurnOff(CMD_SET_CAM_3V3_EN_STATE); + } + + + static void setBeeOn(bool z) + { +#ifndef USING_N938 + setInt(CMD_SET_PWM_BEE_STATE, z ? 1 : 0); +#endif + } + + static void setJidianqiState(bool z) { +#ifndef USING_N938 + setInt(CMD_SET_ALM_MODE, z ? 1 : 0); +#endif + } + + static void setSpiPower(bool on) { + setInt(CMD_SET_SPI_POWER, on ? 1 : 0); + if (on) + { + std::this_thread::sleep_for(std::chrono::milliseconds(40)); + } + } + + static void setRS485Enable(bool z) + { +#ifndef USING_N938 + setInt(CMD_SET_485_EN_STATE, z ? 1 : 0); +#endif + } + + static void set12VEnable(bool z) + { +#ifndef USING_N938 + z ? TurnOn(CMD_SET_12V_EN_STATE) : TurnOff(CMD_SET_12V_EN_STATE); #endif } @@ -305,39 +361,6 @@ public: #endif } - static void setBeeOn(bool z) { -#ifndef USING_N938 - setInt(CMD_SET_PWM_BEE_STATE, z ? 1 : 0); -#endif - } - - static void setJidianqiState(bool z) { -#ifndef USING_N938 - setInt(CMD_SET_ALM_MODE, z ? 1 : 0); -#endif - } - - static void setSpiPower(bool on) { - setInt(CMD_SET_SPI_POWER, on ? 1 : 0); - if (on) - { - std::this_thread::sleep_for(std::chrono::milliseconds(40)); - } - } - - static void setRS485Enable(bool z) { -#ifndef USING_N938 - setInt(CMD_SET_485_EN_STATE, z ? 1 : 0); -#endif - } - - - static void set12VEnable(bool z) { -#ifndef USING_N938 - setInt(CMD_SET_12V_EN_STATE, z ? 1 : 0); -#endif - } - }; diff --git a/app/src/main/cpp/MicroPhoto.cpp b/app/src/main/cpp/MicroPhoto.cpp index 114d527f..cfce9151 100644 --- a/app/src/main/cpp/MicroPhoto.cpp +++ b/app/src/main/cpp/MicroPhoto.cpp @@ -401,9 +401,9 @@ Java_com_xypower_mpapp_MicroPhotoService_takePhoto( if (photoInfo.usbCamera) { - CPhoneDevice::TurnOnOtg(NULL); + GpioControl::setOtgState(true); } - CPhoneDevice::TurnOnCameraPower(NULL); + GpioControl::setCam3V3Enable(true); std::vector osds; osds.resize(4); @@ -1045,8 +1045,7 @@ Java_com_xypower_mpapp_MicroPhotoService_importPublicKeyFile( const char *md5Str = env->GetStringUTFChars(md5, 0); - GpioControl::setSpiPower(false); - CPhoneDevice::TurnOnCameraPower(NULL); + GpioControl::setCam3V3Enable(true); GpioControl::setSpiPower(true); NrsecPort nrsec; @@ -1059,7 +1058,7 @@ Java_com_xypower_mpapp_MicroPhotoService_importPublicKeyFile( } GpioControl::setSpiPower(false); - CPhoneDevice::TurnOffCameraPower(NULL); + GpioControl::setCam3V3Enable(false); env->ReleaseStringUTFChars(md5, md5Str); @@ -1081,8 +1080,7 @@ Java_com_xypower_mpapp_MicroPhotoService_importPublicKey( return JNI_FALSE; } - GpioControl::setSpiPower(false); - CPhoneDevice::TurnOnCameraPower(NULL); + GpioControl::setCam3V3Enable(true); GpioControl::setSpiPower(true); NrsecPort nrsec; @@ -1097,7 +1095,7 @@ Java_com_xypower_mpapp_MicroPhotoService_importPublicKey( } GpioControl::setSpiPower(false); - CPhoneDevice::TurnOffCameraPower(NULL); + GpioControl::setCam3V3Enable(false); return res ? JNI_TRUE : JNI_FALSE; #else @@ -1118,8 +1116,7 @@ Java_com_xypower_mpapp_MicroPhotoService_importPrivateKey( return JNI_FALSE; } - GpioControl::setSpiPower(false); - CPhoneDevice::TurnOnCameraPower(NULL); + GpioControl::setCam3V3Enable(true); GpioControl::setSpiPower(true); NrsecPort nrsec; @@ -1134,7 +1131,7 @@ Java_com_xypower_mpapp_MicroPhotoService_importPrivateKey( } GpioControl::setSpiPower(false); - CPhoneDevice::TurnOffCameraPower(NULL); + GpioControl::setCam3V3Enable(false); return res ? JNI_TRUE : JNI_FALSE; #else @@ -1157,8 +1154,7 @@ Java_com_xypower_mpapp_MicroPhotoService_genKeys( #ifdef USING_NRSEC - GpioControl::setSpiPower(false); - CPhoneDevice::TurnOnCameraPower(NULL); + GpioControl::setCam3V3Enable(true); GpioControl::setSpiPower(true); const char *path = NRSEC_PATH; @@ -1172,7 +1168,7 @@ Java_com_xypower_mpapp_MicroPhotoService_genKeys( } GpioControl::setSpiPower(false); - CPhoneDevice::TurnOffCameraPower(NULL); + GpioControl::setCam3V3Enable(false); return res ? JNI_TRUE : JNI_FALSE; #else @@ -1187,8 +1183,7 @@ Java_com_xypower_mpapp_MicroPhotoService_querySecVersion( std::string version; #ifdef USING_NRSEC - GpioControl::setSpiPower(false); - CPhoneDevice::TurnOnCameraPower(NULL); + GpioControl::setCam3V3Enable(true); GpioControl::setSpiPower(true); const char *path = NRSEC_PATH; @@ -1202,7 +1197,7 @@ Java_com_xypower_mpapp_MicroPhotoService_querySecVersion( } GpioControl::setSpiPower(false); - CPhoneDevice::TurnOffCameraPower(NULL); + GpioControl::setCam3V3Enable(false); #endif return env->NewStringUTF(version.c_str()); } @@ -1218,8 +1213,7 @@ Java_com_xypower_mpapp_MicroPhotoService_genCertRequest( } const char *path = NRSEC_PATH; - GpioControl::setSpiPower(false); - CPhoneDevice::TurnOnCameraPower(NULL); + GpioControl::setCam3V3Enable(true); GpioControl::setSpiPower(true); uint8_t output[1024] = { 0 }; @@ -1237,7 +1231,7 @@ Java_com_xypower_mpapp_MicroPhotoService_genCertRequest( } GpioControl::setSpiPower(false); - CPhoneDevice::TurnOffCameraPower(NULL); + GpioControl::setCam3V3Enable(false); if (res) { @@ -1276,8 +1270,7 @@ Java_com_xypower_mpapp_MicroPhotoService_importPrivateKeyFile( const char *path = NRSEC_PATH; - GpioControl::setSpiPower(false); - CPhoneDevice::TurnOnCameraPower(NULL); + GpioControl::setCam3V3Enable(true); GpioControl::setSpiPower(true); NrsecPort nrsec; @@ -1289,7 +1282,7 @@ Java_com_xypower_mpapp_MicroPhotoService_importPrivateKeyFile( } GpioControl::setSpiPower(false); - CPhoneDevice::TurnOffCameraPower(NULL); + GpioControl::setCam3V3Enable(false); // const char *md5Str = env->GetStringUTFChars(md5, 0); // env->ReleaseStringUTFChars(md5, md5Str); @@ -1316,8 +1309,7 @@ Java_com_xypower_mpapp_MicroPhotoService_exportPublicKeyFile( uint8_t len = 0; std::vector data(64, 0); - GpioControl::setSpiPower(false); - CPhoneDevice::TurnOnCameraPower(NULL); + GpioControl::setCam3V3Enable(true); GpioControl::setSpiPower(true); NrsecPort nrsec; @@ -1329,7 +1321,7 @@ Java_com_xypower_mpapp_MicroPhotoService_exportPublicKeyFile( } GpioControl::setSpiPower(false); - CPhoneDevice::TurnOffCameraPower(NULL); + GpioControl::setCam3V3Enable(false); if (res) { @@ -1355,8 +1347,7 @@ Java_com_xypower_mpapp_MicroPhotoService_exportPrivateFile( const char *path = NRSEC_PATH; - GpioControl::setSpiPower(false); - CPhoneDevice::TurnOnCameraPower(NULL); + GpioControl::setCam3V3Enable(true); GpioControl::setSpiPower(true); NrsecPort nrsec; @@ -1371,7 +1362,7 @@ Java_com_xypower_mpapp_MicroPhotoService_exportPrivateFile( nrsec.Close(); GpioControl::setSpiPower(false); - CPhoneDevice::TurnOffCameraPower(NULL); + GpioControl::setCam3V3Enable(false); if (res) { const char *outputPathStr = env->GetStringUTFChars(outputPath, 0); diff --git a/app/src/main/cpp/PhoneDevice.cpp b/app/src/main/cpp/PhoneDevice.cpp index f4f73619..2a2b73b7 100644 --- a/app/src/main/cpp/PhoneDevice.cpp +++ b/app/src/main/cpp/PhoneDevice.cpp @@ -417,10 +417,6 @@ int32_t CPhoneDevice::CJpegCamera::getOutputFormat() const return AIMAGE_FORMAT_JPEG; } -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, const std::string& nativeLibDir) : mVersionCode(versionCode), m_nativeLibraryDir(nativeLibDir), m_network(NULL), m_netHandle(NETWORK_UNSPECIFIED) { @@ -493,7 +489,7 @@ CPhoneDevice::CPhoneDevice(JavaVM* vm, jobject service, const std::string& appPa m_uniqueIdFeed = (unsigned long)m_timerUidFeed; #ifdef USING_NRSEC - TurnOnCameraPower(env); + GpioControl::setCam3V3Enable(true); GpioControl::setSpiPower(true); #endif } @@ -671,16 +667,16 @@ bool CPhoneDevice::SelfTest(std::string& result) params.burstCaptures = 1; if (usbCamera) { - TurnOnOtg(NULL); + GpioControl::setOtgState(true); } - TurnOnCameraPower(NULL); + GpioControl::setCam3V3Enable(true); NdkCamera camera(width, height, params); int res = camera.selfTest(std::to_string(cameraId), width, height); - TurnOffCameraPower(NULL); + GpioControl::setCam3V3Enable(false); if (usbCamera) { - TurnOffOtg(NULL); + GpioControl::setOtgState(false); } if (res == 0) { @@ -1457,17 +1453,17 @@ bool CPhoneDevice::TakePhoto(const IDevice::PHOTO_INFO& photoInfo, const vector< if (photoInfo.cameraType == CAM_TYPE_USB || photoInfo.cameraType == CAM_TYPE_NET) { - TurnOnOtg(NULL); + GpioControl::setOtgState(true); } if (photoInfo.cameraType == CAM_TYPE_NET) { GpioControl::set12VEnable(true); #ifdef USING_N938 - GpioControl::setInt(CMD_SET_NETWORK_POWER_EN, 1); - GpioControl::setInt(CMD_SET_485_EN_STATE, 1); + GpioControl::TurnOn(CMD_SET_NETWORK_POWER_EN); + GpioControl::TurnOn(CMD_SET_485_EN_STATE); #endif } - TurnOnCameraPower(NULL); + GpioControl::setCam3V3Enable(true); res = true; if ((mPhotoInfo.mediaType == 0) && ((mPhotoInfo.cameraType == CAM_TYPE_MIPI) || (mPhotoInfo.cameraType == CAM_TYPE_USB))) @@ -1521,10 +1517,10 @@ bool CPhoneDevice::TakePhoto(const IDevice::PHOTO_INFO& photoInfo, const vector< mCamera = NULL; res = false; - TurnOffCameraPower(NULL); + GpioControl::setCam3V3Enable(false); if (photoInfo.usbCamera) { - TurnOffOtg(NULL); + GpioControl::setOtgState(false); } if (hasFatalError) @@ -1575,11 +1571,11 @@ bool CPhoneDevice::TakePhoto(const IDevice::PHOTO_INFO& photoInfo, const vector< XYLOG(XYLOG_SEVERITY_ERROR, "Ethernet not existing CH=%u PR=%X PHOTOID=%u", (uint32_t)localPhotoInfo.channel, (uint32_t)localPhotoInfo.preset, localPhotoInfo.photoId); pThis->TakePhotoCb(0, localPhotoInfo, "", 0); - TurnOffOtg(NULL); + GpioControl::setOtgState(false); GpioControl::set12VEnable(false); #ifdef USING_N938 - GpioControl::setInt(CMD_SET_NETWORK_POWER_EN, 0); - GpioControl::setInt(CMD_SET_485_EN_STATE, 0); + GpioControl::TurnOff(CMD_SET_NETWORK_POWER_EN); + GpioControl::TurnOff(CMD_SET_485_EN_STATE); #endif return; } @@ -1609,11 +1605,11 @@ bool CPhoneDevice::TakePhoto(const IDevice::PHOTO_INFO& photoInfo, const vector< XYLOG(XYLOG_SEVERITY_ERROR, "Vendor(%u) not Supported CH=%u PR=%X PHOTOID=%u", (uint32_t)localPhotoInfo.vendor, (uint32_t)localPhotoInfo.channel, (unsigned int)localPhotoInfo.preset, localPhotoInfo.photoId); pThis->TakePhotoCb(0, localPhotoInfo, "", 0); - TurnOffOtg(NULL); + GpioControl::setOtgState(false); GpioControl::set12VEnable(false); #ifdef USING_N938 - GpioControl::setInt(CMD_SET_NETWORK_POWER_EN, 0); - GpioControl::setInt(CMD_SET_485_EN_STATE, 0); + GpioControl::TurnOff(CMD_SET_NETWORK_POWER_EN); + GpioControl::TurnOff(CMD_SET_485_EN_STATE); #endif return; } @@ -1651,11 +1647,11 @@ bool CPhoneDevice::TakePhoto(const IDevice::PHOTO_INFO& photoInfo, const vector< } } - TurnOffOtg(NULL); + GpioControl::setOtgState(false); GpioControl::set12VEnable(false); #ifdef USING_N938 - GpioControl::setInt(CMD_SET_NETWORK_POWER_EN, 0); - GpioControl::setInt(CMD_SET_485_EN_STATE, 0); + GpioControl::TurnOff(CMD_SET_NETWORK_POWER_EN); + GpioControl::TurnOff(CMD_SET_485_EN_STATE); #endif if (netCaptureResult) { @@ -3395,34 +3391,6 @@ void CPhoneDevice::UpdatePosition(double lon, double lat, double radius, time_t } } -void CPhoneDevice::TurnOnCameraPower(JNIEnv* env) -{ - m_powerLocker.lock(); - GpioControl::setCam3V3Enable(true); - m_powerLocker.unlock(); -} - -void CPhoneDevice::TurnOffCameraPower(JNIEnv* env) -{ - m_powerLocker.lock(); - GpioControl::setCam3V3Enable(false); - m_powerLocker.unlock(); -} - -void CPhoneDevice::TurnOnOtg(JNIEnv* env) -{ - m_powerLocker.lock(); - GpioControl::setInt(CMD_SET_OTG_STATE, 1); - m_powerLocker.unlock(); -} - -void CPhoneDevice::TurnOffOtg(JNIEnv* env) -{ - m_powerLocker.lock(); - GpioControl::setInt(CMD_SET_OTG_STATE, 0); - m_powerLocker.unlock(); -} - void CPhoneDevice::UpdateSignalLevel(int signalLevel) { m_signalLevel = signalLevel; @@ -3646,18 +3614,18 @@ bool CPhoneDevice::OpenSensors(int sensortype) GpioControl::set12VEnable(true); GpioControl::setCam3V3Enable(true); GpioControl::setRS485Enable(true); - GpioControl::setInt(CMD_SET_SPI_POWER, 1); -// GpioControl::setInt(CMD_SET_485_EN_STATE, 1); // 打开RS485电源 + GpioControl::TurnOn(CMD_SET_SPI_POWER); +// GpioControl::TurnOn(CMD_SET_485_EN_STATE); // 打开RS485电源 #ifndef USING_N938 #ifndef USING_PLZ - GpioControl::setInt(CMD_SET_485_EN_STATE, 1); + GpioControl::TurnOn(CMD_SET_485_EN_STATE); #else - GpioControl::setInt(CMD_SET_485_ENABLE, 1); + GpioControl::TurnOn(CMD_SET_485_ENABLE); #endif #else - GpioControl::setInt(CMD_SPI2SERIAL_POWER_EN, 1); - GpioControl::setInt(CMD_RS485_3V3_EN, 1); + GpioControl::TurnOn(CMD_SPI2SERIAL_POWER_EN); + GpioControl::TurnOn(CMD_RS485_3V3_EN); #endif } if(sensortype == CAMERA_SENSOR_OPEN) @@ -3665,39 +3633,39 @@ bool CPhoneDevice::OpenSensors(int sensortype) #ifndef USING_N938 #ifndef USING_PLZ #else - GpioControl::setInt(CMD_SET_PTZ_PWR_ENABLE, 1); + GpioControl::TurnOn(CMD_SET_PTZ_PWR_ENABLE); #endif #else - GpioControl::setInt(CMD_SET_PIC1_POWER, 1); - GpioControl::setInt(CMD_SET_485_EN4, 1); + GpioControl::TurnOn(CMD_SET_PIC1_POWER); + GpioControl::TurnOn(CMD_SET_485_EN4); #endif -// GpioControl::setInt(CMD_SET_CAM_3V3_EN_STATE, 1); // 打开3.3V电压 - // GpioControl::setInt(CMD_SET_3V3_PWR_ENABLE, 1); +// GpioControl::TurnOn(CMD_SET_CAM_3V3_EN_STATE); // 打开3.3V电压 + // GpioControl::TurnOn(CMD_SET_3V3_PWR_ENABLE); } if(sensortype == WEATHER_SENSOR_OPEN) { #ifndef USING_N938 #else - GpioControl::setInt(CMD_SET_WTH_POWER, 1); - GpioControl::setInt(CMD_SET_485_EN3, 1); + GpioControl::TurnOn(CMD_SET_WTH_POWER); + GpioControl::TurnOn(CMD_SET_485_EN3); #endif } if(sensortype == ICETHICK_SENSOR_OPEN) { #ifndef USING_N938 #else - GpioControl::setInt(CMD_SET_PULL_POWER, 1); - GpioControl::setInt(CMD_SET_ANGLE_POWER, 1); - GpioControl::setInt(CMD_SET_485_EN1, 1); - GpioControl::setInt(CMD_SET_485_EN0, 1); + GpioControl::TurnOn(CMD_SET_PULL_POWER, 0); + GpioControl::TurnOn(CMD_SET_ANGLE_POWER, 0); + GpioControl::TurnOn(CMD_SET_485_EN1, 0); + GpioControl::TurnOn(CMD_SET_485_EN0, 0); #endif } if(sensortype == OTHER_SENSOR) { #ifndef USING_N938 #else - GpioControl::setInt(CMD_SET_OTHER_POWER, 1); - GpioControl::setInt(CMD_SET_485_EN2, 1); + GpioControl::TurnOn(CMD_SET_OTHER_POWER); + GpioControl::TurnOn(CMD_SET_485_EN2); #endif } return 0; @@ -3707,36 +3675,36 @@ bool CPhoneDevice::CloseSensors(int sensortype) { if(sensortype == MAIN_POWER_OPEN) { - GpioControl::setInt(CMD_SET_SPI_POWER, 0); + GpioControl::TurnOff(CMD_SET_SPI_POWER); GpioControl::set12VEnable(false); GpioControl::setCam3V3Enable(false); GpioControl::setRS485Enable(false); -// GpioControl::setInt(CMD_SET_485_EN_STATE, 0); +// GpioControl::TurnOff(CMD_SET_485_EN_STATE); #ifndef USING_N938 #ifndef USING_PLZ - GpioControl::setInt(CMD_SET_485_EN_STATE, 0); + GpioControl::TurnOff(CMD_SET_485_EN_STATE); #else - GpioControl::setInt(CMD_SET_485_ENABLE, 0); + GpioControl::TurnOff(CMD_SET_485_ENABLE); #endif #else - GpioControl::setInt(CMD_SPI2SERIAL_POWER_EN, 0); - GpioControl::setInt(CMD_RS485_3V3_EN, 0); + GpioControl::TurnOff(CMD_SPI2SERIAL_POWER_EN); + GpioControl::TurnOff(CMD_RS485_3V3_EN); #endif } if(sensortype == CAMERA_SENSOR_OPEN) { #ifdef USING_N938 - GpioControl::setInt(CMD_SET_PIC1_POWER, 0); - GpioControl::setInt(CMD_SET_485_EN4, 0); -// GpioControl::setInt(CMD_SET_CAM_3V3_EN_STATE, 0); + GpioControl::TurnOff(CMD_SET_PIC1_POWER); + GpioControl::TurnOff(CMD_SET_485_EN4); +// GpioControl::TurnOff(CMD_SET_CAM_3V3_EN_STATE); #endif #ifndef USING_N938 - // GpioControl::setInt(CMD_SET_3V3_PWR_ENABLE, 0); + // GpioControl::TurnOff(CMD_SET_3V3_PWR_ENABLE); #ifndef USING_PLZ #else - GpioControl::setInt(CMD_SET_PTZ_PWR_ENABLE, 0); + GpioControl::TurnOff(CMD_SET_PTZ_PWR_ENABLE); #endif #endif } @@ -3744,26 +3712,26 @@ bool CPhoneDevice::CloseSensors(int sensortype) { #ifndef USING_N938 #else - GpioControl::setInt(CMD_SET_WTH_POWER, 0); - GpioControl::setInt(CMD_SET_485_EN3, 0); + GpioControl::TurnOff(CMD_SET_WTH_POWER); + GpioControl::TurnOff(CMD_SET_485_EN3); #endif } if(sensortype == ICETHICK_SENSOR_OPEN) { #ifndef USING_N938 #else - GpioControl::setInt(CMD_SET_PULL_POWER, 0); - GpioControl::setInt(CMD_SET_ANGLE_POWER, 0); - GpioControl::setInt(CMD_SET_485_EN1, 0); - GpioControl::setInt(CMD_SET_485_EN0, 0); + GpioControl::TurnOff(CMD_SET_PULL_POWER); + GpioControl::TurnOff(CMD_SET_ANGLE_POWER); + GpioControl::TurnOff(CMD_SET_485_EN1); + GpioControl::TurnOff(CMD_SET_485_EN0); #endif } if(sensortype == OTHER_SENSOR) { #ifndef USING_N938 #else - GpioControl::setInt(CMD_SET_OTHER_POWER, 0); - GpioControl::setInt(CMD_SET_485_EN2, 0); + GpioControl::TurnOff(CMD_SET_OTHER_POWER); + GpioControl::TurnOff(CMD_SET_485_EN2); #endif } return 0; @@ -3805,10 +3773,11 @@ void CPhoneDevice::SetStaticIp() if (m_network != NULL) { SetStaticIp(m_network->iface, m_network->ip, m_network->netmask, m_network->gateway); - XYLOG(XYLOG_SEVERITY_INFO, "Set Static IP on %s: %s", m_network->iface.c_str(), m_network->ip.c_str()); + XYLOG(XYLOG_SEVERITY_INFO, "Set Static IP on %s: %s", m_network->iface.c_str(), + m_network->ip.c_str()); } else { XYLOG(XYLOG_SEVERITY_WARNING, "No Static IP Confg"); } -} +} \ No newline at end of file diff --git a/app/src/main/cpp/PhoneDevice.h b/app/src/main/cpp/PhoneDevice.h index bdb0d603..0360524f 100644 --- a/app/src/main/cpp/PhoneDevice.h +++ b/app/src/main/cpp/PhoneDevice.h @@ -257,12 +257,6 @@ public: net_handle_t GetNetHandle() const; - static void TurnOnCameraPower(JNIEnv* env); - static void TurnOffCameraPower(JNIEnv* env); - - static void TurnOnOtg(JNIEnv* env); - static void TurnOffOtg(JNIEnv* env); - protected: std::string GetFileName() const; @@ -382,9 +376,6 @@ protected: time_t mHeartbeatStartTime; unsigned int mHeartbeatDuration; - static std::mutex m_powerLocker; - static long mCameraPowerCount; - static long mOtgCount; std::thread m_threadClose; int m_signalLevel; diff --git a/app/src/main/cpp/SensorsProtocol.cpp b/app/src/main/cpp/SensorsProtocol.cpp index 9b2eac68..716b1e12 100644 --- a/app/src/main/cpp/SensorsProtocol.cpp +++ b/app/src/main/cpp/SensorsProtocol.cpp @@ -36,72 +36,6 @@ AI_DEF weatherpntmsg[WEATHER_DATA_NUM]; AI_DEF rallypntmsg[6][RALLY_DATA_NUM]; AI_DEF slantpntmsg[6][SLANTANGLE_DATA_NUM]; -static void setInt(int cmd, int value) -{ - int fd = ::open("/dev/mtkgpioctrl", O_RDONLY); - IOT_PARAM param; - param.cmd = cmd; - param.value = value; - // LOGE("set_int fd=%d,cmd=%d,value=%d\r\n",fd, cmd, value); - if (fd > 0) - { - ioctl(fd, IOT_PARAM_WRITE, ¶m); - // LOGE("set_int22 cmd=%d,value=%d,result=%d\r\n",param.cmd, param.value, param.result); - close(fd); - } - //return; -} - -int getInt(int cmd) -{ - int fd = ::open("/dev/mtkgpioctrl", O_RDONLY); - // LOGE("get_int fd=%d,cmd=%d\r\n",fd, cmd); - if (fd > 0) - { - IOT_PARAM param; - param.cmd = cmd; - ioctl(fd, IOT_PARAM_READ, ¶m); -#ifdef _DEBUG - //ALOGI("getInt cmd=%d,value=%d,result=%d\r\n",param.cmd, param.value, param.result); -#endif - close(fd); - return param.value; - } - return -1; -} - -static void setRS485Enable(bool z) { -#ifndef USING_N938 - setInt(CMD_SET_485_EN_STATE, z ? 1 : 0); -#endif -} - -static void set485WriteMode() { -#ifndef USING_N938 - setInt(CMD_SET_485_STATE, 1); -#endif -} - -static void set485ReadMode() { -#ifndef USING_N938 - setInt(CMD_SET_485_STATE, 0); -#endif -} -static void set12VEnable(bool z) { -#ifndef USING_N938 - setInt(CMD_SET_12V_EN_STATE, z ? 1 : 0); -#endif -} - -static void setCam3V3Enable(bool enabled) -{ -#ifdef ENABLE_3V3_ALWAYS - setInt(CMD_SET_CAM_3V3_EN_STATE, 1); -#else - setInt(CMD_SET_CAM_3V3_EN_STATE, enabled ? 1 : 0); -#endif -} - #if 0 /********************************************************************************* * 气象数据处理 *