已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
11嵌入式系统实验报告姓名:宁昭义组数:第5组 学号:152108061456 专业:信息与通信工程 日期:2015年12月20日综合实验(蓝牙电话网关系统综合开发案例)一、实验目的1熟练建立交叉编译环境。2了解蓝牙电话网关实现的原理。3通过编程实现通过建立的蓝牙链接实现对GSM模块功能的控制。二、实验内容前言在蓝牙电话网关系统中,嵌入式主机起到主控作用,Bluetooth模块则向N个蓝牙电话终端设备提供语音接入功能,GSM/GPRS模块提供语音呼出服务,使得任何一个蓝牙电话终端的呼叫请求都能够连接到公众语音网络,从而实现本系统内部的蓝牙电话终端与外部公众语音通信网络用户的通信。本开发案例构建了完整的蓝牙电话网关系统,系统组成结构如上图所示。嵌入式蓝牙电话网关是本系统的核心设备,主要使用了本产品中的ARM9嵌入式主机、Bluetooth和GSM/GPRS通信模块。本实验通过蓝牙建立无线连接,控制板载GSM模块拨打电话,示意图如下所示。具体任务1) 开发板1的蓝牙与开发板2的蓝牙建立语音和数据链路。2) 设置开发板1,使开发板1能控制GSM模块拨打电话。3) 开发板2通过建好的蓝牙链路控制开发板1的GSM模块拨打电话。实验设备与软件环境硬件:SemitARM9200开发板、PC机PIII800MHz,256MB以上、串口线(公母)1根、网线1根,音频线一对,7.5V电源1个,以上设备均需2套。软件:RedHat 9.0 Linux操作系统,SemitARM9200实验开发软件。三、实验步骤 分别将开发板1与开发板2的DEBUG COM与PC1和PC2的串口相连,开发板的网口与PC的网口相连。开发板接7.5V电源。启动开发板1与开发板2,并建立交叉编译环境。在开发板1上插入SIM卡,打开开发板1上GSM开关,按下GSM RESET键复位GSM,等到GSM MODE灯闪烁之后说明GSM模块已经启动成功。开发板1与开发板2分别输入sh /etc/scripts_arm.sh启动蓝牙输入hciconfig显示蓝牙地址在开发板1:输入cd /mnt/SEMIT_Project/Bluetooth_Cellphone/Bluetooth_Cellphone_Server进入文件夹输入./server开发板2:输入cd /mnt/SEMIT_Project/Bluetooth_Cellphone/Bluetooth_Cellphone_Client进入文件夹输入./client 00:06:6e:17:1c:30 开发板2将通过蓝牙与开发板1建立链接,屏幕上将出现please select the function字样代表已经可以控制开发板2的板载GSM模块拨打电话,按操作界面提示信息进行操作。四、附录(程序)Client端#ifdef HAVE_CONFIG_H#include #endif#define DEBUG#include #include #include #include #include #include #include #include #include #include #include #include #include bluetooth/bluetooth.h#include bluetooth/hci.h#include bluetooth/hci_lib.h#include bluetooth/l2cap.h#include bluetooth/sdp.h#include bluetooth/sdp_lib.h#include bluetooth/sco.h#include bluetooth/tcs.hvoid baswap(bdaddr_t *dst, const bdaddr_t *src) register unsigned char *d = (unsigned char *) dst; register const unsigned char *s = (const unsigned char *) src; register int i; for (i = 0; i 6; i+) di = s5-i;int ba2str(const bdaddr_t *ba, char *str) uint8_t b6; baswap(bdaddr_t *) b, ba); return sprintf(str, %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X, b0, b1, b2, b3, b4, b5);int str2ba(const char *str, bdaddr_t *ba) uint8_t b6; const char *ptr = str; int i; for (i = 0; i 6; i+) bi = (uint8_t) strtol(ptr, NULL, 16); if (i != 5 & !(ptr = strchr(ptr, :) ptr = :00:00:00:00:00; ptr+; baswap(ba, (bdaddr_t *) b); return 0;For debug#ifdef DEBUG void debug(char * str) printf(str); #else#define debug(str)#endif#define MAX_LEN 32VARIABLEint flag_process = 0;int flag_sco = 0;int flag_dial = 0;int flag_called = 0;int fd_tty;unsigned char command; unsigned int phonenum_len; unsigned char phonenumMAX_LEN+1 = 0; unsigned char msgType;unsigned char send_msg672;struct sockaddr_l2 addr = 0; /for l2cap socketint s;int status;char *dest;int bytes_read;unsigned char buf1024;struct sockaddr_sco sco_addr=0; /for sco linkint sco_s;int sco_status; void dt_add_sco(/*tcs_con_bt *tcs*/) debug(n =NOW DT CONNECT SCO TO GW!=n);/ allocate a socket sco_s=socket(PF_BLUETOOTH,SOCK_SEQPACKET,BTPROTO_SCO); if(sco_s0) perror(create socket error); exit(1); else debug(create sco socket done!n); / set the connection parameters sco_addr.sco_family=AF_BLUETOOTH; str2ba(dest,&sco_addr.sco_bdaddr); / connect to server debug(connectting.n); sco_status=connect(sco_s,(struct sockaddr *)&sco_addr,sizeof(sco_addr);if(sco_status=0) debug(connect sco success!n);/after_sco_menu(tcs); else debug(connet sco Fail!n);close(sco_s); exit(1);void tcs_dt_init(int argc,char*argv) char c,ch; char cmd_line50; int nwrite; if(argc = 2) dest = argv1; else printf(usage:clinet addrn);exit(1); /unsigned char* addr; debug(n|= get tcs_dt initialized =|n); debug(1) dt opening l2cap socket.n); /allocate socket printf(s = %dn,s); s = socket(PF_BLUETOOTH,SOCK_SEQPACKET,BTPROTO_L2CAP); printf(s = %dn,s); if(s 0) printf(create socket in dt failed.n); exit(1); else debug( dt open socket success!n); /bind socket to port 0x1001 of the first available bluetooth adaptor addr.l2_family = AF_BLUETOOTH; addr.l2_psm = htobs(0x1001); str2ba(dest,&addr.l2_bdaddr); /ba2str(&(loc_addr.l2_bdaddr), addr); /printf(local address is %cn,addr); debug(2) connecting to gateway.n); printf(status = %d n,status); status = connect(s,(struct sockaddr*)&addr, sizeof(addr); printf(status = %d n,status); if(status ); memset(cmd_line,0,50); scanf(%s,cmd_line); ch = cmd_line0; switch(ch) case 1:printf(please enter the number to calln);memset(phonenum,0,sizeof(phonenum) );scanf(%s,phonenum); phonenumstrlen(phonenum) = 0;phonenum_len = strlen(phonenum);memcpy(cmd_line+1,phonenum,phonenum_len);nwrite = write( s, cmd_line, sizeof(cmd_line) ); sleep(1); break;case 2: nwrite = write(s,2,1); sleep(1); close(sco_s); break; case 3: nwrite = write(s,3,1);printf(exiting .n); exit(0); default: break; int main(int argc, char*argv) memset(phonenum,0,sizeof(phonenum); debug(begining.now.n); /tcs_con_bt* tcs; /tcs-tcs_cur_state = STATE_NULL; tcs_dt_init(argc,argv); return 0;Server端#ifdef HAVE_CONFIG_H#include #endif#define DEBUG#include #include #include #include #include #include #include #include /* File control definitions */#include /* Error number definitions */#include /* POSIX terminal control definitions */#include /* Mluti-programming definitions*/#include bluetooth/bluetooth.h#include bluetooth/hci.h#include bluetooth/hci_lib.h#include bluetooth/l2cap.h#include bluetooth/sdp.h#include bluetooth/sdp_lib.h#include bluetooth/sco.h#include bluetooth/tcs.h#define MAX_LEN 32For debug#ifdef DEBUG void debug(char * str) printf(str); #else#define debug(str)#endifvoid baswap(bdaddr_t *dst, const bdaddr_t *src)register unsigned char *d = (unsigned char *) dst;register const unsigned char *s = (const unsigned char *) src;register int i;for (i = 0; i 6; i+)di = s5-i;int ba2str(const bdaddr_t *ba, char *str)uint8_t b6;baswap(bdaddr_t *) b, ba);return sprintf(str, %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X,b0, b1, b2, b3, b4, b5);struct termios options; pthread_t th;int thread_flag;tcs_states tcs_state;unsigned char option;unsigned char command; unsigned char phonenumMAX_LEN+1 = 0; unsigned int phonenum_len; / for proceed from scratchunsigned char send_cmd50;unsigned char msgType;unsigned char* send_msg;struct sockaddr_l2 loc_addr=0, rem_addr = 0; / for l2capint s;int result;int client;int bytes_read;char buf50;int opt = sizeof(rem_addr);char addr18;struct sockaddr_sco sco_loc_addr =0,sco_rem_addr=0; /for sco ;int sco_s;int sco_client;int sco_bytes_read;int sco_result;int sco_opt = sizeof(sco_rem_addr);extern int open_port(int fd, int comport);int fd;/*clean() : make a string empty*/void clean(char *s)int i=strlen(s);int j;for(j=0;ji;j+)*(s+j)=0;convert string to hexvoid string2hex(char *chr) /changed for form command_pic by ff 0720 int Length = strlen(chr); int i, n; char *tmp = chr; for ( i = 0; i Length; i+) *tmp -= 0x30;tmp+; int open_port(int fd, int comport) char *dev=/dev/ttyS0,/dev/ttyS1,/dev/ttyS2; long vdisable; switch(comport) case 1: fd=open(/dev/ttyS0,O_RDWR|O_NOCTTY|O_NDELAY); break; case 2:fd=open(/dev/ttyS1,O_RDWR|O_NOCTTY|O_NDELAY); break; case 3:fd=open(/dev/ttyS2,O_RDWR|O_NOCTTY|O_NDELAY); break; case 4:fd=open(/dev/ttyS3,O_RDWR|O_NOCTTY|O_NDELAY); break; case 5:fd=open(/dev/ttyS4,O_RDWR|O_NOCTTY|O_NDELAY); break; if(fd=-1) printf(open serial port %d failed!n,comport); return -1; if(fcntl(fd,F_SETFL,0)0) printf(fcntl failsn); else printf(fcntl=%dn,fcntl(fd,F_SETFL,0); if(isatty(STDIN_FILENO)=0) printf(standard input is not a terminal devicen); else printf(isatty successn); printf(fd-open=%dn,fd); return fd;int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop) struct termios newtio,oldtio; if(tcgetattr(fd,&oldtio)!=0) perror(Setup Serial 1); return -1; bzero(&newtio, sizeof(newtio); newtio.c_cflag|=CLOCAL|CREAD; newtio.c_cflag&=CSIZE;/setting stop bits switch(nBits) case 7: newtio.c_cflag|=CS7; break; case 8: newtio.c_cflag|=CS8; break; switch(nEvent) case O: newtio.c_cflag |= PARENB; newtio.c_cflag |= PARODD; newtio.c_iflag |= (INPCK|ISTRIP); break; case E: newtio.c_iflag|=(INPCK|ISTRIP); newtio.c_cflag|=PARENB; newtio.c_cflag&=PARODD; break; case N: newtio.c_cflag &= PARENB; break; switch(nSpeed)case 9600: cfsetispeed(&newtio,B9600); cfsetospeed(&newtio,B9600); break; case 19200: cfsetispeed(&newtio,B19200); cfsetospeed(&newtio,B19200); break; case 38400: cfsetispeed(&newtio,B38400); cfsetospeed(&newtio,B38400); break; case 57600: cfsetispeed(&newtio,B57600); cfsetospeed(&newtio,B57600); break;case 115200: cfsetispeed(&newtio,B115200); cfsetospeed(&newtio,B115200); break; /setting stop bits if(nStop=1) newtio.c_cflag&=CSTOPB; else newtio.c_cflag|=CSTOPB;/deng dai shi jian & min jieshou fu newtio.c_ccVTIME=0; newtio.c_ccVMIN=0;/handle byes time+out tcflush(fd,TCIFLUSH);/activate newtio if( (tcsetattr(fd,TCSANOW,&newtio)!=0) perror(com set errorn); return -1; printf(set donen); return 0;*gw_add_scovoid gw_add_sco(void) debug(n=gw add sco=n); /allocate socket debug(Creating sco socket.n); sco_s =socket(PF_BLUETOOTH,SOCK_SEQPACKET,BTPROTO_SCO); if(sco_s0) perror(create socket error); exit(1); else debug(creat sco socket success!n); sco_loc_addr.sco_family=AF_BLUETOOTH; sco_loc_addr.sco_bdaddr=*BDADDR_ANY; debug(Binding sco socket.n); sco_result=bind(sco_s,(struct sockaddr *)&sco_loc_addr, sizeof(sco_loc_addr); if(sco_result0) perror(bind socket error:); exit(1); else debug(binding sco socket success!n); debug(Listen. ); sco_result=listen(sco_s,1); if(sco_result0) printf(error:%dn:,result); perror(listen error:); exit(1); else debug(gw sco requested!n); debug(Accepting.n); sco_client= accept(sco_s,(struct sockaddr *)&sco_rem_addr,&sco_opt); if(sco_client0) perror(accept error); exit(1); else debug(gw accept sco OK!n); *EXPORT FUNCITON DEFINATION(FOR GATEWAY) void tcs_init(void) /unsigned char* addr; debug(n|= get tcs initialized =|n); debug(1) tcs init: opening l2cap socket.n); /allocate socket s = socket(PF_BLUETOOTH,SOCK_SEQPACKET,BTPROTO_L2CAP); if(s 0) printf(create socket in gateway failed.n); exit(1); else debug( open socket success!n); /bind socket to port 0x1001 of the first available bluetooth adaptor loc_addr.l2_family = AF_BLUETOOTH; loc_addr.l2_psm = htobs(0x1001); loc_addr.l2_bdaddr = *BDADDR_ANY; /ba2str(&loc_addr.l2_bdaddr,addr); ba2str(&(*BDADDR_ANY),addr); printf(local address is %sn,addr); debug(2) binding socket.n); result = bind(s,(struct sockaddr*)&loc_addr, sizeof(loc_addr); if(result 0) printf(bind socket error.n); close(s); exit(1); else debug( binding socket success!n);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年拆迁工程协调合同
- 金融市场不确定性指数构建研究
- 肝胆外科护理三基三严理论试题及答案
- 道路运输生产安全事故专项应急预案
- 2025年特种设备操作工职业技能等级鉴定考试试题及答案解析
- 2025年人工智能工程师编程能力考核试卷及答案
- 2025年应急预案培训考试题附答案
- 劳动争议仲裁效率提升的制度路径
- 2025年临床执业医师资格考试题库及答案
- 检验科生物安全培训试题(答案)
- 静脉留置针堵管预防策略与护理质量提升实践
- 早产儿生后黄金1小时管理
- 2025年大队委员笔试题库及答案
- 2025年网球理论基础知识考试题及答案
- 2025江西吉安市遂川县城控人力资源管理有限公司招聘34人笔试考试参考试题及答案解析
- 初中期中质量分析会校长讲话:正视短板精准发力共筑初中教学质量新高度
- 2025-2026学年度上学期一中高三11月月考物理试卷
- 苏炳添的精神
- DB11-T 1860-2021 电子信息产品碳足迹核算指南
- 苏教版五年级上学期科学知识点
- 配电网工程施工规划与实施方案
评论
0/150
提交评论