一种主机控制接口命令事件编码方法与流程

文档序号:21636273发布日期:2020-07-29 02:46阅读:215来源:国知局
本发明涉及通信
技术领域
:,特别是一种主机控制接口命令事件编码方法。
背景技术
::蓝牙主机(host)和控制器(controller)端之间的命令和事件数量大、参数多。因而,主机控制接口(hci,hostcontrollerinterface)规范定义了大量的命令和事件格式、参数。按照hci协议,主机(host)和控制器(controller)端之间数据的交换对应着结构和字节流之间编码规则的转换。而随着蓝牙核心规范版本不断升级,hci命令/事件的数量也相应大幅度增加,使得hci命令/事件编码信息尺寸日益变大。采用传统的哈夫曼(huffman)编码方式对此编码信息进行处理会导致hci代码巨大,不能适应蓝牙5.2规范的需要。技术实现要素:本发明主要解决的技术问题是提供一种主控接口命令事件编码方法,在不显著增加转换复杂度和降低编码速度的情况下,进一步增加编码压缩率,使得hci命令事件编码方式可以适配、涵盖最新的蓝牙5.2规格中所有的命令、返回、事件结构。为了实现上述目的,本发明采用的第一个技术方案是:一种主机控制接口命令事件编码方法,其特征在于,包括:从主机控制接口命令、返回、事件中任一项对应的参数结构中选取任一字节流;将字节流自第1比特开始,按照先后顺序以2比特或3比特为长度单位对字节流进行分隔,直至字节流分割完毕;采用2比特或3比特长度单位的相应代码按照先后顺序对分割后的字节流进行编码,生成字节流对应的编码结构;根据字节流对应的参数结构类别将编码结构压缩到主机控制接口命令编码表格、返回编码表格或事件编码表格中的一者内;以及采用ops宏描述主机控制接口命令编码表格、返回编码表格及事件编码表格。本发明采用的第二个技术方案是:一种计算机可读存储介质,其存储有计算机指令,该计算机指令被操作以执行方案一中的主机控制接口命令事件编码方法。本发明采用的第三个技术方案是:一种计算机设备,其包括处理器和存储器,存储器存储有计算机指令,处理器操作所述计算机指令以执行方案一中的主机控制接口命令事件编码方法。本发明的有益效果是:本发明的应用可在不显著增加转换复杂度和降低编码速度的情况下,进一步增加编码压缩率,使得hci命令事件编码方式可以适配、涵盖最新的蓝牙5.2规格中所有的命令、返回、事件结构。附图说明图1是本发明一种主机控制接口命令事件编码方法流程示意图。具体实施方式下面结合附图对本发明的较佳实施例进行详细阐述,以使本发明的优点和特征能更易于被本领域技术人员理解,从而对本发明的保护范围做出更为清楚明确的界定。对于主机控制接口命令或事件,传统的编码方式需要记载的信息包括:命令码、事件码、命令对应的返回码、命令参数结构成员、事件参数结构成员及返回码参数结构成员。当主机控制接口命令或事件数量增大时,所需要记载的信息量会迅速增加,从而导致主机控制接口命令或事件代码暴增。本发明采用将命令参数结构成员(字节流)、事件参数结构成员(字节流)及返回参数结构成员(字节流)经过分隔、编码、压缩后生成命令编码表格、事件编码表格及返回编码表格,然后采用ops宏识别三种编码表格中的编码结构,进而使得蓝牙主机(host)和控制器(controller)端之间通过ops宏实现高效的数据交换。图1示出了本发明一种主机控制接口命令事件编码方法的具体实施方式,在该具体实施方式中,一种主机控制接口命令事件编码方法包括:s101为选取字节流步骤,从主机控制接口命令、返回、事件对应的命令参数结构、返回参数结构、事件参数结构中任意选择一个,优选的,三种参数结构均由一组长短不一的字节流构成。然后从该参数结构中选取一个参数结构成员(一段完成的字节流)。s102为分隔字节流步骤,对于s101中选取的字节流,以2比特或3比特为长度单位,按照该字节流构成的先后顺序,自第1比特开始,对其进行分隔,直至其分割完毕。使得该字节流形成了由若干2比特长度单位及3比特长度单位以桥连方式结合在一起的字节流结构。s103为编码结构生成步骤,对于s102中分隔好的字节流,采用与2比特或3比特长度单位的相应代码按照先后顺序进行编码,从而生成与字节流相对应的一个编码结构。在本发明的一个具体实施例中,2比特长度单位的代码包括:[00]u8,其用于表示单字节;[01]u16,其用于表示双字节;[10]2t,其用于表示编码结束;以及[11]j3,其用于表示当前2比特描述区跳转到3比特描述区。在本发明的另一个具体实施例中,3比特长度单位的代码包括:[000]u32,其用于表示四字节;[001]6,u8x[6],其用于表示蓝牙设备地址;[010]4bx,其后接4bits长度描述以用于描述所述一段字节流;[011]8bx,其后接8bits长度描述以用于描述所述一段字节流;[100]x,其用于表示单字节长度;[101]n,其用于表示重复;[110]3t,用于表示编码结束;以及[111]j2,用于表示当前3比特描述区跳转到2比特描述区。下面为四个编码结构的例子用于具体说明2比特长度单位和3比特长度单位如何组成一个编码结构:编码结构一:其采用的2比特长度单位包括:u8、u16、j3,3比特长度单位包括:u32,j2,3t。structhci_read_local_amp_infocompstru{uint8status;/*^[001],enum*/uint8amp_status;/*^[141],enum*/uint32total_bandwidth;/*^[142],val*/uint32max_guaranteed_bandwidth;/*^[143],val*/uint32min_latency;/*^[144],val*/uint32max_pdu_size;/*^[145],val*/uint8device_type;/*^[264],enum*/uint16pal_capabilities;/*^[146],mask*/uint16max_amp_assoc_length;/*^[150],val*/uint32max_flush_timeout;/*^[147],val*/uint32best_effort_flush_timeout;/*^[148],val*/};/*0xb5,0x24,0x2d,0x5d,0x02[leni:5]-u8,u8,j3,u32,u32,u32,u32,j2,u8,u16,u16,j3,u32,u32,3t,r2*/编码结构一由u8,u8,j3,u32,u32,u32,j2,u8,u16,u16,j3,u32,u32,3t构成,其中包括3个u8、2个j3、2个u16、5个u32、1个j2、1个3t。说明编码结构一对应的字节流长度为35比特。编码结构二:其采用的2比特长度单位包括:u8、u16、j3,3比特长度单位包括:u32,4bx,4u8,4u16,j2,3t。structhci_le_enable_encryptionstru{uint16connection_handle;/*^[002],val*/uint8random_number[8];/*^[224],val*/uint16encryption_diversifier;/*^[225],val*/uint8long_term_key[16];/*^[258],val*/};/*0x5e,0x9b,0xd7,0x01[leni:4]-u16,j3,4bx,4u8,j2,u16,j3,4bx,4u16,3t,r4*/编码结构二由u16,j3,4bx,4u8,j2,u16,j3,4bx,4u16,3t构成,其中包括2个u16、2个j3、2个4bx、1个4u8、1个4u16、1个j2、1个3t。说明编码结构二对应的字节流长度为26比特。编码结构三:其采用的2比特长度单位包括:u8、u16、j3、2t,3比特长度单位包括:u32,4bx,4u8,4u16,j2,3t。structhci_le_set_extended_advertising_enablestru{uint8enable;/*^[353],enum*/uint8number_of_sets;/*^[422],val*/structhci_le_set_extended_advertising_enablesubstru{uint8advertising_handle;/*^[408],val*/uint16duration;/*^[423],time*/uint8max_extended_advertising_events;/*^[424],val*/}n[1];};/*0xfd,0x65,0x00[leni:3]-u8,j3,n,j2,u8,u16,u8,2t,r6*/编码结构三由u8,j3,n,j2,u8,u16,u8,2t构成,其中包括3个u8、1个u16、1个j3、1个2t、1个n、1个j2。说明编码结构二对应的字节流长度为18比特。编码结构四:其采用的2比特长度单位包括:u8、j3、3比特长度单位包括:x。structhci_le_extended_advertising_reportevstru{uint8num_reports;/*^[222],val*/uint8param_plen;/**length**/uint8param[1];/*^[201],val*/};/*0x4d[leni:1]-u8,j3,x,r1*/编码结构四由u8,j3,x构成,其中包括1个u8、1个j3、1个x。说明编码结构二对应的字节流长度为7比特。s104为将编码结构压缩生成编码表格步骤,先根据编码结构对应的字节流所在的参数结构类型(命令、返回、事件)确定s103步骤中编码结构的类型,例如:命令参数结构中的字节流对应的编码结构的类型即为命令。然后对该编码结构进行压缩并存储生成类别一致的编码表格,即所有的命令类编码结构生成主机控制接口命令编码表格、所有的返回类编码结构生成返回编码表格、所有的事件类编码结构生成事件编码表格。在本发明的一个具体实施例中,以字节为单位对编码结构进行压缩生成相应的编码表格。在该编码表格中,将编码结构按照由长到短的顺序进行排列,每一行为一个编码结构。下面为一个命令编码表格的局部为例具体说明命令编码结构被压缩后形成命令编码表格的结构形式:conststaticuint8hci_table_coding_command[]={/*[len:194]*//*0x00*/0x2e,0x15,0xa7,0x4b,0xc5,0xe9,0xb5,0x69,0x00,/*0x09*/0x47,0x2a,0x4e,0x97,0x8a,0xd3,0x6b,0xd3,0x00,/*0x12*/0xf7,0x66,0xf5,0x57,0xaa,0x55,0x00,/*0x19*/0xd7,0xa6,0x6b,0x96,0x17,0x01,/*0x1f*/0x17,0xa7,0x7f,0x69,0x15,/*0x24*/0x56,0x4b,0x12,0x00,/*0x28*/0xaa,0xaa,0xaa,0x2a,/*0x2c*/0x7a,0x6f,0xaa,0x0a,/*0x30*/0x5e,0x9b,0xd7,0x01,/*0x34*/0x67,0xba,0x27,0x00,/*0x38*/0x67,0xe6,0xb6,0x00,/*0x3c*/0xb9,0x23,0xe6,0x04,在此局部的命令编码表格中,包括了12个命令编码结构,这12个命令编码结构中每一个命令编码结构在命令编码表格中占一行。在该命令编码表格中,这12个命令编码结构按照位置由上到下的顺序、长度由大到小的顺序排列。s105为采用ops宏描述编码表格步骤,采用ops宏描述s104步骤生成的命令编码表格、返回编码表格、事件编码表格,从而在蓝牙主机(host)和控制器(controller)端之间实现数据交换。在本发明的一个具体实施例中,ops宏承载的信息包括:e/rbit,其用于表示事件或返回的类别(命令发送后预期的返回是event还是return类);命令编码偏移,其用于表示命令结构在编码表中的偏移比特置;命令操作码,其包括ogf/ocf(蓝牙规范定义的命令操作码值);r类,其用于表示命令返回编码偏移(return类的返回结构编码偏移);e类,其用于表示事件值idx(event类的,蓝牙规范定义的事件值)。优选的,该ops宏的比特数值为32,e/rbit为1比特,命令编码偏移为8比特,命令操作码为15比特,r类为8比特,e类为8比特。本发明与传统的哈夫曼(huffman)编码方式相比具有以下优势:一方面,本发明采用了基于概率分布的有限阶编码方式,具有面向hci编码的针对性设计。另一方面,本发明充分利用2比特或3比特的编码枚举空间。在2比特的4个枚举空间有3个用于实际成员编码,只有1个用于跳转(j3);在3比特的8个枚举空间有7个用于实际成员编码,只有1个用于跳转(j2);x尾,2t,3t皆可以终结,无需反复跳转到特定的2比特/3比特桥上结束。在本发明的一个具体实施例中,技术人员对原始哈夫曼(huffman)编码方式和本发明的编码方式进行了测试,实际测试结果如下:原始huffman编码:命令编码表格大约300字节,返回编码表格275字节,事件编码表格220字节,偏移表无法使用8bits描述,导致ops宏32bits描述法失效。本发明的编码:命令编码表格194字节,返回编码表格184字节,事件编码表格109字节,三类编码表格中的字节数均小于8bits编码偏移值的极限255字节,可以采用ops宏32bits描述法。以上测试结果说明:与哈夫曼(huffman)编码方式相比,本发明中的编码表格为利用完,还有足够的升级空间;本发明保持32bitsops宏的命令事件接口传递方式,编码速度未减小;本发明的在代码尺寸减小的情况下,提高了编码结构的压缩率,从而使得编码表格中可以包含更多的命令、返回、事件信息以适应蓝牙5.2版本的需要。在本发明的一个具体实施例中,本发明一种主机控制接口命令事件编码方法描述的各种说明性逻辑、逻辑块、模块可用经设计以执行本文主机控制接口命令事件编码方法的通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或其它可编程逻辑装置、离散门或晶体管逻辑、离散硬件组件或其任何组合来实施或执行。通用处理器可以是微处理器,但在替代方案中,所述处理器可以是任何常规处理器、控制器、微控制器或状态机。处理器还可实施为计算装置的组合,例如dsp与微处理器的组合、多个微处理器、结合dsp核心的一个或一个以上微处理器或任何其它此类配置。在本发明的另一个具体实施例中,本发明一种主机控制接口命令事件编码方法可直接在硬件中、在由处理器执行的软件模块中或在两者的组合中实施。软件模块可驻留在ram存储器、快闪存储器、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、可装卸盘、cd-rom或此项技术中已知的任何其它形式的存储介质中。示范性存储介质耦合到处理器,使得处理器可从存储介质读取信息和向存储介质写入信息。在替代方案中,存储介质可与处理器成一体式。处理器和存储介质可驻留在专用集成电路(asic)中。asic可驻留在用户终端中。在替代方案中,处理器和存储介质可作为离散组件驻留在用户终端中。本发明的有益效果:本发明的应用可在不显著增加转换复杂度和降低编码速度的情况下,进一步增加编码压缩率,使得hci命令事件编码方式可以适配、涵盖最新的蓝牙5.2规格中所有的命令、返回、事件结构。以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构变换,或直接或间接运用在其他相关的
技术领域
:,均同理包括在本发明的专利保护范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1