红外能力

更新时间:2026-04-09 06:46:47LLM 副本以 Markdown 格式查看下载 PDF

本文档主要介绍基于 RTOS 网关 SDK-WR11-G 的红外发送和学习能力,便于开发者快速上手开发和问题排查。本方案中配套使用的红外应用组件仅支持 fastlz 红外码库(红外标准 DP_V3 版本)。

API 介绍

红外功能初始化


OPERATE_RET tuya_svc_ir_control_init(TY_GW_IR_INIT_ATTR_T *attr);

红外学习码上报

/*当用于网关自身红外学习上报时,devid 传入空字符串*/

OPERATE_RET tuya_svc_ir_code_learn(IN CONST CHAR_T *devid, IN CONST CHAR_T *p_data, IN UINT_T data_len);

红外学习状态上报


OPERATE_RET tuya_ir_study_stat_report(IN TY_IR_STUDY_CTL_E mode);

红外学习异常上报

OPERATE_RET tuya_ir_study_error_report(VOID_T);

释放资源

/*下发的红外码使用完后,通过此接口释放资源*/

OPERATE_RET tuya_ir_code_free(IN TY_IR_CODE_S *ir_code, IN UCHAR_T code_num);

数据结构

TY_GW_IR_INIT_ATTR_T

typedef VOID (*GW_IR_SEND_APP_CB)(IN TY_IR_CODE_S *timecode, IN UCHAR_T code_num);
typedef VOID (*GW_IR_STUDY_APP_CB)(IN TY_IR_STUDY_CTL_E mode);

typedef struct {
    GW_IR_SEND_APP_CB           gw_ir_send_cb; // SDK 红外组件的发送回调,开发者自行实现发送逻辑
    GW_IR_STUDY_APP_CB          gw_ir_study_cb;//SDK 红外组件的学习回调,开发者自行实现学习逻辑
}TY_GW_IR_APP_CBS_S;

typedef struct {
    TY_GW_IR_APP_CBS_S          ir_cbs;        // 网关自身发送和学习的回调
} TY_GW_IR_INIT_ATTR_T;

TY_IR_STUDY_CTL_E

typedef     CHAR_T      TY_IR_STUDY_CTL_E;
#define    TY_IR_STUDY_START            0
#define    TY_IR_STUDY_EXIT             1

TY_IR_CODE_S

typedef struct
{
    USHORT_T    *code;       //要发送的红外时间码
    USHORT_T    code_len;    //时间码长度
    BYTE_T      send_count;  //重复次数
    UINT_T      feq;         //发送频率
    USHORT_T    delay;       //ms
}TY_IR_CODE_S;

使用示例

红外组件初始化

STATIC VOID_T tuya_irapp_sysdp_send_cb(IN TY_IR_CODE_S *ir_code, IN UCHAR_T code_num)
{
 
}

STATIC VOID_T tuya_irapp_sysdp_study_cb(IN TY_IR_STUDY_CTL_E irstudy_mode)
{

}


    TY_GW_IR_INIT_ATTR_T ir_attr = {
        .ir_cbs.gw_ir_send_cb = tuya_irapp_sysdp_send_cb,
        .ir_cbs.gw_ir_study_cb = tuya_irapp_sysdp_study_cb,
    };
    op_ret = tuya_svc_ir_control_init(&ir_attr);
    if (OPRT_OK != op_ret)
    {
        PR_ERR("tuya_svc_ir_control_init err:%d !",op_ret);
        return op_ret
}

红外发送

为避免阻塞 SDK 回调,发送和学习业务逻辑请不要在回调中实现。

/*实现 gw_ir_send_cb 回调*/

STATIC VOID_T tuya_irapp_sysdp_send_cb(IN TY_IR_CODE_S *ir_code, IN UCHAR_T code_num)
{
    if (NULL == ir_code || 0 == code_num) {
        PR_ERR("invalid param.");
        return;
    }

    /*自定义发送逻辑*/
    
    tuya_ir_code_free(ir_code, code_num);
}

红外学习

为避免阻塞 SDK 回调,发送和学习业务逻辑请不要在回调中实现。

/*实现 gw_ir_study_cb 回调*/

STATIC VOID_T tuya_irapp_sysdp_study_cb(IN TY_IR_STUDY_CTL_E irstudy_mode)
{
    if(TY_IR_STUDY_START == irstudy_mode)
    {
        PR_NOTICE("ir study start...");
        tuya_ir_study_stat_report(TY_IR_STUDY_START);

         /*自定义学习逻辑*/
         if () {
            tuya_svc_ir_code_learn("", data, data_len);
            PR_NOTICE("ir study successed...");
         } else {
            tuya_ir_study_error_report();
            PR_NOTICE("ir study failed...");
         }
    }
    else if(TY_IR_STUDY_EXIT == irstudy_mode) 
    {
        PR_NOTICE("ir study stop...");
        tuya_ir_study_stat_report(TY_IR_STUDY_EXIT);

         /*学习完成,回收资源*/

    }
}

注意事项

  • 使用红外功能时,网关的 PID 下需要后台配置 DP201 和 DP202。
    红外能力

  • 若面板点击下发红外码时网关接收不到相应 MQTT 消息,需排查红外 V2 能力是否打开。
    红外能力

  • 红外组件初始化接口在网关初始化(tuya_iot_wf_sdk_init/tuya_iot_wr_wf_sdk_init)之前调用,详见 设备初始化

问题排查

学习匹配时码库匹配失败,如何解决?

首先需要排查学习时接收的红外时间码与实际时间码是否一致,可通过 kingst 抓取实际波形与接收时间码对比,建议接收时间码和实际波形误差小于 20 us。

红外发送设备无法控制,如何解决?

同样通过 kingst 抓取实际波形与发送时间码进行对比,建议误差小于 20 us(可考虑分别增加高低电平补偿值来减小硬件定时器误差)。