复业思维20240108
这个作者很懒,什么都没留下…
展开
-
高通GAIA V3命令参考手册的研读学习(15):自定制命令的详细工作描述
里的示例一样,手机APP发出这个GetManuFacturer的命令发0x0000,那么耳机回复:0x8000, 同时在回复的playload部分,用最多15个字节的ACSII码来表达制造商信息(因此最多15个字母)。那么这个APP在通过GAIA协议控制这个耳机时,不仅可以通过前面讲过的vendor ID来识别,也可以更进一步通过这个命令来识别这个耳机,到底是不是本公司的。通过这个可变长度的playload,真的是可以传达极多的事先约定的信息,相当的灵活,真是不错!这个命令用来得到设备的制造商信息。原创 2024-02-05 00:15:00 · 233 阅读 · 0 评论 -
高通GAIA V3命令参考手册的研读学习(14):自定制命令的总体框架
前面提到,制造商可以根据自己的产品需要,定制自己的命令。这个命令协议主要是根据我们产品在手机的APP操作时,手机APP上所呈现的那些功能而定制的。而如果是0x0B9E,则表示后面的命令含义是完全自己制定的,因此,在手机APP这端和耳机固件这边,就应该约定好每一项的具体含义,而这也是这个定制协议所要做的。如果是0x001D,这表示后面的命令,是直接使用高通的标准命令库里的内容。因为是使用的标准命令库里的内容,所以命令的详细内容,就不需要自己定义了。在每一类特征命令下,再定义了详细的具体命令。原创 2024-02-04 00:15:00 · 355 阅读 · 0 评论 -
高通GAIA V3命令参考手册的研读学习(13):GAIA通知、示例以及制造商命令扩展
每个阈值表示为一个以分贝毫瓦为单位的信号电平的八位字节,以二的补码形式表示。高通的软件开发工具包提供了编写供应商特定代码的工具,包括用于创建和交换适当框架的QTIL GAIA数据包的函数库。这样设置以后,当设备测量到的电池电压等于或低于配置的阈值时,设备就会发送通知给主机。这请求0xce (-50 dBm)级别的事件0x01 (RSSI低阈值)通知。每个阈值表示为一个以分贝毫瓦为单位的信号电平的八位元,以二的补码形式表示。当电压低于设定的阈值时,设备在t2、t3和t4时刻发送进一步的通知。原创 2024-02-01 00:15:00 · 719 阅读 · 0 评论 -
高通GAIA V3命令参考手册的研读学习(12):第四个示例设置设备的默认音量
对于设备而言,因为语音音量的有效范围是0到15 (0x00到0x0f),也就是一共只有15步(所以无论IOS还是android手机,音量都是15步)。■ 0x05: Status (failure: invalid parameter) 详见《高通GAIA V3命令参考手册的研读学习(七)》■ 0x00:设置默认提示音(tone)的音量为0。■ 0x14:设置默认语音的音量为20(非法)■ 0x0f:设置默认音乐的音量设置为15。■ 0x0103:命令ID(配置默认音量)■ 0xff:帧开始。原创 2024-01-31 00:15:00 · 287 阅读 · 0 评论 -
高通GAIA V3命令参考手册的研读学习(11):第三个示例获取设备当前的RSSI
■ 0xec: RSSI值(-20dBm)(为什么0xec就表示 -20dBmm, 这里肯定还是需要事先约定好一个对应的表格)■ 0x02:表示有效载荷长度是两个字节,也就是两个冒号中间的00 ec这两个字节。■ 0x8301:已确认的命令ID(命令是0301,回复就是8301)■ 0x000a: Vendor ID (CSR)告警解释。■ 0x000a: (CSR)的Vendor ID。■ 0x0301:命令ID(获取当前RSSI)■ 0x00:有效载荷长度(0)■ 0xff:帧开始。原创 2024-01-30 00:30:00 · 252 阅读 · 0 评论 -
高通GAIA V3命令参考手册的研读学习(10):第二个示例获取固件版本
■ 0x8304: recognized Command ID (Get Application Version) (如前面《高通GAIA V3命令参考手册的研读学习(七)》中所述,回复就是把对应的最高位变为1,所以对0304的回复,就变成了8304。很明显,这里的软件版本标识和以及后面的设备名称等,都需要用户自己定义和约定。■ 0x000a: Vendor ID (:0x00 0a 代表CSR)■ “::”:(无有效载荷,也没有使用校验字节)■ 0x00:有效载荷长度(0)原创 2024-01-29 15:06:19 · 234 阅读 · 0 评论 -
高通GAIA V3命令参考手册的研读学习(09):交互通信的第一个示例详解
■ 0xf2:校验和(0xff⊕0x01⊕0x01⊕0x00⊕0x00⊕0x0a⊕0x07⊕0x00) 这是把报头的全部字节进行异或运算操作,操作的结果放在这个校验字节上。这样当设备收到这个数据包之后,也进行同样的操作,操作后与这个校验位进行对比,如果是一致的(也就是也是0XF2),那么表示数据包的数据是正确的、有效的,否则就丢弃。■ 0x73:校验和(0xff⊕0x01⊕0x01⊕0x01⊕0x00⊕0x0a⊕0x87⊕0x00⊕0x00)■ 0x00:有效载荷长度(0)■ :::(无有效载荷)原创 2024-01-28 00:15:00 · 289 阅读 · 0 评论 -
高通GAIA V3命令参考手册的研读学习(08):命令的两种处理方式和六类命令
库代码在内部处理通用函数(通用命令),如Read Battery Voltage。如果一个命令不能不能被库识别,它将命令转发给设备应用程序代码。某些特定于应用程序的命令,如“增加音量”就是用这种方式处理的。关于Sink(设备端)应用中可用命令的详细信息,请参见《ADK高通GAIA Sink命令参考》。库代码处理的命令总是可用的。应用程序代码处理的命令可能在所有实现中都不可用。这些命令不会自动导致重置,因此可以在执行重置之前应用几个命令。控制命令请求立即执行,不需要设备复位。这些命令请求远端设备的状态信息。原创 2024-01-27 00:15:00 · 351 阅读 · 1 评论 -
高通GAIA V3命令参考手册的研读学习(07):GAIA命令和确认和状态码表
这不是协议强制要求的,供应商自己的命令可能表现不同,也就是开发者可以自己定义特定的其余的含义,因为下表只定义了8种情况,而这是一个8位字节,可以定义256种情况。每一个这样的报文包从主机(例如手机里的APP)发出去后,设备在收到并检查上述的规则检查是有效的后,就回送给主机一个确认(ACK)的报文。例如,如果主机发送一个报文,报文中包含的 “命令ID”是0x0001(即0000 0000 0000 0001),那么设备回复的确认报文中该处就是:0x8001(即1000 0000 0000 0001)。原创 2024-01-26 00:15:00 · 401 阅读 · 1 评论 -
高通GAIA V3命令参考手册的研读学习(06):Ecosystem Reference 生态系统_简介、连线协议和命令格式
本文档中的所有命令都具有蓝牙SIG分配给QTIL的供应商ID 0x000a。对于必须在较低协议级别建立连接的情况,例如蓝牙RFCOMM,主机可以作为RFCOMM客户端或服务器发起。流的传输(注:所谓流,就是串行的二进制高低电平传输,以下就是详细描述在这个协议里的二进制流里每位的含义)(注:这里没有描述length字节,需要参考前面高通GAIA V3命令参考手册的研读学习(三)中的说明)对于基于分组的传输(例如,使用GATT与蓝牙低功耗设备的连接)。■ 主机是控制方,例如,在智能手机上运行的应用程序。原创 2024-01-25 00:15:00 · 341 阅读 · 0 评论 -
高通GAIA V3命令参考手册的研读学习(05):PDU格式和含义2
在每一个这种feature ID+ specific ID组合命令下,同时列出了设备在成功收到这个命令后正确的响应PDU格式以及出现错误时的错误码的含义(如果有的话)因此在每一个feature ID下,又有一系列的命令,即后面的pdu specific ID。也就是APP 发出0x0000给耳机时,就是要得到耳机芯片所支持的GAIA协议的版本。后面所有12种特性ID以及每一个特性ID里所包含的指定ID,全部遵循这一格式描述。表3-3,表明这个命令执行得到的响应PDU里的最后一个字节返回的值的含义。原创 2024-01-23 00:15:00 · 367 阅读 · 1 评论 -
高通GAIA V3命令参考手册的研读学习(04):PDU格式和含义
如果LE DLE不存在(例如,在iPhone 7之前的型号中),LE GATT数据包要短得多。(这个所谓的特性,是指特定的一个功能。比如语音通话,这是一个特定的功能,然后在这个功能下面,又分为拔打、接听、拒绝等指定动作,这些则由后面的。这个对应前面说的 通知PDU,很明显在上面表2-4的byte3,0-127对应着命令和回应,128-256对应通知和错误。与特性相关的命令ID。四种PDU类型,无论是那一种,都是通过这一个BYTE来传递。简单到如下表所示,数据流没有前面所说的那些部,仅仅就是一个PDU单元。原创 2024-01-22 00:15:00 · 895 阅读 · 0 评论 -
高通GAIA V3命令参考手册的研读学习(03):连线协议和数据包
另外,它还有一个隐藏的意思,即:Wire protocol更多的是表达传输格式。因为代码层面的数据(链表、队列、二叉树)都是结构化的,但网络层看到的都是二进制流,所以把结构化的数据序列化为二进制流发送出去,并且对方也能以同样的格式反序列化出来)现在使用IAP2协议。在标2-2这种格式中,标识(1byte)的值的含义还没有定义,保留中。这部分在表2-1中,是1byte. 在表2-2中,是2byte.它的作用,就是表达PDU的长度,也就是PDU一共有多少个字节。表2-2设置位1的RFCOMM和iAP协议。原创 2024-01-21 00:15:00 · 449 阅读 · 1 评论 -
高通GAIA V3命令参考手册的研读学习(02):与早期版本的差异和移植
这个API注册了一个回调函数,当GAIA框架接收到一个不是QTIL供应商ID的供应商ID时调用该回调函数。本节描述如何移植现有的GAIA命令以使用GAIA框架组件和新的QTIL命令包格式。然后再描述了一下怎样将使用早期版本做功能,移植到新版本上。然后,GAIA框架提供了将响应发送回移动应用程序的api。要将命令添加到GAIA v3,请使用GAIA框架API。■ 支持新的QTIL命令包结构和协议。■ 将现有命令移植到GAIA v3。■ 支持新的GAIA版本号(3)■ QTIL命令的新供应商ID。原创 2024-01-20 00:15:00 · 421 阅读 · 0 评论 -
高通GAIA V3命令参考手册的研读学习(01):总览
说人话就是,GAIA是一套通信协议,按照这个通信协议事先约定好的那些内容,主机——例如嵌入式设备或者手机上的应用程序,可以直接发送命令到目标设备——例如用高通的芯片做的蓝牙耳,耳机在收到这个命令后,就进行相应操作,并反馈回手机。当用户需要在自己设计的手机应用程序上操作耳机时,就对照这个协议内容,发送相应的命令就可以了。这种通信,是端到端的,与主机无关,意思就是不管手机型号是什么、硬件是什么,它只要按照这个GAIA所定义好的格式发送数据给耳机,那么耳机就会给以相应的操作和反馈。这个手册一共可以分成四部分。原创 2024-01-19 00:15:00 · 466 阅读 · 1 评论