#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <asm/page.h>
#include <linux/types.h>
#include "at6600_gpio_ioctl.h"
int main()
{
int fd=0;
int gpio_number, gpio_value;
int data1, data2[2];
int op, cont;
fd = open("/dev/gpio0",O_RDWR);
if(fd==-1)
{
printf("can't open gpio device file\n");
return 0;
}
cont = 1;
while(cont) {
printf( " 1 -- read gpio 2 -- set gpio\n"
" 0 -- exit\n");
printf("Input Op:");
scanf("%d", &op);
switch (op) {
case 0:
cont = 0;
break;
case 1:
printf("Input gpio number: ");
scanf("%d", &gpio_number);
if(ioctl(fd, GPIO_CFG_IN, &gpio_number) != 0) {
printf("GPIO_CFG_IN ioctl failed.\n");
break;
}
data1 = gpio_number;
if(ioctl(fd, GPIO_GET_IN, &data1) != 0) {
printf("GPIO_GET_IN ioctl failed.\n");
break;
}
gpio_value = data1;
printf("Get GPIO %02d is %s\n", gpio_number,
gpio_value?"High":"Low");
break;
case 2:
printf("Input gpio number: ");
scanf("%d", &gpio_number);
printf("Input gpio value: ");
scanf("%d", &gpio_value);
if(ioctl(fd, GPIO_CFG_OUT, &gpio_number) != 0) {
printf("GPIO_CFG_OUT ioctl failed.\n");
break;
}
data2[0] = gpio_number;
data2[1] = gpio_value;
if(ioctl(fd, GPIO_SET_OUT, data2) != 0) {
printf("GPIO_SET_OUT ioctl failed.\n");
break;
}
printf("Set GPIO %02d done\n", gpio_number);
break;
default:
break;
}
}
close(fd);
}