⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gsmutils.c

📁 C语言源代码及相关资料
💻 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) );//	sprintf ( str, "\tCmd is done; Run level = %03d", i );//	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 + -