void serial_rwMSG()
{
int n, j, nwrite, time;
char *q;
char reply[128];
char reply1[128];
unsigned char ATE0[]="ATE0\r";
unsigned char ATCMGF[]="AT+CMGF=1\r";
unsigned char ATCMGS[]="AT+CMGS=\"+8615108464710\"\r";
unsigned char Data[]="Hello !";
int END[] ={0x0d}; // 回车符
int end[]={0x1a}; // 发送符
q = reply1;
while (flag)
{
write(serial_fd, ATE0,strlen(ATE0)); // ATE0[]="ATE0\r"
sleep (2);
nwrite = write(serial_fd, ATE0,strlen(ATE0)); // ATE0[]="ATE0\r"
// ATE0发两次的原因,第一次发送会有回显(会返回ATEO\r\r\nOK\r\n),作用也就是让下次发送命令没有回显
printf("\nsend = %d, %s\n\n",nwrite,ATE0); // 第一次返回值不处理,第二次判断是否返回OK
check_ok ();
printf ("ATE0 out\n");
nwrite = write(serial_fd, ATCMGF,strlen(ATCMGF)); // AT+CMGF=1 //GSM
printf("\nsend = %d, %s\n\n",nwrite,ATCMGF);
check_ok ();
printf ("ATCMGF out\n");
sleep (2);
nwrite = write(serial_fd, ATCMGS,strlen(ATCMGS)); // AT+CMGS=\r
time = 2;
while(time) // 发送完 AT+CMGS=25\r 后第一次回复 /r/nOK/r/n 第二次回复 "/r/n>"加空格' '
{
bzero(reply, sizeof(reply));
if((n = read(serial_fd,reply,128))>0)
{
reply[n] = '\0';
printf("\nrecv:%d\n",n);
for (j = 0; j < n; j++)
{
if ((reply[j] != '\r') && (reply[j] != '\n')) //跳过TC35回复的\r\n
{
printf("%c",reply[j]);
*q++ = reply[j];
}
}
printf("\n");
for(j = 0; j < n; j++)
{
printf("%d\n", reply[j]);
}
printf("\n");
if (reply[2] == '>') // 判断是否出现 > 符
{
flag = 0;
break;
}
else if (strcmp (reply1, "ERROR") == 0) // 判断是否发送错误
{
flag = 1;
break;
}
else
{
flag = 1;
--time;
}
}
}
printf("\nsend = %d, %s\n\n",nwrite,ATCMGS);
nwrite = write(serial_fd, Data,strlen(Data)); // data
usleep (50000);
write(serial_fd, end,1);
printf("\nsend = %d, %s\n\n",nwrite,Data);
sleep (2);
}
close(serial_fd);
}
|