新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于BlueZ协议栈的嵌入式系统无线通信实现

基于BlueZ协议栈的嵌入式系统无线通信实现

作者:时间:2010-07-29来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/151711.htm

(5) int connect(int sockfd, struct sockaddr * serv_addr,int addrlen)
这个函数是客户端的函数,完成向服务器端申请建立链接,与上面的绑定端口类似,参数my_addr代表的我们用的是一个结构体,表示要申请链接的服务器地址信息,它的 rc_family我们取为AF_BLUETOOTH,它的rc_bdaddr我们取可以和任意主机通信的 INADDR_ANY。
(6) ssize_t write(int fd,const void *buf,size_t nbytes) ssize_t read(int fd,void *buf,size_t nbyte)
这两个函数完成文件读写的功能,也完成服务器端和客户端通信功能。在完成服务器端与客户端通信功能时,把前面建立的通道看成是文件描述符,只要往文件描述符里面读写信息就可以了,与向文件读写过程一样。
以上是中用到的的主要库函数,它的客户端核心代码如下:
if((from_fd=open(argv[2],O_RDONLY))==-1)

while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))
{ /* 一个致命的错误发生了 */ if((bytes_read==-1)(errno!=EINTR)) break; else if(bytes_read>0) { ptr=buffer;
status=write(s,ptr,strlen(ptr)); memset(buffer,0,BUFFER_SIZE); }
}
它的服务器端核心代码如下: /*创建目标文件 */ memset(buf,0,BUFFER_SIZE); while(1) { bytes_read = read(client,buf,sizeof(buf));
if(bytes_read>0)
{ ptr=buf; while(bytes_write=write(to_fd,ptr,bytes_read)) { /*一个致命错误发生了 */
if((bytes_write==-1)(errno!=EINTR))break;/* 写完了所有读的字节 */ else if(bytes_write==bytes_read) break; /*只写了一部分 ,继续写 */ else if(bytes_write>0) { ptr+=bytes_write;
bytes_read-=bytes_write;
} } /*写的时候发生的致命错误 */ if(bytes_write==-1)break; /*这里读完后必须把 buffer清空*/ memset(buf,0,sizeof(buf));
} else{ exit(1); }
}
5、结束语
在目前,对于蓝牙栈的移植已经有非常深入的研究,但对蓝牙的源代码级的研究还不多。本文在 ARM9+Linux环境下构建了的蓝牙工作环境, 通过官方的蓝牙协议栈 提供的库函数编程了蓝牙的文件传输功能。利用和无线传输文件传输,符合数字化、网络化的发展趋势。本文作者创新点 :在源代码级别上借助蓝牙协议栈 BlueZ实现了文件的传输功能。

参考文献:
[1]卜奎昊, SAMSUNG S3C2410的研究,安徽大学硕士毕业论文 2008
[2]欧阳鑫,于红岩,吕杨,蓝牙协议栈 BlueZ的移植与开发. 微计算机信息,200 7
[3]梁军学,郁滨 . Linux 蓝牙协议栈的 USB 设备驱动. 计算机工程, 2008
[4]金纯,许光辰,孙睿 .蓝牙技术.〔M〕北京:电子工业出版社,2001
[5] www.bluez.org

好了,下面利用该平台提供的蓝牙函数库,来进行文件传输功能的开发。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭