?? gsmutils.c
字號:
#ifdef _CVI_#include <utility.h>#endif#include "stdio.h"#include "string.h"#include "gsm.h"#include "gsmcmd.h"#include "gsmutils.h"#include "rspindparser.h"#include "uartx.h"#include "config.h"void logfile ( char * pfile, unsigned char * p, int size );int printg ( char * p );int uartWrite ( unsigned int uiId, unsigned char * puiBuf, unsigned int uiNum, void * pRsv);int echo_rsp ( unsigned char * pRSP ){#ifndef _CVI_ uartWrite ( 3, pRSP, strlen ( (char *)pRSP ) , (void *)0 ); //代剛 uartWrite ( 3, (unsigned char *)"\r\n", strlen ( "\r\n" ) , (void *)0 ); //代剛#endif return 0;}t_rsp_ind_parser s_parser = { 0, {0,} };t_gsm g_gsm = { STATUS_GSM_POWER_OFF, uart1_open, uart1_close, uart1_read, uart1_write, uart1_flush,#ifndef _DBG_ 0,#else echo_rsp,#endif 0, &s_parser, 0};void gsm_init ( void ){ gsm_open ( &g_gsm );}void gsm_check ( void ){#ifdef _CVI_// printf ( "gsm check\n" );#endif gsm_rsp_check ( &g_gsm );}int AT_sendDATA ( unsigned char * pdata, int nbytes, char c ){ if ( g_gsm.status != STATUS_GSM_WAIT_DATA ) return 0; g_gsm.write ( (unsigned char *)pdata, nbytes ); switch ( c ) { case 0x1A: // CTRL-Z g_gsm.status = STATUS_GSM_WAIT_ANSWER; break; case 0x1B: // escape g_gsm.status = STATUS_GSM_IDLE; break; } return 1;}int keep_silence ( char * pRsp ){ return 0;}int keep_feedback ( char * pRsp ){ return 1;}int AT_sendCMD ( unsigned char * pCMD, CmdRspHandler handler ){// g_gsm.flush (); gsm_rsp_check ( &g_gsm );#ifdef _DBG_ echo_rsp ( (unsigned char *)"\r\n====================\r\nAT_sendCMD:\r\n" ); echo_rsp ( pCMD );#endif if ( gsm_cmd_req ( &g_gsm, // GSM device 1, // set to output all results of commands to console // and let rsp handler to process indiction defaultly, // otherwis set next param handler to change this behavior handler, // No special handler (char *)pCMD ) ) return 1; return 0;}//static//int l = 0;#ifdef _DBG_staticchar str[ 64 ];#endifexternunsignedchar errors[];externint socket_close_ ( int nSocket );int AT_recvRSP ( unsigned char * pRSP, int nSize ){int error_number;int i = 0;#ifdef _DBG_ sprintf ( str, "\r\nAT_recvRSP: (%d) BGN\r\n", l++ ); echo_rsp ( (unsigned char *)str );#endif do {// console_sendRSP ( (unsigned char *)"\tCmd is not ended" );// event_check ();// console_check ();#ifdef _CVI_ printf ( "gsm check : not idle\n" ); printg ( "gsm check : not idle\n" );#else#ifdef _DBG_ echo_rsp ( (unsigned char *)"gsm check : not idle\n" );#endif#endif gsm_rsp_check ( &g_gsm );#ifdef _CVI_ Delay ( 1 );#else OSTimeDlyHMSM(0,0,1,0);#endif// gps_check (); if ( i++ > 30 ) gsm_cmd_req_del ( g_gsm.preq ); } while ( g_gsm.preq || (g_gsm.status != STATUS_GSM_IDLE) );// console_sendRSP ( (unsigned char *)str );// console_sendRSP ( g_gsm.prsp->RspData );// console_sendRSP ( (unsigned char *)"\tCmd is done" );#ifdef _DBG_ sprintf ( str, "\r\nAT_recvRSP: (%d) END!\r\n\r\n", --l ); echo_rsp ( (unsigned char *)str );#endif if ( strstr ( (char *)(g_gsm.prsp->RspData), "OK" ) != 0 ) return 1;// Errors control and/or recover if ( errors[ 0 ] ) { extern int mystrncmpnocase ( char * p, char * q, int n ); error_number = -1; if ( mystrncmpnocase ( (char *)errors, "READY", strlen ( "READY" ) ) == 0 ) { error_number = 0; } else if ( mystrncmpnocase ( (char *)errors, "ERROR: 300", strlen ( "ERROR: 300" ) ) == 0 ) { } else if ( mystrncmpnocase ( (char *)errors, "ERROR: 301", strlen ( "ERROR: 301" ) ) == 0 ) { error_number = 1; } else if ( mystrncmpnocase ( (char *)errors, "ERROR: 302", strlen ( "ERROR: 302" ) ) == 0 ) { } errors[ 0 ] = '\0'; switch ( error_number ) { case 0: gsm_init (); if ( AT_sendCMD ( (unsigned char *)"AT+AIPC=1", 0 ) ) { gsm_cmd_check ( &g_gsm ); do { gsm_rsp_check ( &g_gsm );#ifdef _CVI_ Delay ( 1 );#else OSTimeDlyHMSM(0,0,1,0);#endif if ( i++ > 30 ) gsm_cmd_req_del ( g_gsm.preq ); } while ( g_gsm.preq || (g_gsm.status != STATUS_GSM_IDLE) ); socket_close_ ( 1 ); } if ( AT_sendCMD ( (unsigned char *)"AT+AIPC=2", 0 ) ) { gsm_cmd_check ( &g_gsm ); do { gsm_rsp_check ( &g_gsm );#ifdef _CVI_ Delay ( 1 );#else OSTimeDlyHMSM(0,0,1,0);#endif if ( i++ > 30 ) gsm_cmd_req_del ( g_gsm.preq ); } while ( g_gsm.preq || (g_gsm.status != STATUS_GSM_IDLE) ); socket_close_ ( 2 ); } case 1: if ( AT_sendCMD ( (unsigned char *)"ATE0", 0 ) ) { gsm_cmd_check ( &g_gsm ); do { gsm_rsp_check ( &g_gsm );#ifdef _CVI_ Delay ( 1 );#else OSTimeDlyHMSM(0,0,1,0);#endif if ( i++ > 30 ) gsm_cmd_req_del ( g_gsm.preq ); } while ( g_gsm.preq || (g_gsm.status != STATUS_GSM_IDLE) ); } if ( AT_sendCMD ( (unsigned char *)"AT+AIPA=1", 0 ) ) { gsm_cmd_check ( &g_gsm ); do { gsm_rsp_check ( &g_gsm );#ifdef _CVI_ Delay ( 1 );#else OSTimeDlyHMSM(0,0,1,0);#endif if ( i++ > 30 ) gsm_cmd_req_del ( g_gsm.preq ); } while ( g_gsm.preq || (g_gsm.status != STATUS_GSM_IDLE) ); } break; } } return 0;}#define STR_LEN 256staticunsignedchar szStr[ STR_LEN + 1 ];staticint bHangup = 1;int isHangup ( void ){ return (bHangup == 1);}int Call_hang_up ( void ){ if (!AT_sendCMD ( (unsigned char *)"ATH", 0 ) ) return 0; if (!AT_recvRSP ( szStr, STR_LEN ) ) return 0; bHangup = 1; return 1;}int Call_dial ( char * phone ){ sprintf ( (char *)szStr, "ATD%s;", phone ); if (!AT_sendCMD ( szStr, 0 ) ) return 0; if (!AT_recvRSP ( szStr, STR_LEN ) ) return 0; bHangup = 0; return 1;}staticchar szSMS[ 180 ];int SMS_RspHandler ( char * pRsp ){int n; if ( *pRsp != '>' || *(pRsp + 1) != '\0' ) return 1; n = strlen ( szSMS ); if ( n > 0 ) AT_sendDATA ( (unsigned char *)szSMS, n, szSMS[ n - 1 ] ); // must to be 0x1A return 0;}int SMS_send ( char * phone, char * pTxt ){ if (!AT_sendCMD ( (unsigned char *)"ATE0", 0 ) ) return 0; if (!AT_recvRSP ( szStr, STR_LEN ) ) return 0; if (!AT_sendCMD ( (unsigned char *)"AT+CMGF=1", 0 ) ) return 0; if (!AT_recvRSP ( szStr, STR_LEN ) ) return 0; sprintf ( (char *)szStr, "AT+CMGS=\"%s\"\r\n", phone ); sprintf ( (char *)szSMS, "%s%c", pTxt, 0x1A ); if (!AT_sendCMD ( szStr, SMS_RspHandler ) ) return 0; if (!AT_recvRSP ( szStr, STR_LEN ) ) return 0; return 1;}#if 0int Call_setEmergency ( char * phone ){ strcpy ( (char *)phoneEmergency, phone ); return 1;}int Call_dialEmergency ( void ){ return Call_dial ( (char *)phoneEmergency );}int SMS_sendEmergency ( char * pTxt ){ return SMS_send ( (char *)phoneEmergency, pTxt );}#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -