?? gprs.c
字號:
#include <termios.h>#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <sys/signal.h>#include <pthread.h>#include "serial.h"
#include "gprs.h"
#define FALSE 0#define TRUE 1volatile int fd; //串口設(shè)備文件描述
////////////////////////////////////////////////////////////////////////// Test main()//
#if 1 #define ENDMINITERM 27 /* ESC to quit miniterm */volatile int STOP=FALSE;void child_handler(int s);void* keyboard(void * data);void* receive(void * data);void* send(void * data);int main(int argc,char** argv){ struct sigaction sa; int ok; pthread_t th_a, th_b, th_c; void * retval; char number[12]={'1','3','5','8','9','0','4','3','0','4','4','\0'}; GPRS_Init(); sa.sa_handler = child_handler; sa.sa_flags = 0; sigaction(SIGCHLD,&sa,NULL); /* handle dying child */ usleep(200000);// GPRS_MGS(number,"Hello! SDU !");//發(fā)短信// GPRS_CALL("13589043044"); //撥號// GPRS_HOLD(); //掛機 pthread_create(&th_a, NULL, keyboard, 0); pthread_create(&th_b, NULL, receive, 0); pthread_create(&th_c, NULL, send, 0);// 測試連續(xù)發(fā)"at\n"明令 pthread_join(th_a, &retval); pthread_join(th_b, &retval); pthread_join(th_c, &retval); close(fd); exit(0); }void child_handler(int s){ printf("stop!!!\n"); STOP=TRUE;}void* keyboard(void * data){ int c; c=getchar(); STOP=TRUE; return NULL;}void* receive(void * data){ int c; while (STOP==FALSE) { printf("%c",c); /* 向標準輸出打印字符 */ read(fd,&c,1); /* com port */ } return NULL; }void* send(void * data){ usleep(200000); while (STOP==FALSE) /* modem input handler */ { sleep(1); GPRS_Cmd("at\n"); } return NULL; }#endif//// Test main()////////////////////////////////////////////////////////////////////////
void GPRS_Init()
{ fd = OpenDev(COM1); set_speed(fd,115200); //設(shè)置開發(fā)平臺的串口2波特率 if (set_Parity(fd,8,1,'N') == FALSE) { printf("Set Parity Error\n"); exit (0); } usleep(200000);
GPRS_Cmd("AT\n");
//下面選擇通道1,使用帶麥克的耳機
GPRS_Cmd("AT+CHFA=1\n"); //設(shè)置通話通道為1
usleep(200000);
GPRS_Cmd("AT+CLVL=100\n");//設(shè)置受話器音量最大
usleep(200000);
GPRS_Cmd("AT+CMIC=1,10\n");//設(shè)置通道1的話筒增益
usleep(200000);
//下面選擇通道0,使用普通電話話柄
/*
GPRS_Cmd("AT+CHFA=0\n"); //設(shè)置通話通道為0
usleep(200000);
GPRS_Cmd("AT+CLVL=100\n");//設(shè)置受話器音量最大
usleep(200000);
GPRS_Cmd("AT+CMIC=0,10\n");//設(shè)置通道0的話筒增益
usleep(200000);
*/
}
void GPRS_HOLD()
{ GPRS_Cmd("AT\n");
usleep(200000);
GPRS_Cmd("ATH\n");//發(fā)送掛機命令ATH
}
void GPRS_ANSWER()
{ GPRS_Cmd("AT\n");
usleep(200000);
GPRS_Cmd("ATA\n");//發(fā)送接聽命令ATA
}
void GPRS_CALL(char *number)
{
GPRS_Cmd("AT\n");
usleep(200000);
GPRS_Cmd("ATD"); //發(fā)送撥打命令ATD
GPRS_Cmd(number);
GPRS_Cmd(";\n");
}
void GPRS_MGS(char *number,char *text) //發(fā)送短信
{ char chOverflag[1];
GPRS_Cmd("AT+CMGF=1\n"); //發(fā)送修改字符集命令
sleep(1);
GPRS_Cmd("AT+CMGS="); //發(fā)送發(fā)短信命令,具體格式見手冊
GPRS_Cmd(number);
GPRS_Cmd("\n");
usleep(100000);
GPRS_Cmd(text); chOverflag[0]=26; //“CTRL+Z"的ASCII碼 write(fd,&(chOverflag[0]),1);
}
void GPRS_Cmd(char *pt)//串口發(fā)送命令字符串
{ int i=0;
char ch[1];
while(1){
if(pt[i]=='\0')break;
if(pt[i]=='\n'){
ch[0]='\r';
write(fd,ch,1);//如果遇到"\n",額外發(fā)送"\r"
}
write(fd,&(pt[i]),1);
//if (ch[0]=='\r')LCD_printf("\n"); //液晶屏直接輸出,直接轉(zhuǎn)換'\r'為'\n'
//else LCD_printf("%c",ch[0]); //液晶屏輸出
i++;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -