喜马拉雅WiFi音响绑定及通讯协议初稿
通讯协议
0x5A | 数据长度 | 框架版本 | 协议类型 | 设备编码 | Mac地址 | 数据帧序列号 | 保留字 | 数据类型 | 数据内容 | 检验码FCS |
---|---|---|---|---|---|---|---|---|---|---|
1字节 | 2字节 | 1字节 | 1字节 | 8字节 | 6字节 | 4字节 | 8字节 | 2字节 | N字节 | 2字节 |
通讯Json格式:
{
"cmd": 0 ,//命令码
"code": 0, //返回码
"msg": "", //状态消息
"data": ...... //数据节点
}
参数说明
参数名称 | 是否必须 | 字段类型 | 参数说明 |
---|---|---|---|
cmd | YES | int | 命令码 |
code | NO | int | 返回码 |
msg | NO | String | 状态消息 |
data | NO | String | 数据节点 |
全局命令码
每一种操作对用一个命令码,用作标识指令。
全局命令码说明如下:
命令码(十六进制) | 十进制 | 说明 |
---|---|---|
0x0001 | 1 | 添加歌曲 |
0x0002 | 2 | App查询歌曲列表 |
0x0003 | 3 | 升级操作 |
0x0004 | 4 | 播放 |
0x0005 | 5 | 关机 |
0x0006 | 6 | 静音/解除静音 |
0x0007 | 7 | 音量+ |
0x0008 | 8 | 音量- |
0x0009 | 9 | 切换aux状态 |
0x000a | 10 | 下一曲 |
0x000b | 11 | 上一曲 |
0x000c | 12 | 暂停 |
0x000d | 13 | App查询播放状态 |
0x000e | 14 | WIFI 无线简易连接 |
0x000f | 15 | 设备回复心跳 |
0x400f | 16399 | App发送心跳 |
0x0011 | 17 | palyMode(顺序播放/随机播放/列表循环/单曲循环/) |
0x0012 | 18 | 音量设置(直接设置音量值) |
0x0013 | 19 | 设备推送播放状态 |
0x0014 | 20 | 设备推送播放列表 |
0x0015 | 21 | 拖拽进度条 |
全局返回码
每次调用接口时,可能获得正确或错误的返回码,可以根据返回码信息调试接口,排查错误。
全局返回码说明如下:
0 | 请求成功 |
---|---|
200 | 无错误 |
400 | 不支持此接口 |
401 | JSON数据解析错误 |
示例
字符串
{
"cmd": 0x0001 ,//命令码
"code": 0, //返回码
"msg": "", //状态消息
"data": "This is string" //数据节点
}
整形参数
{
"cmd": 0x0001 ,//命令码
"code": 0, //返回码
"msg": "", //状态消息
"data": 1 //数据节点
}
对象
{
"cmd": 0x0001 ,//命令码
"code": 0, //返回码
"msg": "", //状态消息
"data": {
"ssid":"TP-link", //连接的路由名称
"password":"12345678", //路由密码,需要加密
}
}
数组
{
"cmd": 0x001 ,//命令码
"code": 0, //返回码
"msg": "", //状态消息
"data":[
{
"id" : "0"
"name" : “xxxx",
"artist" : “xxxx",
"album_title": “xxxx",
"cover_url_small”:“xxxx",
"cover_url_middle":"xxxx",
"cover_url_large":"xxxx",
"url":"xxxxxxxxx" {详细规格见规格说明url部分},
},
{
"id":"1"
"name":"xxxx1",
"artist":"xxxx1",
"album":"xxxx1",
"cover_url_small":"xxxx",
"cover_url_middle":"xxxx",
"cover_url_large":"xxxx",
"url":"xxxxxxxxxx"{详细规格见规格说明url部分},
}
]
}
指令说明
一、设备基础指令
- App扫描设备
0x5A | 数据长度 | 框架版本 | 协议类型 | 设备编码 | Mac地址 | 数据帧序列号 | 保留字 | 数据类型 | 数据内容 | 检验码FCS |
---|---|---|---|---|---|---|---|---|---|---|
5A | 0022 | 40 | 01 | 0000000000000000 | 000000000000 | 20000000 | 0000000000000000 | 0405 | data | 381a |
- 命令字:0x0405
- data区:NULL
- 设备回复自身信息
0x5A | 数据长度 | 框架版本 | 协议类型 | 设备编码 | Mac地址 | 数据帧序列号 | 保留字 | 数据类型 | 数据内容 | 检验码FCS |
---|---|---|---|---|---|---|---|---|---|---|
5A | xxxx | 40 | 01 | 00000199001b0300 | d8f710e019b0 | 00000000 | 0000000000000000 | 0305 | data | xxxx |
- 命令字:0x0305
- 厂商ID:0x0199
- 大分类:0x1b
- 小分类:0x03
- App发送心跳包
0x5A | 数据长度 | 框架版本 | 协议类型 | 设备编码 | Mac地址 | 数据帧序列号 | 保留字 | 数据类型 | 数据内容 | 检验码FCS |
---|---|---|---|---|---|---|---|---|---|---|
5A | xxxx | 40 | 01 | 0000000000000000 | 000000000000 | 20000000 | 0000000000000000 | 0104 | data | xxxx |
- 命令字:0x0104
- data区:json
示例:
{
"cmd": 0x400f ,//命令码
"code": 0, //返回码
"msg": "", //状态消息
"data": ...... //数据节点
}
- 设备回复心跳
0x5A | 数据长度 | 框架版本 | 协议类型 | 设备编码 | Mac地址 | 数据帧序列号 | 保留字 | 数据类型 | 数据内容 | 检验码FCS |
---|---|---|---|---|---|---|---|---|---|---|
5A | xxxx | 40 | 01 | 0000000000000000 | 000000000000 | 00000000 | 0000000000000000 | 0204 | data | xxxx |
- 命令字:0x0204
- data区:json
示例:
{
"cmd": 0x000f ,//命令码
"code": 0, //返回码
"msg": "", //状态消息
"data": {
"deviceId": "SPK设备序列号"
}
}
二、App主动控制终端指令
1.App控制终端
0x5A | 数据长度 | 框架版本 | 协议类型 | 设备编码 | Mac地址 | 数据帧序列号 | 保留字 | 数据类型 | 数据内容 | 检验码FCS |
---|---|---|---|---|---|---|---|---|---|---|
5A | xxxx | 40 | 01 | 0000000000000000 | 000000000000 | 00000000 | 0000000000000000 | 0104 | data | xxxx |
- 命令字:0x0104
data区:json数据
示例:
{ "cmd": 0x00xx ,//命令码 "code": 0, //返回码 "msg": "", //状态消息 "data": ...... //数据节点 }
2.终端回复App
0x5A | 数据长度 | 框架版本 | 协议类型 | 设备编码 | Mac地址 | 数据帧序列号 | 保留字 | 数据类型 | 数据内容 | 检验码FCS |
---|---|---|---|---|---|---|---|---|---|---|
5A | xxxx | 40 | 01 | 0000000000000000 | 000000000000 | 00000000 | 0000000000000000 | 0204 | data | xxxx |
- 命令字:0x0204
data区:json数据
示例:
{ "cmd": 0x00xx ,//命令码 "code": 0, //返回码 "msg": "", //状态消息 "data": ...... //数据节点 }
三、终端主动发送控制数据给App
1.周期上传运行数据
0x5A | 数据长度 | 框架版本 | 协议类型 | 设备编码 | Mac地址 | 数据帧序列号 | 保留字 | 数据类型 | 数据内容 | 检验码FCS |
---|---|---|---|---|---|---|---|---|---|---|
5A | xxxx | 40 | 01 | 0000000000000000 | 000000000000 | 00000000 | 0000000000000000 | 0105 | data | xxxx |
- 命令字:0x0105
data区:json数据
示例:
{ "cmd": 0x0013 ,//命令码 "code": 0, //返回码 "msg": "", //状态消息 "data": ...... //数据节点 }
音箱数据模型
一、歌单
参数说明
参数名称 | 是否必须 | 字段类型 | 参数说明 |
---|---|---|---|
id | 是 | int | 歌曲ID |
name | 否 | string | 演唱者 |
artist | 否 | String | 艺术家 |
album_title | 否 | String | 专辑标题 |
lrc_id | 否 | String | 歌词ID |
image_url_small | 否 | String | 歌曲海报1 |
image_url_middle | 否 | String | 歌曲海报2 |
image_url_large | 否 | String | 歌曲海报3 |
mac | 否 | String | Mac地址 |
total_time | 否 | int | 歌曲时长 |
album_id | 否 | int | 专辑ID |
utype | 否 | int | 比如 虾米音乐 考虑 喜马拉雅 之类的 |
uri | 是 | int | 歌曲URL |
downloadurl | 是 | String | 下载url |
二、播放状态
参数说明
参数名称 | 是否必须 | 字段类型 | 参数说明 |
---|---|---|---|
id 是 | int | 歌曲ID | |
mtype | 是 | String | 虾米,百度云盘,本地音乐… |
p_status | 否 | int | “0/1/2/3/4”, //准备播放,播放,暂停,停止,播放结束(用于网络收音机) |
type | 否 | String | 当前播放源(预设preset),收藏,实时推送 |
name | 否 | string | 演唱者 |
artist | 否 | String | 艺术家 |
album | 否 | String | 专辑 |
next_id | 是 | int | 下一首歌曲id |
total_time | 是 | int | 歌曲总时间 |
current_time | 是 | int | 歌曲当前播放时间 |
play_mode | 否 | int | 模式(//顺序播放/随机播放列表循环/单曲循环/) |
volume | 是 | int | 音量 |
绑定流程
[原文链接地址]http://blog.csdn.net/xxl6097/article/details/50127949