调整gpio的处理方式

lowmem
Matthew 1 month ago
parent 44d780a0ce
commit e4e174a083

@ -23,6 +23,7 @@
#define IOT_PARAM_READ 0xAF #define IOT_PARAM_READ 0xAF
std::mutex GpioControl::m_locker; std::mutex GpioControl::m_locker;
std::mutex GpioControl::m_gpioLocker;
std::vector<GpioControl::ITEM> GpioControl::m_items; std::vector<GpioControl::ITEM> GpioControl::m_items;
bool GpioControl::m_cameraPowerStatus = false; bool GpioControl::m_cameraPowerStatus = false;
@ -105,6 +106,7 @@ size_t GpioControl::turnOnImpl(const IOT_PARAM& param)
#ifdef ENABLE_GPIO_TRACING #ifdef ENABLE_GPIO_TRACING
GpioDebugLogger logger(param.cmd, param.value); GpioDebugLogger logger(param.cmd, param.value);
#endif #endif
m_gpioLocker.lock();
fd = open(GPIO_NODE_MP, O_RDONLY); fd = open(GPIO_NODE_MP, O_RDONLY);
if( fd > 0 ) if( fd > 0 )
{ {
@ -116,6 +118,7 @@ size_t GpioControl::turnOnImpl(const IOT_PARAM& param)
XYLOG(XYLOG_SEVERITY_DEBUG, "setInt cmd=%d,value=%d,result=%d",param.cmd, param.value, param.result); XYLOG(XYLOG_SEVERITY_DEBUG, "setInt cmd=%d,value=%d,result=%d",param.cmd, param.value, param.result);
#endif #endif
} }
m_gpioLocker.unlock();
#ifdef _DEBUG #ifdef _DEBUG
ALOGI("PWR TurnOn cmd=%d,result=%d ref=%u\r\n",param.cmd, param.result, (uint32_t)references); ALOGI("PWR TurnOn cmd=%d,result=%d ref=%u\r\n",param.cmd, param.result, (uint32_t)references);
#endif #endif
@ -134,6 +137,7 @@ void GpioControl::setInt(int cmd, int value)
#ifdef ENABLE_GPIO_TRACING #ifdef ENABLE_GPIO_TRACING
GpioDebugLogger logger(cmd, value); GpioDebugLogger logger(cmd, value);
#endif #endif
m_gpioLocker.lock();
int fd = open(GPIO_NODE_MP, O_RDONLY); int fd = open(GPIO_NODE_MP, O_RDONLY);
if (fd > 0) if (fd > 0)
{ {
@ -145,6 +149,7 @@ void GpioControl::setInt(int cmd, int value)
XYLOG(XYLOG_SEVERITY_DEBUG, "setInt cmd=%d,value=%d,result=%d",param.cmd, value, param.result); XYLOG(XYLOG_SEVERITY_DEBUG, "setInt cmd=%d,value=%d,result=%d",param.cmd, value, param.result);
#endif #endif
} }
m_gpioLocker.unlock();
} }
int GpioControl::getInt(int cmd) int GpioControl::getInt(int cmd)
@ -152,6 +157,7 @@ int GpioControl::getInt(int cmd)
#ifdef ENABLE_GPIO_TRACING #ifdef ENABLE_GPIO_TRACING
GpioDebugLogger logger(cmd); GpioDebugLogger logger(cmd);
#endif #endif
m_gpioLocker.lock();
int fd = open(GPIO_NODE_MP, O_RDONLY); int fd = open(GPIO_NODE_MP, O_RDONLY);
// LOGE("get_int fd=%d,cmd=%d\r\n",fd, cmd); // LOGE("get_int fd=%d,cmd=%d\r\n",fd, cmd);
if( fd > 0 ) if( fd > 0 )
@ -163,29 +169,34 @@ int GpioControl::getInt(int cmd)
ALOGI("getInt cmd=%d,value=%d,result=%d",param.cmd, param.value, param.result); ALOGI("getInt cmd=%d,value=%d,result=%d",param.cmd, param.value, param.result);
#endif #endif
close(fd); close(fd);
m_gpioLocker.unlock();
return param.value; return param.value;
} }
m_gpioLocker.unlock();
return -1; return -1;
} }
void GpioControl::setLong(int cmd, long value) void GpioControl::setLong(int cmd, long value)
{ {
int fd = open(GPIO_NODE_MP, O_RDONLY);
IOT_PARAM param; IOT_PARAM param;
param.cmd = cmd; param.cmd = cmd;
param.value2 = value; param.value2 = value;
// LOGE("set_long fd=%d,cmd=%d,value2=%ld\r\n",fd, param.cmd, param.value2); // LOGE("set_long fd=%d,cmd=%d,value2=%ld\r\n",fd, param.cmd, param.value2);
m_gpioLocker.lock();
int fd = open(GPIO_NODE_MP, O_RDONLY);
if( fd > 0 ) if( fd > 0 )
{ {
ioctl(fd, IOT_PARAM_WRITE, &param); ioctl(fd, IOT_PARAM_WRITE, &param);
// LOGE("set_long22 cmd=%d,value2=%ld,result=%d\r\n",param.cmd, param.value2, param.result); // LOGE("set_long22 cmd=%d,value2=%ld,result=%d\r\n",param.cmd, param.value2, param.result);
close(fd); close(fd);
} }
m_gpioLocker.unlock();
} }
long GpioControl::getLong(int cmd) long GpioControl::getLong(int cmd)
{ {
m_gpioLocker.lock();
int fd = open(GPIO_NODE_MP, O_RDONLY); int fd = open(GPIO_NODE_MP, O_RDONLY);
// LOGE("get_long fd=%d,cmd=%d\r\n",fd, cmd); // LOGE("get_long fd=%d,cmd=%d\r\n",fd, cmd);
if( fd > 0 ) if( fd > 0 )
@ -195,32 +206,37 @@ long GpioControl::getLong(int cmd)
ioctl(fd, IOT_PARAM_READ, &param); ioctl(fd, IOT_PARAM_READ, &param);
// LOGE("get_long22 cmd=%d,value2=%ld,result=%d\r\n",param.cmd, param.value2, param.result); // LOGE("get_long22 cmd=%d,value2=%ld,result=%d\r\n",param.cmd, param.value2, param.result);
close(fd); close(fd);
m_gpioLocker.unlock();
return param.value2; return param.value2;
} }
m_gpioLocker.unlock();
return -1; return -1;
} }
void GpioControl::setString(int cmd, const std::string& value) void GpioControl::setString(int cmd, const std::string& value)
{ {
IOT_PARAM param; IOT_PARAM param;
int fd = open(GPIO_NODE_MP, O_RDONLY);
int len = MAX_STRING_LEN < value.size() ? MAX_STRING_LEN : value.size();
param.cmd = cmd; param.cmd = cmd;
memset(param.str, 0, MAX_STRING_LEN); memset(param.str, 0, MAX_STRING_LEN);
int len = MAX_STRING_LEN < value.size() ? MAX_STRING_LEN : value.size();
memcpy(param.str, value.c_str(), len); memcpy(param.str, value.c_str(), len);
// LOGE("set_string fd=%d,cmd=%d,str=%s\r\n",fd, param.cmd, param.str); // LOGE("set_string fd=%d,cmd=%d,str=%s\r\n",fd, param.cmd, param.str);
m_gpioLocker.lock();
int fd = open(GPIO_NODE_MP, O_RDONLY);
if( fd > 0 ) if( fd > 0 )
{ {
ioctl(fd, IOT_PARAM_WRITE, &param); ioctl(fd, IOT_PARAM_WRITE, &param);
// LOGE("set_string22 cmd=%d,str=%s,result=%d\r\n",param.cmd, param.str, param.result); // LOGE("set_string22 cmd=%d,str=%s,result=%d\r\n",param.cmd, param.str, param.result);
close(fd); close(fd);
} }
m_gpioLocker.unlock();
return; return;
} }
std::string GpioControl::getString(int cmd) std::string GpioControl::getString(int cmd)
{ {
m_gpioLocker.lock();
int fd = open(GPIO_NODE_MP, O_RDONLY); int fd = open(GPIO_NODE_MP, O_RDONLY);
// LOGE("get_string fd=%d,cmd=%d\r\n",fd, cmd); // LOGE("get_string fd=%d,cmd=%d\r\n",fd, cmd);
if( fd > 0 ) if( fd > 0 )
@ -230,8 +246,10 @@ std::string GpioControl::getString(int cmd)
ioctl(fd, IOT_PARAM_READ, &param); ioctl(fd, IOT_PARAM_READ, &param);
// LOGE("get_string22 cmd=%d,str=%s,result=%d\r\n",param.cmd, param.str, param.result); // LOGE("get_string22 cmd=%d,str=%s,result=%d\r\n",param.cmd, param.str, param.result);
close(fd); close(fd);
m_gpioLocker.unlock();
return std::string(param.str); return std::string(param.str);
} }
m_gpioLocker.unlock();
return ""; return "";
} }

@ -184,6 +184,8 @@ private:
static std::vector<ITEM> m_items; static std::vector<ITEM> m_items;
static bool m_cameraPowerStatus; static bool m_cameraPowerStatus;
static std::mutex m_gpioLocker;
protected: protected:
static size_t turnOnImpl(const IOT_PARAM& param); static size_t turnOnImpl(const IOT_PARAM& param);
static size_t turnOffImpl(const IOT_PARAM& param); static size_t turnOffImpl(const IOT_PARAM& param);

Loading…
Cancel
Save