#include "gpio_driver.h"
|
|
|
|
Gpio_Driver::Gpio_Driver(const char *dev)
|
{
|
#if (PLATFORM_USED==PLATFORM_ARM)
|
/* open gpio */
|
fd = open(dev, 0);
|
if (fd < 0) {
|
qDebug("ERROR: open %s ret=%d\n", dev, fd);
|
}
|
#endif
|
}
|
|
int Gpio_Driver::Gpio_Init(int *lineoff,int linesnum)
|
{
|
if(lineoff==0 || linesnum==0){
|
qDebug("invalid gpio param.\n");
|
|
return -1;
|
}
|
|
#if (PLATFORM_USED==PLATFORM_ARM)
|
|
for(int i=0;i<linesnum;i++){
|
req.lineoffsets[i] = lineoff[i];
|
}
|
req.lines = linesnum;
|
req.flags = GPIOHANDLE_REQUEST_OUTPUT;
|
strcpy(req.consumer_label, "RS T_m");
|
int lhfd = ioctl(fd, GPIO_GET_LINEHANDLE_IOCTL, &req);
|
|
if (lhfd < 0) {
|
qDebug("ERROR get line handle lhdf=%d \n", lhfd);
|
return -1;
|
}
|
|
#endif
|
|
return 0;
|
}
|
|
int Gpio_Driver::Gpio_Init_In(int *lineoff,int linesnum)
|
{
|
if(lineoff==0 || linesnum==0){
|
qDebug("invalid gpio param.\n");
|
|
return -1;
|
}
|
|
#if (PLATFORM_USED==PLATFORM_ARM)
|
|
for(int i=0;i<linesnum;i++){
|
req_in.lineoffsets[i] = lineoff[i];
|
}
|
req_in.lines = linesnum;
|
req_in.flags = GPIOHANDLE_REQUEST_INPUT;
|
strcpy(req_in.consumer_label, "RS T_m");
|
int lhfd = ioctl(fd, GPIO_GET_LINEHANDLE_IOCTL, &req_in);
|
|
if (lhfd < 0) {
|
qDebug("ERROR get line handle lhdf=%d \n", lhfd);
|
return -1;
|
}
|
|
#endif
|
|
return 0;
|
}
|
|
int Gpio_Driver::Gpio_SetLevel(int index, bool isHigh)
|
{
|
#if (PLATFORM_USED==PLATFORM_ARM)
|
|
int ret;
|
|
if(isHigh)
|
data.values[index] = 1;
|
else
|
data.values[index] = 0;
|
|
ret = ioctl (req.fd, GPIOHANDLE_SET_LINE_VALUES_IOCTL, &data);
|
if (ret < 0){
|
qDebug("ERROR set line value ret=%d ", ret);
|
return -1;
|
}
|
#endif
|
|
return 0;
|
}
|
|
int Gpio_Driver::Gpio_GetLevel(int index,int *level)
|
{
|
#if (PLATFORM_USED==PLATFORM_ARM)
|
int ret;
|
|
ret = ioctl (req_in.fd, GPIOHANDLE_GET_LINE_VALUES_IOCTL, &data_in);
|
if (ret < 0){
|
qDebug("ERROR get line value ret=%d ", ret);
|
return -1;
|
}
|
|
*level = data_in.values[index];
|
|
#endif
|
|
return 0;
|
}
|