本来要用蓝牙遥控的,但是我手里的2541,好像是蓝牙4.0的,我的 手机连接不上,找了我同学,也没有连上,图片如下:
索性先放一边吧,拿着手里的PT2262和PT2272,做发送和接收吧。
先普及下PT2262的接收形式:
当发送和接收对应的地址匹配时,对应的引脚会输出高电平。这就类似按键的情况了。所以,采用了 input子系统的架构。
源码如下:
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- MODULE_LICENSE("GPL");
- MODULE_AUTHOR("iysheng");
- #define GPIO_PT2262 4
- #define BUF_LEN 8
- #define PT_NAME "pt2262"
- struct input_dev *pt_input_dev;
- int gpio_pt2262[GPIO_PT2262]={49,60,51,50};
- int irq_gpio[GPIO_PT2262];
- irqreturn_t pt2262_isr(int irq, void *gpio_num)
- {
- int i,j;
- int *gpio_num_tmp = (int *)gpio_num;
- j = gpio_get_value(*gpio_num_tmp);
- for(i=0; i
- {
- if(gpio_pt2262[i] != *gpio_num_tmp)
- continue;
- switch(i)
- {
- case 0:
- input_report_key(pt_input_dev, KEY_A, j);input_sync(pt_input_dev);break;
- case 1:
- input_report_key(pt_input_dev, KEY_B, j);input_sync(pt_input_dev);break;
- case 2:
- input_report_key(pt_input_dev, KEY_C, j);input_sync(pt_input_dev);break;
- case 3:
- input_report_key(pt_input_dev, KEY_D, j);input_sync(pt_input_dev);break;
- default:
- break;
- }
- goto finist;
- }
- finist:
- return IRQ_HANDLED;
- }
- int __init pt_init(void)
- {
- int ret = 0;
- int i = 0;
- char gpio_name_buf[BUF_LEN];
- /*分配一个输出设备*/
- pt_input_dev = input_allocate_device();
- /*设置改输入设备的一些成员变量*/
- set_bit(EV_KEY, pt_input_dev->evbit);
- //set_bit(EV_SYN, pt_input_dev->evbit);
- set_bit(KEY_A, pt_input_dev->keybit);
- set_bit(KEY_B, pt_input_dev->keybit);
- set_bit(KEY_C, pt_input_dev->keybit);
- set_bit(KEY_D, pt_input_dev->keybit);
- pt_input_dev->name = PT_NAME;
- /*注册输入设备*/
- ret = input_register_device(pt_input_dev);
-
- for(i=0; i
- {
- sprintf(gpio_name_buf, "pt_gpio%d", i);
- ret = gpio_request(gpio_pt2262[i], gpio_name_buf);
- if(ret < 0)
- goto fail;
- gpio_direction_input(gpio_pt2262[i]);
- gpio_export(gpio_pt2262[i], false);
- irq_gpio[i] = gpio_to_irq(gpio_pt2262[i]);
- ret = request_irq(irq_gpio[i], pt2262_isr, IRQF_TRIGGER_RISING|IRQF_TRIGGER_FALLING, "pt_isr", (void*)(gpio_pt2262+i));
- if(ret < 0)
- goto fail;
- }
- fail:
- return ret;
-
- }
- module_init(pt_init);
- void __exit pt_exit(void)
- {
- int i;
- for(i=0; i
- {
- free_irq(irq_gpio[i], gpio_pt2262+i);
- gpio_unexport(gpio_pt2262[i]);
- gpio_free(gpio_pt2262[i]);
- }
- /*取消注册输入设备*/
- input_unregister_device(pt_input_dev);
- /*释放输入设备*/
- input_free_device(pt_input_dev);
-
- }
- module_exit(pt_exit);
复制代码
实验的效果截图:
着重分析下,输出的重要数据表达的意思,这些都可以从 内核源码里面分析出来。
最后附上视频演示:
0
|
|
|
|