KeyPad - J101


#1

Hi, how´s everyone!?

Does anybody has ever worked with 2501Q and it´s KeyPad function!?

The User Manual doesn´t make clear the use of it. I´ve been testing some GPIO pins and they worked fine.

But I´m still curious about the KeyPad.

Any start up is really appreciated!

Thanks!

Henrique


#2

I followed the Keyboard sample from the Wavecom and I´m trying to detach the code from that structure…

The code is (keyboard.c ; keyb.h is the same keyboard.h):

/* -------- */
/* Includes */
/* -------- */

#include "adl_global.h"
#include "keyb.h"
#include "multi_app.h"


/* --------- */
/* Constants */
/* --------- */


// Keys constants
enum
{
    DK_KEY_DTMF_1,
    DK_KEY_DTMF_2,
    DK_KEY_DTMF_3,
    DK_KEY_DTMF_4,
    DK_KEY_DTMF_5,
    DK_KEY_DTMF_6,
    DK_KEY_DTMF_7,
    DK_KEY_DTMF_8,
    DK_KEY_DTMF_9,
    DK_KEY_DTMF_STAR,
    DK_KEY_DTMF_0,
    DK_KEY_DTMF_HASH,
    DK_KEY_DTMF_A,
    DK_KEY_DTMF_B,
    DK_KEY_DTMF_C,
    DK_KEY_DTMF_D,
    DK_KEY_DTMF_LAST,
    DK_KEY_LEVEL_UP = 20,
    DK_KEY_LEVEL_DOWN
};



/* --------- */
/* Variables */
/* --------- */


/* Keyboard Handler */
key_Handler_f key_Handler;

/* First Subscription flag */
bool    bOnce = TRUE;

/* Timer for key repetition */
adl_tmr_t * tRepeat;

/* Constants */
#define KEY_NONE    0xFF

/* Timer delays */
u32 key_RepeatTickTime;     // Timer before each repeat
u32 key_RepeatTickDelay;    // Delay before repeat

/* Prototypes */
bool key_UnsoHandler ( adl_atUnsolicited_t * Param );
void key_TimerHandler ( u8 Id );
void key_init ( void );


/* Keyboard Timer Handler */
void key_TimerHandler ( u8 Id )
{
    /* ReStart the Key timer, faster */
    tRepeat = adl_tmrSubscribe ( FALSE, key_RepeatTickTime, ADL_TMR_TYPE_TICK, key_TimerHandler );
    
    /* Call Unsolicited handler */
    key_UnsoHandler ( ( adl_atUnsolicited_t * ) NULL );
}

/***************************************************************************/
/*  Function   : dk_KeyboardHandler                                        */
/*-------------------------------------------------------------------------*/
/*  Object     : Keyboard Handler                                          */
/*                                                                         */
/*-------------------------------------------------------------------------*/
/*  Variable Name     |IN |OUT|GLB|  Utilisation                           */
/*--------------------+---+---+---+----------------------------------------*/
/*  Key               | X |   |   | Key index                              */
/*--------------------+---+---+---+----------------------------------------*/
/*  Pressed           | X |   |   | Key pressed or released                */
/*--------------------+---+---+---+----------------------------------------*/
/***************************************************************************/
void dk_KeyboardHandler ( u8 Key, u8 Pressed )
{
	ascii Tecla [20];


    // Check for DTMF key
    if ( Key < DK_KEY_DTMF_LAST )
    {
        s32 sReturn;
        
        if ( Pressed )
        {
            // DTMF play
			sprintf(Tecla, "\r\n Tecla: %d\r\n", Key);

			adl_atSendResponse(ADL_AT_UNS, Tecla);
        }
        else
        {
            // DTMF stop


			adl_atSendResponse(ADL_AT_UNS, "\r\n PRESSED Key < DK_KEY_DTMF LAST STOP\r\n");
        }
    }
    else if ( Key == DK_KEY_LEVEL_UP )
    {
        // Sound level up
        if ( Pressed )
        {
            // Check if max is not reached yet
            if ( dk_SndLevel < DK_SND_LEVEL_MAX )
            {

                TRACE (( dk_TraceLevel, "New sound level : %d", dk_SndLevel ));
            }
            else
            {
                TRACE (( dk_TraceLevel, "Max sound level : %d", dk_SndLevel ));
            }
            
            // Play a little sound


			adl_atSendResponse(ADL_AT_UNS, "\r\n PRESSIONADA \r\n");
        }
    }
    else if ( Key == DK_KEY_LEVEL_DOWN )
    {
        // Sound level down
        if ( Pressed )
        {
            // Check if max is not reached yet
            if ( dk_SndLevel > DK_SND_LEVEL_MIN )
            {

                TRACE (( dk_TraceLevel, "New sound level : %d", dk_SndLevel ));
            }
            else
            {
                TRACE (( dk_TraceLevel, "Min sound level : %d", dk_SndLevel ));
            }
            
            // Play a little sound

        }
    }
}

void key_init ( void )
{
	key_Subscribe ( dk_KeyboardHandler, 0, 0 );
}

/* Keyboard unsolicited handler */
bool key_UnsoHandler ( adl_atUnsolicited_t * Param )
{
    u8      iKey = KEY_NONE,
            iPressed = 1;
    ascii   lBuffer[ 3 ];
    
    /* Last pressed key */
    static u8 iPressedKey = KEY_NONE;
        
    /* Get Key code */
    if ( Param )
    {
        iKey     = wm_atoi ( wm_strGetParameterString ( lBuffer, Param->StrData, 1 ) );
        iPressed = wm_atoi ( wm_strGetParameterString ( lBuffer, Param->StrData, 2 ) );
    }
    
    if ( iPressed )
    {
        /* Key Pressed */
        if ( iKey != KEY_NONE )
        {
            /* Save the pressed key */
            iPressedKey = iKey;
        
            /* Start the Key timer on the first time */
            if ( key_RepeatTickDelay )
            {
                tRepeat = adl_tmrSubscribe ( FALSE, key_RepeatTickDelay, ADL_TMR_TYPE_TICK, key_TimerHandler );
            }
        }
        
        TRACE (( key_TraceLevel, "Key pressed %d", iPressedKey ));
        
        /* Call Key handler */
        if ( key_Handler )
        {
            key_Handler ( iPressedKey, iPressed );
        }
    }
    else
    {
        /* Stop the Key timer */
        adl_tmrUnSubscribe ( tRepeat, key_TimerHandler, ADL_TMR_TYPE_TICK );
        tRepeat = NULL;
        
        TRACE (( key_TraceLevel, "Key released %d", iPressedKey ));
        
        /* Call Key handler */
        if ( key_Handler )
        {
            key_Handler ( iPressedKey, iPressed );
        }
        
        /* Reset the saved key */
        iPressedKey = KEY_NONE;
    }
    
    /* Do not display keyboard events */
    return FALSE;
}



/* Keyboard handler subscription */
void key_Subscribe ( key_Handler_f KeyHandler, u32 RepeatTickTime, u32 RepeatTickDelay )
{
    TRACE (( key_TraceLevel, "Keyboard Handler Subscription (%d,%d)", RepeatTickTime, RepeatTickDelay ));
    
    /* Set Keyboard Handler */
    key_Handler = KeyHandler;
    
    /* Set Repeat Timers parameters */
    key_RepeatTickTime = RepeatTickTime ? RepeatTickTime : 1;
    key_RepeatTickDelay = RepeatTickDelay;
    
    if ( bOnce )
    {
        /* Only first time */
        bOnce = FALSE;
        
        /* Send command to get keyboard events */
        adl_atCmdCreate ( "at+cmer=,1", FALSE, ( adl_atRspHandler_t ) NULL, NULL );
        
        /* Subscribe to Keyboard events */
        adl_atUnSoSubscribe ( "+CKEV: ", key_UnsoHandler );
    }
}



/* Keyboard handler Unsubscription */
void key_Unsubscribe ( key_Handler_f KeyHandler )
{
    TRACE (( key_TraceLevel, "Keyboard Handler Unsubscription" ));
    
    if ( KeyHandler == key_Handler )
    {
        /* Unsubscribe from keyboard handler */
        adl_atCmdCreate ( "at+cmer=,0", FALSE, ( adl_atRspHandler_t ) NULL, NULL );
        adl_atUnSoUnSubscribe ( "+CKEV: ", key_UnsoHandler );
        key_Handler = NULL;
        
        /* Unsubscribe from all timers */
        if ( tRepeat )
        {
            adl_tmrUnSubscribe ( tRepeat, key_TimerHandler, ADL_TMR_TYPE_TICK );
            tRepeat = NULL;
        }
        
        bOnce = TRUE;
    }
}

That´s the piece of code I´m trying then to use on a previous application. But… when I try to call key_init() it doesn´t compile and it doesn´t show any error messages either.

Any ideas?

Thanks

Henrique


#3

Just a wild guess - but I think you should define key_Subscribe before you actually use it (or put least the prototype of the function at the beginning of the file).

Hope this helps…

Best Regards,
Jan


#4

Nah… it didn´t work… I know…it´s hard to tell…

As this code has some mistake VisualC accuses error on some good code and I can never know where the real error is.

Best regards,

Henrique


#5

Did you find the real error?

If not, could you post the error message? Maybe it can give some clue although it might complain about good code…

Best Regards,
Jan


#6

Here´s the Log:

--------------------Configuration: MultiApp - Win32 Wismo_Target--------------------
 
 
-----------------------------
 Software Generation Toolkit
-----------------------------
 
 SGT_VER  = v1.2.11
 SGT_DIR  = /cygdrive/C/OpenAT/Tools/SGT/v1.2.11
 Scripts path for SGT :
  /cygdrive/C/OpenAT/Tools/SGT/v1.2.11/script_sgt
 
 Type help_sgt for a list of SGT commands
 
-----------------------------
 
Check environment settings...
 
    Launch a full library or binary process
 
 
---------------------------------------
 
... Creating library gcc_MultiApp.lib with gcc_arm parameter
 
---------------------------------------
 
 
---------------------------------------
Cleaning temporary files       (*.tmp / *.trc)
 
 
---------------------------------------
 Generation done with SGT v1.2.11
 Library generated    : gcc_MultiApp.lib
 Compiler keyword     : gcc_arm
 Compiler release     : GCC ARM
 C compiler path      : /cygdrive/C/OpenAT/Tools/GCC/bin/arm-elf-gcc
 ASM compiler path    : /cygdrive/C/OpenAT/Tools/GCC/bin/arm-elf-gcc
 customer release      : gcc
 Name of the current directory : gcc
 Log file             : ../out/gcc_MultiApp_status.log
 Release of the environement : CYGWIN_NT-5.0 MicoEstrela 1.5.10(0.116/4/2) 2004-05-25 22:07 i686 unknown unknown Cygwin
---------------------------------------
 
 
 
---------------------------------------
    Find errors occurred when using SGT
 
Analyze errors in Log files
 
---------------------------------------
Analyze errors in tmp files if they exists.
 
---------------------------------------
Libraries available in out directory :
gcc_MultiApp.lib, 
---------------------------------------
---------------------------------------
    End process.
 
--------------------Configuration: IPConnect - Win32 Wismo_Target--------------------
 
 
-----------------------------
 Software Generation Toolkit
-----------------------------
 
 SGT_VER  = v1.2.11
 SGT_DIR  = /cygdrive/C/OpenAT/Tools/SGT/v1.2.11
 Scripts path for SGT :
  /cygdrive/C/OpenAT/Tools/SGT/v1.2.11/script_sgt
 
 Type help_sgt for a list of SGT commands
 
-----------------------------
 
Check environment settings...
 
    Launch a full library or binary process
 
 
---------------------------------------
 
... Creating library gcc_IPConnect.lib with gcc_arm parameter
 
---------------------------------------
 
 
---------------------------------------
Cleaning temporary files       (*.tmp / *.trc)
 
 
---------------------------------------
 Generation done with SGT v1.2.11
 Library generated    : gcc_IPConnect.lib
 Compiler keyword     : gcc_arm
 Compiler release     : GCC ARM
 C compiler path      : /cygdrive/C/OpenAT/Tools/GCC/bin/arm-elf-gcc
 ASM compiler path    : /cygdrive/C/OpenAT/Tools/GCC/bin/arm-elf-gcc
 customer release      : gcc
 Name of the current directory : gcc
 Log file             : ../out/gcc_IPConnect_status.log
 Release of the environement : CYGWIN_NT-5.0 MicoEstrela 1.5.10(0.116/4/2) 2004-05-25 22:07 i686 unknown unknown Cygwin
---------------------------------------
 
 
 
---------------------------------------
    Find errors occurred when using SGT
 
Analyze errors in Log files
 
---------------------------------------
Analyze errors in tmp files if they exists.
 
---------------------------------------
Libraries available in out directory :
gcc_IPConnect.lib, 
---------------------------------------
---------------------------------------
    End process.
 
--------------------Configuration: Socket - Win32 Wismo_Target--------------------
 
 
-----------------------------
 Software Generation Toolkit
-----------------------------
 
 SGT_VER  = v1.2.11
 SGT_DIR  = /cygdrive/C/OpenAT/Tools/SGT/v1.2.11
 Scripts path for SGT :
  /cygdrive/C/OpenAT/Tools/SGT/v1.2.11/script_sgt
 
 Type help_sgt for a list of SGT commands
 
-----------------------------
 
Check environment settings...
 
    Launch a full library or binary process
 
 
---------------------------------------
 
Get ../../src/Socket.c Socket.c
 Use  YTPP
... Compiling Socket.c
 
Socket.c: In function `tcp_pfResponseCbk':
Socket.c:156: warning: passing arg 3 of `ed_SocketTCPStart' from incompatible pointer type
Socket.c:156: warning: passing arg 4 of `ed_SocketTCPStart' from incompatible pointer type
Socket.c:156: warning: passing arg 5 of `ed_SocketTCPStart' from incompatible pointer type
Socket.c: In function `tcp_ConnectHandler':
Socket.c:360: warning: passing arg 3 of `ed_SocketTCPStart' from incompatible pointer type
Socket.c:360: warning: passing arg 4 of `ed_SocketTCPStart' from incompatible pointer type
Socket.c:360: warning: passing arg 5 of `ed_SocketTCPStart' from incompatible pointer type
Socket.c: At top level:
Socket.c:455: warning: type mismatch with previous implicit declaration
Socket.c:107: warning: previous implicit declaration of `Socket_start'
Socket.c:455: warning: `Socket_start' was previously implicitly declared to return `int'
Socket.c: In function `Socket_start':
Socket.c:465: warning: passing arg 1 of `ip_Subscribe' from incompatible pointer type
Socket.c: At top level:
Socket.c:514: warning: type mismatch with previous implicit declaration
Socket.c:266: warning: previous implicit declaration of `Socket_stop'
Socket.c:514: warning: `Socket_stop' was previously implicitly declared to return `int'
Socket.c: In function `Socket_stop':
Socket.c:520: warning: passing arg 2 of `ed_SocketLTCPStop' from incompatible pointer type
Socket.c: In function `Socket_init':
Socket.c:562: warning: assignment discards qualifiers from pointer target type
Socket.c:563: warning: assignment discards qualifiers from pointer target type
Socket.c:564: warning: assignment from incompatible pointer type
 
---------------------------------------
 
    Copy all needed library and object files
 
 Make links ../../../Libraries/MultiApp/gcc/out/gcc_MultiApp.lib ../out/gcc_MultiApp.lib
 Make links ../../../Libraries/IPConnect/gcc/out/gcc_IPConnect.lib ../out/gcc_IPConnect.lib
 Make links C:/OpenAT/OtherLibs/TCPIP/v3.02/gcc_eDLib_302.lib ../out/gcc_eDLib_302.lib
 Make links /cygdrive/C/OpenAT/V302/TgtGen/Adl/Library/gcc_wmadl_302.b03.lib ../out/gcc_wmadl_302.b03.lib
---------------------------------------
 
... Link step in progress ...
 
 
... Link gcc_Socket_32.bin ...
 
/cygdrive/C/OpenAT/Tools/GCC/bin/arm-elf-nm: gcc_Socket_32.elf: No such file or directory
make: *** [make_single_bin] Error 1
 
    Build an X-MODEM binary  : 'gcc_Socket_32.wpb.dwl'
 
 
... Convert gcc_Socket_32.wpb in X-MODEM format ...
 
genBin : Version v1a06 Copyright (c) WAVECOM
genBin : No Error
 
... Build gcc_Socket_32.wpb.dwl ...
 
---------------------------------------
 
 
---------------------------------------
    Find errors occurred when using SGT
 
Analyze errors in Log files
 
 
WARNING  :  misc_status.log is incomplete. Check manually if any errors exist
---------------------------------------
Analyze errors in tmp files if they exists.
 
---------------------------------------
Libraries available in out directory :
gcc_eDLib_302.lib, gcc_IPConnect.lib, gcc_MultiApp.lib, gcc_wmadl_302.b03.lib, 
---------------------------------------
---------------------------------------
    End process.
 

Socket - 1 error(s), 18 warning(s)

Henrique


#7

Hi Henrique,

in this log, I would try to fix the warnings about implicit declarations first…

So, try to put the prototypes for

… Socket_start(…);
… Socket_stop(…);

into the header file…

Hope it works then…

Best Regards,
Jan


#8

Unfortunatelly… nothing…
As I´m working ON the Socket Sample… the multi_app is still bothering me… I guess it´s making all the implicit declaration mess…

I declared all the prototypes into the header but I´m still getting the errors.

I put three codes in here : keyboard.c, socket.c and the log

If you think it´s to much work on this help… no problem! I understand!

keyboard.c:

/* -------- */
/* Includes */
/* -------- */

#include "adl_global.h"
#include "keyb.h"
#include "multi_app.h"


/* --------- */
/* Constants */
/* --------- */

// Keys constants
enum
{
    DK_KEY_DTMF_1,
    DK_KEY_DTMF_2,
    DK_KEY_DTMF_3,
    DK_KEY_DTMF_4,
    DK_KEY_DTMF_5,
    DK_KEY_DTMF_6,
    DK_KEY_DTMF_7,
    DK_KEY_DTMF_8,
    DK_KEY_DTMF_9,
    DK_KEY_DTMF_STAR,
    DK_KEY_DTMF_0,
    DK_KEY_DTMF_HASH,
    DK_KEY_DTMF_A,
    DK_KEY_DTMF_B,
    DK_KEY_DTMF_C,
    DK_KEY_DTMF_D,
    DK_KEY_DTMF_LAST,
    DK_KEY_LEVEL_UP = 20,
    DK_KEY_LEVEL_DOWN
};



/* --------- */
/* Variables */
/* --------- */
static u8  dk_TraceLevel;   // Trace Level defined on entry point
static u8  dk_SndLevel = 7; // Current sound level



/* Keyboard Handler */
key_Handler_f key_Handler;

/* First Subscription flag */
bool    bOnce = TRUE;

/* Timer for key repetition */
adl_tmr_t * tRepeat;

/* Constants */
#define KEY_NONE    0xFF

/* Timer delays */
u32 key_RepeatTickTime;     // Timer before each repeat
u32 key_RepeatTickDelay;    // Delay before repeat

/* Prototypes */
bool key_UnsoHandler ( adl_atUnsolicited_t * Param );
void key_TimerHandler ( u8 Id );
void key_init ( void );
void key_Subscribe ( key_Handler_f KeyHandler, u32 RepeatTickTime, u32 RepeatTickDelay );


/* Keyboard Timer Handler */
void key_TimerHandler ( u8 Id )
{
    /* ReStart the Key timer, faster */
    tRepeat = adl_tmrSubscribe ( FALSE, key_RepeatTickTime, ADL_TMR_TYPE_TICK, key_TimerHandler );
    
    /* Call Unsolicited handler */
    key_UnsoHandler ( ( adl_atUnsolicited_t * ) NULL );
}

/***************************************************************************/
/*  Function   : dk_KeyboardHandler                                        */
/*-------------------------------------------------------------------------*/
/*  Object     : Keyboard Handler                                          */
/*                                                                         */
/*-------------------------------------------------------------------------*/
/*  Variable Name     |IN |OUT|GLB|  Utilisation                           */
/*--------------------+---+---+---+----------------------------------------*/
/*  Key               | X |   |   | Key index                              */
/*--------------------+---+---+---+----------------------------------------*/
/*  Pressed           | X |   |   | Key pressed or released                */
/*--------------------+---+---+---+----------------------------------------*/
/***************************************************************************/
void dk_KeyboardHandler ( u8 Key, u8 Pressed )
{
	ascii Tecla [20];


    // Check for DTMF key
    if ( Key < DK_KEY_DTMF_LAST )
    {
        s32 sReturn;
        
        if ( Pressed )
        {
            // DTMF play
			sprintf(Tecla, "\r\n Tecla: %d\r\n", Key);

			adl_atSendResponse(ADL_AT_UNS, Tecla);
        }
        else
        {
            // DTMF stop


			adl_atSendResponse(ADL_AT_UNS, "\r\n PRESSIONADA Key < DK_KEY_DTMF LAST STOP\r\n");
        }
    }
    else if ( Key == DK_KEY_LEVEL_UP )
    {
        // Sound level up
        if ( Pressed )
        {
            // Check if max is not reached yet
            if ( dk_SndLevel < DK_SND_LEVEL_MAX )
            {

                TRACE (( dk_TraceLevel, "New sound level : %d", dk_SndLevel ));
            }
            else
            {
                TRACE (( dk_TraceLevel, "Max sound level : %d", dk_SndLevel ));
            }
            
            // Play a little sound


			adl_atSendResponse(ADL_AT_UNS, "\r\n PRESSIONADA \r\n");
        }
    }
    else if ( Key == DK_KEY_LEVEL_DOWN )
    {
        // Sound level down
        if ( Pressed )
        {
            // Check if max is not reached yet
            if ( dk_SndLevel > DK_SND_LEVEL_MIN )
            {

                TRACE (( dk_TraceLevel, "New sound level : %d", dk_SndLevel ));
            }
            else
            {
                TRACE (( dk_TraceLevel, "Min sound level : %d", dk_SndLevel ));
            }
            
            // Play a little sound

        }
    }
}

void key_init ( void )
{
	key_Subscribe ( dk_KeyboardHandler, 0, 0 );
}

/* Keyboard unsolicited handler */
bool key_UnsoHandler ( adl_atUnsolicited_t * Param )
{
    u8      iKey = KEY_NONE,
            iPressed = 1;
    ascii   lBuffer[ 3 ];
    
    /* Last pressed key */
    static u8 iPressedKey = KEY_NONE;
        
    /* Get Key code */
    if ( Param )
    {
        iKey     = wm_atoi ( wm_strGetParameterString ( lBuffer, Param->StrData, 1 ) );
        iPressed = wm_atoi ( wm_strGetParameterString ( lBuffer, Param->StrData, 2 ) );
    }
    
    if ( iPressed )
    {
        /* Key Pressed */
        if ( iKey != KEY_NONE )
        {
            /* Save the pressed key */
            iPressedKey = iKey;
        
            /* Start the Key timer on the first time */
            if ( key_RepeatTickDelay )
            {
                tRepeat = adl_tmrSubscribe ( FALSE, key_RepeatTickDelay, ADL_TMR_TYPE_TICK, key_TimerHandler );
            }
        }
        
        TRACE (( key_TraceLevel, "Key pressed %d", iPressedKey ));
        
        /* Call Key handler */
        if ( key_Handler )
        {
            key_Handler ( iPressedKey, iPressed );
        }
    }
    else
    {
        /* Stop the Key timer */
        adl_tmrUnSubscribe ( tRepeat, key_TimerHandler, ADL_TMR_TYPE_TICK );
        tRepeat = NULL;
        
        TRACE (( key_TraceLevel, "Key released %d", iPressedKey ));
        
        /* Call Key handler */
        if ( key_Handler )
        {
            key_Handler ( iPressedKey, iPressed );
        }
        
        /* Reset the saved key */
        iPressedKey = KEY_NONE;
    }
    
    /* Do not display keyboard events */
    return FALSE;
}



/* Keyboard handler subscription */
void key_Subscribe ( key_Handler_f KeyHandler, u32 RepeatTickTime, u32 RepeatTickDelay )
{
    TRACE (( key_TraceLevel, "Keyboard Handler Subscription (%d,%d)", RepeatTickTime, RepeatTickDelay ));
    
    /* Set Keyboard Handler */
    key_Handler = KeyHandler;
    
    /* Set Repeat Timers parameters */
    key_RepeatTickTime = RepeatTickTime ? RepeatTickTime : 1;
    key_RepeatTickDelay = RepeatTickDelay;
    
    if ( bOnce )
    {
        /* Only first time */
        bOnce = FALSE;
        
        /* Send command to get keyboard events */
        adl_atCmdCreate ( "at+cmer=,1", FALSE, ( adl_atRspHandler_t ) NULL, NULL );
        
        /* Subscribe to Keyboard events */
        adl_atUnSoSubscribe ( "+CKEV: ", key_UnsoHandler );
    }
}



/* Keyboard handler Unsubscription */
void key_Unsubscribe ( key_Handler_f KeyHandler )
{
    TRACE (( key_TraceLevel, "Keyboard Handler Unsubscription" ));
    
    if ( KeyHandler == key_Handler )
    {
        /* Unsubscribe from keyboard handler */
        adl_atCmdCreate ( "at+cmer=,0", FALSE, ( adl_atRspHandler_t ) NULL, NULL );
        adl_atUnSoUnSubscribe ( "+CKEV: ", key_UnsoHandler );
        key_Handler = NULL;
        
        /* Unsubscribe from all timers */
        if ( tRepeat )
        {
            adl_tmrUnSubscribe ( tRepeat, key_TimerHandler, ADL_TMR_TYPE_TICK );
            tRepeat = NULL;
        }
        
        bOnce = TRUE;
    }
}

socket.c:

/***************************************************************************/
/*  File       : Socket.c                                                  */
/*-------------------------------------------------------------------------*/
/*  Object     : Customer application                                      */
/*                                                                         */
/*  contents   : Customer main procedures                                  */
/*                                                                         */
/*  Change     :                                                           */
/***************************************************************************/



/* -------- */
/* Includes */
/* -------- */

#include "adl_global.h"
#include "multi_app.h"
#include "ipconnect.h"
#include "ed_socket.h"
#include "ed_dialup.h"
#include "adl_TimerHandler.h"
#include "adl_call.h"
#include "adl_fcm.h"
//#include "keyboard.h"
//#include "adl_gpio.h"

/* ---------- */
/* Constantes */
/* ---------- */

// Application name
static const ascii * Socket_NameBuffer = "Seletron Rastreamento";

/* Variáveis Globais */
//static u8 socket_TraceLevel;
static int i=1;

/* Variáveis reservadas à GPS */
static s8   gps_GpsHandle;      // GPS service handle
static bool gps_GpsAutoStart;   // GPS autostart parameter (to allow or not hardware reset)
static u8   gps_PollingTimer; 
static bool Atualiza_GPS = FALSE;

static u8   Time_Get_Request; 

static bool liberado = FALSE;
static bool socket_liberado = TRUE;

/* Variáveis - Controle de IOs */
s8 HANDLE_GPIO;
static bool PINO = FALSE;

/* Variáveis Globais reservadas à coordenadas Geograficas */
ascii Latitude[20];
ascii LatInd[20];
ascii Longitude[20];
ascii LonInd[20];

/* SMS */
static s8 sms_lcd_clock_Handle_txt;
bool SMS_CLOCK_Handler(ascii *SmsTel, ascii *SmsTimeOrLength, ascii *SmsText);
void SMS_CLOCK_ctrl_Handler(u8 Event, u16 Nb);

static int j=1;

// Commands strings
static const ascii * SOCKET_CMD_START = "at+SOCKETSTART";


void tcp_pfDataRequest ( u16 MaxLen, u32 id );
u16 tcp_pfDataHnd ( u16 DataLen, u8 * Data, u32 id );
void tcp_pfResponseCbk ( s32 Event, u32 id );

bool gps_GpsHandler ( adl_gpsEvent_e Event, adl_gpsData_t * GPSData );



/* Prototipo - UART2 */
/*
void UART2_Enable ( void );
void fcmCtrlH ( u8 event );
void fcmDataH ( u16 DataLen, u8 * Data );
bool Res_WMFM1_Handler ( void );
bool Res_IPR_Handler ( void );
*/

/***************************************************************************/
/*  Local functions                                                        */
/***************************************************************************/
/* Convert an IP address from u32 to ascii * */
ascii * ConvertIP_itoa ( u32 iIP, ascii * aIP )
{
    wm_sprintf ( aIP, "%d.%d.%d.%d",
                      ( iIP >> 24 ) & 0xFF,
                      ( iIP >> 16 ) & 0xFF,
                      ( iIP >> 8  ) & 0xFF,
                        iIP         & 0xFF );
    return aIP;
}


void Temporizador(u8 Id)
{

	adl_atSendResponse(ADL_AT_RSP, "\r TEMPORIZADOR ATIVADO \r\n");

	if ((socket_liberado == TRUE)&&(Atualiza_GPS==TRUE))
	{
		socket_liberado = FALSE;
		liberado = TRUE;
		Atualiza_GPS = FALSE;

	    //Envia pedido de abertura de Socket TCP 
		//ed_SocketTCPStart ( ED_ID_TCPSOCKET_1, 0,tcp_pfResponseCbk, tcp_pfDataHnd, tcp_pfDataRequest);

		Socket_start();
	}

	if (PINO==FALSE)
	{
		PINO=TRUE;
		adl_ioWrite(HANDLE_GPIO, ADL_IO_Q25X1_GPO_1, 0x00000000);
	}
	else
	{
		PINO=FALSE;
		adl_ioWrite(HANDLE_GPIO, ADL_IO_Q25X1_GPO_1, ADL_IO_Q25X1_GPO_1);
	}



}

// Interrompe Resposta de Callback
void tcp_Stop_pfResponseCbk ( s32 Event, u32 id )
{	
	adl_atSendResponse(ADL_AT_UNS, "\r\nTCPSTOPRESONSECBK START\r\n");
	switch ( Event )
    {
		case ED_OK_TCP_CLOSED:
			//TRACE (( socket_TraceLevel, "tcp_Stop_pfResponseCbk: Socket close" ));
			adl_atSendResponse(ADL_AT_UNS, "\r\nSocket Close\r\n");
		break;
	}
	adl_atSendResponse(ADL_AT_UNS, "\r\nTCPSTOPRESONSECBK END\r\n");
}



//Chamado quando uma conexão Socket TCP é aberta ou quando ocorre um erro
void tcp_pfResponseCbk ( s32 Event, u32 id )
{
	adl_atSendResponse(ADL_AT_UNS, "\r\nTCP_RESPONSECBK START\r\n");
	ascii Buff[50];
	s8  sReturn = ERROR;
	u8 Listen=0;

	wm_sprintf ( Buff, "tcp_pfResponseCbk: %d (id : %d)", Event, id );
     //TRACE (( socket_TraceLevel, Buff )); 
	 switch ( Event )
    {
		case ED_OK_TCP_CLOSED:
			//TRACE (( socket_TraceLevel, "tcp_pfResponseCbk: Socket close" ));
			adl_atSendResponse(ADL_AT_UNS, "\r\nSocket Closed\r\n");
			sReturn = ed_SocketTCPStart ( ED_ID_TCPSOCKET_1, Listen,tcp_pfResponseCbk, tcp_pfDataHnd, tcp_pfDataRequest);
			wm_sprintf ( Buff, "ed_SocketTCPStart: %d", sReturn);
			//TRACE (( socket_TraceLevel, Buff )); 
			i=1;
			break;

		case ED_INFO_LISTEN_SET:
			adl_atSendResponse(ADL_AT_UNS, "\r\nSocket Created\r\n");
			break;

	} 
	 adl_atSendResponse(ADL_AT_UNS, "\r\nTCP_RESPONSECBK END\r\n");
}



//Chamado para informar ao aplicativo que ele pode enviar novos dados
void tcp_pfDataRequest ( u16 MaxLen, u32 id )
{
	adl_atSendResponse(ADL_AT_UNS, "\r\nTCP_DATAREQUEST START\r\n");
	ascii Buff[50];

	// --> SMS
	ascii Telefone [20];
	ascii Telefone2 [20];
	ascii Mensagem [100];

	wm_sprintf(Telefone, "03191221337");
	wm_sprintf(Telefone2, "03188138486");

	//**********************************

	// Flag para garantir envio único de string
    if (liberado==TRUE)
	{
	   ascii request [100]; 
	   u16 len; 

	   adl_atSendResponse(ADL_AT_RSP, "\r Sending GET Request FUNCTION\r\n");

	   wm_memset (request, '\0',100); 


	   //wm_sprintf(request,"GET /gps.asp?latitude=%s HTTP/1.0\r\nHost:sanabiovilela.homeip.net\r\nContent-Type: text/html\r\n\r\n",Latitude); 
	   
	   wm_sprintf(request,"GET /gps.asp?latitude=%s-latind=%s HTTP/1.0\r\nHost:sanabiovilela.savedme.com\r\nContent-Type: text/html\r\n\r\n",Latitude, LatInd); 
	   
	   // Enviando SMS
	   wm_sprintf ( Mensagem + wm_strlen ( Mensagem ), "LOCALIZACAO do Henrique - Latitude: %s - Longitude: %s\x1a", Latitude, Longitude);
	   adl_smsSend  ( sms_lcd_clock_Handle_txt, Telefone, Mensagem, ADL_SMS_MODE_TEXT );
	   adl_smsSend  ( sms_lcd_clock_Handle_txt, Telefone2, Mensagem, ADL_SMS_MODE_TEXT );


	   adl_atSendResponse(ADL_AT_UNS, request);


	   len = wm_strlen(request); 

	   ed_SendDataExt ( request, len , FALSE, ED_ID_TCPSOCKET_1 ); 
	
	   liberado=FALSE;
	 }

	//**********************************

	wm_sprintf ( Buff, " tcp_pfDataRequest: %d", MaxLen);
    //TRACE (( socket_TraceLevel, Buff )); 

    
 

    adl_atSendResponse(ADL_AT_UNS, "\r\nTCP_DATAREQUEST END\r\n");
}

//Chamado para receber dados/resposta do remoto para o aplicativo
u16 tcp_pfDataHnd ( u16 DataLen, u8 * Data, u32 id )
{
	adl_atSendResponse(ADL_AT_UNS, "\r\nTCP_DATAHND START\r\n");

	ascii Buff[50];

	ascii BuffDisp[250];

	ascii * TheBuffer;
	s32 sreturn=ERROR;

	wm_sprintf(BuffDisp, "\r\n Display Buffer: %d \r\n", Data);

	adl_atSendResponse(ADL_AT_UNS, BuffDisp);

	 if ( DataLen && Data && i)
    {
		//TRACE (( socket_TraceLevel, "tcp_pfDataHnd: %d", DataLen ));

		wm_sprintf(BuffDisp, "\r\n DataLEN: %d \r\n", DataLen);
		adl_atSendResponse(ADL_AT_UNS, BuffDisp);

        wm_strncpy ( Buff, Data, 10 );
        Buff [ 10 ] = 0;
        //TRACE (( socket_TraceLevel, Buff ));

		wm_sprintf(BuffDisp, "\r\n Buffer: %s \r\n", Buff);
		adl_atSendResponse(ADL_AT_UNS, BuffDisp);

		// Verifica se o comando foi entendido pelo servidor, se sim, fechar Socket TCP
		sreturn = wm_strncmp ( Buff, "REGISTRADO", 10 );

		if (sreturn==0)
		{
			//socket_liberado = TRUE;
			Socket_stop();
			adl_atSendResponse(ADL_AT_UNS, "\r\n REGISTRADO OK \r\n");
		}

		

		
	}
	else if ( DataLen==0 && Data==NULL)
	{
		//TRACE (( socket_TraceLevel,"tcp_pfDataHnd: Socket close" ));  

		adl_atSendResponse(ADL_AT_UNS, "\r\n tcp_pfDataHdn: SOCKET CLOSE \r\n");
		
	}
	adl_atSendResponse(ADL_AT_UNS, "\r\nTCP_DATAHAND END\r\n");
	return DataLen; // Accept all data => eDlib delete them from its queue
	
}

// --> Parte SMS
bool SMS_CLOCK_Handler(ascii *SmsTel, ascii *SmsTimeOrLength, ascii *SmsText)
{
    bool breturn = TRUE;

}

void SMS_CLOCK_ctrl_Handler(u8 Event, u16 Nb)
{
	adl_atSendResponse(ADL_AT_UNS, "\r\n SMS Handler Clock \r\n");
}

s16 CGATT_0_Response_Handler (adl_atResponse_t *paras)
{
	adl_atSendResponse(ADL_AT_UNS, "\r\nCGATT_0_RESPONSE_HANDLER START\r\n");
	
	//TRACE (( socket_TraceLevel, "CGATT_Response_Handler" ));  
	switch ( paras->RspID )
    {
		case ADL_STR_OK:
			//GPRS is attached, we set a timer 
			//TRACE (( socket_TraceLevel, "CGATT_0_Response_Handler: ADL_STR_OK" ));  
			ip_Unsubscribe(); 
			break;
	}
	adl_atSendResponse(ADL_AT_UNS, "\r\nCGATT_0_RESPONSE_HANDLER END\r\n");
	return FALSE;
}

// Gerenciador de Conexão TCP - Configuração TCP
void tcp_ConnectHandler ( s32 Event, u32 id )
{
	adl_atSendResponse(ADL_AT_UNS, "\r\nTCP_CONNECTHANDLER START\r\n");
	ascii Buff[50];
	s8  sReturn = ERROR;
	u8 Listen=1;
	ed_SocketSetupParams_t Params;
	ed_dialupIPInfos_t Infos;
	ascii locIP[ 20 ];
	ascii distIP[ 20 ];
	ascii gway[ 20 ];

	wm_sprintf ( Buff, " tcp_ConnectHandler: %d", Event);
	//TRACE (( socket_TraceLevel, Buff ));
  
	
	 switch ( Event )
    {
		case ED_OK_GPRS_SESSION_SET:  // Setando conexão GPRS 
			
			// Partes comentadas eram utilizadas como TRACE
			
			Params.TcpPort=80;
			Params.TcpTxDelay=200;
			wm_sprintf ( Params.TcpServ, "201.17.212.120");
			sReturn = ed_SocketSetConfig ( ED_ID_TCPSOCKET_1, &Params );
			//wm_sprintf ( Buff, " ed_SocketSetConfig: %d", sReturn);
			sReturn=ed_SocketGetConfig ( ED_ID_TCPSOCKET_1, &Params );
			//wm_sprintf ( Buff, " ed_SocketGetConfig: %d", sReturn);
			//wm_sprintf ( Buff, " TcpPort: %d", Params.TcpPort);
			//wm_sprintf ( Buff, " TcpServ: %s", Params.TcpServ);
			//wm_sprintf ( Buff, " TcpTxDelay: %d", Params.TcpTxDelay);


			sReturn=ed_DialupGetIpInformations(&Infos);
			
			wm_sprintf ( Buff, "\r\nLocal IP : %s\r\n", ConvertIP_itoa ( Infos.LocalIP, locIP ));
			adl_atSendResponse(ADL_AT_UNS, Buff);
			wm_sprintf ( Buff, "DistantIP: %s\r\n", ConvertIP_itoa ( Infos.DistantIP, distIP ));
			adl_atSendResponse(ADL_AT_UNS, Buff);
			wm_sprintf ( Buff, "Gateway: %s\r\n", ConvertIP_itoa ( Infos.Gateway, gway ));
			adl_atSendResponse(ADL_AT_UNS, Buff);
			
			//Envia pedido de abertura de Socket TCP 
			sReturn=ed_SocketTCPStart ( ED_ID_TCPSOCKET_1, 0,tcp_pfResponseCbk, tcp_pfDataHnd, tcp_pfDataRequest);


			//wm_sprintf ( Buff, "ed_SocketTCPStart: %d", sReturn);

		break;

	case ED_OK_ON_HOOK :            // "Log off" da rede GPRS
		adl_atCmdCreate("at+cgatt=0",TRUE, (adl_atRspHandler_t) CGATT_0_Response_Handler,"OK",NULL );
		break;
	}
	 adl_atSendResponse(ADL_AT_UNS, "\r\nCONNECT_HANDLER END\r\n");
}



void Timer_Handler(u8 Id)
{
	adl_atSendResponse(ADL_AT_UNS, "\r\nTIMER_HANDLER START\r\n");
	s8  sReturn = ERROR;
	ascii Buff[50];
	adl_tmr_t *tt;
	u16 timeout_period=20;

	//Tenta uma conexão IP a cada 2 segundos 
	
	// Estabelece sesao IP com o provedor de servico e recebe um endereco IP
	sReturn =ip_Connect ( IP_BEARER_GPRS, IP_MODE_CONNECT);
	adl_atSendResponse(ADL_AT_UNS, "\r\n Establish IP session with service provider and Receives IP Address \r\n");

	
	//wm_sprintf ( Buff, " ip_Connect: %d", sReturn);
	//TRACE (( socket_TraceLevel, Buff ));
	if(sReturn!=0)
	{
		tt=(adl_tmr_t *)adl_tmrSubscribe(FALSE, timeout_period, ADL_TMR_TYPE_100MS, (adl_tmrHandler_t) Timer_Handler);			
	}
	adl_atSendResponse(ADL_AT_UNS, "\r\nTIMER_HANDLER END\r\n");
}

s16 CGATT_Response_Handler (adl_atResponse_t *paras)
{
	adl_atSendResponse(ADL_AT_UNS, "\r\nCGATT_RESPONSE_HANDLER START\r\n");
	adl_tmr_t *tt;
	u16 timeout_period=20;
	
	//TRACE (( socket_TraceLevel, "CGATT_Response_Handler"));
	switch ( paras->RspID )
    {
		case ADL_STR_OK:
			// Logado na Rede GPRS, deve-se setar um periodo de timeout: timeout_period 
			//TRACE (( socket_TraceLevel, "ADL_STR_OK" ));
			tt=(adl_tmr_t *)adl_tmrSubscribe(FALSE, timeout_period, ADL_TMR_TYPE_100MS, (adl_tmrHandler_t) Timer_Handler);
			adl_atSendResponse(ADL_AT_UNS, "\r\nCGATT OK!\r\n");
			break;
	}
	adl_atSendResponse(ADL_AT_UNS, "\r\nCGATT_RESPONSE_HANDLER END\r\n");
	return FALSE;
}



//Pin Code CallBack
void SimHandler ( u8 Event )
{
	adl_atSendResponse(ADL_AT_UNS, "\r\nSIMHANDLER START\r\n");
	ascii Buff[50];

	wm_sprintf ( Buff, "SimHandler: %d\r\n",Event );
	
	 switch ( Event )
    {
        case ADL_SIM_STATE_FULL_INIT :
			//Pin Code OK
			//Gprs attach
			adl_atCmdCreate("at+cgatt=1",TRUE, (adl_atRspHandler_t) CGATT_Response_Handler,"OK",NULL );
			adl_atSendResponse(ADL_AT_UNS, "\r\nPin Code OK - Sends CGATT=1 command\r\n");
			break;
	}
	adl_atSendResponse(ADL_AT_UNS, "\r\nFIM SIMHANDLER\r\n");
}


/***************************************************************************/
/*  Function   : Socket_start                                                   */
/*-------------------------------------------------------------------------*/
/*  Object     : Start Application Function                                */
/*                                                                         */
/*--------------------+---+---+---+----------------------------------------*/
/*  Variable Name     |IN |OUT|GLB|  Utilisation                           */
/*--------------------+---+---+---+----------------------------------------*/
/* Port               | X |   |   | Start command port                     */
/*--------------------+---+---+---+----------------------------------------*/
/***************************************************************************/
void Socket_start ( void )//( u8 Port )
{
	adl_atSendResponse(ADL_AT_UNS, "\r\nSOCKETSTART START\r\n");
    bool bReturn = TRUE;
	ascii Buff[50];
	ascii * PinCode=NULL;//"8888";//NULL;
	s8  sReturn = ERROR;
	adl_simState_e Sim_State;


	//Subscribe to IPConnect library
	sReturn =ip_Subscribe ( tcp_ConnectHandler );
	//wm_sprintf ( Buff, " ip_Subscribe: %d", sReturn);
	//TRACE (( socket_TraceLevel, Buff ));


	//Enter Pin Code
	Sim_State=adl_simGetState();
	if(Sim_State==ADL_SIM_EVENT_FULL_INIT)
	{
		adl_atSendResponse(ADL_AT_UNS, "\r\nSimState==JA FOI INICIADO\r\n");
		
		///*Comando para habilitar o CHIP --> PIN CODE
		//adl_atCmdCreate("at+cpin=3765",TRUE, (adl_atRspHandler_t) CGATT_0_Response_Handler,"OK+CPIN",NULL );
		//*/
		//adl_atCmdCreate("at+cpin",TRUE, (adl_atRspHandler_t) CGATT_0_Response_Handler,"OK+CPIN",NULL );
		
		adl_atCmdCreate("at+cgatt=1",TRUE, (adl_atRspHandler_t) CGATT_Response_Handler,"OK+CGATT",NULL );
		
		adl_atSendResponse(ADL_AT_UNS, "\r\nPin Code OK - Trying CGATT=1\r\n");
				
	}
		else	
		{
			adl_simSubscribe(SimHandler,PinCode);
			adl_atSendResponse(ADL_AT_UNS, "\r\nRECEBE CODIGO PIN\r\n");
		}



	adl_atSendResponse(ADL_AT_UNS, "\r\nSOCKETSTART END\r\n");

	// Inicio do Timer para Envio das Coordenadas
	//Time_Get_Request = 100; // 100 * 100ms = 10s
	//adl_tmrSubscribe(TRUE, Time_Get_Request, ADL_TMR_TYPE_100MS, (adl_tmrHandler_t)Temporizador);


}


/***************************************************************************/
/*  Function   : Socket_stop                                                  */
/*-------------------------------------------------------------------------*/
/*  Object     : Stop Application Function                                 */
/*                                                                         */
/*-------------------------------------------------------------------------*/
/*  Variable Name     |IN |OUT|GLB|  Utilisation                           */
/*--------------------+---+---+---+----------------------------------------*/
/***************************************************************************/
void Socket_stop ( void )
{
	adl_atSendResponse(ADL_AT_UNS, "\r\nSOCKETSTOP START\r\n");
	s8  sReturn = ERROR;
	ascii Buff[50];
    
    // Unsubscribe from Socket service
	sReturn = ed_SocketLTCPStop ( ED_ID_TCPSOCKET_1, tcp_Stop_pfResponseCbk );
	wm_sprintf ( Buff, " ed_SocketLTCPStop: %d", sReturn);
	//TRACE (( socket_TraceLevel, Buff ));
	sReturn =ip_Connect ( IP_BEARER_GPRS, IP_MODE_DISCONNECT);
	wm_sprintf ( Buff, " ip_Connect: %d", sReturn);
	//TRACE (( socket_TraceLevel, Buff ));
	

	adl_atSendResponse(ADL_AT_UNS, "\r\nSOCKETSTOP END\r\n");
	socket_liberado = TRUE;
	adl_atSendResponse(ADL_AT_UNS, "\r\n PRONTO PARA NOVA CONEXAO \r\n");

    
}



/***************************************************************************/
/*  Function   : Socket_init                                                  */
/*-------------------------------------------------------------------------*/
/*  Object     : Application entry point                                   */
/*                                                                         */
/*-------------------------------------------------------------------------*/
/*  Variable Name     |IN |OUT|GLB|  Utilisation                           */
/*--------------------+---+---+---+----------------------------------------*/
/*  InitType          | X |   |   | Application Init state                 */
/*--------------------+---+---+---+----------------------------------------*/
/*  PinCode           | X |   |   | PIN code to use on SIM service subs.   */
/*--------------------+---+---+---+----------------------------------------*/
/*  ApplicationData   | X | X |   | Application data struct to fill        */
/*--------------------+---+---+---+----------------------------------------*/
/***************************************************************************/
void Socket_init( adl_InitType_e InitType, ascii * PinCode, ma_Element_t * ApplicationData )
{

	//ascii Telefone [20];

	//wm_sprintf(Telefone, "03191221337");

    // Fill application data structure
    ApplicationData->AppName = Socket_NameBuffer;
    ApplicationData->AppCmd = SOCKET_CMD_START;
    ApplicationData->AppStart = Socket_start;
    ApplicationData->AppStop = Socket_stop;
	
	/* Configura parametros de conexao */
	//Set_GPRS();

	/* Inicio do Timer para Envio das Coordenadas */
	Time_Get_Request = 70; // 100 * 100ms = 20s
	adl_tmrSubscribe(TRUE, Time_Get_Request, ADL_TMR_TYPE_100MS, (adl_tmrHandler_t)Temporizador);

	/* Inicializa GPS e define tempo de acesso ao mesmo --> GPS Callback Handler */
	gps_PollingTimer = 20;
	gps_GpsHandle = adl_gpsSubscribe ( gps_GpsHandler, gps_PollingTimer );


	/* SMS */
	sms_lcd_clock_Handle_txt = adl_smsSubscribe(SMS_CLOCK_Handler, SMS_CLOCK_ctrl_Handler, ADL_SMS_MODE_TEXT);

	

	/* GPIO */
	HANDLE_GPIO = adl_ioSubscribe(ADL_IO_Q25X1_GPO_1, 0,0,0, (adl_ioHdlr_f) NULL);
	//adl_ioWrite(HANDLE_GPIO, ADL_IO_Q25X1_GPO_1, 0x00000000);//ADL_IO_Q25X1_GPO_1);
	adl_ioWrite(HANDLE_GPIO, ADL_IO_Q25X1_GPO_1, ADL_IO_Q25X1_GPO_1);

	/* Keyboard service */
    key_init();

	//adl_callSetup(Telefone,ADL_CALL_MODE_VOICE);
	
}

/*
void UART2_Enable ( void )
{

	adl_atCmdCreate( "AT+WMFM=0,1,2", FALSE, Res_WMFM1_Handler, "*", NULL );

	adl_atCmdCreate( "AT+IPR=19200", ADL_AT_PORT_TYPE( ADL_AT_UART2, FALSE ), Res_IPR_Handler, "*", NULL );

	Handle = adl_fcmSubscribe( ADL_FCM_FLOW_V24_UART2, fcmCtrlH, fcmDataH );

}

void fcmCtrlH ( u8 event )
{
    switch ( Event )
    {
        case ADL_FCM_RET_ERROR_GSM_GPRS_ALREADY_OPENNED :
            TRACE (( 1, "Flow GSM already Opened"));
        break;
	}
}

void fcmDataH ( u16 DataLen, u8 * Data )
{
    u8 result;

    adl_atSendResponse(ADL_AT_UNS, "\r\n<- Receive FCM Data Blocks \r\n");
    DUMP ( 1, Data, DataLen );

}

bool Res_WMFM1_Handler ( void )
{
	return TRUE;
}

bool Res_IPR_Handler ( void )
{
	return TRUE;
}

*/

/****************************************************************************/
/*  Function   : gps_GpsHandler                                             */
/*--------------------------------------------------------------------------*/
/*  Object : Gps events handler                                             */
/*                                                                          */
/*  Return : According to GpsAutoStart parameter                            */
/*                                                                          */
/*--------------------+---+---+---+-----------------------------------------*/
/*  Variable Name     |IN |OUT|GLB|  Utilisation                            */
/*--------------------+---+---+---+-----------------------------------------*/
/* Event              | X |   |   | Notified event                          */
/*--------------------+---+---+---+-----------------------------------------*/
/* GPSData            | X |   |   | Polling GPS Data                        */
/*--------------------+---+---+---+-----------------------------------------*/
/****************************************************************************/
bool gps_GpsHandler ( adl_gpsEvent_e Event, adl_gpsData_t * GPSData )
{
	u8 Tamanho1;
	u8 Tamanho2;
        
    // Switch on event
    switch ( Event )
    {
        case ADL_GPS_EVENT_POLLING_DATA :
        {
            // Received data from GPS
            ascii RspStr [ 80 ];
			ascii Correcao [ 80 ];
            adl_gpsPosition_t Position;

            // Build string
            wm_sprintf ( RspStr, "\r\n+GPSTIME: %s,%s\r\n", GPSData->Position.UTC_time, GPSData->Position.date );
            adl_atSendResponse ( ADL_AT_UNS, RspStr );

			adl_gpsGetPosition ( gps_GpsHandle, &Position );
            wm_sprintf ( RspStr + wm_strlen ( RspStr ), "%s,%s,%s,%s\r\n",
                                     Position.latitude,
                                     Position.latitude_Indicator,
                                     Position.longitude,
                                     Position.longitude_Indicator );

			adl_atSendResponse ( ADL_AT_UNS, RspStr );

			//wm_sprintf ( Correcao + wm_strlen ( Correcao ), "Correcao: %s,%s,%s,%s\r\n",Position.geoid_Sep,Position.geoid_Sep_Unit,Position.Age_Dif_Cor,Position.Dif_Ref_ID);
			//adl_atSendResponse (ADL_AT_UNS, Correcao);

			Tamanho1 = wm_strlen(Position.latitude);
			Tamanho2 = wm_strlen(Position.longitude);

			if ((Tamanho1>0)&&(Tamanho2>0))
			{
			   wm_sprintf ( Latitude , "%s", Position.latitude);
			   wm_sprintf ( LatInd, "%s", Position.latitude_Indicator);

			   wm_sprintf (Longitude, "%s", Position.longitude);
			   wm_sprintf (LonInd, "%s", Position.longitude_Indicator);

			   Atualiza_GPS = TRUE;
			}


        }
        break;
    }
	return gps_GpsAutoStart;
    
}

Log:

--------------------Configuration: MultiApp - Win32 Wismo_Target--------------------
 
 
-----------------------------
 Software Generation Toolkit
-----------------------------
 
 SGT_VER  = v1.2.11
 SGT_DIR  = /cygdrive/C/OpenAT/Tools/SGT/v1.2.11
 Scripts path for SGT :
  /cygdrive/C/OpenAT/Tools/SGT/v1.2.11/script_sgt
 
 Type help_sgt for a list of SGT commands
 
-----------------------------
 
Check environment settings...
 
    Launch a full library or binary process
 
 
---------------------------------------
 
... Creating library gcc_MultiApp.lib with gcc_arm parameter
 
---------------------------------------
 
 
---------------------------------------
Cleaning temporary files       (*.tmp / *.trc)
 
 
---------------------------------------
 Generation done with SGT v1.2.11
 Library generated    : gcc_MultiApp.lib
 Compiler keyword     : gcc_arm
 Compiler release     : GCC ARM
 C compiler path      : /cygdrive/C/OpenAT/Tools/GCC/bin/arm-elf-gcc
 ASM compiler path    : /cygdrive/C/OpenAT/Tools/GCC/bin/arm-elf-gcc
 customer release      : gcc
 Name of the current directory : gcc
 Log file             : ../out/gcc_MultiApp_status.log
 Release of the environement : CYGWIN_NT-5.0 MicoEstrela 1.5.10(0.116/4/2) 2004-05-25 22:07 i686 unknown unknown Cygwin
---------------------------------------
 
 
 
---------------------------------------
    Find errors occurred when using SGT
 
Analyze errors in Log files
 
---------------------------------------
Analyze errors in tmp files if they exists.
 
---------------------------------------
Libraries available in out directory :
gcc_MultiApp.lib, 
---------------------------------------
---------------------------------------
    End process.
 
--------------------Configuration: IPConnect - Win32 Wismo_Target--------------------
 
 
-----------------------------
 Software Generation Toolkit
-----------------------------
 
 SGT_VER  = v1.2.11
 SGT_DIR  = /cygdrive/C/OpenAT/Tools/SGT/v1.2.11
 Scripts path for SGT :
  /cygdrive/C/OpenAT/Tools/SGT/v1.2.11/script_sgt
 
 Type help_sgt for a list of SGT commands
 
-----------------------------
 
Check environment settings...
 
    Launch a full library or binary process
 
 
---------------------------------------
 
... Creating library gcc_IPConnect.lib with gcc_arm parameter
 
---------------------------------------
 
 
---------------------------------------
Cleaning temporary files       (*.tmp / *.trc)
 
 
---------------------------------------
 Generation done with SGT v1.2.11
 Library generated    : gcc_IPConnect.lib
 Compiler keyword     : gcc_arm
 Compiler release     : GCC ARM
 C compiler path      : /cygdrive/C/OpenAT/Tools/GCC/bin/arm-elf-gcc
 ASM compiler path    : /cygdrive/C/OpenAT/Tools/GCC/bin/arm-elf-gcc
 customer release      : gcc
 Name of the current directory : gcc
 Log file             : ../out/gcc_IPConnect_status.log
 Release of the environement : CYGWIN_NT-5.0 MicoEstrela 1.5.10(0.116/4/2) 2004-05-25 22:07 i686 unknown unknown Cygwin
---------------------------------------
 
 
 
---------------------------------------
    Find errors occurred when using SGT
 
Analyze errors in Log files
 
---------------------------------------
Analyze errors in tmp files if they exists.
 
---------------------------------------
Libraries available in out directory :
gcc_IPConnect.lib, 
---------------------------------------
---------------------------------------
    End process.
 
--------------------Configuration: Socket - Win32 Wismo_Target--------------------
 
 
-----------------------------
 Software Generation Toolkit
-----------------------------
 
 SGT_VER  = v1.2.11
 SGT_DIR  = /cygdrive/C/OpenAT/Tools/SGT/v1.2.11
 Scripts path for SGT :
  /cygdrive/C/OpenAT/Tools/SGT/v1.2.11/script_sgt
 
 Type help_sgt for a list of SGT commands
 
-----------------------------
 
Check environment settings...
 
    Launch a full library or binary process
 
 
---------------------------------------
 
    Copy all needed library and object files
 
 Make links ../../../Libraries/MultiApp/gcc/out/gcc_MultiApp.lib ../out/gcc_MultiApp.lib
 Make links ../../../Libraries/IPConnect/gcc/out/gcc_IPConnect.lib ../out/gcc_IPConnect.lib
 Make links C:/OpenAT/OtherLibs/TCPIP/v3.02/gcc_eDLib_302.lib ../out/gcc_eDLib_302.lib
 Make links /cygdrive/C/OpenAT/V302/TgtGen/Adl/Library/gcc_wmadl_302.b03.lib ../out/gcc_wmadl_302.b03.lib
---------------------------------------
 
... Link step in progress ...
 
 
... Link gcc_Socket_32.bin ...
 
/cygdrive/C/OpenAT/Tools/GCC/bin/arm-elf-nm: gcc_Socket_32.elf: No such file or directory
make: *** [make_single_bin] Error 1
 
    Build an X-MODEM binary  : 'gcc_Socket_32.wpb.dwl'
 
 
... Convert gcc_Socket_32.wpb in X-MODEM format ...
 
genBin : Version v1a06 Copyright (c) WAVECOM
genBin : No Error
 
... Build gcc_Socket_32.wpb.dwl ...
 
---------------------------------------
 
 
---------------------------------------
    Find errors occurred when using SGT
 
Analyze errors in Log files
 
 
WARNING  :  misc_status.log is incomplete. Check manually if any errors exist
---------------------------------------
Analyze errors in tmp files if they exists.
 
---------------------------------------
Libraries available in out directory :
gcc_eDLib_302.lib, gcc_IPConnect.lib, gcc_MultiApp.lib, gcc_wmadl_302.b03.lib, 
---------------------------------------
---------------------------------------
    End process.
 

Socket - 1 error(s), 1 warning(s)

Thanks for all the efforts!

Henrique


#9

hmmmm…

Could you check the .mak file in the project directory?

is there keyboard.c in the source list? for example:

SRC_C_LIST =  \
main.c \
Socket.c \
keyboard.c \

Also, are you able to run the program in RTE from Visual C++?

Best Regards,
Jan


#10

Well Jan…

  1. There´s no “keyboard.c” in Socket.mak (why not if I created the file inside the project?)
    Can I change with a Notepad or there´s a proper way?

  2. No… it won´t run (RTE) with keyboard calling or not. It points to code on “ipconnect.c” that I didn´t even change.

--------------------Configuration: IPConnect_rte - Win32 Debug--------------------
Compiling...
ipconnect.c
c:\wavecom\projetos_temp\libraries\ipconnect\src\ipconnect.c(142) : error C2275: 's8' : illegal use of this type as an expression
        c:\openat\v302\tgtgen\wmheader\wm_types.h(48) : see declaration of 's8'
c:\wavecom\projetos_temp\libraries\ipconnect\src\ipconnect.c(142) : error C2146: syntax error : missing ';' before identifier 'sReturn'
c:\wavecom\projetos_temp\libraries\ipconnect\src\ipconnect.c(142) : error C2065: 'sReturn' : undeclared identifier
c:\wavecom\projetos_temp\libraries\ipconnect\src\ipconnect.c(143) : error C2275: 's8' : illegal use of this type as an expression
        c:\openat\v302\tgtgen\wmheader\wm_types.h(48) : see declaration of 's8'
c:\wavecom\projetos_temp\libraries\ipconnect\src\ipconnect.c(143) : error C2146: syntax error : missing ';' before identifier 'TmpReturn'
c:\wavecom\projetos_temp\libraries\ipconnect\src\ipconnect.c(143) : error C2065: 'TmpReturn' : undeclared identifier
c:\wavecom\projetos_temp\libraries\ipconnect\src\ipconnect.c(208) : warning C4047: '=' : 'void (__cdecl *)(int ,int )' differs in levels of indirection from 'char *'
c:\wavecom\projetos_temp\libraries\ipconnect\src\ipconnect.c(269) : warning C4028: formal parameter 2 different from declaration
c:\wavecom\projetos_temp\libraries\ipconnect\src\ipconnect.c(269) : warning C4024: 'ed_DialupConnectionStart' : different types for formal and actual parameter 1
c:\wavecom\projetos_temp\libraries\ipconnect\src\ipconnect.c(277) : warning C4028: formal parameter 2 different from declaration
c:\wavecom\projetos_temp\libraries\ipconnect\src\ipconnect.c(277) : warning C4024: 'ed_DialupConnectionStop' : different types for formal and actual parameter 1
c:\wavecom\projetos_temp\libraries\ipconnect\src\ipconnect.c(332) : warning C4047: '==' : 'void (__cdecl *)(int ,int )' differs in levels of indirection from 'char *'
c:\wavecom\projetos_temp\libraries\ipconnect\src\ipconnect.c(333) : warning C4047: '==' : 'unsigned short (__cdecl *)(unsigned short ,unsigned char *,int )' differs in levels of indirection from 'char *'
c:\wavecom\projetos_temp\libraries\ipconnect\src\ipconnect.c(404) : warning C4047: '==' : 'void (__cdecl *)(int ,int )' differs in levels of indirection from 'char *'
c:\wavecom\projetos_temp\libraries\ipconnect\src\ipconnect.c(405) : warning C4047: '==' : 'void (__cdecl *)(unsigned short ,int )' differs in levels of indirection from 'char *'
Error executing cl.exe.

Socket_rte.dll - 6 error(s), 9 warning(s)

I have no idea what to do… :slight_smile:

thanks,

Henrique


#11

You can change it with Notepad. I always adjusted the .mak file with a text editor, I don’t think that this is done automatically. If somebody here knows how the .mak file can be updated without editing it, I would like to know!

oh, oh! I have no clue either… Anybody else here have seen this??

Best Regards,
Jan


#12

If it makes things easier… here´s the whole project:

http://us.f1.yahoofs.com/bc/3916e96b/bc/socket/Socket.zip?bfnsM0DBcXp1e8bl

Best Regards,

Henrique


#13

Jan… the keyboard.c wasn´t inside the src folder. Now it is and it´s declared on the Socket.mak.

When I try to run Visual C++ returns no Errors and 18 Warnings. But the dwl file won´t be generated.

Things here only work when I get 3 errors… this way everything works fine… weird… but that´s what really happen.

Here´s the log:

--------------------Configuration: MultiApp - Win32 Wismo_Target--------------------
 
 
-----------------------------
 Software Generation Toolkit
-----------------------------
 
 SGT_VER  = v1.2.11
 SGT_DIR  = /cygdrive/C/OpenAT/Tools/SGT/v1.2.11
 Scripts path for SGT :
  /cygdrive/C/OpenAT/Tools/SGT/v1.2.11/script_sgt
 
 Type help_sgt for a list of SGT commands
 
-----------------------------
 
Check environment settings...
 
    Launch a full library or binary process
 
 
---------------------------------------
 
... Creating library gcc_MultiApp.lib with gcc_arm parameter
 
---------------------------------------
 
 
---------------------------------------
Cleaning temporary files       (*.tmp / *.trc)
 
 
---------------------------------------
 Generation done with SGT v1.2.11
 Library generated    : gcc_MultiApp.lib
 Compiler keyword     : gcc_arm
 Compiler release     : GCC ARM
 C compiler path      : /cygdrive/C/OpenAT/Tools/GCC/bin/arm-elf-gcc
 ASM compiler path    : /cygdrive/C/OpenAT/Tools/GCC/bin/arm-elf-gcc
 customer release      : gcc
 Name of the current directory : gcc
 Log file             : ../out/gcc_MultiApp_status.log
 Release of the environement : CYGWIN_NT-5.0 MicoEstrela 1.5.10(0.116/4/2) 2004-05-25 22:07 i686 unknown unknown Cygwin
---------------------------------------
 
 
 
---------------------------------------
    Find errors occurred when using SGT
 
Analyze errors in Log files
 
---------------------------------------
Analyze errors in tmp files if they exists.
 
---------------------------------------
Libraries available in out directory :
gcc_MultiApp.lib, 
---------------------------------------
---------------------------------------
    End process.
 
--------------------Configuration: IPConnect - Win32 Wismo_Target--------------------
 
 
-----------------------------
 Software Generation Toolkit
-----------------------------
 
 SGT_VER  = v1.2.11
 SGT_DIR  = /cygdrive/C/OpenAT/Tools/SGT/v1.2.11
 Scripts path for SGT :
  /cygdrive/C/OpenAT/Tools/SGT/v1.2.11/script_sgt
 
 Type help_sgt for a list of SGT commands
 
-----------------------------
 
Check environment settings...
 
    Launch a full library or binary process
 
 
---------------------------------------
 
... Creating library gcc_IPConnect.lib with gcc_arm parameter
 
---------------------------------------
 
 
---------------------------------------
Cleaning temporary files       (*.tmp / *.trc)
 
 
---------------------------------------
 Generation done with SGT v1.2.11
 Library generated    : gcc_IPConnect.lib
 Compiler keyword     : gcc_arm
 Compiler release     : GCC ARM
 C compiler path      : /cygdrive/C/OpenAT/Tools/GCC/bin/arm-elf-gcc
 ASM compiler path    : /cygdrive/C/OpenAT/Tools/GCC/bin/arm-elf-gcc
 customer release      : gcc
 Name of the current directory : gcc
 Log file             : ../out/gcc_IPConnect_status.log
 Release of the environement : CYGWIN_NT-5.0 MicoEstrela 1.5.10(0.116/4/2) 2004-05-25 22:07 i686 unknown unknown Cygwin
---------------------------------------
 
 
 
---------------------------------------
    Find errors occurred when using SGT
 
Analyze errors in Log files
 
---------------------------------------
Analyze errors in tmp files if they exists.
 
---------------------------------------
Libraries available in out directory :
gcc_IPConnect.lib, 
---------------------------------------
---------------------------------------
    End process.
 
--------------------Configuration: Socket - Win32 Wismo_Target--------------------
 
 
-----------------------------
 Software Generation Toolkit
-----------------------------
 
 SGT_VER  = v1.2.11
 SGT_DIR  = /cygdrive/C/OpenAT/Tools/SGT/v1.2.11
 Scripts path for SGT :
  /cygdrive/C/OpenAT/Tools/SGT/v1.2.11/script_sgt
 
 Type help_sgt for a list of SGT commands
 
-----------------------------
 
Check environment settings...
 
    Launch a full library or binary process
 
 
---------------------------------------
 
Get ../../src/Socket.c Socket.c
 Use  YTPP
... Compiling Socket.c
 
Socket.c: In function `tcp_pfResponseCbk':
Socket.c:166: warning: passing arg 3 of `ed_SocketTCPStart' from incompatible pointer type
Socket.c:166: warning: passing arg 4 of `ed_SocketTCPStart' from incompatible pointer type
Socket.c:166: warning: passing arg 5 of `ed_SocketTCPStart' from incompatible pointer type
Socket.c: In function `tcp_ConnectHandler':
Socket.c:370: warning: passing arg 3 of `ed_SocketTCPStart' from incompatible pointer type
Socket.c:370: warning: passing arg 4 of `ed_SocketTCPStart' from incompatible pointer type
Socket.c:370: warning: passing arg 5 of `ed_SocketTCPStart' from incompatible pointer type
Socket.c: At top level:
Socket.c:465: warning: type mismatch with previous implicit declaration
Socket.c:117: warning: previous implicit declaration of `Socket_start'
Socket.c:465: warning: `Socket_start' was previously implicitly declared to return `int'
Socket.c: In function `Socket_start':
Socket.c:475: warning: passing arg 1 of `ip_Subscribe' from incompatible pointer type
Socket.c: At top level:
Socket.c:524: warning: type mismatch with previous implicit declaration
Socket.c:276: warning: previous implicit declaration of `Socket_stop'
Socket.c:524: warning: `Socket_stop' was previously implicitly declared to return `int'
Socket.c: In function `Socket_stop':
Socket.c:530: warning: passing arg 2 of `ed_SocketLTCPStop' from incompatible pointer type
Socket.c: In function `Socket_init':
Socket.c:570: warning: assignment discards qualifiers from pointer target type
Socket.c:571: warning: assignment discards qualifiers from pointer target type
Socket.c:572: warning: assignment from incompatible pointer type
 
---------------------------------------
 
make: *** No rule to make target `keyboard.o', needed by `gcc_Socket_32'.  Stop.
 
    Build an X-MODEM binary  : 'gcc_Socket_32.wpb.dwl'
 
 
... Convert gcc_Socket_32.wpb in X-MODEM format ...
 
genBin : Version v1a06 Copyright (c) WAVECOM
genBin : No Error
 
... Build gcc_Socket_32.wpb.dwl ...
 
---------------------------------------
 
 
---------------------------------------
    Find errors occurred when using SGT
 
Analyze errors in Log files
 
 
WARNING  :  misc_status.log is incomplete. Check manually if any errors exist
---------------------------------------
Analyze errors in tmp files if they exists.
 
---------------------------------------
Libraries available in out directory :
gcc_eDLib_302.lib, gcc_IPConnect.lib, gcc_MultiApp.lib, gcc_wmadl_302.b03.lib, 
---------------------------------------
---------------------------------------
    End process.
 

Socket - 0 error(s), 18 warning(s)

Best Regards,

Henrique


#14

There seems to be still a problem with your keyboard.c file or the makefile:

Same here… need to have 3 errors for things to work :laughing:

Best Regards,
Jan


#15

Hi Jan… I solved the problem but I still don´t know what really happened.

First: I put all the “keyboard.c” code lines inside the “socket.c”.

I got erros anyway… then I realized that socket.c wasn´t finding the keyboard.h (even though the keyboard.h was in the proper path and it was created inside the project) the code lines inside the keyboard.h.

So… I put the line codes from the keyboard.h in the socket.h

But Visual C++ couldn´t even make the type key_handler_f exist!

So… I cut the code that once was in “keyboard.h” and then in “socket.h” and I paste them between the prototype line codes of “socket.c”.

Now the Visual C++ recognizes the type “key_handler_f”… and everything is fine!

Really weird… :frowning:

Thanks for all the Help! Maybe this crazy thing may help some newbie as I am!

Best Regards,

Henrique