热度 11
2012-7-5 19:24
1455 次阅读|
0 个评论
/******************************************************************************* 硬件环境: mini2440开发板 软件环境: 操作系统ubuntu8.04,内核版本linux2.6.29 按键驱动说明: 一个好的,非常精简的测试驱动应用程序 此程序是按键控制led应用程序 作者: ljh 时间: 2012.06.20 ********************************************************************************/ #i ncludestdio.h #i ncludestdlib.h #i ncludeerrno.h int main(int argc,char **argv) { int fd; int key_status ; //以阻塞方式打开设备文件,非阻塞时flags=O_NONBLOCK fd = open("/dev/buttons-ctl-leds", 0); if(fd 0) { printf("Open Buttons Device Faild!\n"); exit(1); } while(1) { int i; int ret; fd_set rds; FD_ZERO(rds); FD_SET(fd,rds); //应用程序进行轮询,查询是否可对设备进行访问 ret = select(fd+ 1, rds, NULL,NULL, NULL); if(ret 0) { printf("Read Buttons Device Faild!\n"); exit(1); } if(ret== 0) { printf("Read Buttons Device Timeout!\n"); } else if(FD_ISSET(fd,rds)) { //读设备 ret = read(fd, key_status,sizeof(key_status)); //读取错误 if(ret!= sizeof(key_status)) { if(errno!= EAGAIN) { printf("Read Button Device Faild!\n"); } continue; } else { //读取正确,打印按键值 for(i= 0; i 6; i++) { //对应驱动中按键的状态,为0即按键被按下 if(key_status == 0) { //系统调用ioctl函数命令cmd, 参数arg ioctl(fd, 0, i); //fd文件描述符 on控制命令1或0 led_no哪个led printf("Key%d DOWN\n", i+1); if(i == 4) //如果按键key5 则所有led灯光闪烁20s { ioctl(fd, 55, i); } } } } } } close(fd); return 0; }