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

📄 isomodem_ppp.c

📁 modem数据通信源码
💻 C
字号:
#include "44b.H"
#include "EPT32.H"
#include "Nucleus.H"
#include "string.h"
#include "switch.h"    

#include "interdrive.h"
#include "common_exp.h"
#include "ISOModem_DRV.h"
#include "Modem_IODrv.h"
#include "Protocol_Drv.h"
#include "exports.h"
#include "IODrive.h"
#include "Regist.h"

#include "ISOModem.h"

extern EM_modem_STS    EG_modem_STS;

uchar	EI_ppp_Write(uint uiBufSize,char *pcBuf);
uchar   EI_ppp_Read(uchar *ch);
uchar EI_ppp_GetState( ET_EVENT_STRUCT *ptEventState );

uchar	EI_ppp_Write(uint uiBufSize,char *pcBuf)
{
    EA_ucWriteDeviceMs(EG_modem_STS.uarthandle,uiBufSize,10,pcBuf);
    return EM_SUCCESS;
}

uchar   EI_ppp_Read(uchar *ch)
{
    if(loop_read(EG_modem_STS.serial_recvbuf,(char *)ch,1)>0)
        return EM_SUCCESS;
    else
        return EM_ERROR;
}

void EI_ModemStartPpp(void)
{
    EA_ppp_ucCall();
}

uchar EA_MODEM_ucInitPpp(DevHandle hDevHandle)
{
    ET_PPP_DEVINTER tParam	;	
    ET_PPP_PWM_STRUCT tPwmEntry ;
    
    uprintf("API:%s\r\n",__FUNCTION__);
        
	if(EI_VerifyHandle_ppp(hDevHandle)!=EM_SUCCESS)	
		return EM_ERRHANDLE;		

    
    tParam.m_ptMbIcon = NULL;
    tParam.ucWriteBuf = EI_ppp_Write;
    tParam.ucReadByte = EI_ppp_Read;
    tParam.ptPwmStruct = &tPwmEntry;
    tParam.ptPwmStruct->vIntoPowerSave = NULL;
    tParam.ptPwmStruct->vOutOfPowerSave = NULL;    
    EA_ppp_vSetParam( &tParam ) ;
    
    if(EI_InitDial(EM_modem_33600BPS,EM_modem_NOPAR,EM_modem_8DBS)!=EM_SUCCESS)
        return EM_ERROR;
    
    EG_modem_STS.ppp_state = EM_PPP_INITED;
    EG_modem_STS.mode = EM_MODEM_MODE_PPP;
    return EM_SUCCESS;
}

uchar EA_MODEM_ucDialOffPpp(DevHandle hDevHandle)
{
    ET_EVENT_STRUCT	tEventState ;
    UNSIGNED time_start,time_cur;

	uprintf("API:%s\r\n",__FUNCTION__);
        
	if(EI_VerifyHandle_ppp(hDevHandle)!=EM_SUCCESS)	
		return EM_ERRHANDLE;
	
    if(EG_modem_STS.ppp_state!=EM_PPP_INITED)
        return EM_ppp_NOINIT;
    
    if(EG_modem_STS.online==EM_ONLINE_OFFLINE
       ||EG_modem_STS.online==EM_ONLINE_AT
       )
    {
        EA_ppp_ucDialOff(1);
    }
    else
    {
        if(EA_ppp_ucDialOff(0)==EM_SUCCESS)	
        {
            time_start = NU_Retrieve_Clock();
        	tEventState.ucEvent = PROTO_TERM_EVENT;	
        	while(1)
        	{		    
        	    EA_ppp_ucGetState(&tEventState);
        	    time_cur = NU_Retrieve_Clock();
        	    if(tEventState.ucRet == EM_SUCCESS
        	        ||time_cur>=time_start+EM_TIME_TICK_IN1S*3
        	        )
        	    {
        	        /*PPP dialoff success or time out */
        	        break;
        	    }
        	}
        }
    }
	
	return(EA_ucDialOff(hDevHandle));	
}

uchar EI_ppp_GetState( ET_EVENT_STRUCT *ptEventState )
{
    uchar ucRet = EM_ERROR;
    
    if( ptEventState == NULL )
		return EM_ERROR ;		
    
	switch( ptEventState->ucEvent )
	{
		case PROTO_CONNECT_EVENT:
		    if(EG_modem_STS.online==EM_ONLINE_DATA)
		    {
		        ucRet = EA_ppp_ucGetState( ptEventState);
		    }
		    else if(EG_modem_STS.online==EM_ONLINE_AT)
		    {
		        ucRet = EM_ERROR;
		    }
		    else if(EG_modem_STS.online==EM_ONLINE_OFFLINE)
		    {
		        ptEventState->ucRet = EM_ppp_DIALFAIL;
	            ucRet = EM_SUCCESS;
		    }
		    else
		    {
		        /* dialing */
		        ptEventState->ucRet = EM_ppp_Dialing;
	            ucRet = EM_SUCCESS;
		    }
		    break;
		case PROTO_TERM_EVENT:
		    if(EG_modem_STS.online==EM_ONLINE_DATA)
		    {
		        /* dialoff not success */
		        ptEventState->ucRet = EM_ERROR ;
                ucRet = EM_SUCCESS ;
            }
            else
            {
                ptEventState->ucRet = EM_SUCCESS ;
                ucRet = EM_SUCCESS ;
            }
			break ;
		default :
			ucRet = EA_ppp_ucGetState(ptEventState);
			break ;
	}
	return ucRet;
}

uchar EA_MODEM_ucGetState( DevHandle hDevHandle , void *pt )
{
	uchar           ucRet;
	uchar	        result ;
	ET_EVENT_STRUCT *ptEventState;
    
	ucRet = EI_VerifyHandle_ppp(hDevHandle);
	if(ucRet != EM_SUCCESS)
		return EM_ERRHANDLE;
	if(pt==NULL)
	    return EM_ERROR;
	if(EG_modem_STS.ppp_state!=1)
        return EM_ppp_NOINIT;
    
	ptEventState = (ET_EVENT_STRUCT *)pt;	

    result = EI_ppp_GetState(ptEventState);

	return result ;
}

uchar EA_MODEM_ucCallPpp(DevHandle hDevHandle, void *pt )
{
    ET_PPP_PARA *ptParam;
	char	dial_num[100];
	uchar   ucRet;
	
	uprintf("API:%s\r\n",__FUNCTION__);
    ucRet = EI_VerifyHandle_ppp(hDevHandle);
	if(ucRet != EM_SUCCESS)
		return EM_ERRHANDLE;
    if(!pt)
        return EM_ERROR;
        
	ptParam = (ET_PPP_PARA *)pt;
	memset(dial_num,0x00,sizeof(dial_num));
	if(EG_modem_STS.ppp_state!=EM_PPP_INITED)
        return EM_ppp_NOINIT;
        
    strcpy(dial_num,"ATD");
	if(ptParam->ucDtmfPulse == EM_modem_PLUSMODE )
		strcat(dial_num,"P");
	else
		strcat(dial_num,"T");
    strcat(dial_num,ptParam->acDialNum);
    strcat(dial_num,"\r");
    
    return(EA_ucDial(hDevHandle,(const char *)dial_num));
}

⌨️ 快捷键说明

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