/******************************************************
按键驱动测试程序,在TX2440A开发板做测试
驱动用法:
设备名称:TX2440-button
测试程序名称:led_buttn
功能:按键点灯
*******************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(void)
{
int i;
int key_fd;
int key_value[4];
int led_fd;
/*打开设备,自动分配设备号,设备号自己找到
你的那个设备,他们必须是大于0的。key_fd和
led_fd是设备号,如果小于0,直接退出exit(1)*/
key_fd = open("/dev/TX2440-button", 0);
led_fd = open("/dev/TX2440-led", 0);
if (key_fd < 0||led_fd < 0)
{
perror("open device buttons");
exit(1);
}
while(1)
{
int len;
/*其的进入read,后如果没中断,它就在里休眠了
所以也自然不会往下执行了,如果中断了read返
回4和sizeof(key_value)相等中断成功
设备号, 保存地址 ,保存多大空间*/
len = read(key_fd, key_value, sizeof(key_value));
if (len != sizeof(key_value))
{
perror("read button\n");
continue; /*结束while(1)循环*/
}
/*如果中断成功,检查数据,做出判断,这里要记住,
设备号是你来找到设备的唯一方法。led_fd*/
else
{
ioctl(led_fd, 3, 0); /*先把所有的灯关了*/
printf("off all---");
for (i = 0; i < 4; i++)
{
if(key_value[i] != 0)
switch(key_value[i])
{
case 1:
ioctl(led_fd, 1, 0);
printf("open %d led\n",key_value[i]);break;
case 2:
ioctl(led_fd, 1, 1);
printf("open %d led\n",key_value[i]);break;
case 3:
ioctl(led_fd, 1, 2);
printf("open %d led\n",key_value[i]);break;
case 4:
ioctl(led_fd, 1, 3);
printf("open %d led\n",key_value[i]);break;
default : perror("read button not data\n");
}
}
}
}
/*释放设备*/
close(key_fd);
close(led_fd);
return 0;
}
阅读(2389) | 评论(1) | 转发(0) |