红外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 红外遥控有发送和接收两个组成部分。 发送端:采用单片机将待发送的二进制信...
  • u012993936
  • u012993936
  • 2015年07月20日 18:19
  • 2679

stm32f103读取红外接收HS0038A2

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

MSP430(F149)学习笔记——红外接收

用MSP430(F149)做红外接收比发送更为简单,我采用的红外传感器是HS0038B,这个原件在接收到38K红外时输出低电平,否则输出高电平,因此,我们就可以从这点开始编写程序了,由于HS0038B...
  • girlkoo
  • girlkoo
  • 2013年06月07日 14:13
  • 5647

[整理]红外遥控波段时序图

有小伙伴问我红外遥控的载波解码,这个图估计能够完美解释了,整理分享一下...
  • elitah
  • elitah
  • 2015年08月08日 20:01
  • 1404

红外接收程序讲解

1、红外遥控系统 通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。 发射部分包括键盘矩阵、编码调制、LED红外发送器; 接收部分包括光、电转...
  • looksun
  • looksun
  • 2014年08月10日 17:25
  • 10281

【STM32】STM32之红外接收

本文介绍如何在STM32上使用红外接收头接收红外信号
  • feilusia
  • feilusia
  • 2016年11月24日 15:14
  • 4075

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

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

一体化红外接收头有两种

一体化红外接收头有两种类型,一种可以响应连续的红外载波,只要有载波接收头就输出低电平,万州光电生产的型号中后面加C的都是这种,称为电平型的,比如W0038C,IRM138C等。另外一种只能响应宽度在一...
  • wjs1033
  • wjs1033
  • 2014年07月31日 09:26
  • 2962

市场上比较流行的红外解码程序研究和总结

下面对以下几种比较流行和成熟的红外解码程序做一下研究和总结   1、解码程序一: /*---------------------------------------------------------...
  • u012993936
  • u012993936
  • 2015年07月17日 08:57
  • 1740

Arduino简单实例之七_红外遥控接收

1)       说明: 红外接收模块适用于红外线遥控和红外线数据传输。对于不同的遥控器,区别只是接到的数字不同。 注意要买三脚的红外接收头,而不是直接购买红外对管。当然也可以买电子积木的红外接收...
  • xieyan0811
  • xieyan0811
  • 2017年02月20日 13:32
  • 3994
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:红外hs0038接收测试代码
举报原因:
原因补充:

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