# 红外遥控类设备MSDK 应用接口说明

本文档针对红外遥控类设备MSDK的应用开发接口进行说明,包括应用接口定义和使用说明,适用于基于MSDK进行开发和测试的相关人员。

# 数据类型说明

本章将介绍接口所涉及到的数据类型。

# 1. 枚举

枚举类型包括ms_sdk_result_t、ms_sdk_msg_t和ms_sdk_errcode_t。

# 1.1 ms_sdk_result_t

该枚举定义了MSDK的返回值类型,具体如下:

typedef enum

{

MS_SDK_SUCCESS = 0x00, //成功

MS_SDK_INIT_FAIL = 0x01, //初始化失败

MS_SDK_DEINIT_FAIL = 0x02, //反初始化失败

MS_SDK_LOGOUT = 0x03, //设备离线

MS_SDK_INVALID_PARAM = 0x04, //无效入参

MS_SDK_NO_MEM = 0x05, //内存不足

MS_SDK_SEND_FAIL = 0x06, //发送失败

MS_SDK_UNBIND = 0x07, //未绑定

MS_SDK_RESET_FAIL = 0x08, //重置失败

MS_SDK_REBOOT_FAIL = 0x08, //重启失败

} ms_sdk_result_t;

# 1.2 ms_sdk_msg_t

该枚举定义了MSDK的消息类型,具体如下:

typedef enum

{

MS_SDK_MSG_CONNECTING = 0x01, //联网中

MS_SDK_MSG_LOGIN_SUCCESSFUL = 0x02, //登录IoT云端成功

MS_SDK_MSG_LOGOUT = 0x03, //设备从IoT云端离线

MS_SDK_MSG_STATUS_UNBIND = 0x04, //设备未绑定

MS_SDK_MSG_STATUS_BIND = 0x05, //设备已绑定

MS_SDK_MSG_STATUS_AUTH = 0x06, //确权

MS_SDK_MSG_CMD_ACK = 0x07, //串口指令回复

MS_SDK_MSG_CMD_SEND = 0x08, //发送/回复串口指令

MS_SDK_MSG_NEED_UPGRADE = 0x09, //有固件可升级

MS_SDK_MSG_TRANS_FIRMWARE = 0x0A, //传输电控固件

} ms_sdk_msg_t;

# 2. 结构体

目前定义的结构体为ms_sdk_data_frame_t。

# 2.1 ms_sdk_data_frame_t

该结构体定义了应用需要MSDK发送数据或者MSDK接收数据后传递给应用时的内容格式,具体定义如下:

typedef struct ms_sdk_data_frame

{

uint8_t sub_devId[6]; //小端模式。 子设备美的标识,非0代表子设备

uint16_t cmd; //通用命令标识,如0x00D0、0x80D0等

uint16_t subcmd; //子命令标识

uint8_t version; //协议版本号

uint8_t need_reply; //是否需要回复。0:不需要;1:需要

uint8_t *data; //发送或者接收数据的内容

uint16_t size; //发送或者接收数据的长度,最大不超过60000字节

}ms_sdk_data_frame_t;

# 3. 接口概述

# 3.1 头文件

应用需要包含头文件“ms_sdk.h”,才可以正常调用所有接口。

# 3.2 接口列表

本文涉及的接口如下表1所示:

序号 接口名称 接口含义 调用方向 参考章节
1 ms_sdk_event_cb 事件的回调 SDK ->应用 4.2
2 ms_sdk_data_recv_cb 数据接收的回调 SDK ->应用 4.3
3 ms_sdk_init MSDK初始化 应用-> SDK 4.4
4 ms_sdk_deinit MSDK反初始化 应用-> SDK 4.5
5 ms_sdk_send_data 数据发送 应用-> SDK 4.6
7 ms_sdk_reboot MSDK重启 应用-> SDK 4.7
8 ms_sdk_reset MSDK重置 应用-> SDK 4.8
9 ms_sdk_cmd_process MSDK处理串口指令 应用-> SDK 4.9

各接口原型如下:

1)int ms_sdk_event_cb(ms_sdk_msg_t message, uint8_t *data, uint16_t data_len)

2)int ms_sdk_data_recv_cb(ms_sdk_data_frame_t *p_frame, uint32_t msgId)

3)ms_sdk_result_t ms_sdk_init(ms_sdk_event_cb event_cb, ms_sdk_data_recv_cb recv_cb)

4)ms_sdk_result_t ms_sdk_deinit(void)

5)ms_sdk_result_t ms_sdk_send_data(uint8_t responseFlag, ms_sdk_data_frame_t *pFrame, uint32_t *msgId)

6)ms_sdk_result_t ms_sdk_reboot(void)

7)ms_sdk_result_t ms_sdk_reset(void)

8)ms_sdk_result_t ms_sdk_auth_privilege(void)

9)ms_sdk_result_t ms_sdk_cmd_process(uint8_t* indata, uint16_t indata_len, uint8_t* outdata, uint32_t* outdata_len)

后续章节将会对每个接口进行详细的描述。

# 3.3 线程安全

本文中的所有接口是线程安全的,注意需要在SDK初始化后才能调用。

# 4. ms_sdk_event_cb

接口原型 int ms_sdk_event_cb(ms_sdk_msg_t message, uint8_t *data, uint16_t data_len)
功能说明 MSDK事件回调处理
返回值 应用自行定义各种返回值
输入参数 备注:该接口内的所有指针变量由MSDK申请和释放(回调返回后释放)
message 3.1.2节中定义的各类消息,具体含义参考4.2.1-4.2.5中对各事件的说明
data 回调输入的数据。该地址由MSDK申请和释放(回调接口返回后释放)
data_len 回调输入的数据长度,单位为字节

应用在初始化MSDK时需要设置该回调接口。

下面将分别描述在该回调接口里需要处理的7个事件。

# 4.1 MS_SDK_MSG_WAIT_CONNECT

此事件代表MSDK正处于待配网状态。

MSDK通过回调触发此事件时,入参如下:

message MS_SDK_MSG_WAIT_CONNECT
data NULL
data_len 0

# 4.2 MS_SDK_MSG_CONNECTING

此事件代表MSDK正在联网。

MSDK通过回调触发此事件时,入参如下:

message MS_SDK_MSG_CONNECTING
data NULL
data_len 0

# 4.3 MS_SDK_MSG_LOGIN_SUCCESSFUL

此事件代表MSDK登录美的IoT云端成功,且每次登录成功都会触发此事件。如果设备的状态为已绑定,则收到此事件时说明数据通道可正常使用。

MSDK通过回调触发此事件时,入参如下:

message MS_SDK_MSG_LOGIN_SUCCESSFUL
data 设备的美的标识(devId),小端模式
data_len 6

应用收到此事件1分钟后进行发送一次0x90-0x07指令触发电控升级检测,之后每12小时检测一次。

# 4.4 MS_SDK_MSG_LOGOUT

此事件代表设备从美的IoT云端离线,从在线变为离线时会触发此事件。此时数据收发通道不可用。

MSDK通过回调触发此事件时,入参如下:

message MS_SDK_MSG_LOGOUT
data NULL
data_len 0

# 4.5 MS_SDK_MSG_STATUS_BIND

此事件代表设备在美的IoT云端上的状态为已绑定,在设备发起绑定请求并成功绑定后会触发此事件(重复登录时不会触发)。此状态下可以正常收发数据。

MSDK通过回调触发此事件时,入参如下:

message MS_SDK_MSG_STATUS_BIND
data NULL
data_len 0

应用收到此事件后需要进行状态保存,以便后续MSDK重新登录成功后(MSDK会触发MS_SDK_MSG_LOGIN_SUCCESSFUL事件回调,参考4.2.2节)用于判断是否可以正常收发数据。

# 4.6 MS_SDK_MSG_STATUS_UNBIND

此事件代表设备在美的IoT云端上的状态为未绑定,在操作设备解绑后或者发起绑定请求但绑定失败时会触发此事件。此时MSDK会清除除了设备基础身份信息以外的其他入网参数、从IoT云端主动离线,数据通道不可用。应用收到此事件后需要进行状态保存。

MSDK通过回调触发此事件时,入参如下:

message MS_SDK_MSG_STATUS_UNBIND
data NULL
data_len 0

# 4.7 MS_SDK_MSG_STATUS_AUTH

模组进入待确权、待确权超时或确权成功时会触发此事件。

MSDK通过回调触发此事件时,入参如下:

message MS_SDK_MSG_STATUS_AUTH
data 完整的0E串口指令消息体,确权状态:0x00:确权成功,0x01:进入待确权,0x02:待确权超时
data_len 消息体长度

应用收到此事件进入待确权状态后,按按键进行确权并发送0x64指令给MSDK,MSDK串口指令封装参照《家电端通信协议(基础功能版本)20241012.pdf》。

# 4.8 MS_SDK_MSG_CMD_SEND

MSDK回复应用的串口指令或直接向应用发送串口指令时会触发此事件,串口指令封装参照《家电端通信协议(基础功能版本)20241012.pdf》。

MSDK通过回调触发此事件时,入参如下:

message MS_SDK_MSG_STATUS_UNBIND
data NULL
data_len 0

串口指令封装参照《家电端通信协议(基础功能版本)20241012.pdf》。

# 4.9 MS_SDK_MSG_NEED_UPGRADE

MSDK有电控固件可升级时会触发此事件.

MSDK通过回调触发此事件时,入参如下:

message MS_SDK_MSG_NEED_UPGRADE
data NULL
data_len 0

# 4.10 MS_SDK_MSG_TRANS_FIRMWARE

此事件代表电控OTA固件传输。

MSDK通过回调触发此事件时,入参如下:

message MS_SDK_MSG_TRANS_FIRMWARE
data 帧数据
data_len 帧长度

应用收到此事件存储数据帧内容,并在传输完成后向MSDK发送0x90-0x04电控指令,通知模组下载成功。串口指令封装参照《家电端通信协议(基础功能版本)20241012.pdf》

# 5. ms_sdk_data_recv_cb

接口原型 int ms_sdk_data_recv_cb(ms_sdk_data_frame_t *pFrame, uint32_t msgId)
功能说明 MSDK接收数据的回调处理
返回值 应用自行定义各种返回值
输入参数 备注:该接口内的所有指针变量由MSDK申请和释放(回调返回后释放)
pPrame 接收数据的内容,具体参考3.2.1节定义
msgId 接收数据的消息Id

MSDK接收到云端下发的数据后会触发该回调接口。应用在该接口里需要根据pFrame里的各项参数进行处理,而且要根据msgId来匹配是否为之前某个请求消息的回复。

关于pFrame里cmd、sub_cmd、version、need_reply、data这些字段的解析规则,请参考IoT云端提供的相应说明文档。

# 6. ms_sdk_init

接口原型 ms_sdk_result_t ms_sdk_init(ms_sdk_event_cb event_cb, ms_sdk_data_recv_cb recv_cb)
功能说明 初始化MSDK,会创建MSDK线程
返回值
MS_SDK_SUCCESS 初始化成功
MS_SDK_INIT_FAIL 初始化失败
输入参数
event_cb 事件回调处理,定义参考4.2节
recv_cb 接收数据回调处理,定义参考4.3节

应用在启用MSDK功能前需要进行该接口调用,并传入对应的回调函数。如果初始化失败则MSDK功能不可用。MSDK内部会自行启动登录IoT云端,无须应用额外干预。初始化成功后,不管登录成功还是失败,都会通过ms_sdk_event_cb回调接口将对应事件进行回调,应用在回调里根据4.2中描述的各类事件进行处理即可。

# 7. ms_sdk_deinit

接口原型 ms_sdk_result_t ms_sdk_deinit(void)
功能说明 反初始化MSDK,会释放MSDK内部资源以及销毁线程
返回值
MS_SDK_SUCCESS 反初始化成功
MS_SDK_DEINIT_FAIL 反初始化失败
输入参数

应用需要停用MSDK功能时调用此接口。该接口调用之后数据通道不可用。

# 8. ms_sdk_send_data

接口原型 ms_sdk_result_t ms_sdk_send_data(ms_sdk_data_frame_t pFrame, uint32_t msgId)
功能说明 数据发送
返回值
MS_SDK_SUCCESS 发送成功
MS_SDK_ERR_INVALID_PARAM 入参错误
MS_SDK_NO_MEM 内存不足
MS_SDK_UNBIND 未绑定
MS_SDK_SEND_FAIL 其他原因的发送失败
输入参数 备注:该接口内的所有指针变量由调用者申请和释放
pFrame 发送数据的内容,具体参考3.2.1节定义
msgId (1)应用主动发送给IoT云端的消息,msgId由SDK内部生成,发送成功后通过此参数返回给应用;(2)回复给IoT云端的消息,msgId由应用传递给SDK,其值跟从IoT云端收到的消息Id一致(即ms_sdk_data_recv_cb返回的msgId)

当应用需要向美的IoT云端发送数据时(主动发送或者是对云端的回复)调用此接口。发送成功只说明MSDK将数据成功发送到设备和云端的通道,不能说明云端一定收到。对于一定要收到云端回复的数据请求,则需要在应用层做其他自定义措施进行保证,比如超时重发等。另外,只有在设备已绑定的情况下才允许数据发送,否则会返回“MS_SDK_UNBIND“的错误。

发送成功后,MSDK会将消息Id赋值到参数msgId中返回给应用,应用需要进行保存,以便接收到云端回复时进行比对。

如果是对云端消息的回复,则应用需要将从ms_sdk_data_recv_cb获取到的的msgId通过此接口传递给SDK。

关于pFrame里cmd、sub_cmd、version、need_reply、data这些字段的填写规则,请参考IoT云端提供的相应说明文档。

# 9. ms_sdk_reboot

接口原型 ms_sdk_result_t ms_sdk_reboot(void)
功能说明 MSDK重启
返回值
MS_SDK_SUCCESS 成功
MS_SDK_REBOOT_FAIL 重启失败

应用需要重启SDK时,调用此接口。该接口会使设备重启。

# 10. ms_sdk_reset

接口原型 ms_sdk_result_t ms_sdk_reset(void)
功能说明 MSDK重置
返回值
MS_SDK_SUCCESS 成功
MS_SDK_REBOOT_FAIL 重置失败
输入参数

应用需要重置SDK时,调用此接口。该接口中会使设备从云端离线,并且清除设备基础身份信息以外的其他入网信息。

# 11. ms_sdk_cmd_process

接口原型 ms_sdk_result_t ms_sdk_cmd_process(uint8_t* indata, uint16_t indata_len)
功能说明 MSDK串口指令处理
返回值
MS_SDK_SUCCESS 成功
MS_SDK_SEND_FAIL 失败
输入参数
indata 发送串口指令消息体
indata_len 发送串口指令消息体长度

应用向SDK发送串口指令时,调用此接口。该接口会处理串口指令并返回。串口指令封装参照《家电端通信协议(基础功能版本)20241012.pdf》。

最后修改于: 2025-04-22