您的位置:首页 > 其它

lirc红外学习irrecord

2015-06-10 16:22 190 查看
Lirc version:0.9.2

1、查看是否存在当前遥控器的模板

fin = fopen(filename, "r");
if (fin != NULL)
{
//read config file to remote
}


2、设置红外设备为接收模式(只有接收模式支持LIRC_MODE_MODE2或者LIRC_MODE_LIRCCODE的设备才可以学习红外码)。

LIRC_MODE_MODE2:设备驱动本身不支持解码功能,只能读取红外的脉冲数据流。

LIRC_MODE_LIRCCODE:设备驱动本身指定了某种类型的红外码特性

下面按照常见的LIRC_MODE_MODE2来分析。

3、调用get_lengths()获取红外遥控码的特性,也是最为关键的一步。

先介绍一下struct ir_remote结构体的部分成员:

gap:两个红外码之间的间隔

repeat_gap:重复码间隔

toggle_bit_mask:切换bit(用于变码,如rc6)

struct lengths结构体,struct lengths用于链表记录连续红外脉冲:

lengths.sum为相同脉宽长度总和

lengths.count为相同脉宽个数

lengths.max为最大脉宽

lengths.min为最小脉宽

lengths.upper_bounder和lower_bounder为是否为相同脉冲的上下边界

get_lengths()首先会找到红外码之间的间隔,即gap。找到gap之后开始采集红外码的特征,包括下面一些变量:

first_repeatp:第一个重复码pulse

first_repeats:第一个重复码space

first_trail:重复码结束脉宽

first_repeat_gap:重复码间隔

first_headerp:头码pulse

first_headers:头码space

first_space:数据段的第一个space

first_pulse:数据段的第一个pulse

在获取红外的数据特征之后,get_lengths()调用

void get_scheme(struct ir_remote *remote, int interactive)
函数来分析红外的协议,目前支持RC5,RC6,RAW_CODE,SPACE_ENC四种。

get_lengths()通过获取到上面的采样值计算出一下几个红外特征值:

- 获取红外码之间的间隔gap

- 获取红外码的起始标记header

- 获取重复码repeat,重复码间隔

- 获取结束码(opt)

- 获取数据长度(用pulse和space的值表示0和1)

若红外码为RC6码则需要通过

int get_toggle_bit_mask(struct ir_remote *remote)
函数获取toggle_bit_mask。到这里红外码特征获取已经结束。

4、开始记录按键码值和生成文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: