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