📄 gsmcmd.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 + -