FCM on GPRS Flow


#1

hello,

first sorry for my bad english.

I’m new at OpenAT and I spend few weeks reading documentations and trying some sample Applications.

I’m using an Evaluationboard with a Wireless CPU Q2687 with 663 Verion of Firmware.
The OS-Version is 4.21
I’m also using the Wip-Plugin Verion 3.10.2030

I’m writting my programcode in Ecipse with an gcc Compiler, as it comes as standard IDE with the SDK.

My aim is to establish a GPRS Connection and to subscribe to FCM on GPRS, so that I can receive incoming data to check them.
If there is coming some special data, other functions should be executed.

But at first I’ve got a problem with the FCM-Service and GPRS.

I trying to establish an GPRS Connection.
This works I think, but when I subscribe to the FCM with GPRS as Port I get some strange behavior.

And there is something else I’m bit confused about.
In the Target Monitoring Tool I get some Traces all beginning with “[GPRS]” which I’ve not written in my Code.
Are this standard Traces from the OS?

When I subscribe to the FCM-Service using GPRS Port, I’ve got the "FLOW OPENED’ - Event from my FCM-Control-Handler
but immediately after this I’ve got the “FLOW CLOSED”-Event.
Thereafter the GPRS Connection is closed, without any reason as far as I can see.

This is the way I tried:

-> First I’m subscribing to the SIM-Service

->when I get the event “ADL_SIM_EVENT_FULL_INIT” I subscribe to the GPRS-Service using the function ‘adl_gprsSubscribe’
then I’m sending the AT-Command “AT+CGATT=1” using ‘atCmdCreate’, because I want to attach to the GPRS-Network.
(I’m unable to find an equal function for this, so I can’t avoid using ‘CmdCreate’).

-> then when I receive the Event “ADL_GPRS_EVENT_ME_ATTACH” I’m starting an IP-Bearer using wip-function ‘wip_bearerOpen’.
then I set the Options for GPRS like APN and so on.
and at the end I start the Bearer with the command ‘wipbearerStart’

-> on the Event “ADL_GPRS_EVENT_ACTIVATE_OK” from my GPRS-Eventhandler I’m subscribing to the FCM on GPRS Port

-> when I get the “Event WIP_BEV_IP_CONNECTED” from my GPRS-Bearer-Handler I created an TCP-Client Socket using ‘wip_TCPClientCreate’

-> At last I get the “WIP_CEV_OPEN” Event

#include "adl_global.h"
#include "wip_bearer.h"
#include "wip.h"


/***************************************************************************/
/*  Mandatory variables                                                    */
/*-------------------------------------------------------------------------*/
/*  wm_apmCustomStackSize                                                  */
/*-------------------------------------------------------------------------*/
/***************************************************************************/
const u16 wm_apmCustomStackSize = 1024;


/***************************************************************************/
/*  Local variables                                                        */
/***************************************************************************/
static wip_bearer_t myBearer;
static wip_channel_t TcpSocket;


/***************************************************************************/
/*  Prototypes                                                             						*/
/***************************************************************************/
static void myHandler (wip_bearer_t *br, s8 event, void *context);
static void Sim_Handler (u8 Event);
static void GPRS_Attach();
static s8 GprsHandler (u16 Event, u8 Cid);
static bool GprsCtrlHandler (adl_fcmEvent_e Event);
static bool GprsDataHandler( u16 DataLen, u8 *Data);
static bool CmdResponseHandler (adl_atResponse_t*paras);
static void TCP_Event_Handler (wip_event_t *event, void *ctx);

/***************************************************************************/
/*  Local functions     						                                                      */
/***************************************************************************/
static void GPRS_Bearer_Handler (wip_bearer_t *br, s8 event, void *context)
{
    s8 Ret;
	
    switch(event)
    {
        case WIP_BEV_CONN_FAILED:
        case WIP_BEV_IP_CONNECTED:
            adl_atSendResponse(ADL_AT_PORT_TYPE(ADL_PORT_UART1,ADL_AT_UNS), "\n IP Connected \n");
            TRACE((1,"GPRS-Bearer-Handler: %d", event));
            
            // TCP Client Socket create
            TcpSocket = wip_TCPClientCreate ("IPAdress",Port, TCP_Event_Handler,NULL);
                TRACE((1,"TcpSocket: %d", TcpSocket));
                
        case WIP_BEV_IP_DISCONNECTED:
        case WIP_BEV_STOPPED:
            adl_atSendResponse(ADL_AT_PORT_TYPE(ADL_PORT_UART1,ADL_AT_UNS), "\n IP Disconnected \n");
            TRACE((1,"GPRS-Bearer-Handler: %d", event));
    }
}

static void TCP_Event_Handler (wip_event_t *event, void *ctx)
{
    switch (event->kind)
    {
        case WIP_CEV_OPEN:
        {
            adl_atSendResponse(ADL_AT_PORT_TYPE(ADL_PORT_UART1,ADL_AT_UNS), "\n Connection established successfully \n");
        }
        break;       
    }    
    TRACE ((1, "TCP-client Socket Event: %d", event->kind));   
}

static void Sim_Handler (u8 Event)
{
    s8 Ret;
    
    switch(Event)
    {   
        case ADL_SIM_EVENT_FULL_INIT:
        {
            TRACE((1,"Sim full initialize"));
            adl_atSendResponse(ADL_AT_PORT_TYPE(ADL_PORT_UART1,ADL_AT_UNS), "\n Sim full initialized \n");
            
             //GPRS-Event Subscribe
            Ret = adl_gprsSubscribe (GprsHandler);
                TRACE((1, "GPRS-Event-Subscription Return: %d", Ret));
                
            //Attach to GPRS
            adl_atCmdCreate("AT+CGATT=1", ADL_AT_PORT_TYPE (ADL_PORT_UART1,FALSE),CmdResponseHandler,NULL);          
        }   
        case ADL_SIM_EVENT_PIN_OK:
        {
           TRACE ((1,"PIN ok"));
        }
        break;
    }
    TRACE((1,"Sim-Handler Event: %d", Event));
}

static bool CmdResponseHandler (adl_atResponse_t*paras)
{    
    return TRUE;
}


static void GPRS_Attach()
{
    s8 Ret;
    //GPRS Bearer
    
    //open Bearer
    Ret = wip_bearerOpen(&myBearer, "GPRS", GPRS_Bearer_Handler, NULL);
        TRACE((1, "Bearer Open Return: %d", Ret));

   //set GPRS Connection Parameters 
            wip_bearerSetOpts (myBearer,
                                       WIP_BOPT_GPRS_APN, "APN",
                                       WIP_BOPT_LOGIN, "Username",
                                       WIP_BOPT_PASSWORD, "PW",
                                       WIP_BOPT_END);                       
    //Start
    Ret = wip_bearerStart (myBearer);
        TRACE((1, "Bearer Start Return: %d", Ret));
}

static s8 GprsHandler (u16 Event, u8 Cid)
{
    s8 FcmGprs;
    s8 Ret;
    
    switch (Event)
    {
        case ADL_GPRS_EVENT_ME_ATTACH:
        {              
                
            GPRS_Attach();
            
            adl_atSendResponse(ADL_AT_PORT_TYPE(ADL_PORT_UART1,ADL_AT_UNS), "\n GPRS Event Me Attach \n");
            
        }
        break;   
        case ADL_GPRS_EVENT_ACTIVATE_OK:
        {    
            
            Ret = adl_fcmSubscribe(ADL_PORT_GPRS_BASE, GprsCtrlHandler, GprsDataHandler);
                TRACE((1,"FCM-GPRS-Subscription: %d", Ret));
                 
            adl_atSendResponse(ADL_AT_PORT_TYPE(ADL_PORT_UART1,ADL_AT_UNS), "\n GPRS Event Activate OK \n");
        }
        break;
    }
    TRACE (( 1, "GPRS-Event-Handler: %d", Event));
}

static bool GprsCtrlHandler (adl_fcmEvent_e Event)
{
    switch (Event)
    {
        case ADL_FCM_EVENT_FLOW_OPENNED:
        {
            adl_atSendResponse(ADL_AT_PORT_TYPE(ADL_PORT_UART1,ADL_AT_UNS), "\n GPRS-Flow successfully opened \n");
            TRACE((1,"GPRS-Flow successfully opened"));
            
        }
    }
    TRACE((1, "FCM-GPRS-Flow-Control Event: %d", Event));
	return TRUE;
}

static bool GprsDataHandler( u16 DataLen, u8 *Data)
{
    adl_atSendResponse(ADL_AT_PORT_TYPE(ADL_PORT_UART1,ADL_AT_UNS), "\n GPRS-DataHandler executed \n");
	
    return TRUE;
}
           
/***************************************************************************/
/*  Function   : adl_main                                                  */
/*-------------------------------------------------------------------------*/
/*  Object     : Customer application initialisation                       */
/*                                                                         */
/*-------------------------------------------------------------------------*/
/*  Variable Name     |IN |OUT|GLB|  Utilisation                           */
/*--------------------+---+---+---+----------------------------------------*/
/*  InitType          |   |   |   |  Application start mode reason         */
/*--------------------+---+---+---+----------------------------------------*/
/***************************************************************************/
void adl_main ( adl_InitType_e InitType )
{
    TRACE (( 1, "Embedded Application : Main" ));
   
    s32 SimSubs;

    SimSubs = adl_simSubscribe(Sim_Handler, "0000");
        TRACE((1, "Sim Subscription Return: %d", SimSubs));

    //TCP/IP Stack init
     s8 TCPIPRet;
     TCPIPRet = wip_netInit();
        TRACE((1, "wip_netInit: %d", TCPIPRet));    
}

There is maybe something wrong in this code, or I use the function and Eventhandler in a wrong order or something else.

I’m very thankful for any help.
Thank you for spending time reading my post.

Kind regards
HW