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

📄 gsm.c

📁 C语言源代码及相关资料
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include "gsm.h"#include "gsmcmd.h"void	logfile ( char * pfile, unsigned char * p, int size );int		printg ( char * p );int		gsm_get_status ( t_gsm * pgsm ){	return pgsm->status;}int		gsm_set_status ( t_gsm * pgsm, int status ){	return (pgsm->status = status);}void	gsm_power_control ( t_gsm * pgsm, int onoff ){	if ( onoff == PWR_ON )	{		pgsm->status = STATUS_GSM_IDLE;	}	else	{		pgsm->status = STATUS_GSM_POWER_OFF;	}}void	gsm_open ( t_gsm * pgsm ){	pgsm->prsp->RspLen = 0;	pgsm->preq = 0;	pgsm->open ( 115200, 1, 8, 0, 1 );	gsm_power_control ( pgsm, PWR_ON );}void	gsm_close ( t_gsm * pgsm ){	gsm_power_control ( pgsm, PWR_OFF );	pgsm->close ();}int		gsm2mcu ( t_gsm * pgsm, unsigned char c );void	gsm_rsp_check ( t_gsm * pgsm ){unsigned char	c[ 16 + 1 ];//int	i, n;	if ( pgsm->status == STATUS_GSM_POWER_OFF ) return;	gsm_cmd_check ( pgsm );	while ( pgsm->read ( c , 1 ) > 0 )	{		if ( gsm2mcu ( pgsm, c[ 0 ] ) ) break;	}#if	0	n = pgsm->read ( c, 16 );	for ( i = 0; i < n; i++ )		gsm2mcu ( pgsm, c[ i ] );#endif}unsignedchar	errors[ 32 ];void	socket_ind_check ( void );void	error_handler ( unsigned char * prsp);int		gsm2mcu ( t_gsm * pgsm, unsigned char c ){t_cmd_req *			preq = (t_cmd_req *)       pgsm->preq;t_rsp_ind_parser *	prsp = (t_rsp_ind_parser *)pgsm->prsp;int					ret;	ret = 0;	if ( 		c == '+'  ||		c == '\r' ||		c == '\n' )	{		if ( prsp->RspLen >= RSP_IND_LEN )		{		//	notice "rsp buffer is overrun!"			prsp->RspLen = RSP_IND_LEN;			prsp->RspData[ prsp->RspLen ] = '\0';		}		if ( prsp->RspLen > 0 )		{			prsp->RspData[ prsp->RspLen ] = '\0';			//	without \r\n in tail		//	process gsm response string#ifdef _CVI_			printf ( "\nRSP recived (%d):\n%s\n", prsp->RspLen, prsp->RspData );			printg ( "\nRSP recived :\n" );			printg ( prsp->RspData );			printg ( "\n" );#else			if ( pgsm->echo_rsp ) pgsm->echo_rsp ( (unsigned char *)"\r\nRSP recived :\r\n" );			if ( pgsm->echo_rsp ) pgsm->echo_rsp ( prsp->RspData );			if ( pgsm->echo_rsp ) pgsm->echo_rsp ( (unsigned char *)"\r\n\r\n" );#endif			if ( gsm_cmd_rsp_handler ( preq, (char *)prsp->RspData )			&&   rsp_ind_handler ( prsp ) )			{				if ( pgsm->echo_rsp ) pgsm->echo_rsp ( prsp->RspData );			}			errors[ 0 ] = '\0';			if ( strstr ( (char *)prsp->RspData, "Ready" )			||   strstr ( (char *)prsp->RspData, "READY" )			||   strstr ( (char *)prsp->RspData, "OK" )			||   strstr ( (char *)prsp->RspData, "ERROR" ) )			{				gsm_cmd_req_del ( preq );				ret = 1;				strcpy ( (char *)errors, (char *)prsp->RspData );			}			prsp->RspLen = 0;		}		if ( c == '+' ) prsp->RspData[ prsp->RspLen++ ] = c;//		if ( errors[ 0 ] ) error_handler ( errors );//		socket_ind_check ();	}	else	{		if ( prsp->RspLen >= RSP_IND_LEN )		{		//	notice "rsp buffer is overrun!"			prsp->RspLen = RSP_IND_LEN;			prsp->RspData[ prsp->RspLen ] = '\0';		}		else			prsp->RspData[ prsp->RspLen++ ] = c;		if ( c == '>' && prsp->RspLen == 1 )		{			if ( pgsm->status == STATUS_GSM_WAIT_ANSWER )			{				prsp->RspData[ prsp->RspLen ] = '\0';			//	without \r\n in tail				pgsm->status = STATUS_GSM_WAIT_DATA;				if ( gsm_cmd_rsp_handler ( preq, (char *)prsp->RspData )				&&   rsp_ind_handler ( prsp ) )					if ( pgsm->echo ) pgsm->echo ( c );				prsp->RspLen = 0;			}		}	}	return ret;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -