CellularError_t Cellular_ModuleEnableUE()

in modules/hl7802/cellular_hl7802.c [303:443]


CellularError_t Cellular_ModuleEnableUE( CellularContext_t * pContext )
{
    CellularError_t cellularStatus = CELLULAR_SUCCESS;
    CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
    CellularAtReq_t atReqGetNoResult =
    {
        NULL,
        CELLULAR_AT_NO_RESULT,
        NULL,
        NULL,
        NULL,
        0
    };
    Hl7802BandConfig_t bandCfg = { 0 };

    if( pContext != NULL )
    {
        /* Disable echo. */
        atReqGetNoResult.pAtCmd = "ATE0";
        cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult,
                                                        CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );

        if( cellularStatus == CELLULAR_SUCCESS )
        {
            /* Disable DTR function. */
            atReqGetNoResult.pAtCmd = "AT&D0";
            pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
                                                                   CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
            cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
        }

        if( cellularStatus == CELLULAR_SUCCESS )
        {
            /* Enable RTS/CTS hardware flow control. */
            atReqGetNoResult.pAtCmd = "AT+IFC=2,2";
            pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
                                                                   CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
            cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
        }

        /* Set Radio Access Technology. */
        if( cellularStatus == CELLULAR_SUCCESS )
        {
            /* In the Write format, <mode>=0 is used to switch to the first RAT
             * in the preferred RAT list (PRL), and fall back to subsequent RATS
             * in the PRL if cell coverage is lost. If the PRL is empty, switch to
             * CAT-M1. To set the PRL, see AT+KSELACQ. */
            atReqGetNoResult.pAtCmd = "AT+KSRAT=0";
            pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
                                                                   CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
            cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
        }

        /* Set Default Radio Access Technology. */
        if( cellularStatus == CELLULAR_SUCCESS )
        {
            switch( CELLULAR_CONFIG_DEFAULT_RAT )
            {
                case CELLULAR_RAT_CATM1:
                    atReqGetNoResult.pAtCmd = "AT+KSELACQ=0,1";
                    break;

                case CELLULAR_RAT_NBIOT:
                    atReqGetNoResult.pAtCmd = "AT+KSELACQ=0,2";
                    break;

                case CELLULAR_RAT_GSM:
                    atReqGetNoResult.pAtCmd = "AT+KSELACQ=0,3";
                    break;

                default:
                    break;
            }

            pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
                                                                   CELLULAR_HL7802_AT_KSELACQ_TIMEOUT_MS );
            cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
        }

        /* Set Configured LTE Band. */
        if( cellularStatus == CELLULAR_SUCCESS )
        {
            cellularStatus = getBandCfg( pContext, &bandCfg );
        }

        if( cellularStatus == CELLULAR_SUCCESS )
        {
            if( strcmp( bandCfg.catm1BandCfg, CELLULAR_CONFIG_HL7802_CATM1_BAND ) != 0 )
            {
                LogInfo( ( "Cellular_ModuleEnableUE : CAT-M1 band desired %s actual %s",
                           CELLULAR_CONFIG_HL7802_CATM1_BAND, bandCfg.catm1BandCfg ) );
                atReqGetNoResult.pAtCmd = "AT+KBNDCFG=0,"CELLULAR_CONFIG_HL7802_CATM1_BAND;
                pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
                                                                       CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
                cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
            }
        }

        if( cellularStatus == CELLULAR_SUCCESS )
        {
            if( strcmp( bandCfg.nbiotBandCfg, CELLULAR_CONFIG_HL7802_NBIOT_BAND ) != 0 )
            {
                LogInfo( ( "Cellular_ModuleEnableUE : NBIOT band desired %s actual %s",
                           CELLULAR_CONFIG_HL7802_NBIOT_BAND, bandCfg.nbiotBandCfg ) );
                atReqGetNoResult.pAtCmd = "AT+KBNDCFG=1,"CELLULAR_CONFIG_HL7802_NBIOT_BAND;
                pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
                                                                       CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
                cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
            }
        }

        /* Disable standalone sleep mode. */
        if( cellularStatus == CELLULAR_SUCCESS )
        {
            atReqGetNoResult.pAtCmd = "AT+KSLEEP=2";
            pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
                                                                   CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
            cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
        }

        /* Force initialization of radio to consider new configured bands. */
        if( cellularStatus == CELLULAR_SUCCESS )
        {
            atReqGetNoResult.pAtCmd = "AT+CFUN=1,1";
            pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
                                                                   CELLULAR_HL7802_AT_TIMEOUT_30_SECONDS_MS );
            cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
        }

        /* Disable echo after reboot device. */
        if( cellularStatus == CELLULAR_SUCCESS )
        {
            Platform_Delay( CELLULAR_HL7802_RESET_DELAY_MS );
            atReqGetNoResult.pAtCmd = "ATE0";
            cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult,
                                                            CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
        }
    }

    return cellularStatus;
}