ʵսLinux Bluetooth±à³Ì£¨Èý£© HCI²ã±à³Ì
1. HCI²ãÐÒé¸ÅÊö£º
HCIÌṩһÌ×ͳһµÄ·½·¨À´·ÃÎÊBluetoothµ×²ã¡£ÈçͼËùʾ£º
´ÓͼÉÏ¿ÉÒÔ¿´³ö£¬Host Controller Interface(HCI) ¾ÍÊÇÓÃÀ´¹µÍ¨HostºÍModule¡£Hostͨ³£¾ÍÊÇPC£¬ ModuleÔòÊÇÒÔ¸÷ÖÖÎïÀíÁ¬½ÓÐÎʽ£¨USB,serial,pc-cardµÈ£©Á¬½Óµ½PCÉϵÄbluetooth Dongle¡£
ÔÚHostÕâÒ»¶Ë£ºapplication,SDP,L2capµÈÐÒ鶼ÊÇÈí¼þÐÎʽÌá³öµÄ£¨BluezÖÐÊÇÒÔkernel²ã³ÌÐò)¡£ÔÚModuleÕâÒ»¶Ë£ºLink Manager, BB, µÈÐÒ鶼ÊÇÓ²¼þÖÐfirmwareÌṩµÄ¡£
¶øHCIÔò±È½ÏÌØÊ⣬ËüÒ»²¿·ÖÔÚÈí¼þÖÐʵÏÖ£¬ÓÃÀ´¸øÉϲãÐÒéºÍ³ÌÐòÌṩ·ÃÎʽӿڣ¨BluezÖÐ,hci.c hci_usb.c£¬hci_sock.cµÈ£©.ÁíÒ»²¿·ÖÒ²ÊÇÔÚFirmwareÖÐʵÏÖ£¬ÓÃÀ´½«Èí¼þ²¿·ÖµÄÖ¸ÁîµÈÓõײãÐÒéÃ÷°×µÄ·½Ê½´«µÝ¸øµ×²ã¡£
¾ÓÓÚPCµÄÉϲã³ÌÐòÓëÐÒéºÍ¾ÓÓÚModulesµÄϲãÐÒéÖ®¼äͨ¹ýHCI¹µÍ¨£¬ÓÐ4ÖÖ²»Í¬ÐÎʽµÄ´«Ê䣺Commands, Event, ACL Data, SCO/eSCO Data¡£
1.1. HCI Command£º
HCI CommandÊÇHostÏòModules·¢ËÍÃüÁîµÄÒ»ÖÖ·½Ê½¡£HCI Command Packet½á¹¹ÈçÏ£º
OpCodeÓÃÀ´Î¨Ò»±êʶHCI Command.ËüÓÉ2²¿·Ö×é³É£¬10bitµÄOpcode Command. 6bitµÄOpcode Group¡£
1.1.1: OpCode Group:
Linux Kernel£¨BlueZ£©ÖУ¬~/include/net/bluetooth/hci.hÖж¨ÒåÁËOpCode Group¡£
#define OGF_LINK_CTL 0x01
#define OGF_LINK_POLICY 0x02
#define OGF_HOST_CTL 0x03
#define OGF_INFO_PARAM 0x04
#define OGF_STATUS_PARAM 0x05
ËüÃÇ´ú±íÁ˲»Í¬µÄCommand Group£º
OGF_LINK_CTL: Link control,Õâ¸öCommand GroupÖеÄCommandÔÊÐíHost¿ØÖÆÓëÆäËübluetooth device µÄÁ¬½Ó¡£
OGF_LINK_POLICY £ºLink Policy¡£Õâ¸öCommand GroupÖеÄCommandÔÊÐíµ÷ÕûLink Manager control.
OGF_HOST_CTL: Control and Baseband.
1.1.2: Opcode Command:
ÓÃÀ´ÔÚͬһ¸öGroupÄÚΨһʶ±ðCommand¡£~/include/net/bluetooth/hci.hÖж¨Òå¡£
1.2: HCI Event£º
ModulesÏòHost·¢ËÍһЩÐÅÏ¢£¬Ê¹ÓÃHCI Event¡£Event Packet½á¹¹ÈçÏ£º
HCI Event·Ö3ÖÖ£ºCommand complete Event, Command States Event£¬Command Subsequently Completend.
Command complete Event: Èç¹ûHost·¢Ë͵ÄCommand¿ÉÒÔÁ¢¿ÌÓнá¹û£¬Ôò»á·¢ËÍ´ËÀàEvent¡£Ò²¾ÍÊÇ˵£¬Èç¹û·¢Ë͵ÄCommandÖ»Óë±¾µØModulesÓйأ¬²»ÓëremoteÉ豸´ò½»µÀ£¬ÔòʹÓÃCommand complete Event¡£ÀýÈ磺HCI_Read_Buffer_Size.
Command States Event£ºÈç¹ûHost·¢ËÍ
Ïà¹ØÎĵµ£º
½ñÌ칫˾ÓиöͬÊÂŪÁ˸öRed Hat Enterprise 5×°£¬ÏµÍ³×°ºÃºó£¬·¢ÏÖtelnet²»ÄÜÓã¬sshÊÇ¿ÉÒԵġ£¸ãÁ˺þ㬲Ÿø¸ã¶¨£¬½áºÏÒÔǰժϵĹØÓÚÕâ·½ÃæµÄ×ÊÁÏ£¬²Î¿¼ÈçÏ£º
1¡£¸ÅÊöLinuxÌṩ·þÎñÊÇÓÉÔËÐÐÔÚºǫ́µÄÊØ»¤³ÌÐò£¨daemon£©À´Ö´Ðеġ£
ÊØ»¤½ø³ÌµÄ¹¤×÷¾ÍÊÇ´ò¿ª1¸ö¶Ë¿Ú£¨port£©£¬µÈ´ý£¨listen£©½øÈëµÄÁ¬½Ó¡£ÔÚC/SģʽÖУ¬Èç¹ ......
ÔÚÓ¦ÓóÌÐò¿ª·¢Ê±£¬Ò²¾³£ÐèÒªÈçϵĶ¨Ê±Æ÷. ÕâÀï¶Ô¶¨Ê±Æ÷×öÁËÒ»¸öÓÅ»¯£¬¾ÍÊÇÔÚ²åÈë¶ÓÁÐÖÐʱ½øÐÐÁËÒ»´ÎÅÅÐò£¬Ê¹µÃ¼ì²âʱ²»ÐèÒª±éÀúÕû¸öÁ´±í£¬Ö»Ðè°ÑÅÅÔÚÇ°ÃæµÄ¼¸¸öµ½Ê±µÄÈÎÎñÈ¡³öÀ´¾Í¿ÉÒÔÁË¡£
static struct timer_list {
long jiffies;
void (*fn)();
......
Linux go on
ÎÒµÄÖ÷»úϵͳÊÇwindows XP£¬°²×°µÄÐéÄâ»úµÄVMware 6.5¡£
¸Õ×°ÁËVMwareÖ®ºó£¬Äܹ»Ö±½ÓÔÚVMwareϵēÐéÄâ»ú—>ÉèÖ×>Ñ¡Ôñ—>Îļþ¹²Ïí”ÉèÖÃʵÏÖ¹²Ïí£¬µ«Êǵڶþ´Î¿ªÐéÄâ»ú¾ÍÔõôҲ²»Äܹ²ÏíÁË£¡£¡
&n ......
Õâ¸öÎÊÌâ¸ãÁ˺ܳ¤Ê±¼ä£¬Ò²ÔÚÍøÉϲéÁ˺ܶණÎ÷£¬ÏÖÔÚÂýÂýµÄÀ´ÕûÀíÒ»ÏÂ
vmware°²×°ºÃÒԺ󣬻á×Ô¶¯Ìí¼ÓÁ½ÕÅÍø¿¨£¨vmnet1ºÍvmnet8£©£¬Õû¸ö»úÆ÷µÄ½á¹¹¾Í¿ÉÒÔ³éÏó³É£ºÐéÄâ»úϵͳ£¨ÐéÄâÍø¿¨vmnet0)¨D¨D£¨vmnet1 vmnet8£©¨D¨Dʵ¼Êϵͳ(Íø¿¨)¡£
1.VmwareµÄÍø¿¨ÉèÖÃ
(1)Bridged£¨ÇŽӣ©·½Ê½
&n ......
Ç°Ãæ½²ÁËʹÓà ioctl·¢ËÍHCI CommandµÄ·½·¨¡£µ«HCI protocol»¹ÓÐһЩCommand£¬±ÈÈçInquiryµÈ£¬ËûÃÇÔò²»ÐèҪʹÓÃioctlÀ´·¢ËÍ¡£blueZ Ö±½ÓÌṩÁËÖ§³Ö£¬ËäÈ»ËûÃǵÄ×îÖÕ¶¼ÊÇÓÃͬÑù°ì·¨ÊµÏֵġ£
ÔÚÓ¦ÓóÌÐòÖУº
hci_inquiry(dev_id, length, num_rsp, NULL, &info, flags);
ÕâÑùÐèÒª°üº¬blueZ Í·ÎļþÈçÏ£º
#include //BT ......