/*
* author: chwenj@gmail.com.
* Agreement: GPL.
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define GPIO_SET 0xAC
#define GPIO_GET 0xAB
#define DEVICE_FILE "/dev/gpio_cdev"
typedef struct {
unsigned char count; //GPIO序列
unsigned char data; //GPIO电平状态
} gpio_userspace_t;
/*main*/
int main(/* int argc, char **argv */)
{
/*open*/
int gpio_fd, ret;
gpio_fd = open(DEVICE_FILE, O_RDWR); //读写权限打开文件
if (gpio_fd < 0) {
printf("gpio device fail to open.\n");
return -1;
}
printf("%s opend.\n", DEVICE_FILE);
#if 1
/*write*/
gpio_userspace_t write_gpio;
write_gpio.count = 5; //GPIO序列号
write_gpio.data = 1; //GPIO电平值
printf("write: count = %d , data = %d.\n", write_gpio.count, write_gpio.data);
ret = write(gpio_fd, &write_gpio, sizeof(gpio_userspace_t));
if (ret < 0) {
printf("%s fail to write.\n", DEVICE_FILE);
return -1;
}
#endif
/*ioctl*/
gpio_userspace_t ioctl_gpio;
ioctl_gpio.data = 0xff; //level:0xff
ioctl_gpio.count = 5; //pin:4
ret = ioctl(gpio_fd, GPIO_SET, &ioctl_gpio);
if (ret < 0) {
printf("ioctl: ioctl fail.\n");
return -1;
}
/*read*/
gpio_userspace_t read_gpio;
ret = read(gpio_fd, &read_gpio, sizeof(gpio_userspace_t));
if (ret < 0) {
printf("read: fail to read.\n");
return -1;
}
printf("read: count = %d, data = %d.\n", read_gpio.count, read_gpio.data);
/*close*/
close(gpio_fd);
printf("%s close.\n", DEVICE_FILE);
return 0;
}
#include <linux/fs.h>
#include <linux/types.h>
#include <linux/module.h>
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/cdev.h>
#include <linux/platform_device.h>
#include <linux/utsname.h>
#include <asm/uaccess.h>
#include <asm/io.h>
#include <mach/sys_config.h>
#include <mach/includes.h>
#include <linux/gpio.h>
#include <linux/delay.h>
/**********