【瑞昱RTL8763E】歌曲传输

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位被置高。

CMD_PERMANENT_DELETE_SONG (CMD ID: 0x689)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1555490.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【高等数学学习记录】函数的极限

一、知识点 (一)知识结构 #mermaid-svg-Dz0Ns0FflWSBWY50 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Dz0Ns0FflWSBWY50 .error-icon{fill:#552222;}#mermaid-svg-Dz0Ns0FflWSBWY50 .erro…

计算有向无环图中两节点间简单路径的数量

计算有向无环图中两节点间简单路径的数量 主要步骤:伪代码:C代码实现:解释:在给定一个有向无环图(DAG)以及两个节点s和t时,我们需要计算从节点s到节点t之间的简单路径的数量。为了实现这一目标,我们可以使用动态规划的思想,在拓扑排序的基础上解决问题。 主要步骤: 拓…

Spring cloud 中gateway原理

Spring Cloud Gateway 是 Spring Cloud 生态系统中的一个 API 网关解决方案,用于在微服务架构中处理请求路由、负载均衡、认证授权、监控等功能。它基于 Spring 5、Spring Boot 2 和 Project Reactor,提供了非阻塞的、响应式的 API 网关功能。 核心概念…

论文翻译 | Model-tuning Via Prompts Makes NLP Models Adversarially Robust

摘要 近年来,NLP从业者集中于以下实践:(i)导入现成的预训练(掩码)语言模型;(ii)在CLS令牌的隐藏表示(随机初始化权重)上附加多层感知器;(iii)在下游任务(MLP-FT)上微调整个模型。这一过程在标准的NLP基准上产生了巨大的收益,但这些模型仍然很脆弱&#x…

VCSEL驱动电路

1.1 驱动电路 发射端可用MOS管控制VCSEL二极管负极方式发出脉冲光(正极对地),具体作用过程如下: Step 1: MOS管断开, C2 电容充电(左侧HV); Step 2: 信号控制MOS管打开; Step 3: MOS管打开后, C2电容左侧电压降为0V, 右侧变为…

CF2013E Prefix GCD

【题目大意】 给定一个长度为 n n n 的数列 a 1 … n a_{1 \dots n} a1…n​,你可以将 a 1 … n a_{1 \dots n} a1…n​ 按照任意顺序进行重排,使得: ∑ i 1 n gcd ⁡ { a 1 , a 2 , a 3 , … , a n } \sum\limits_{i1}^{n}\gcd\left \{…

如何向文科生解释什么是计算机的缓存

缓存(Cache)是计算机系统中的一个至关重要的技术概念,用于提高数据访问的速度。我们可以把缓存想象成一个临时的存储区域,它存放着系统中常用或最近使用的数据,以便快速访问,而不必每次都从速度较慢的原始数…

新编英语语法教程

新编英语语法教程 1. 新编英语语法教程 (第 6 版) 学生用书1.1. 目录1.2. 电子课件 References A New English Grammar Coursebook 新编英语语法教程 (第 6 版) 学生用书新编英语语法教程 (第 6 版) 教师用书 1. 新编英语语法教程 (第 6 版) 学生用书 https://erp.sflep.cn/…

拒绝踏空和卖飞,魔改CCI指标主升浪战法!

〇、写在前边 其实最应该学习量化的,就是散户。 作为散户,我们能获取的只有公开信息,这使得我们天然就落后于机构、大户和内幕狗。 那么我们可以利用公开信息来提升投资表现吗?当然可以。 网上有大量免费或者低成本就能获取的…

野火STM32F103VET6指南者开发板入门笔记:【1】点亮RGB(基于结构体)

文章目录 硬件介绍软件介绍:结构体方式软件介绍:宏定义方式 硬件介绍 提示:本文是基于野火STM32F103指南者开发板所写例程,其他开发板请自行移植到自己的工程项目当中即可。 RGB-LEDPin引脚:低电平-点亮,高…

表达式求值(可以计算两位数以上)

此程序可计算两位数以上的表达式 import java.util.Stack;public class ExpressionEvaluator {public int evaluate(String s) {Stack<Integer> numbers new Stack<>();Stack<Character> operators new Stack<>();int i 0;char c s.charAt(i);whil…

灵足时代:具身智能核心部件的新秀崛起——解析数千万元天使轮融资

在智能科技日新月异的今天,具身智能作为连接物理世界与数字世界的重要桥梁,正逐步成为科技创新的前沿阵地。近日,具身智能核心部件领域的新锐公司——“灵足时代”宣布完成数千万元天使轮融资,这一消息无疑为行业内外带来了强烈的震撼与期待。本轮融资由雅瑞智友科学家基金…

在 MySQL 中处理和优化大型报告查询经验分享

在 MySQL 数据库的使用过程中&#xff0c;我们经常会遇到需要生成大型报告的情况&#xff0c;这些查询可能涉及大量的数据和复杂的计算&#xff0c;对数据库的性能提出了很高的要求。 一、问题背景 大型报告查询通常具有以下特点&#xff1a; 数据量大&#xff1a;涉及大量的…

【2024年最新】基于Spring Boot+vue的旅游管理系统lw+ppt

作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;Java精选实战项…

用js和css实现一行一行文字交替显示

用js和css实现&#xff0c;效果是&#xff1a;有多行文字&#xff0c;一行一行的交替显示&#xff0c;每隔几秒显示一行&#xff0c;循环显示。 代码如下&#xff0c;保存为html即可看到效果&#xff1a; <!DOCTYPE html> <html lang"en"> <hea…

数据库软题6.1-关系模式-关系模式的各种键

关系模式的各种键 题1-由关系模式求候选键 1. 候选键唯一不冗余 对选项进行闭包运算&#xff0c;如果得到全部属性U&#xff0c;则为候选码 A:AC-ABC-ABCD B:AB-ABC-ABCD C:AE-ABE-ABCE -ABCDE-ABCDEH D:DE2. R的候选码可以从A1,A2,A3,A1A2,A1A3,A2A3,A1A2A3中选择&#xff…

JC2804快速入门

目录 一、硬件接线二、软件操作2.1、CAN分析仪2.2、默认参数2.3、读取校准参数2.4、闭环控制2.5、调整PI参数2.6、切换控制模式 三、其它CAN模块操作3.1、使用CANable3.2、发送指令3.3、其它 一、硬件接线 红色接电源正极&#xff0c;黑色接电源负极&#xff0c;电源电压7—12V…

每日一道算法题——二分查找

文章目录 开口闭口区分:1、问题2、示例3、解决方法&#xff08;1&#xff09;注意点&#xff08;2&#xff09;代码 开口闭口区分: 开口闭口区分: [1,2,3] 左闭右闭[1,2,3) 左闭右开(1,2,3] 左开右闭 开口如数组(1,2,3)不包含当前数据&#xff0c;也就是指只有2&#xff0c;闭口…

分布式锁--redission 最佳实践!

我们知道如果我们的项目服务不只是一个实例的时候&#xff0c;单体锁就不再适用&#xff0c;而我们自己去用redis实现分布式锁的话&#xff0c;会有比如锁误删、超时释放、锁的重入、失败重试、Redis主从一致性等等一系列的问题需要自己解决。 当然&#xff0c;上述问题并非无…

【Java】—— 泛型:泛型的理解及其在集合(List,Set)、比较器(Comparator)中的使用

目录 1. 泛型概述 1.1 生活中的例子 1.2 泛型的引入 2. 使用泛型举例 2.1 集合中使用泛型 2.1.1 举例 2.1.2 练习 2.2 比较器中使用泛型 2.2.1 举例 2.2.2 练习 1. 泛型概述 1.1 生活中的例子 举例1&#xff1a;中药店&#xff0c;每个抽屉外面贴着标签 举例2&…