表示蓝牙控制器硬件的状态。
enum HCI_EVENT {
DEVICE_UP, 设备开启
DEVICE_DOWN, 设备关闭
DEVICE_ERROR 设备出现错误
};
头文件:bt_hcip.h
表示数据包的类型
enum HCI_TYPE {
COMMAND_PACKET = 1, 命令包
DATA_PACKET_ACL = 2, 访问控制列表数据
DATA_PACKET_SCO = 3, 面向连接同步数据
EVENT_PACKET = 4, 事件
ETYPE_FINISH = 5 包的结束标志
};
头文件:bt_hcip.h
表示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
void HCI_CloseConnection(void);
功能:关闭栈和HCI传输之间的连接
注意:调用这个函数将会解锁读和写,硬件未初始化,释放所有资源空间包括缓冲区。如果驱动在DLL中,当函数返回时会被卸载。
int HCI_OpenConnection(void);
功能:在栈中的HCI层和蓝牙硬件建立连接,返回成功代表传输启动,这种情况发生时,栈会调用HCI_ReadHciParamerters函数。
注意:这个函数是用来开启硬件,初始化硬件,和硬件建立连接。返回true代表成功建立连接。这是个阻塞函数
int HCI_ReadHciParameters(
HCI_PARAMETERS* pParms
);
功能:获取蓝牙控制器的硬件特征,返回true表示成功完成,false表示发生错误。如果返回false,栈接口立即调用HCI_CloseConnection。
注意:这个函数可以先于打开一个连接被调用。
int HCI_ReadPacket(
HCI_TYPE* peType,
BD_BUFFER* pInBuffer
);
功能:从连接的设备上读包,返回true表示成功完成,false表示发生错误。如果返回false,栈接口立即调用HCI_CloseConnection。
注意:只有包被读或者发生错误才会返回,读的时候函数被阻塞,如果错误发生,蓝牙协议栈将会关闭。这个函数必须解锁并返回错误在调用HCI_CloseConnection后。
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来确认设备开启状态并且解除临时标志标识硬件能用性。
int HCI_StopHardware(void);
功能:释放蓝牙硬件
注意:这个函数被调用是用来解除存在的硬件连接,并且暂时地不提示硬件设备的到来。这个函数必须调用回调函数HCI_TransportCallback来确认设备关闭状态并且直到HCI_StartHardware被调用竖起临时标志标识硬件能用性。
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。