蓝牙HCI

蓝牙HCI

数据结构

1、HCI_EVENT

表示蓝牙控制器硬件的状态。
enum HCI_EVENT {
  DEVICE_UP,        //设备开启
  DEVICE_DOWN,      //设备关闭
  DEVICE_ERROR      //设备出现错误
};
//头文件:bt_hcip.h

2、HCI_TYPE


表示数据包的类型
enum HCI_TYPE {
  COMMAND_PACKET = 1,     //命令包
  DATA_PACKET_ACL = 2,    //访问控制列表数据
  DATA_PACKET_SCO = 3,    // 面向连接同步数据
  EVENT_PACKET = 4,       //事件
  ETYPE_FINISH = 5        //包的结束标志
};
//头文件:bt_hcip.h

3、HCI_PARAMETERS

//表示HCI传输的接口
typedef struct __hci_parameters {
  unsigned int uiSize;
  unsigned int fInterfaceVersion;       //传输层驱动的版本号
  int iMaxSizeRead;                     //缓冲区大小,不包含头和尾
  int iMaxSizeWrite;
  int iReadBufferHeader;                //预设值
  int iReadBufferTrailer;               
  int iWriteBufferHeader;               //0到start间的字节数
  int iWriteBufferTrailer;              //end到size间的字节数
  int uiFlags;                                   //取非有效,否则无效
  int fHardwareVersion;                 //0/1/2
  unsigned int uiResetDelay;            //reset命令发出到下一命令执行之前的时间间隔
  unsigned int uiWriteTimeout;          //写超时时间
  unsigned int uiDriftFactor;           //时间
  int iScoWriteLowNumPackets;           // 0
  int iScoWriteNumPackets;              //0
  int iScoWritePacketSize;              //0/-1
  int iScoSampleSize;                   //8/16
} HCI_PARAMETERS;               
//头文件:bt_hcip.h

API函数

1、HCI_CloseConnection

void HCI_CloseConnection(void);
//功能:关闭栈和HCI传输之间的连接
//注意:调用这个函数将会解锁读和写,硬件未初始化,释放所有资源空间包括缓冲区。如果驱动在DLL中,当函数返回时会被卸载。

2、HCI_OpenConnection(void);

int HCI_OpenConnection(void);
//功能:在栈中的HCI层和蓝牙硬件建立连接,返回成功代表传输启动,这种情况发生时,栈会调用HCI_ReadHciParamerters函数。
//注意:这个函数是用来开启硬件,初始化硬件,和硬件建立连接。返回true代表成功建立连接。这是个阻塞函数

3、HCI_ReadHciParameters

int HCI_ReadHciParameters(HCI_PARAMETERS* pParms);
//功能:获取蓝牙控制器的硬件特征,返回true表示成功完成,false表示发生错误。如果返回false,栈接口立即调用HCI_CloseConnection。
//注意:这个函数可以先于打开一个连接被调用。

4、HCI_ReadPacket

int HCI_ReadPacket(HCI_TYPE* peType, BD_BUFFER* pInBuffer);
//功能:从连接的设备上读包,返回true表示成功完成,false表示发生错误。如果返回false,栈接口立即调用HCI_CloseConnection。
//注意:只有包被读或者发生错误才会返回,读的时候函数被阻塞,如果错误发生,蓝牙协议栈将会关闭。这个函数必须解锁并返回错误在调用HCI_CloseConnection后。

5、HCI_WritePacket

int HCI_WritePacket(HCI_TYPE eType, BD_BUFFER* pOutBuffer);
//功能:向连接的设备发送包,返回true表示成功完成,false表示发生错误。如果返回false,栈接口立即调用HCI_CloseConnection。
//注意:这个函数要申请一个空的缓冲区为包头和包尾预留足够的空间,这个空间是HCI_ReadHciParameters中要求的。发送的时候函数被阻塞,如果错误发生,蓝牙协议栈将会关闭。这个函数必须解锁并返回错误在调用HCI_CloseConnection后。

6、HCI_StartHardware

int HCI_StartHardware(void);
//功能:初始化蓝牙硬件
//注意:为了确保硬件开启,蓝牙栈可以调用此函数。驱动可能会重新尝试初始化硬件。这个函数必须调用回调函数HCI_TransportCallback来确认设备开启状态并且解除临时标志标识硬件能用性。

7、HCI_StopHardware

int HCI_StopHardware(void);
//功能:释放蓝牙硬件
//注意:这个函数被调用是用来解除存在的硬件连接,并且暂时地不提示硬件设备的到来。这个函数必须调用回调函数HCI_TransportCallback来确认设备关闭状态并且直到HCI_StartHardware被调用竖起临时标志标识硬件能用性。

8、HCI_SetCallback

typedef int (*HCI_TransportCallback)(HCI_EVENT eEvent, void* pEvent);
  int HCI_SetCallback(
  HCI_TransportCallback pfCallback
);
//功能:获取HCI参数
//注意:如果pfCallback是空,驱动必须准备卸载。这个函数只有栈当前的连接被关闭的时候才被调用并且设置pfCallback为空。如果这个参数不为空,就代表有硬件插入或者拔出。如果检测到硬件的插入或者拔出,传输层就会调用此函数为上层提供服务。
//头文件:bt_hcip.h
//包:Btd.lib



蓝牙传输管理器首先搜索PNP设备,像:PCMCIA,USB等。如果没有发现PNP设备,它会搜索注册表中已有的设备。
  默认寄存器设置

HKEY_LOCAL_MACHINE\Software\Microsoft\Bluetooth\Transports BuiltIn\1 这个注册键指示了内置的传输驱动的设置,1代表优先级

HKEY_LOCAL_MACHINE\Software\Microsoft\Bluetooth\Transports\PnP\<GUID>这个指出PNP传输驱动的设置

GUID键代表了传输驱动IClass注册键值。这个值是BthUniv关于传输的寄存器的设置。在打开一个设备连接前,这些设置将会被拷贝到HKEY_LOCAL_MACHINE\Software\Microsoft\Bluetooth\HCI目录下。
如果通过设定合适的编译变量来指定传输驱动,如SYSGEN_BTH_USB_ONLY,那么在os设计中,BthUniv就用不到了。在这种情况下,那个合适的传输驱动的注册器设置将会自动地拷贝到HKEY_LOCAL_MACHINE\Software\Microsoft\Bluetooth\HCI。

转载于:https://my.oschina.net/u/184090/blog/323618

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值