#include "bthcomm.h"
#include "W77E58.H"
#include "string.h"
#include "ctype.h"
char code bthat[] = {"at\r"};
char code bthate[] = {"ate\r"};
char code bthinq[] = {"at**bdinq\r"};
char code bthlist[] = {"at**bdlist\r"};
char code bthlink[] = {"atdd"};
char code bthserv[] = {",s1\r"};
char code strplus[] = {"+++"};
char code strok[] = {"OK"};
char code stratok[] = {"atOK"};
char code strconn[] = {"CONNECT"};
char code strinqok[]= {"d1:BD:"};
char code strbd[] = {"BD:"};
char code bthdisconn[] = {"ath\r"};
char code bthinqact[] = {"inquiryactiveOK"};
char code bthinqemp[] = {"listemptyOK"};
char code bthresetc[] = {"at**reset\r"};
////////////////////////////////////////////////////
/*void WatchDog(void) interrupt 12
{
if(WDIF)
{
TA=0xAA;
TA=0x55;
WDIF = 0;
}
TA=0xAA;
TA=0x55;
RWT=1;//clear the watchdog flag
}*/
//////////////////////////////////////////////////////
void Time1(void) interrupt 1 using 1
{
time++;
if(time==15)
{
// onesecond=~onesecond;
second++;
time=0;
second1++;
}
if(second==60)
{
second=0;
minute++;
}
minute=minute%60;
}
///////////////////////////////////////////////////
void series0_send_char(char *p)
{
char c;
c=*p;
while(1)
if(TI==1) break;
TI=0;
SBUF = c;
}
////////////////////////////////////////////////////
/*void series1_send_char(char *p)
{
char c;
c=*p;
while(1)
if(TI1==1) break;
TI1=0;
SBUF1 = c;
}*/
/////////////////////////////////////////////////
void series0_send_array(char * pc)
{
while(1)
{
series0_send_char(pc);
WD_Reset
pc++;
if(*pc=='\0')
break;
}
}
/////////////////////////////////////////////////
/*void series1_send_array(char * pc)
{
while(1)
{
series1_send_char(pc);
pc++;
if(*pc=='\0')
break;
}
}*/
////////////////////////////////////////////////
char series0_recv_char()
{
char c;
second = 0;
while(1)
{
if(RI==1) break;
WD_Reset
if(second>=3) return -1;
}
RI=0;
c = SBUF;
return c;
}
//////////////////////////////////////////////////
void series0_recv_array()
{
char c,t,t1,Count;
bit s,s0,s1,s2,s3,s5,s6;
s = 1;
s0 = 0;
s1 = 0;
s2 = 0;
s3 = 0;
s5 = 0;
s6 = 0;
CommCnt = 0;
Count = 0;
while(1)
{
c=series0_recv_char();
if(c==-1)
break;
//
if(c=='n')
t=Count;
if((c=='a')&&((t+1)==Count))
s0 = 1;
if((c=='m')&&((t+2)==Count))
s1 = 1;
if((c=='e')&&((t+3)==Count))
s2 = 1;
if((c==':')&&((t+4)==Count))
s3 = 1;
if(s0&s1&s2&s3)
{
s = 0;
s0 = 0;
s1 = 0;
s2 = 0;
s3 = 0;
}
//
if(c=='d')
{
t1=Count;
s6=1;
s =1;
}
if((c==':')&&s6)
{
if((t1+2)==Count)
s6= 0;
else s = 0;
}
if(c>0x20&&s)
{
RecvBuf[CommCnt]=c;
CommCnt++;
}
Count++;
}
}
///////////////////////////////////////////////
/*char series1_recv_char()
{
char c;
second = 0;
while(1)
{
if(RI1==1) break;
if(second>=3) return -1;
}
RI1=0;
c = SBUF1;
return c;
}
///////////////////////////////////////////////
void series1_recv_array()
{
char c;
CommCnt1 = 0;
while(1)
{
c = series1_recv_char();
if(Recving1==0)
{
if(c==0x02)//起始
{
RecvBuf1[0]=0x02;
CommCnt1 =1;
Recving1 =1;
}
else
{
Recving1=0;
CommCnt1=0;
}
}
else
{
RecvBuf1[CommCnt1] = c;
if(c==0x03)
{
ComLen1 =CommCnt1+2;
}
if(ComLen1 == CommCnt1)
{
Recving1=0;
CommCnt1=0;
RecvOk1 =1;
return;
}
CommCnt1++;
}
}
}*/
///////////////////////////////////////////////
char * strnfind(char * p1, char * p2, char n)
{
char *p;
p = strchr(p1, *p2);
if(p)
{
if(strncmp(p, p2, n) == 0)
return p;
else
return NULL;
}
else
return NULL;
}
//////////////////////////////////////////////////
char BthDevInq(void)
{
char *pa, *pc, *pt ;
char n,m;
TI = 1;
pa = bthat;
second1 = 0;
do
{
series0_send_array(pa);
series0_recv_array();
pc = RecvBuf;
pt = strok;
n = strncmp(pc,pt,2);
pt = stratok;
m = strncmp(pc,pt,4);
WD_Reset
if(second1>50) return 1; //1: at指令出错
}while(n!=0&&m!=0);
second1 = 0;
pa = bthate;
do
{
series0_send_array(pa);
series0_recv_array();
pc = RecvBuf;
pt = strok;
n = strncmp(pc,pt,2);
WD_Reset
if(second1>50) return 2; //2:ate指令出错
}while(n!=0);
second1 = 0;
pa = bthinq;
do
{
series0_send_array(pa);
series0_recv_array();
pc = RecvBuf;
pt = strok;
n = strncmp(pc,pt,2);
WD_Reset
if(second1>50) return 3; //inqury 指令出错
}while(n!=0);
pa = bthlist;
second1 = 0;
while(1)
{
series0_send_array(pa);
series0_recv_array();
pc = bthinqact;
pt = RecvBuf;
n = strncmp(pt,pc,15);
WD_Reset
if(n==0) continue;
pc = bthinqemp;
m = strncmp(pc,pt,11);
WD_Reset
if(m==0) return 6; //6:在天线范围内无蓝牙设备
pc = strinqok;
n = strncmp(pc,pt,6);
if(n==0)
{
//将查询到的所有蓝牙设备记录到结构体BthDevice中
pc = strbd;
DeviceCoun = 0;
do
{
pt = strnfind(pt, pc, 3);
if(pt!=NULL)
{
BD[DeviceCoun].DeviceNum[0] = *(pt-3);
BD[DeviceCoun].DeviceNum[1] = *(pt-2);
for(m=0;m<12;m++)
BD[DeviceCoun].DeviceAdd[m] = *(pt+3+m);
DeviceCoun++;
pt +=4;
}
}while(pt!=NULL);
return 0;
}
WD_Reset
if(second1>60) return 4; //4:list指令出错
}
}
///////////////////////////////////////////////////////////////////////////
/*void serier1_send_NoRep(void)
{
SendBuf1[0] = 2;
SendBuf1[1] = 0x33;
SendBuf1[2] = 'N';
SendBuf1[3] = 3;
SendBuf1[4] = 0x38;
SendBuf1[5] = 0x34;
SendBuf1[6] = 0x00;
SBUF1 = SendBuf1;
}*/
///////////////////////////////////////////////////////////////////////////
bit LinkBth(char i)
{
char *pa, *pc, *pt;
char n;
pa = bthlink;
series0_send_array(pa);
pa = &(BD[i].DeviceNum[1]);
series0_send_char(pa);
pa = bthserv;
series0_send_array(pa);
WD_Reset
series0_recv_array();
pc = strconn;
pt = RecvBuf;
n = strncmp(pt,pc,8);
if(n==0) return 1; //0:蓝牙设备连接正常
else return 0; //5:蓝牙设备连接异常
}
/////////////////////////////////////////////////////////////
bit Addrmatch(char n)
{
char i,j;
for(i=0;i<10;i++)
{
for(j=0;j<12;j++)
if(BD[n].DeviceAdd[j]!=PDAMACAdd[i][j])
break;
if(j==12) return 1;
}
if(i==10) return 0;
}
///////////////////////////////////////////////////
void BthDisconnect(void)
{
char *pa;
second = 0;
while(1)
if(second>=2) break;
WD_Reset
pa = strplus;
series0_send_array(pa);
series0_recv_array();
WD_Reset
second = 0;
while(1)
if(second>=2) break;
WD_Reset
pa = bthdisconn;
series0_send_array(pa);
series0_recv_array();
}
///////////////////////////////////////////////////
void BthReset(void)
{
char *pa;
pa = bthresetc;
series0_send_array(pa);
series0_recv_array();
}
////////////////////////////////////////////////////
/*bit Bthlinking()
{
char *pa,*pc,*pt;
char n;
pa = bthat;
for(n=0;n<3;n++)
{
series0_send_array(pa);
series0_recv_array();
}
pc = strok;
pt = RecvBuf;
n = strncmp(pt,pc,2);
if(n==0) return 0; //0:蓝牙设备处于非透明数
评论22
最新资源