1 概要
Watch 端 SD 卡中的歌曲除了可以通过 USB 传输,还可以通过 SPP/BLE 传输来完成歌曲的添加与删 除操作。其中,Android 手机可以安装 LocalPlayback.apk 使用 SPP 协议与 watch 交互;iOS 手机可以安装 LocalPlayback.ipa 通过 BLE 与 watch 交互,手机端 app 的使用方法可参见对应 tool 文件夹下的使用手册。 无论是 SPP 还是 BLE,所使用的 Command 和 Event 是相同的。
2 建立连接
手机 tool 端与 watch 建立 SPP/BLE 连接后,先读取 Header .bin 和 Name .bin 内容,根据 Header .bin 中的 offset,length 和 plIndex 找到对应歌曲名,加载出 File List 和 Play List。后续增删歌曲等操作均基于 File List 和 Play List,目前 watch 只使用一个 playlist。
2.1 Command&Event
2.1.1 CMD_QUERY_INFO
Tool 端首先发送 0x680 来获取 watch 设备信息。
CMD_QUERY_INFO (CMD ID: 0x680) | ||
Parameters |
EVT_QUERY_INFO (EVT ID: 0x680) | ||
Parameters (共32 bytes) | Byte0~Byte1 | Packet size 传送音乐数据每笔包大小。 |
Byte2~Byte3 | Buffer check size 计算buffer check的数据长度。 | |
Byte4 | Protocol version 协议版本号 SoC新增功能或修复bug后,版号递增 | |
Byte5 | Mode 暂未使用 | |
Byte6 | ic type 例如:BBPro,BBPro2… | |
Byte7 | song_farmat_type typedef enum { PB_FORMAT_TYPE_DEFAULT = 0x00, PB_FORMAT_TYPE_AAC = 0x01, PB_FORMAT_TYPE_MP3 = 0x02, PB_FORMAT_TYPE_FLAC = 0x04, PB_FORMAT_TYPE_WAV = 0x08, PB_FORMAT_TYPE_RSVD } T_PLAYBACK_FORMAT_TYPE; 这个byte是指明soc支持的播放文件格式, PB_FORMAT_TYPE_DEFAULT也可以默认支持播放aac,rtk,采用bit位,bit0: aac,bit1 mp3, bit2 flac, bit3 wav。 | |
Byte8~Byte31 | Reserve(24 bytes) |
2.1.2 CMD_GET_LIST_DATA
Tool端发送0x681获取header.bin与Name.bin。
CMD_GET_LIST_DATA (CMD ID: 0x681) | ||
Parameters | Byte0 | File Type: 0x00: Header .bin 0x01: Name .bin |
EVT_GET_LIST_DATA (EVT ID: 0x681) | ||
Parameters | Byte0 | Flag 0x00: start(获取文件长度及CRC的标志位) 0x01: continue(第一笔及传输数据的标志位) 0x02: end(最后一笔传输数据的标志位) |
Byte1~ByteN | Flag == 0, start: Byte1~Byte2:CRC Byte3~Byte6:File Length Flag == 1 or Flag == 2, continue/end: Byte1~Byte2: Header/Name data length Byte3~ByteN: Header/Name data |
3 添加歌曲
File List 中歌曲不存在(即 watch 端 sd 卡中没有此歌曲),需要手机 tool 通过 SPP/BLE 将歌曲数据传 送给 watch。
3.1 Commant&Event
3.1.1 CMD_TRANS_START
Tool 端开始传输音乐数据前,先发送 CMD 0x682 将音乐名称给 SoC(watch),此时 SoC 创建音乐文 件,并将结果返回给 Tool。其中,BLE 传输时,在收到 CMD_TRANS_START 后会做 BLE 连接间隔的修改, 以提高传输速度。
CMD_TRANS_START (CMD ID: 0x682) | ||
Parameters | Byte0~Byte1 | Length 歌曲名占用字节数 |
Byte2~ByteN | Song name | |
ByteN+1~ByteN+4 (4 bytes) | Length of the whole song 整首歌的数据长度 |
EVT_TRANS_START (EVT ID: 0x682) | ||
Parameters | Byte0 | Result 0x01: success Others: fail |
3.1.2 CMD_TRANS_CONTINUE
Tool 将歌曲数据分包传输给 SoC。
CMD_TRANS_CONTINUE (CMD ID: 0x683) | ||
Parameters | Byte0~Byte1 | Sequence number |
Byte2-byte3 | crc | |
Byte4~Byte7 | Offset | |
Byte8~Byte9 | Length | |
Byte10~ByteN | Song Data |
3.1.3 CMD_REPORT_BUFFER_CHECK
Tool 端暂未使用该 CMD,而是在 buffer 写满后上报 EVT_REPORT_BUFFER_CHECK 同步 SOC buffer 状态。开始时,SoC 端接收数据的乒乓 buf A、B 都是空的,Tool 端可以连续传输,将 buf A、B 放满,后 面需要等待 SoC 回应 0xF1 表明 buf A 空,继续传输数据,放满 buf A;然后等 0xF2 表明 buf B 空,再继 续传输数据放满 buf B,反复如此。
CMD_REPORT_BUFFER_CHECK (CMD ID: 0x684) | ||
Parameters | Byte0~Byte1 | Data size 需要做buffer check的data size(= buffer check size) |
Byte2~Byte3 | CRC value |
EVT_REPORT_BUFFER_CHECK (EVT ID: 0x683) | ||
Parameters | Byte0 | Result 0x01: success 0x05: crc error 0x06: length error 0x07: write error 0xF1: BUFFER A write success 0xF2: BUFFER B write success others: not supported |
3.1.4 CMD_VALID_SONG
歌曲传输完成后,会做整首歌曲的 CRC 校验。同时完成交互后会上报消息来更新播放列表的 gui 界面。消息为:IO_MSG_PLAYBACK_TRANS_FILE_END。
CMD_VALID_SONG (CMD ID: 0x685) | ||
Parameters | Byte0~Byte3 | Size of the song 歌曲总长度 |
Byte4~Byte5 | CRC value 整首歌CRC |
EVT_VALID_SONG (EVT ID: 0x684) | ||
Parameters | Byte0 | Result: 0x01: success 0x05: crc error 0x06: length error |
3.1.5 CMD_TRANS_CANCEL
用于取消歌曲传输,Tool 发送 CMD_TRANS_CANCEL 给 SoC 后,SoC 清除歌曲数据并停止传输动作。
CMD_TRANS_CANCEL (CMD ID: 0x687) | ||
Parameters |
EVT_TRANS_CANCEL (EVT ID: 0x686) | ||
Parameters | Byte0 | Result 0x01: success others: fail |
4 删除歌曲
手机Tool发送Command通知watch删除指定歌曲或全部歌曲。
4.1 Commant&Event
4.1.1 CMD_PERMANENT_DELETE_SONG
Tool端发送0x689下发删Par除歌曲的CMD,header.bin中对应被删的歌曲isDeleted位被置高。
ameters | Byte0~Byte1 | Song name length | |
Byte2~ByteN | Song name |
EVT_PERMANENT_DELETE_SONG (EVT ID: 0x688) | ||
Parameters | Byte0 | Result 0x01: success Others: fail |
4.1.2 CMD_PERMANENT_DELETE_ALL_SONG
与删除单首歌曲类似,该 CMD 删除列表中所有歌曲。
CMD_PERMANENT_DELETE_ALL_SONG (CMD ID: 0x68c) | ||
Parameters |
EVT_PERMANENT_DELETE_ALL_SONG (EVT ID: 0x68b) | ||
Parameters | Byte0 | Result 0x01: success Others: fail |
5 Flow