当前位置: 首页 > 工具软件 > lirc > 使用案例 >

lirc红外学习irrecord

郦翰学
2023-12-01

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、开始记录按键码值和生成文件。

   











 类似资料: