blob: 3dbf1fc9c439f0fa324084d0fda087011e82d7cf [file] [log] [blame]
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
#include <pthread.h>
#include <termios.h>
#include <time.h>
#include <sys/ioctl.h>
#include <dlfcn.h>
#include <stdint.h>
#include <stdbool.h>
typedef enum{
GSW_HAL_PINDIR_IN,
GSW_HAL_PINDIR_OUT,
}gsw_hal_pinDirection;
typedef enum{
GSW_HAL_LEVEL_LOW,
GSW_HAL_LEVEL_HIGH,
}gsw_hal_pinLevel;
typedef enum{
GSW_HAL_PULL_NULL,
GSW_HAL_PULL_DOWN,
GSW_HAL_PULL_UP,
}gsw_hal_pinPullSel;
typedef enum{
GSW_HAL_USB_DISCONNECTED,
GSW_HAL_USB_CONNECTED,
}gsw_hal_usbStatus;
int32_t (*gsw_gpio_Init)(uint32_t, gsw_hal_pinDirection, gsw_hal_pinLevel);
int32_t (*gsw_gpio_SetDirection)(uint32_t, gsw_hal_pinDirection);
int32_t (*gsw_gpio_SetLevel)(uint32_t, gsw_hal_pinLevel);
gsw_hal_pinLevel (*gsw_gpio_GetLevel)(uint32_t);
gsw_hal_usbStatus (*gsw_hwpin_is_usb_connected)();
int32_t (*gsw_setWakeupLevel)(gsw_hal_pinLevel);
void *dlHandle_gpio;
char *lynqLib_gpio = "/lib/libgsw_lib.so";
int main(int argc,char **argv)
{
int ret;
dlHandle_gpio = dlopen(lynqLib_gpio, RTLD_NOW);
if (argc == 4)
{
if (strcmp(argv[1], "D") == 0)
{
gsw_gpio_SetDirection=(int32_t(*)(uint32_t, gsw_hal_pinDirection))dlsym(dlHandle_gpio, "gsw_gpio_SetDirection");
ret = gsw_gpio_SetDirection(atoi(argv[2]), atoi(argv[3]));
if(ret < 0)
{
printf("gsw_gpio_SetDirection FAIL.\n");
return -1;
}
printf("gsw_gpio_SetDirection success.\n");
}
else if (strcmp(argv[1], "V") == 0)
{
gsw_gpio_SetLevel=(int32_t(*)(uint32_t, gsw_hal_pinLevel))dlsym(dlHandle_gpio, "gsw_gpio_SetLevel");
ret = gsw_gpio_SetLevel(atoi(argv[2]), atoi(argv[3]));
if(ret < 0)
{
printf("gsw_gpio_SetLevel FAIL.\n");
return -1;
}
printf("gsw_gpio_SetLevel success.\n");
}
else
{
gsw_gpio_Init=(int32_t(*)(uint32_t, gsw_hal_pinDirection, gsw_hal_pinLevel))dlsym(dlHandle_gpio, "gsw_gpio_Init");
ret = gsw_gpio_Init(atoi(argv[1]), atoi(argv[2]), atoi(argv[3]));
if(ret < 0)
{
printf("gsw_gpio_Init FAIL.\n");
return -1;
}
printf("gsw_gpio_Init success.\n");
}
}
else if (argc == 3)
{
if (strcmp(argv[1], "W") == 0)
{
gsw_setWakeupLevel=(int32_t(*)(gsw_hal_pinLevel))dlsym(dlHandle_gpio, "gsw_setWakeupLevel");
ret = gsw_setWakeupLevel(atoi(argv[2]));
if(ret < 0)
{
printf("gsw_setWakeupLevel FAIL.\n");
return -1;
}
printf("gsw_setWakeupLevel success.\n");
}
else
{
printf("error,please check input\n");
return -1;
}
}
else if (argc == 2)
{
if (strcmp(argv[1], "U") == 0)
{
gsw_hwpin_is_usb_connected=(gsw_hal_usbStatus(*)())dlsym(dlHandle_gpio, "gsw_hwpin_is_usb_connected");
ret = gsw_hwpin_is_usb_connected();
if(ret == 0)
{
printf("gsw_hwpin_is_usb_Unconnected ret = %d\n",ret);
return 0;
}
else
{
printf("gsw_hwpin_is_usb_connected.ret = %d\n",ret);
return 0;
}
}
else
{
gsw_gpio_GetLevel=(gsw_hal_pinLevel(*)(uint32_t))dlsym(dlHandle_gpio, "gsw_gpio_GetLevel");
ret = gsw_gpio_GetLevel(atoi(argv[1]));
if(ret < 0)
{
printf("gsw_gpio_GetLevel FAIL.\n");
return -1;
}
printf("gsw_gpio_GetLevel success.\n");
}
}
else
{
printf("error,please check input\n");
return -1;
}
return 0;
}