ʵս linuxÀ¶ÑÀ±à³ÌÖ®(°Ë) hci ÐÒé Ó¦Óñà³ÌʵÏÖ
¶ÔÓÚhci²ãµÄ±à³Ì ÊÇÏ൱¸´Ô ¹¦ÄÜÒ²ÊÇÇ¿´óµÄ,½¨ÒéѧϰÕß È¥¶Ábluez-libÖеÄhciºÍsdp
ÕâÀï¼òÒª½éÉÜ ÎÒÔÚ¿ª·¢¹«Ë¾µÄÏîÄ¿ÖÐµÄ Ò»¸öСµÄ»ù´¡¶¯×÷. ¸Ã±à³ÌµÄ¹ý³Ì»ù±¾ÀíÇåÁËhciºÍsdpµÄÏνӺÍÓ¦ÓÃ.Ï£Íû¶ÔѧϰÕßÓаïÖú
˵Ã÷Óв»µ½Ö®´¦,Íû´ó¼Ò¶à¶àÑо¿,²»Òª¾ÖÏÞ,ÿ¸öÈËÓÐ×Ô¼ºµÄ·½Ê½,Ò²ÐíÄãµÄÔÚÂß¼Ëã·¨ÉϱÈÎҵĺÃ!!
//scanÊÇÒ»¸öÀûÓÃhci²ãÐÒé »ñµÃÔ¶³ÌÀ¶ÑÀÉ豸µÄÀ¶ÑÀµØÖ·ºÍÀ¶ÑÀêdzƵĺ¯Êý;
int scan()
{
inquiry_info *ii = NULL;
int max_rsp, num_rsp;
int dev_id, sock, len, flags;
int i;
char addr[19] = { 0 };
char name[248] = { 0 };
dev_id = hci_get_route(NULL);
printf("\nhci%d is scanning......\n",dev_id);
//dev_id = lc[scannum].name;
sock = hci_open_dev( dev_id );
if (dev_id < 0 || sock < 0) {
system("reboot");
perror("opening socket");
return 0;
}
bdaddr_t src;
bacpy(&src, BDADDR_ANY);
len = 8;
max_rsp = 255;
flags = IREQ_CACHE_FLUSH;
ii = (inquiry_info*)malloc(max_rsp * sizeof(inquiry_info));
num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, flags);
if( num_rsp < 0 ) perror("hci_inquiry");
for (i = 0; i < num_rsp; i++) {
ba2str(&(ii+i)->bdaddr, addr);
memset(name, 0, sizeof(name));
int c=0;
if (sdp_get_channel_opush(&src, &(ii+i)->bdaddr, &c))
//printf("\n%d\n",c);
if(c>0)addadr(addr,c); //´Ë´¦ÊÇÎÒÔÚ×öÏîÄ¿ÖÐ×öµÄÒ»¸öÓëÓ¦ÓóÌÐòÁ¬½ÓµÄ½Ó¿Úº¯Êý,¹¦ÄÜÊÇÍê³ÉÔ¶³ÌÀ¶ÑÀÉ豸µÄµØÖ·ºÍÎļþ´«ÊäͨµÀºÅÌí¼Óµ½
Ïà¹ØÎĵµ£º
1. HCI²ãÐÒé¸ÅÊö£º
HCIÌṩһÌ×ͳһµÄ·½·¨À´·ÃÎÊBluetoothµ×²ã¡£ÈçͼËùʾ£º
´ÓͼÉÏ¿ÉÒÔ¿´³ö£¬Host Controller Interface(HCI) ¾ÍÊÇÓÃÀ´¹µÍ¨HostºÍModule¡£Hostͨ³£¾ÍÊÇPC£¬ ModuleÔòÊÇÒÔ¸÷ÖÖÎïÀíÁ¬½ÓÐÎʽ£¨USB,serial,pc-cardµÈ£©Á¬½Óµ½PCÉϵÄbluetooth Dongle¡£
ÔÚHostÕâÒ»¶Ë£ºapplication,SDP,L2capµÈÐÒé ......
ÀýÒ»£º·¢ËÍSignaling Packet£º
Signaling CommandÊÇ2¸öBluetoothʵÌåÖ®¼äµÄL2CAP²ãÃüÁî´«Êä¡£ËùÒÔµÃSignaling CommandʹÓÃCID 0x0001.
¶à¸öCommand¿ÉÒÔÔÚÒ»¸öC-frame£¨control frame£©Öз¢ËÍ¡£
Èç¹ûÒªÖ±½Ó·¢ËÍSignaling Command.ÐèÒª½¨Á¢SOCK_RAWÀàÐ͵ÄL2CAPÁ¬½ÓSocket¡£ÕâÑù²ÅÓлú»á×Ô¼ºÌî³äCommand Code£¬Identi ......
ÎÒ²»Ì«Ï²»¶linuxÁË£¬ËäÈ»ÎÒÔÚËûÉÏÃæ¶Ï¶ÏÐøÐøµÄ»¨¹ýһЩʱ¼ä£¬ÏÖÔÚ»ØÍ·À´¿´£¬ËüÒ²ÈÃÎÒÀË·ÑÁ˺ܶàµÄʱ¼ä£¬linuxÂÒÆß°ËÔãµÄÅäÖã¬Èí¼þµÄȱ·¦ÁîÎҺܲ»ÊÊ´Ó£¬¶øÇÒËüÒ²²»ÄÜʹÎÒ°ÑÖ÷ÒªµÄ¾Àú¼¯ÖÐÔÚÕæÕý¸ÐÐËȤµÄµØ·½£¬¶ø²»ÊÇΪÁË“Õ÷·þ”linuxÕ´Õ´×Ôϲ£¬ÎÒ²»Ï²»¶ÕâÑùµÄlinux£¬ÕâÑùµÄlinuxÌ«³ÌÐòÔ±»¯ÁË¡£ÎÒΪʲôҪ¶ÁÄÇЩ ......
¹¦ÄÜÃèÊö£º
ÔÚÏûÏ¢¶ÓÁÐÉϽøÐÐÊÕ·¢ÏûÏ¢¡£ÎªÁË·¢ËÍÏûÏ¢£¬µ÷Óýø³Ì¶ÔÏûÏ¢¶ÓÁбØÐëÓÐдȨÄÜ¡£½ÓÊÕÏûϢʱ±ØÐëÓжÁȨÄÜ¡£
Ó÷¨£º
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
ssize_t msgrcv ......