1.7. IR_DECODER

红外接收解码驱动,该驱动仅支持 NEC格式

1.7.1. ir_decoder_init

红外接收解码功能初始化。

原型:

void ir_decoder_init(const struct gptimer_config *gt_cfg);

参数:

gt_cfg

接收解码配置

返回值

1.7.2. ir_decoder_deinit

红外接收解码功能释放。

原型:

void ir_decoder_deinit();

参数:

返回值

1.7.3. ir_decoder_get_data

获取红外原始数据,未校验。

原型:

u32 ir_decoder_get_data(void);

参数:

返回值

data 4*8bit = (命令反码 + 命令码 + 地址反码 +地址码)

1.7.4. ir_decoder_get_command_value

获取红外命令码,已校验。

原型:

u32 ir_decoder_get_command_value(void);

参数:

返回值

ir_command

1.7.5. ir_decoder_get_command_value_uncheck

获取红外命令码,无校验。

原型:

u32 ir_decoder_get_command_value_uncheck(void);

参数:

返回值

ir_command

1.7.6. ir_decoder_get_address_value

获取红外地址码,已校验。

原型:

u32 ir_decoder_get_address_value(void);

参数:

返回值

ir_address

1.7.7. ir_decoder_get_address_value_uncheck

获取红外地址码,无校验。

原型:

u32 ir_decoder_get_address_value_uncheck(void);

参数:

返回值

ir_address

1.7.8. get_new_irkey_value

获取对应的键值。

原型:

u32 get_new_irkey_value(void);

参数:

返回值

键值 key

1.7.9. ir_decoder参考demo,也可参考 ir_encoder_decoder_demo.c 文件

const struct gptimer_config ir_decode_config = {
    .capture.filter = 0,//38000, //一般的红外接收模块,硬件自带滤波
    .capture.max_period = 110 * 1000, //110ms
    .capture.port = PORTA,
    .capture.pin = BIT(1),
    .irq_cb = NULL,
    .irq_priority = 3,
    //根据红外模块的 idle 电平状态,选择边沿触发方式
    /* .mode = GPTIMER_MODE_CAPTURE_EDGE_FALL, */
    .mode = GPTIMER_MODE_CAPTURE_EDGE_RISE,
};
void ir_decoder_demo()
{
    printf("ir_decoder_demo()\n");
    ir_decoder_init(&ir_decode_config); //红外信号接收IO_PORTA_O1
    u32 ir_key; //接收到的红外码
    while (1) {
        ir_key = ir_decoder_get_data();
        if (ir_key != (u32) - 1) {
            printf("ir_key:0x%x\n", ir_key);
        }
        udelay(5 * 100 * 1000);
        wdt_clear();
    }
}