蓝牙电话网关系统综合开发-嵌入式实验报告.doc

上传人:wux****ua 文档编号:9064371 上传时间:2020-04-02 格式:DOC 页数:11 大小:298KB
返回 下载 相关 举报
蓝牙电话网关系统综合开发-嵌入式实验报告.doc_第1页
第1页 / 共11页
蓝牙电话网关系统综合开发-嵌入式实验报告.doc_第2页
第2页 / 共11页
蓝牙电话网关系统综合开发-嵌入式实验报告.doc_第3页
第3页 / 共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); printf(3) listening.n); result = listen(s,1); if(result 0) debug(listening error.n); exit(1); else debug( requested!n); debug(|=initialize end =|nn); gw_add_sco();void gw_process() char c;/ debuggateway proceeding.nn); printf(1)accepting.n); client = accept(s,(struct sockaddr*)&rem_addr,&opt); if(client 0) switch( buf0 ) case 1: / gw_add_sco(); printf(received call commandsn); printf(phone num is %s , len is %dn, buf+1, strlen(buf+1) ); memset(send_cmd,0,sizeof(send_cmd); memcpy(send_cmd,ATD,3); memcpy(send_cmd+3,buf+1,strlen(buf+1) ); send_cmd strlen(send_cmd) = ; ; send_cmd strlen(send_cmd) = 0x0D ; write( fd, send_cmd, sizeof(send_cmd) ); printf(calling GSMn); break; case 2: /gw_close_sco(); printf(received release commandn);memset(send_cmd,0,sizeof(send_cmd); memcpy(send_cmd, ATH,3); send_cmdstrlen(send_cmd) = 0x0D; write( fd, send_cmd, sizeof(send_cmd) );printf(call releasedn); break; case 3:exit(0); default:break; close(client); close(s); int main() char c=0x41; char tmp_buf25; pid_t pid; debug(begining.now.n); tcs_state = STATE_NULL; fd=open_port(fd,3); set_opt(fd,115200, 8, N, 1); tcs_init(); gw_process(); return 0;
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!