红外hs0038接收测试代码

原创 2015年07月08日 14:32:10
开发板的红外驱动集成好了,只需要编写用户空间代码就ok,红外输入和按键系统原理都是相同的,都是输入子系统测试的时候用了一个华为荣耀盒子的遥控器,需要对驱动修改一下,不然读不到值的,此时已经可以在内核中打印出来遥控器发出的红外键值,可是向输入子系统发送按键值时子系统是收不到的,因为每个键值都要对比相应的事件码,

 

static int tq210_hs0038_read(struct tq210_hs0038 *hs0038_data)
{

	u32 values[4];
	int i=0;
	struct gpio_keys_button *button = hs0038_data->button;
	gpio_direction_input(button->gpio);

	while(((gpio_get_value(S5PV210_GPH0(6))) & 1)==0);//在9ms内判断IO口的值

	while(((gpio_get_value(S5PV210_GPH0(6))) & 1)==1)
	{
		udelay(900);
		if(i>4)
			return -1;
		i++;
	}

	values[0] = serial_data_read_byte();
	values[1] = serial_data_read_byte();
	values[2] = serial_data_read_byte();
	values[3] = serial_data_read_byte();
	for(i=0;i<sizeof(values)/sizeof(values[0]);i++)
	{
		printk("values[%d]=0x%x\n", i,values[i]);		
	}
input_report_key(hs0038_data->input,values[0], 1);
input_report_key(hs0038_data->input,values[0], 0);
input_sync(hs0038_data->input);

input_report_key(hs0038_data->input,values[1], 1);
input_report_key(hs0038_data->input,values[1], 0);
input_sync(hs0038_data->input);
	
input_report_key(hs0038_data->input,values[2], 1);
input_report_key(hs0038_data->input,values[2], 0);
input_sync(hs0038_data->input);
	
input_report_key(hs0038_data->input,values[3], 1);
input_report_key(hs0038_data->input,values[3], 0);
input_sync(hs0038_data->input);

所以要实现read到键值,就要修改drivers/input/input.c

case EV_KEY:
	//	if (is_event_supported(code, dev->keybit, KEY_MAX) &&
	//	    !!test_bit(code, dev->key) != value) 
if(1){

			if (value != 2) {
				__change_bit(code, dev->key);
				if (value)
					input_start_autorepeat(dev, code);
				else
					input_stop_autorepeat(dev);
			}

			disposition = INPUT_PASS_TO_HANDLERS;
		}
		break;


这下就可以了

 
#include<stdio.h>
//#include<stdlib.h>
#include<linux/input.h>
#include<fcntl.h>
main()
{
	int keys_id;
struct input_event t;
keys_id = open("/dev/event1",O_RDONLY);
	if(keys_id < 0)
	{
		printf("error\n");

	}
printf("begin\n");
	while(1)
	{
		if(read(keys_id,&t,sizeof(t)) == sizeof(t))
		{
			if(t.type == EV_KEY)
				if(t.value == 0|| t.value ==1)
				{
					printf("type:%d,code:%x,value:%d\n",t.type,t.code,t.value);
				}
			
		
		}
		else
		{
			printf("ty:%d,co:%d,val:%d\n",t.type,t.code,t.value);
		}
	
	}

}

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

红外 HS0038接收与发送

原文转自:http://blog.sina.com.cn/s/blog_8f6fade70100ypfj.html 红外遥控有发送和接收两个组成部分。 发送端:采用单片机将待发送的二进制信...

stm32f103读取红外接收HS0038A2

软件: IAR 7.4 STM32CubeMX 4.14.0 硬件: STM32F103VBT6 原理图,和手册建议的基本一致,只是上拉电阻不是手册建议的10K以上,这里的面板距离控制器比较远,可...

HS0038红外接收探头

  • 2014年04月26日 14:52
  • 698KB
  • 下载

Bluetooth的接收数据测试代码

package com.example.bt_server; import java.io.IOException; import java.io.InputStream; import java....

红外接受器HS0038

  • 2013年08月31日 15:41
  • 25KB
  • 下载

红外HS0038

  • 2016年01月19日 15:38
  • 87KB
  • 下载

51单片机用HS0038B读取遥控按键码

用51单片机读取红外遥控器按键码,写成头文件形式,可直接调用
  • Hoseal
  • Hoseal
  • 2017年07月25日 14:16
  • 180

HS0038红外遥控器程序

  • 2015年05月31日 15:36
  • 66KB
  • 下载

hs0038b 红外收发程序

  • 2010年07月26日 15:52
  • 34KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:红外hs0038接收测试代码
举报原因:
原因补充:

(最多只允许输入30个字)