11. Uso de la red M601

1 API de red

1.1 Uso

El proceso de programación del contexto GPRS PDP es el siguiente:
Paso 1: Registre la función de devolución de llamada PDP. Llame a la función ZYF_GprsRegister para registrar la función de devolución de llamada de GPRS.
Paso 2: establecer el contexto de PDP. Llame a la función ZYF_GprsConfig para configurar el contexto de GPRS PDP, incluido el nombre APN, el nombre de usuario y la contraseña.
Paso 3: activar PDP. Llame a la función ZYF_GprsActivate para activar el contexto GPRS PDP. El resultado de la activación suele tener un mensaje de notificación en la función de devolución de llamada Callback_GPRS_Actived, y también se puede consultar de forma sincrónica. La activación máxima de PDP es de aproximadamente 180 segundos.
Paso 4: Verifique si el PDP se ha activado correctamente. Llame a ZYF_GprsGetStatus para consultar el estado de activación de PDP.
Paso 5: Obtenga la dirección IP local. Llame a ZYF_GprsGetLocalIPAddress para obtener la dirección IP local. GPRS_ACTIVATED significa que la activación se realizó correctamente.
Paso 6: desactivación de PDP. Llame a ZYF_GprsDeactivate para cerrar el contexto PDP de GPRS. El resultado de la desactivación generalmente tiene un mensaje de notificación en la función de devolución de llamada CallBack_GPRS_Deactived, y también se puede consultar de forma sincrónica. El tiempo máximo de desactivación de GPRS es de unos 90 segundos.
Paso 7: compruebe si el PDP se ha activado correctamente. Llame a ZYF_GprsGetStatus para consultar el estado de activación de PDP. GPRS_DEACTIVATED indica una desactivación exitosa.

1.2 funciones API

1.2.1 ZYF_GprsRegister
Esta función se utiliza para registrar la función
de devolución de llamada del mensaje GPRS · Prototipo de función
int32_t ZYF_GprsRegister (uint8_t contextId, ZYF_PdpCtxCb_t * callback_func);
· Parámetro
contextId: [entrada] contexto PDP o 1, se puede configurar en 0.
callback_func: [salida] apunta a la interfaz de la función de devolución de llamada GPRS, utilizada para notificar los resultados de activación y desactivación de GPRS

· Valor de retorno
GPRS_PDP_SUCCESS: exitoso
GPRS_PDP_INVAL: parámetro inválido
GPRS_PDP_ALREADY: ya registrado

1.2.2 ZYF_PdpActiveCallback
Esta función es la función de devolución de llamada del resultado de activación de PDP
· Prototipo de función
void (* ZYF_PdpActiveCallback) (uint8_t contextId, int32_t errCode);
· Parámetro
contextId: PDP context ID, que es el mismo que el utilizado para llamar a ZYF_Gprs O 1
errCode: resultado de la activación de GPRS, GPRS_PDP_SUCCESS significa que la activación es exitosa, de lo contrario, es un error.
· Valor de retorno
NINGUNO


1.2.3 ZYF_PdpDeactiveCallback
Esta función es la función de devolución de llamada del resultado de desactivación de PDP
· Prototipo de función
void (* ZYF_PdpDeactiveCallback) (uint8_t contextId, int32_t errCode);
· Parámetro
contextId: PDP context ID, que es el mismo que el utilizado para llamar a ZYctivate_GprsActivate_Gp 0 o 1
errCode: resultado de desactivación de GPRS.
· Valor de retorno
NINGUNO

1.2.4 ZYF_GprsConfig
Esta función se utiliza para configurar los parámetros de APN. Los parámetros de APN incluyen el nombre de APN, la contraseña y el método de autorización (PAP / CHAP)

· Función prototipo
int32_t ZYF_GprsConfig (uint8_t la ContextID, ZYF_PdpCfg_t * CFG);
typedef struct { uint8_t apnName [MAX_GPRS_APN_LEN]; uint8_t apnUserId [MAX_GPRS_USER_NAME_LEN]; uint8_t apnPasswd [MAX_GPRS_PASSWORD_LEN]; uint8_t PdpType; uint8_t authType; PAP o CHAP // void * la Reserved1; // Qos void * Reserved2; // } ZYF_PdpCfg_t; · Parámetro contextId: ID de contexto PDP, que es el mismo que el utilizado para llamar a ZYF_GprsActivate, se puede configurar en 0 o 1 cfg: puntero de estructura de parámetros APN apnName: nombre APN apnUserId: nombre de usuario apnPasswd: contraseña authtype: método de autorización PAP o CHAP · Valor de retorno GPRS_PDP_SUCCESS: éxito GPRS_PDP_ERROR: error de parámetro

















1.2.5
La función de interfaz ZYF_GprsActivate se utiliza para activar un contexto PDP El proceso de activación lleva mucho tiempo, hasta unos 150 segundos, dependiendo de la situación actual de la red. Habrá un mensaje de notificación en la función de devolución de llamada ZYF_PdpActiveCallback para activación o falla.
· Prototipo de función
int32_t ZYF_GprsActivate (uint8_t contextId);
· Parámetro
contextId: ID de contexto PDP, que es el mismo que el utilizado para llamar a ZYF_GprsActivate, se puede configurar en 0 o 1.
· Valor de retorno
GPRS_PDP_SUCCESS: éxito
GPRS activado
siendo_PDP_ALREADY GPRS activado : fracaso

1.2.6 ZYF_GprsGetStatus
Esta función se utiliza para consultar el estado
de activación del PDP · Prototipo de función
int32_t ZYF_GprsGetStatus (uint8_t contextId, int32_t * pdp_status);
· Parámetro
contextId: PDP context ID, que es el mismo que el utilizado para llamar a ZYF o 1Gprs set to ZYF
pdp_status: GPRS_ACTIVATED significa activado, GPRS_DEACTIVATED significa desactivado
· Valor de retorno
GPRS_PDP_SUCCESS: éxito
GPRS_PDP_ERROR: error, GPRS no registrado y parámetros APN configurados, etc.

1.2.7 ZYF_GprsDeactivatePDP
Esta función se utiliza para desactivar un contexto PDP El proceso de desactivación tarda mucho tiempo, hasta unos 90 segundos, dependiendo de la situación actual de la red. Habrá un mensaje de notificación en la función de devolución de llamada ZYF_PdpDeactiveCallback para la desactivación exitosa o fallida.
* Función de prototipo
int32_t ZYF_GprsGetStatus (uint8_t ContextID, int32_t * pdp_status);
· parámetros
ContextID: Identificación contexto PDP, con llamadas ZYF_GprsActivate utilizan para el mismo, se puede fijar en 0 o 1
pdp_status: GPRS_ACTIVATED representar activado, GPRS_DEACTIVATED dijo que había desactivado
· Valor de retorno
PRS_PDP_SUCCESS: éxito
GPRS_PDP_ERROR: parámetro no válido
GPRS_PDP_ERROR: fallo de activación

1.2.8 ZYF_GprsGetLocalIPAddress
Esta función se utiliza para consultar la dirección local

· Prototipo de función
int32_t ZYF_GprsGetLocalIPAddress (uint8_t contextId, uint8_t * ipAddr);
· Parámetro
contextId: ID de contexto PDP, que es el mismo que el utilizado para llamar a ZYF_GprsActivate, se puede configurar en 0 o 1
ipAddr: direcciones IP de tipo local IPv4 Puntero
· Valor de retorno
GPRS_PDP_SUCCESS:
Correcto GPRS_PDP_ERROR: Error

2 Introducción a las rutinas de red

Este capítulo presenta principalmente cómo usar app_network.c en SDK.
Método de compilación:. \ Examples \ build \ corresponde al archivo .bat haciendo doble clic para ejecutarlo o abriéndolo para compilar.
Archivo generado:. \ Out \ directorio correspondiente \ hex \ M601_example _ **. Pac

En la rutina, primero envíe comandos AT para configurar los parámetros básicos de la conexión de red a través de ZYF_RIL_NetworkInit (), y luego configure los parámetros GPRS a través de ZYF_NetworkActiveReq () en ZYF_NetworkThread (). Algunas funciones que deben usarse durante el registro GPRS se usan en ZYF_NetworkActiveReq (). Para obtener más detalles, consulte la sección de introducción de la API anterior.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "ril_network.h"
#include "zyf_error.h"
#include "zyf_trace.h"
#include "zyf_gprs.h"
#include "zyf_thread.h"
#include "zyf_atclient.h"
#include "zyf_system.h"
#include "app_network.h"


/* network */
static ZYF_NwStat_t s_tNwState;

extern void ZYF_PdpActiveCnf(uint8_t contextId, int32_t errCode);
extern void ZYF_PdpDeactiveCnf(uint8_t contextId, int32_t errCode);

static ZYF_PdpCtxCb_t s_tPdpCb = {
    .ZYF_PdpActiveCallback = ZYF_PdpActiveCnf,
    .ZYF_PdpDeactiveCallback = ZYF_PdpDeactiveCnf,
};


#define NW_GET_SIMCARD_STATE    0
#define NW_GET_GSM_STATE        1
#define NW_GET_GPRS_STATE       2
#define NW_GET_CSQ_VALUE        3
#define NW_PDP_CFG              4
#define NW_PDP_ACTIVE           5
#define NW_PDP_WAIT_ACTIVE      6
#define NW_PDP_GET_IPADDR       7

#define NW_RET_ON_GOING         0
#define NW_RET_ERR              1
#define NW_RET_PDP_ACTIVE       2

int ZYF_NetworkActiveAuto(ZYF_NwStat_t *ptNwStat, uint8_t chCtxId)
{ 
    ZYF_PdpCfg_t tPdpCtx;
    uint8_t ipAddr[4] = {0};
    int32_t nStatus;
    int32_t nRet = -1;

    if (chCtxId <= 0) {
        return GPRS_PDP_ERROR;
    }

    switch (ptNwStat->chState) {
        case NW_GET_SIMCARD_STATE:
            nRet = ZYF_IsSimValid();
            if (!nRet) {
                ZYF_LOG("get sim card statuts ok! => %d", ptNwStat->chSimStat);
                ptNwStat->chTimeOut = 0;
                ptNwStat->chState = NW_GET_GSM_STATE;
            } else {
                ZYF_LOG("failed to get SIM status!");
                ZYF_ThreadSleep(2000);
            }
            break;
            
        case NW_GET_GSM_STATE:
            nRet = ZYF_GetCregStatus(&ptNwStat->chGsmReg);
            //nRet = ZYF_RIL_GetCregStatus(&ptNwStat->chGsmReg);
            if (ZYF_RET_OK == nRet && GSM_REG_HOME_NW == ptNwStat->chGsmReg) {
                ZYF_LOG("get gsm status ok! => %d", ptNwStat->chGsmReg);
                ptNwStat->chTimeOut = 0;
                ptNwStat->chState = NW_GET_GPRS_STATE;
            } else {
                if (++ ptNwStat->chTimeOut >= 10) {
                    ptNwStat->chTimeOut = 0;
                    ptNwStat->chState = NW_GET_SIMCARD_STATE;
                    ZYF_LOG("failed to get GSM status!");
                }
            }
            break;

        case NW_GET_GPRS_STATE:
            nRet = ZYF_GetCgregStatus(&ptNwStat->chGprsReg, ptNwStat->chPlmn, &ptNwStat->hwLac, &ptNwStat->hwCellId);
            //nRet = ZYF_RIL_GetCgregStatus(&ptNwStat->chGprsReg, &ptNwStat->chPlmn, &ptNwStat->hwLac, &ptNwStat->hwCellId);
            if (ZYF_RET_OK == nRet && GPRS_REG_HOME_NW == ptNwStat->chGprsReg) {
                ZYF_LOG("get gprs status ok! => %d", ptNwStat->chGprsReg);
                ptNwStat->chTimeOut = 0;
                ptNwStat->chState = NW_GET_CSQ_VALUE;
            } else {
                if (++ ptNwStat->chTimeOut >= 10) {
                    ptNwStat->chTimeOut = 0;
                    ptNwStat->chState = NW_GET_SIMCARD_STATE;
                    ZYF_LOG("failed to get GPRS status!");
                }
            }
            break;
            
        case NW_GET_CSQ_VALUE:
            nRet = ZYF_GetCsqValue((uint8_t *)&ptNwStat->chSigLvl);
            //nRet = ZYF_RIL_GetCsqValue((uint8_t *)&ptNwStat->chSigLvl);
            if (ZYF_RET_OK == nRet && (ptNwStat->chSigLvl >= 6 && ptNwStat->chSigLvl <= 31)) {
                ZYF_LOG("get signal quality ok! => %d", ptNwStat->chSigLvl);
                ptNwStat->chTimeOut = 0;
                ptNwStat->chState = NW_PDP_CFG;
            } else {
                if (++ ptNwStat->chTimeOut >= 10) {
                    ptNwStat->chTimeOut = 0;
                    ptNwStat->chState = NW_GET_SIMCARD_STATE;
                    ZYF_LOG("failed to signal quality!");
                }
            }
            break;
            
        case NW_PDP_CFG: 
            if ((GPRS_PDP_SUCCESS == ZYF_GprsGetStatus(chCtxId, &nStatus)) && 
                (GPRS_ACTIVATED == nStatus)) {
                if (ptNwStat->bIsActived) {
                    if (++ ptNwStat->chTimeOut >= 600) {
                        ptNwStat->chTimeOut = 0;
                        ptNwStat->chState = NW_GET_GPRS_STATE;
                    } else {
                        break;
                    }
                } else {
                    ptNwStat->chState = NW_GET_SIMCARD_STATE;
                }
                return NW_RET_PDP_ACTIVE;
            }

            ptNwStat->bIsActived = false;
        
            ZYF_GprsRegister(chCtxId, &s_tPdpCb);
            //ZYF_RIL_GprsRegister(chCtxId, &s_tPdpCb);
            memset((void *)&tPdpCtx, 0, sizeof(ZYF_PdpCfg_t));
            strcpy((void *)tPdpCtx.apnName, "CMNET");
            tPdpCtx.PdpType = GPRS_PDP_TYPE_IP;
            tPdpCtx.authtype = 1;
            nRet = ZYF_GprsConfig(chCtxId, &tPdpCtx);
            //nRet = ZYF_RIL_GprsConfig(chCtxId, &tPdpCtx);
            if (GPRS_PDP_SUCCESS == nRet) {
                ptNwStat->chTimeOut = 0;
                ptNwStat->chState = NW_PDP_ACTIVE;
            } else {
                if (++ ptNwStat->chTimeOut >= 10) {
                    ptNwStat->chTimeOut = 0;
                    ptNwStat->chState = NW_GET_SIMCARD_STATE;
                }
            }
            break;

        case NW_PDP_ACTIVE: 
            nRet = ZYF_GprsActivate(chCtxId);
            //nRet = ZYF_RIL_GprsActivate(chCtxId);
            if (GPRS_PDP_SUCCESS == nRet) {
                ptNwStat->chTimeOut = 0;
                ptNwStat->chState = NW_PDP_WAIT_ACTIVE;
            } else {
                if (++ ptNwStat->chTimeOut >= 120) {
                    ptNwStat->chTimeOut = 0;
                    ptNwStat->chState = NW_GET_SIMCARD_STATE;
                }
            }
            break;
            
        case NW_PDP_WAIT_ACTIVE:
            nRet = ZYF_GprsGetStatus(chCtxId, &nStatus);
            if (GPRS_PDP_SUCCESS == nRet && GPRS_ACTIVATED == nStatus) {
                ptNwStat->bIsActived = true;
                nRet = ZYF_GprsGetLocalIPAddress(chCtxId, &ipAddr[0]);
                if (GPRS_PDP_SUCCESS == nRet) {
                    ptNwStat->chTimeOut = 0;
                    if (ptNwStat->bIsActived) {
                        ptNwStat->chState = NW_GET_GPRS_STATE;
                    } else {
                        ptNwStat->chState = NW_GET_SIMCARD_STATE;
                    }
                    return NW_RET_PDP_ACTIVE;
                }
            }  else {
                if (++ ptNwStat->chTimeOut >= 10) {
                    ptNwStat->chTimeOut = 0;
                    ptNwStat->chState = NW_GET_SIMCARD_STATE;
                }
            } 
            break;
    }
    
    return NW_RET_ON_GOING;
}

static void ZYF_NetworkActiveReq(uint8_t chCtxId, bool bAuto)
{
    ZYF_NwStat_t *ptNwStat = &s_tNwState;
    ZYF_PdpCfg_t tPdpCtx;
    
    if (bAuto) {
        ZYF_NetworkActiveAuto(ptNwStat, chCtxId);
    } else {
        ptNwStat->chState = NW_GET_SIMCARD_STATE;
        ptNwStat->chTimeOut = 0;
            
        ZYF_GprsRegister(chCtxId, &s_tPdpCb);
        memset((void *)&tPdpCtx, 0, sizeof(ZYF_PdpCfg_t));
        strcpy((void *)tPdpCtx.apnName, "CMNET");
        tPdpCtx.PdpType = GPRS_PDP_TYPE_IP;
        ZYF_GprsConfig(chCtxId, &tPdpCtx);
        ZYF_GprsActivate(chCtxId);
    }
}

static void ZYF_NetworkThread(void *pvParam)
{
    ZYF_LOG("thread enter!");
    
    while (1) {
        ZYF_NetworkActiveReq(1, true);
        ZYF_ThreadSleep(500);
    }
}

void ZYF_NetworkInit(void)
{
    ZYF_RIL_NetworkInit();
  
    memset((void *)&s_tNwState, 0, sizeof(ZYF_NwStat_t));
    s_tNwState.chState = NW_GET_SIMCARD_STATE;
    
    ZYF_ThreadCreate("ZYF_NetworkThread", ZYF_NetworkThread, NULL, ZYF_PRIORITY_NORMAL, 1024 * 16);
}

 

Supongo que te gusta

Origin blog.csdn.net/w_hizyf_m/article/details/107226598
Recomendado
Clasificación