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

📄 gsmcmd.c

📁 C语言源代码及相关资料
💻 C
字号:
#ifdef	_CVI_#include <ansi_c.h>#endif#include <string.h>#include "gsm.h"#include "gsmcmd.h"int		printg ( char * p );int		echo_rsp ( unsigned char * pRSP );statict_cmd_req	s_req[] = {	{0, 0, 0, 0, {0, } },	{0, 0, 0, 0, {0, } },//	{0, 0, 0, 0, {0, } },//	{0, 0, 0, 0, {0, } },//	{0, 0, 0, 0, {0, } },};staticint			s_rd = 0, s_wt = 0, s_size = sizeof( s_req ) / sizeof( s_req[ 0 ] );t_cmd_req * gsm_cmd_req_get ( t_gsm * pgsm ){t_cmd_req *	p = 0;int			i = s_rd + 1;	if ( i >= s_size ) i = 0;	if (!s_req[ s_rd ].pgsm ) return 0;	if ( s_req[ s_rd ].pgsm != pgsm ) return 0;#ifdef	_CVI_//	printf ( "\r\n\ts_rd = %d\r\n\ts_wt = %d\r\n", s_rd, s_wt );#endif	p = &s_req[ s_rd ];	s_rd = i;#ifdef	_CVI_//	printf ( "\r\n\ts_rd = %d\r\n\ts_wt = %d\r\n", s_rd, s_wt );#endif	return p;}t_cmd_req * gsm_cmd_req_new ( t_gsm * pgsm ){t_cmd_req *	p = 0;int			i = s_wt + 1;	if ( i >= s_size ) i = 0;	if ( i == s_rd ) return 0;#ifdef	_CVI_//	printf ( "\r\n\ts_rd = %d\r\n\ts_wt = %d\r\n", s_rd, s_wt );#endif	if (!s_req[ s_wt ].pgsm ) p = &s_req[ s_wt ];	s_wt = i;#ifdef	_CVI_//	printf ( "\r\n\ts_rd = %d\r\n\ts_wt = %d\r\n", s_rd, s_wt );#endif	return p;}void	gsm_cmd_req_del ( t_cmd_req * preq ){t_gsm *	pgsm;int	i;	if (!preq ) return;#ifdef	_CVI_	printf ( "\r\nreq del\r\n" );	printg ( "\r\nreq del\r\n" );//	printf ( "\r\n\ts_rd = %d\r\n\ts_wt = %d\r\n", s_rd, s_wt );#else#ifdef	_DBG_	echo_rsp ( (unsigned char *)"\r\nreq del\r\n" );#endif#endif	for ( i = 0; i < s_size; i++ )	{		if ( preq != &s_req[ i ] ) continue;#ifdef	_CVI_//		if ( i != s_rd )	printf ( "\r\n\tdel = %d\r\n", i );#endif	//	if ( preq != preq->pgsm->preq );		pgsm = (t_gsm *)preq->pgsm;		if ( pgsm )		{			pgsm->preq         = 0;			pgsm->status       = STATUS_GSM_IDLE;		}		preq->pgsm         = 0;		preq->flag		   = 0;		preq->RspHandler   = 0;		preq->CmdLen       = 0;		preq->CmdData[ 0 ] = 0;		break;	}	while ( s_rd != s_wt )	{		if ( s_req[ s_rd ].pgsm != 0 ) break;		s_rd++;		if ( s_rd >= s_size ) s_rd = 0;	}#ifdef	_CVI_//	printf ( "\r\n\ts_rd = %d\r\n\ts_wt = %d\r\n", s_rd, s_wt );	printf ( "\r\nreq del done\r\n" );	printg ( "\r\nreq del done\r\n" );#else#ifdef	_DBG_	echo_rsp ( (unsigned char *)"\r\nreq del done\r\n" );#endif#endif}int		gsm_cmd_req ( void * pgsm, int flag, CmdRspHandler handler, char * pcmd ){t_cmd_req * preq = gsm_cmd_req_new ( (t_gsm *)pgsm );	if (!preq ) return 0;	preq->pgsm        = pgsm;	preq->flag		  = flag;	preq->RspHandler  = handler;	preq->CmdLen      = strlen ( pcmd );	strcpy ( (char *)preq->CmdData, (char *)pcmd );	return 1;}int		gsm_cmd_req_send ( t_cmd_req * preq ){t_gsm *	pgsm;	if ( !preq ) return 0;	pgsm = (t_gsm *)preq->pgsm;	if ( !pgsm ) return 0;	if ( pgsm->status != STATUS_GSM_IDLE ) return 0;#ifdef	_CVI_	printf ( "\r\nreq send\r\n" );	printg ( "\r\nreq send\r\n" );//	printf ( "\r\n\ts_rd = %d\r\n\ts_wt = %d\r\n", s_rd, s_wt );#else#ifdef	_DBG_	echo_rsp ( (unsigned char *)"\r\nreq send\r\n" );#endif#endif	pgsm->preq = preq;#ifdef	_CVI_	printf ( "pgsm write (%03d)=%s\r\n", preq->CmdLen, preq->CmdData );	printg ( "pgsm write =" );	printg ( preq->CmdData );	printg ( "\r\n" );#else#ifdef	_DBG_	echo_rsp ( (unsigned char *)"pgsm write =" );	echo_rsp ( (unsigned char *)preq->CmdData );	echo_rsp ( (unsigned char *)"\r\n" );#endif#endif	pgsm->write ( (unsigned char *)(preq->CmdData), preq->CmdLen );	pgsm->write ( (unsigned char *)"\r\n", 2 );	pgsm->status = STATUS_GSM_WAIT_ANSWER;#ifdef	_CVI_	printf ( "\r\nreq send done\r\n" );	printg ( "\r\nreq send done\r\n" );#else#ifdef	_DBG_	echo_rsp ( (unsigned char *)"\r\nreq send done\r\n" );#endif#endif	return 1;}int		gsm_cmd_rsp_handler ( t_cmd_req * preq, char * pstr ){#ifdef	_CVI_	printf ( "\r\ngsm_cmd_rsp_handler\r\n" );	printg ( "\r\ngsm_cmd_rsp_handler\r\n" );#else#ifdef	_DBG_	echo_rsp ( (unsigned char *)"\r\ngsm_cmd_rsp_handler\r\n" );#endif#endif	if (!preq ) return (1==1);					//	pass rsp to rsp ind handler#ifdef	_CVI_	printf ( "\r\nthere is a cmd running\r\n" );	printg ( "\r\nthere is a cmd running\r\n" );#else#ifdef	_DBG_	echo_rsp ( (unsigned char *)"\r\nthere is a cmd running\r\n" );#endif#endif	if (!preq->RspHandler ) return preq->flag;	//	api call's default#ifdef	_CVI_	printf ( "\r\nthere is a cmd rsp handler\r\n" );	printg ( "\r\nthere is a cmd rsp handler\r\n" );#else#ifdef	_DBG_	echo_rsp ( (unsigned char *)"\r\nthere is a cmd rsp handler\r\n" );#endif#endif	return preq->RspHandler ( pstr );			//	depend on user's cmd rsp handler	//	true send this rsp to corresponding port	//	otherwise, eat up this rsp...}void	gsm_cmd_check ( void * pgsm ){t_cmd_req * preq;#if 0	if (!pgsm ) return;	preq = ((t_gsm *)pgsm)->preq;	if ( preq ) return;#endif		preq = gsm_cmd_req_get ( (t_gsm *)pgsm );	if (!preq ) return;	gsm_cmd_req_send ( preq );}

⌨️ 快捷键说明

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