- 论坛徽章:
- 0
|
蓝牙模块
A机 B机
驱动程序 驱动程序 (芯片不一样,驱动也不一样)
协议 协议(例:LZCAP)
基础性协议内核已经实现了
应用层协议都是由应用程序来实现的
蓝牙编程库bluez
应用程序包utils
包含hciconfig,hcitool等工具
1.移植bluez
2.利用bluez库,写程序
本机实验
1.下载bluez-libs-3.36.tar.gz和bluez-utils-2.25.tar.gz
2.编译bluez-libs生成库和头文件
tar zxvf bluez-libs-3.36.tar.gz
cd bluez-libs-3.36
./configure
make
make install
这样就会在/usr/local/lib/目录下生成相当的库文件
libbluetooth.la libbluetooth.so.2.11.2等
在/usr/local/include/bluetooth/目录下生成相当的头文件
3.编译蓝牙工具
tar zxvf bluez-utils-2.25.tar.gz
cd bluez-utils-2.25
./confgure
make
make install
这样就生成了hciattach,hciconfig,hcitool这三个工具
4.将蓝牙适配器插入USB接口上,在虚拟机顶底单击蓝牙图标,Connect,连接进虚拟机.
执行hciconfig
会显示该蓝牙适配器的相当信息
hci0: Type:USB
BD Address:00:1F:81:00:02:00 ACL MTU:339:6 SCO MTU:180:1
UP RUNNING
RX bytes:780 acl:0 sco:0 events:37 errors:0
TX bytes:411 acl:0 sco:0 commands:35 errors:0
5.扫描蓝牙设备
hcitool scan
结果
Scanning...
00:17:E4:36:F7:78
6.获取设备名
hcitool name 00:17:E4:36:F7:78
7.相当于ping
l2ping 00:17:E4:36:F7:78
检查通信是否正常
蓝牙编程
1.服务器端
#include
#include
#include
#include
#include //include bluetooth base library head file
#include //need L2CAP protocol support
int main(int argc,char **argv){
struct sockaddr_l2 loc_addr={0},rem_addr={0};
char buf[1024]={0};
int s,client,bytes_read,result;
int opt=sizeof(rem_addr);
//open a bluetooth socket
s=socket(PF_BLUETOOTH,SOCK_SEQPACKET,BTPROTO_L2CAP);
if(s0){
printf("received:%s\n",buf);
if(strcmp(buf,"bye")==0)
exit(1);
memset(buf,0,sizeof(buf));
}
}
close(client);
close(s);
return 0;
}
#include
#include
#include
#include
#include
#include
int main(int argc,char **argv){
struct sockaddr_l2 addr={0};
int s,status;
char *dst,*buf;
if(argc==2){
dst=argv[1];
}else{
printf("Usage:%s addr\n",argv[0]);
exit(1);
}
s=socket(PF_BLUETOOTH,SOCK_SEQPACKET,BTPROTO_L2CAP);
if(s
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/56374/showart_2110278.html |
|