diff src/g23m-fad/app/app_bat.c @ 174:90eb61ecd093

src/g23m-fad: initial import from TCS3.2/LoCosto
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 12 Oct 2016 05:40:46 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/g23m-fad/app/app_bat.c	Wed Oct 12 05:40:46 2016 +0000
@@ -0,0 +1,3671 @@
+/* 
++------------------------------------------------------------------------------
+|  File:       app_bat.c
++------------------------------------------------------------------------------
+|  Copyright 2004 Texas Instruments Berlin, AG 
+|                 All rights reserved. 
+| 
+|                 This file is confidential and a trade secret of Texas 
+|                 Instruments Berlin, AG 
+|                 The receipt of or possession of this file does not convey 
+|                 any rights to reproduce or disclose its contents or to 
+|                 manufacture, use, or sell anything it may describe, in 
+|                 whole, or in part, without the specific written consent of 
+|                 Texas Instruments Berlin, AG. 
++----------------------------------------------------------------------------- 
+|  Purpose :  Test functions for testing the BAT interface -- command parser.
++----------------------------------------------------------------------------- 
+*/ 
+
+
+#define APP_BAT_C
+
+/*==== INCLUDES =============================================================*/
+
+#include "app_util.h"
+#include "bat.h"
+#include "bat_ctrl.h"
+#include "bat_intern.h"
+
+
+#include <string.h>             /* String functions, e. g. strncpy(). */
+#include <ctype.h>
+#include <stdlib.h>
+
+#include "vsi.h"                /* A lot of macros. */
+#ifndef _SIMULATION_
+#include "custom.h"
+#include "gsm.h"                /* A lot of macros. */
+#include "tools.h"              /* Common tools. */
+#endif /* _SIMULATION_ */
+
+#include "bat_cfg.h"
+#include "p_app.h"
+
+#ifdef FF_GPF_TCPIP
+#include "socket_api.h"
+#endif
+
+#include "app.h"
+
+
+#define NO_ADD_VAL 0xFFFFFFFF
+
+GLOBAL void app_bat_send_result_prim (U8 result, U32 add_info);
+
+/*
+ * Command handler
+ */
+GLOBAL char *app_bat_close(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_cmd_data(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_complete_test(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_flow_control_test1(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_uns_rcv_and_abort_test(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_multi_channel_creation_test(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_ctrl(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_deinit(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_delete(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_init(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_new(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_open(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_receive_data_cb(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_cpin(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_cnmi(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_ata(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_atd(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_ath(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_q_cscb(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_q_cpinf(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_q_cpol(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_t_cpol(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_cfun(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_cmgs(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_cmgl(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_cops(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_ccwa(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_signal_cb(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_uns_open (app_cmd_entry_t *, char *, char *, char *, core_func_t );
+
+GLOBAL char *app_bat_send_cpbr(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_cpbw(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_q_cgatt(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_q_cgact(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_cgatt(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_cgact(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_cgdcont(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_cgpco(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_q_cgpco(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_quer_set_clck (app_cmd_entry_t *, char *, char *, char *, core_func_t );
+GLOBAL char *app_bat_send_per_als (app_cmd_entry_t *, char *, char *, char *, core_func_t );
+GLOBAL char *app_bat_send_q_cscs(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_q_clcc(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_cscs(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_csms(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_cgsms(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_cpbf(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_cgmi(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_cgmm(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_cgmr(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_cgsn(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_stress_test(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+GLOBAL char *app_bat_send_cniv(app_cmd_entry_t *, char *, char *,char *, core_func_t);
+GLOBAL char *app_bat_send_q_cniv(app_cmd_entry_t *, char *, char *,char *, core_func_t);
+GLOBAL char *app_bat_send_custom(app_cmd_entry_t *, char *, char *, char *, core_func_t);
+
+/*
+ * Core functions (to be called by the command handler, if applicable)
+ */
+
+/* -- No core functions required for now */
+
+
+/* Command handler table. */
+static app_cmd_entry_t app_bat_cmd_table[] = {
+  { "bat_init",               app_bat_init,                 0,   "[InstNum]" },
+  { "bat_deinit",             app_bat_deinit,               0,   "" },
+  { "bat_new",                app_bat_new,                  0,   "[ClntNum]" },
+  { "bat_delete",             app_bat_delete,               0,   "[InstHndl]" },
+  { "bat_open",               app_bat_open,                 0,   "[InstHndl]" },
+  { "bat_uns_open",           app_bat_uns_open,             0,   "" },
+  { "bat_close",              app_bat_close,                0,   "[ClntHndl]"},
+  { "bat_ctrl",               app_bat_ctrl,                 0,   "" },
+  { "bat_receive_data_cb",    app_bat_receive_data_cb,      0,   "[ConHndl]" },
+  { "bat_signal_cb",          app_bat_signal_cb,            0,   "[ConHndl][SigNum]" },
+  { "bat_complete_test",      app_bat_complete_test,       0,   "" },
+  { "bat_flow_control_test1",     app_bat_flow_control_test1,       0,   "" },
+  { "bat_uns_rcv_and_abort_test",     app_bat_uns_rcv_and_abort_test,       0,   "" },
+  { "bat_multi_channel_creation_test",     app_bat_multi_channel_creation_test,       0,   "" },
+  { "bat_send_q_cscb",        app_bat_send_q_cscb,          0,   "[ClntHndl]" },
+  { "bat_send_q_clcc",        app_bat_send_q_clcc,          0,   "[ClntHndl]" },
+  { "bat_send_q_cscs",        app_bat_send_q_cscs,          0,   "[ClntHndl]" },
+  { "bat_send_q_cpinf",       app_bat_send_q_cpinf,         0,   "[ClntHndl]" },
+  { "bat_send_q_cpol",        app_bat_send_q_cpol,          0,   "[ClntHndl]" },
+  { "bat_send_q_cgatt",       app_bat_send_q_cgatt,         0,   "[ClntHndl]" },
+  { "bat_send_q_cgact",       app_bat_send_q_cgact,         0,   "[ClntHndl]" },
+  { "bat_send_q_cgpco",       app_bat_send_q_cgpco,         0,   "[ClntHndl]" },
+  { "bat_send_t_cpol",        app_bat_send_t_cpol,          0,   "[ClntHndl]" },
+  { "bat_send_cfun",          app_bat_send_cfun,            0,   "[ClntHndl]" },  
+  { "bat_send_cgmi",        app_bat_send_cgmi,          0,   "[ClntHndl]" },
+  { "bat_send_cgmm",        app_bat_send_cgmm,          0,   "[ClntHndl]" },
+  { "bat_send_cgmr",        app_bat_send_cgmr,          0,   "[ClntHndl]" },
+  { "bat_send_cgsn",        app_bat_send_cgsn,          0,   "[ClntHndl]" },
+  { "bat_send_cmgs",          app_bat_send_cmgs,            0,   "[ClntHndl]" },  
+  { "bat_send_cmgl",          app_bat_send_cmgl,            0,   "[ClntHndl] [UNREAD|READ|UNSENT|SENT|ALL]" },  
+  { "bat_send_cops",          app_bat_send_cops,            0,   "[ClntHndl]" },  
+  { "bat_send_cpin",          app_bat_send_cpin,            0,   "[ClntHndl]" },
+  { "bat_send_cnmi",          app_bat_send_cnmi,            0,   "[ClntHndl]" },  
+  { "bat_send_csms",          app_bat_send_csms,            0,   "[ClntHndl] [service]" },  
+  { "bat_send_cgsms",         app_bat_send_cgsms,           0,   "[ClntHndl] [service]" },  
+  { "bat_send_ccwa",          app_bat_send_ccwa,            0,   "[ClntHndl]" },
+  { "bat_send_ata",           app_bat_send_ata,             0,   "[ClntHndl]" },
+  { "bat_send_atd",           app_bat_send_atd,             0,   "[ClntHndl] [phone number]" },
+  { "bat_send_ath",           app_bat_send_ath,             0,   "[ClntHndl]" },
+  { "bat_send_cscs",          app_bat_send_cscs,            0,   "[ClntHndl] [charset]" },
+  { "bat_send_cpbr",           app_bat_send_cpbr,           0,   "[ClntHndl] [index]" },
+  { "bat_send_cpbw",          app_bat_send_cpbw,            0,   "[ClntHndl] [index] [name]" },
+  { "bat_send_cpbf",          app_bat_send_cpbf,            0,   "[ClntHndl] [search string]" },
+  { "bat_send_cgatt",         app_bat_send_cgatt,           0,   "[ClntHndl]" },
+  { "bat_send_cgact",         app_bat_send_cgact,           0,   "[ClntHndl]" },
+  { "bat_send_cgdcont",       app_bat_send_cgdcont,         0,   "[ClntHndl]" },
+  { "bat_send_cgpco",         app_bat_send_cgpco,           0,   "[ClntHndl]" },
+  { "bat_clck_query",         app_bat_quer_set_clck,        0,   "[ConHndl] [ConCom]" },
+  { "bat_send_per_als",       app_bat_send_per_als,         0,   "[ConHndl] [ConCom]" },
+  { "bat_stress_test",        app_bat_stress_test,          0,   "[ClntHndl]" }, 
+  { "bat_send_cniv",         app_bat_send_cniv,                 0,  "[ClntHndl]"},
+  { "bat_send_q_cniv",         app_bat_send_q_cniv,                 0,  "[ClntHndl]"},
+  { "bat_send_custom",        app_bat_send_custom,          0,   "[ClntHndl] [custom string]" }, 
+  { 0,                         0,                           0,   0},
+} ;
+
+
+/*==== Local data ============================================================*/
+
+typedef struct
+{
+  size_t size;
+} T_app_map_response_2_size;
+
+static T_app_map_response_2_size response_2_size[] =
+{
+  {sizeof(T_BAT_no_parameter)},            /* BAT_RES_AT_OK                  = 0x0     */
+  {sizeof(T_BAT_res_at_connect)},          /* BAT_RES_AT_CONNECT             = 0x1     */
+  {sizeof(T_BAT_no_parameter)},            /* BAT_RES_AT_NO_CARRIER_FINAL    = 0x2     */
+  {sizeof(T_BAT_res_plus_cme_error)},      /* BAT_RES_PLUS_CME_ERROR         = 0x3     */
+  {sizeof(T_BAT_res_plus_cms_error)},      /* BAT_RES_PLUS_CMS_ERROR         = 0x4     */
+  {sizeof(T_BAT_no_parameter)},            /* BAT_RES_AT_BUSY                = 0x5     */
+  {sizeof(T_BAT_no_parameter)},            /* BAT_RES_AT_CHANNEL_BUSY        = 0x6    */       
+  {sizeof(T_BAT_no_parameter)},            /* BAT_RES_AT_NO_ANSWER           = 0x7    */       
+  {sizeof(T_BAT_res_plus_ext_error)},      /* BAT_RES_PLUS_EXT_ERROR         = 0x8    */       
+  {sizeof(T_BAT_res_que_percent_als)},     /* BAT_RES_QUE_PERCENT_ALS        = 0x9    */       
+  {sizeof(T_BAT_res_tst_percent_als)},     /* BAT_RES_TST_PERCENT_ALS        = 0xa    */       
+  {sizeof(T_BAT_res_que_percent_atr)},     /* BAT_RES_QUE_PERCENT_ATR        = 0xb    */       
+  {sizeof(T_BAT_res_que_percent_band)},    /* BAT_RES_QUE_PERCENT_BAND       = 0xc    */       
+  {sizeof(T_BAT_res_tst_percent_band)},    /* BAT_RES_TST_PERCENT_BAND       = 0xd    */       
+  {sizeof(T_BAT_res_que_plus_cacm)},       /* BAT_RES_QUE_PLUS_CACM          = 0xe    */       
+  {sizeof(T_BAT_res_que_plus_camm)},       /* BAT_RES_QUE_PLUS_CAMM          = 0xf    */       
+  {sizeof(T_BAT_res_set_plus_caoc)},       /* BAT_RES_SET_PLUS_CAOC          = 0x10   */       
+  {sizeof(T_BAT_res_set_plus_cbc)},        /* BAT_RES_SET_PLUS_CBC           = 0x11   */       
+  {sizeof(T_BAT_res_que_percent_cbhz)},    /* BAT_RES_QUE_PERCENT_CBHZ       = 0x12   */       
+  {sizeof(T_BAT_res_tst_percent_cbhz)},    /* BAT_RES_TST_PERCENT_CBHZ       = 0x13   */       
+  {sizeof(T_BAT_res_que_plus_cbst)},       /* BAT_RES_QUE_PLUS_CBST          = 0x14   */       
+  {sizeof(T_BAT_res_que_percent_ccbs)},    /* BAT_RES_QUE_PERCENT_CCBS       = 0x15   */       
+  {sizeof(T_BAT_res_set_plus_ccfc)},       /* BAT_RES_SET_PLUS_CCFC          = 0x16   */       
+  {sizeof(T_BAT_res_que_plus_cclk)},       /* BAT_RES_QUE_PLUS_CCLK          = 0x17   */       
+  {sizeof(T_BAT_res_que_plus_ccug)},       /* BAT_RES_QUE_PLUS_CCUG          = 0x18   */       
+  {sizeof(T_BAT_res_set_plus_ccwa)},       /* BAT_RES_SET_PLUS_CCWA          = 0x19   */       
+  {sizeof(T_BAT_res_set_plus_ccwa_w)},     /* BAT_RES_SET_PLUS_CCWA_W        = 0x1a   */       
+  {sizeof(T_BAT_res_set_plus_ceer)},       /* BAT_RES_SET_PLUS_CEER          = 0x1b   */       
+  {sizeof(T_BAT_res_que_plus_cfun)},       /* BAT_RES_QUE_PLUS_CFUN          = 0x1c   */       
+  {sizeof(T_BAT_res_que_percent_cgaatt)},  /* BAT_RES_QUE_PERCENT_CGAATT     = 0x1d   */       
+  {sizeof(T_BAT_res_que_plus_cgact)},      /* BAT_RES_QUE_PLUS_CGACT         = 0x1e   */       
+  {sizeof(T_BAT_res_que_plus_cgatt)},      /* BAT_RES_QUE_PLUS_CGATT         = 0x1f   */       
+  {sizeof(T_BAT_res_que_percent_cgclass)}, /* BAT_RES_QUE_PERCENT_CGCLASS    = 0x20   */       
+  {sizeof(T_BAT_res_que_plus_cgclass)},    /* BAT_RES_QUE_PLUS_CGCLASS       = 0x21   */       
+  {sizeof(T_BAT_res_que_plus_cgdcont)},    /* BAT_RES_QUE_PLUS_CGDCONT       = 0x22   */       
+  {sizeof(T_BAT_res_set_plus_cgpaddr)},    /* BAT_RES_SET_PLUS_CGPADDR       = 0x23   */       
+  {sizeof(T_BAT_res_tst_plus_cgpaddr)},    /* BAT_RES_TST_PLUS_CGPADDR       = 0x24   */       
+  {sizeof(T_BAT_res_set_percent_cgpco)},   /* BAT_RES_SET_PERCENT_CGPCO      = 0x25   */       
+  {sizeof(T_BAT_res_que_percent_cgppp)},   /* BAT_RES_QUE_PERCENT_CGPPP      = 0x26   */       
+  {sizeof(T_BAT_res_que_plus_cgqmin)},     /* BAT_RES_QUE_PLUS_CGQMIN        = 0x27   */       
+  {sizeof(T_BAT_res_que_plus_cgqreq)},     /* BAT_RES_QUE_PLUS_CGQREQ        = 0x28   */       
+  {sizeof(T_BAT_res_que_percent_cgreg)},   /* BAT_RES_QUE_PERCENT_CGREG      = 0x29   */       
+  {sizeof(T_BAT_res_que_plus_cgreg)},      /* BAT_RES_QUE_PLUS_CGREG         = 0x2a   */       
+  {sizeof(T_BAT_res_que_plus_cgsms)},      /* BAT_RES_QUE_PLUS_CGSMS         = 0x2b   */       
+  {sizeof(T_BAT_res_set_percent_chpl)},    /* BAT_RES_SET_PERCENT_CHPL       = 0x2c   */       
+  {sizeof(T_BAT_res_set_percent_chpl_w)},  /* BAT_RES_SET_PERCENT_CHPL_W     = 0x2d   */       
+  {sizeof(T_BAT_res_set_plus_cimi)},       /* BAT_RES_SET_PLUS_CIMI          = 0x2e   */       
+  {sizeof(T_BAT_res_que_plus_cind)},       /* BAT_RES_QUE_PLUS_CIND          = 0x2f   */       
+  {sizeof(T_BAT_res_que_plus_clan)},       /* BAT_RES_QUE_PLUS_CLAN          = 0x30   */       
+  {sizeof(T_BAT_res_tst_plus_clan)},       /* BAT_RES_TST_PLUS_CLAN          = 0x31   */       
+  {sizeof(T_BAT_res_que_plus_clcc)},       /* BAT_RES_QUE_PLUS_CLCC          = 0x32   */       
+  {sizeof(T_BAT_res_set_plus_clck)},       /* BAT_RES_SET_PLUS_CLCK          = 0x33   */       
+  {sizeof(T_BAT_res_que_plus_clip)},       /* BAT_RES_QUE_PLUS_CLIP          = 0x34   */       
+  {sizeof(T_BAT_res_que_plus_clip_w)},     /* BAT_RES_QUE_PLUS_CLIP_W        = 0x35   */       
+  {sizeof(T_BAT_res_que_plus_clir)},       /* BAT_RES_QUE_PLUS_CLIR          = 0x36   */       
+  {sizeof(T_BAT_no_parameter)},            /* BAT_RES_SET_PLUS_CLVL          = 0x37   */       
+  {sizeof(T_BAT_res_que_plus_clvl)},       /* BAT_RES_QUE_PLUS_CLVL          = 0x38   */       
+  {sizeof(T_BAT_res_que_plus_cmer)},       /* BAT_RES_QUE_PLUS_CMER          = 0x39   */       
+  {sizeof(T_BAT_res_set_plus_cmgc)},       /* BAT_RES_SET_PLUS_CMGC          = 0x3a   */       
+  {sizeof(T_BAT_res_set_plus_cmgl)},       /* BAT_RES_SET_PLUS_CMGL          = 0x3b   */       
+  {sizeof(T_BAT_res_set_plus_cmgl_w)},     /* BAT_RES_SET_PLUS_CMGL_W        = 0x3c   */       
+  {sizeof(T_BAT_res_set_plus_cmgr)},       /* BAT_RES_SET_PLUS_CMGR          = 0x3d   */       
+  {sizeof(T_BAT_res_set_plus_cmgr_w)},     /* BAT_RES_SET_PLUS_CMGR_W        = 0x3e   */       
+  {sizeof(T_BAT_res_set_plus_cmgs)},       /* BAT_RES_SET_PLUS_CMGS          = 0x3f   */       
+  {sizeof(T_BAT_res_set_plus_cmgw)},       /* BAT_RES_SET_PLUS_CMGW          = 0x40   */       
+  {sizeof(T_BAT_res_que_plus_cmod)},       /* BAT_RES_QUE_PLUS_CMOD          = 0x41   */       
+  {sizeof(T_BAT_res_que_plus_cmut)},       /* BAT_RES_QUE_PLUS_CMUT          = 0x42   */       
+  {sizeof(T_BAT_res_que_plus_cmux)},       /* BAT_RES_QUE_PLUS_CMUX          = 0x43   */       
+  {sizeof(T_BAT_res_que_percent_cnap)},    /* BAT_RES_QUE_PERCENT_CNAP       = 0x44   */       
+  {sizeof(T_BAT_res_que_plus_cnmi)},       /* BAT_RES_QUE_PLUS_CNMI          = 0x45   */       
+  {sizeof(T_BAT_res_set_plus_cnum)},       /* BAT_RES_SET_PLUS_CNUM          = 0x46   */       
+  {sizeof(T_BAT_res_set_plus_cnum_w)},     /* BAT_RES_SET_PLUS_CNUM_W        = 0x47   */       
+  {sizeof(T_BAT_res_que_plus_colp)},       /* BAT_RES_QUE_PLUS_COLP          = 0x48   */       
+  {sizeof(T_BAT_res_que_plus_colp_w)},     /* BAT_RES_QUE_PLUS_COLP_W        = 0x49   */       
+  {sizeof(T_BAT_res_que_percent_cops)},    /* BAT_RES_QUE_PERCENT_COPS       = 0x4a   */       
+  {sizeof(T_BAT_res_tst_percent_cops)},    /* BAT_RES_TST_PERCENT_COPS       = 0x4b   */       
+  {sizeof(T_BAT_res_que_plus_cops)},       /* BAT_RES_QUE_PLUS_COPS          = 0x4c   */       
+  {sizeof(T_BAT_res_tst_plus_cops)},       /* BAT_RES_TST_PLUS_COPS          = 0x4d   */       
+  {sizeof(T_BAT_res_que_percent_cops_w)},  /* BAT_RES_QUE_PERCENT_COPS_W     = 0x4e   */       
+  {sizeof(T_BAT_res_tst_percent_cops_w)},  /* BAT_RES_TST_PERCENT_COPS_W     = 0x4f   */       
+  {sizeof(T_BAT_res_set_percent_cpals)},   /* BAT_RES_SET_PERCENT_CPALS      = 0x50   */       
+  {sizeof(T_BAT_res_que_percent_cpals)},   /* BAT_RES_QUE_PERCENT_CPALS      = 0x51   */       
+  {sizeof(T_BAT_res_set_percent_cpals_w)}, /* BAT_RES_SET_PERCENT_CPALS_W    = 0x52   */       
+  {sizeof(T_BAT_res_que_percent_cpals_w)}, /* BAT_RES_QUE_PERCENT_CPALS_W    = 0x53   */       
+  {sizeof(T_BAT_res_set_plus_cpas)},       /* BAT_RES_SET_PLUS_CPAS          = 0x54   */       
+  {sizeof(T_BAT_res_set_plus_cpbf)},       /* BAT_RES_SET_PLUS_CPBF          = 0x55   */       
+  {sizeof(T_BAT_res_tst_plus_cpbf)},       /* BAT_RES_TST_PLUS_CPBF          = 0x56   */       
+  {sizeof(T_BAT_res_set_plus_cpbf_w)},     /* BAT_RES_SET_PLUS_CPBF_W        = 0x57   */       
+  {sizeof(T_BAT_res_tst_plus_cpbf_w)},     /* BAT_RES_TST_PLUS_CPBF_W        = 0x58   */       
+  {sizeof(T_BAT_res_set_plus_cpbr)},       /* BAT_RES_SET_PLUS_CPBR          = 0x59   */       
+  {sizeof(T_BAT_res_tst_plus_cpbr)},       /* BAT_RES_TST_PLUS_CPBR          = 0x5a   */       
+  {sizeof(T_BAT_res_set_plus_cpbr_w)},     /* BAT_RES_SET_PLUS_CPBR_W        = 0x5b   */       
+  {sizeof(T_BAT_res_tst_plus_cpbr_w)},     /* BAT_RES_TST_PLUS_CPBR_W        = 0x5c   */       
+  {sizeof(T_BAT_res_que_percent_cpbs)},    /* BAT_RES_QUE_PERCENT_CPBS       = 0x5d   */         
+  {sizeof(T_BAT_res_que_plus_cpbs)},       /* BAT_RES_QUE_PLUS_CPBS          = 0x5e    */
+  {sizeof(T_BAT_res_tst_plus_cpbw)},       /* BAT_RES_TST_PLUS_CPBW          = 0x5f    */
+  {sizeof(T_BAT_res_tst_plus_cpbw_w)},     /* BAT_RES_TST_PLUS_CPBW_W        = 0x60    */
+  {sizeof(T_BAT_res_set_percent_cpcfu)},   /* BAT_RES_SET_PERCENT_CPCFU      = 0x61    */
+  {sizeof(T_BAT_res_que_percent_cphs)},    /* BAT_RES_QUE_PERCENT_CPHS       = 0x62    */
+  {sizeof(T_BAT_res_que_plus_cpin)},       /* BAT_RES_QUE_PLUS_CPIN          = 0x63    */
+  {sizeof(T_BAT_res_que_percent_cpinf)},   /* BAT_RES_QUE_PERCENT_CPINF      = 0x64    */
+  {sizeof(T_BAT_res_set_percent_cpmb)},    /* BAT_RES_SET_PERCENT_CPMB       = 0x65    */
+  {sizeof(T_BAT_res_que_percent_cpmb)},    /* BAT_RES_QUE_PERCENT_CPMB       = 0x66   */        
+  {sizeof(T_BAT_res_tst_percent_cpmbw)},   /* BAT_RES_TST_PERCENT_CPMBW      = 0x67   */       
+  {sizeof(T_BAT_res_tst_percent_cpmbw_w)}, /* BAT_RES_TST_PERCENT_CPMBW_W    = 0x68   */       
+  {sizeof(T_BAT_res_set_percent_cpmb_w)},  /* BAT_RES_SET_PERCENT_CPMB_W     = 0x69   */       
+  {sizeof(T_BAT_res_set_plus_cpms)},       /* BAT_RES_SET_PLUS_CPMS          = 0x6a   */       
+  {sizeof(T_BAT_res_que_plus_cpms)},       /* BAT_RES_QUE_PLUS_CPMS          = 0x6b   */       
+  {sizeof(T_BAT_res_set_percent_cpnums)},  /* BAT_RES_SET_PERCENT_CPNUMS     = 0x6c   */       
+  {sizeof(T_BAT_res_tst_percent_cpnums)},  /* BAT_RES_TST_PERCENT_CPNUMS     = 0x6d   */       
+  {sizeof(T_BAT_res_set_percent_cpnums_w)},/* BAT_RES_SET_PERCENT_CPNUMS_W   = 0x6e   */       
+  {sizeof(T_BAT_res_tst_percent_cpnums_w)},/* BAT_RES_TST_PERCENT_CPNUMS_W   = 0x6f   */       
+  {sizeof(T_BAT_res_que_plus_cpol)},       /* BAT_RES_QUE_PLUS_CPOL          = 0x70   */       
+  {sizeof(T_BAT_res_tst_plus_cpol)},       /* BAT_RES_TST_PLUS_CPOL          = 0x71   */       
+  {sizeof(T_BAT_res_que_plus_cpol_w)},     /* BAT_RES_QUE_PLUS_CPOL_W        = 0x72   */       
+  {sizeof(T_BAT_res_tst_plus_cpol_w)},     /* BAT_RES_TST_PLUS_CPOL_W        = 0x73   */       
+  {sizeof(T_BAT_res_que_percent_cpopn)},   /* BAT_RES_QUE_PERCENT_CPOPN      = 0x74   */       
+  {sizeof(T_BAT_res_que_percent_cprsm)},   /* BAT_RES_QUE_PERCENT_CPRSM      = 0x75   */       
+  {sizeof(T_BAT_res_que_plus_cpuc)},       /* BAT_RES_QUE_PLUS_CPUC          = 0x76   */       
+  {sizeof(T_BAT_res_que_plus_cpuc_w)},     /* BAT_RES_QUE_PLUS_CPUC_W        = 0x77   */       
+  {sizeof(T_BAT_res_set_percent_cpvwi)},   /* BAT_RES_SET_PERCENT_CPVWI      = 0x78   */       
+  {sizeof(T_BAT_res_que_percent_creg)},    /* BAT_RES_QUE_PERCENT_CREG       = 0x79   */       
+  {sizeof(T_BAT_res_tst_plus_cres)},       /* BAT_RES_TST_PLUS_CRES          = 0x7a   */       
+  {sizeof(T_BAT_res_que_plus_crlp)},       /* BAT_RES_QUE_PLUS_CRLP          = 0x7b   */       
+  {sizeof(T_BAT_res_set_plus_crsm)},       /* BAT_RES_SET_PLUS_CRSM          = 0x7c   */       
+  {sizeof(T_BAT_res_tst_plus_csas)},       /* BAT_RES_TST_PLUS_CSAS          = 0x7d   */       
+  {sizeof(T_BAT_res_que_plus_csca)},       /* BAT_RES_QUE_PLUS_CSCA          = 0x7e   */       
+  {sizeof(T_BAT_res_que_plus_cscb)},       /* BAT_RES_QUE_PLUS_CSCB          = 0x7f   */       
+  {sizeof(T_BAT_res_que_plus_cscs)},       /* BAT_RES_QUE_PLUS_CSCS          = 0x80   */       
+  {sizeof(T_BAT_res_set_plus_csim)},       /* BAT_RES_SET_PLUS_CSIM          = 0x81   */       
+  {sizeof(T_BAT_res_que_plus_csms)},       /* BAT_RES_QUE_PLUS_CSMS          = 0x82   */       
+  {sizeof(T_BAT_res_que_plus_csns)},       /* BAT_RES_QUE_PLUS_CSNS          = 0x83   */       
+  {sizeof(T_BAT_res_que_percent_csq)},     /* BAT_RES_QUE_PERCENT_CSQ        = 0x84   */       
+  {sizeof(T_BAT_res_set_plus_csq)},        /* BAT_RES_SET_PLUS_CSQ           = 0x85   */       
+  {sizeof(T_BAT_res_que_plus_csta)},       /* BAT_RES_QUE_PLUS_CSTA          = 0x86   */       
+  {sizeof(T_BAT_res_que_plus_csvm)},       /* BAT_RES_QUE_PLUS_CSVM          = 0x87   */       
+  {sizeof(T_BAT_res_que_percent_ctty)},    /* BAT_RES_QUE_PERCENT_CTTY       = 0x88   */       
+  {sizeof(T_BAT_res_que_plus_ctzu)},       /* BAT_RES_QUE_PLUS_CTZU          = 0x89   */       
+  {sizeof(T_BAT_res_que_percent_cust)},    /* BAT_RES_QUE_PERCENT_CUST       = 0x8a   */       
+  {sizeof(T_BAT_res_que_percent_data)},    /* BAT_RES_QUE_PERCENT_DATA       = 0x8b   */       
+  {sizeof(T_BAT_res_set_percent_dinf)},    /* BAT_RES_SET_PERCENT_DINF       = 0x8c   */       
+  {sizeof(T_BAT_res_que_plus_ds)},         /* BAT_RES_QUE_PLUS_DS            = 0x8d   */       
+  {sizeof(T_BAT_res_que_plus_fap)},        /* BAT_RES_QUE_PLUS_FAP           = 0x8e   */       
+  {sizeof(T_BAT_res_que_plus_fbo)},        /* BAT_RES_QUE_PLUS_FBO           = 0x8f   */       
+  {sizeof(T_BAT_res_que_plus_fbs)},        /* BAT_RES_QUE_PLUS_FBS           = 0x90   */       
+  {sizeof(T_BAT_res_que_plus_fbu)},        /* BAT_RES_QUE_PLUS_FBU           = 0x91   */       
+  {sizeof(T_BAT_res_que_plus_fcc)},        /* BAT_RES_QUE_PLUS_FCC           = 0x92   */       
+  {sizeof(T_BAT_res_que_plus_fclass)},     /* BAT_RES_QUE_PLUS_FCLASS        = 0x93   */       
+  {sizeof(T_BAT_res_que_plus_fcq)},        /* BAT_RES_QUE_PLUS_FCQ           = 0x94   */       
+  {sizeof(T_BAT_res_que_plus_fcr)},        /* BAT_RES_QUE_PLUS_FCR           = 0x95   */       
+  {sizeof(T_BAT_res_que_plus_fcs)},        /* BAT_RES_QUE_PLUS_FCS           = 0x96   */       
+  {sizeof(T_BAT_res_que_plus_fct)},        /* BAT_RES_QUE_PLUS_FCT           = 0x97   */       
+  {sizeof(T_BAT_res_que_plus_fea)},        /* BAT_RES_QUE_PLUS_FEA           = 0x98   */       
+  {sizeof(T_BAT_res_que_plus_ffc)},        /* BAT_RES_QUE_PLUS_FFC           = 0x99   */       
+  {sizeof(T_BAT_res_que_plus_fhs)},        /* BAT_RES_QUE_PLUS_FHS           = 0x9a   */       
+  {sizeof(T_BAT_res_que_plus_fie)},        /* BAT_RES_QUE_PLUS_FIE           = 0x9b   */       
+  {sizeof(T_BAT_res_que_plus_fis)},        /* BAT_RES_QUE_PLUS_FIS           = 0x9c   */       
+  {sizeof(T_BAT_res_que_plus_fit)},        /* BAT_RES_QUE_PLUS_FIT           = 0x9d   */       
+  {sizeof(T_BAT_res_que_plus_fli)},        /* BAT_RES_QUE_PLUS_FLI           = 0x9e   */       
+  {sizeof(T_BAT_res_que_plus_flo)},        /* BAT_RES_QUE_PLUS_FLO           = 0x9f   */       
+  {sizeof(T_BAT_res_que_plus_flp)},        /* BAT_RES_QUE_PLUS_FLP           = 0xa0   */       
+  {sizeof(T_BAT_res_que_plus_fms)},        /* BAT_RES_QUE_PLUS_FMS           = 0xa1   */       
+  {sizeof(T_BAT_res_que_plus_fns)},        /* BAT_RES_QUE_PLUS_FNS           = 0xa2   */       
+  {sizeof(T_BAT_res_que_plus_fpa)},        /* BAT_RES_QUE_PLUS_FPA           = 0xa3   */       
+  {sizeof(T_BAT_res_que_plus_fpi)},        /* BAT_RES_QUE_PLUS_FPI           = 0xa4   */       
+  {sizeof(T_BAT_res_que_plus_fps)},        /* BAT_RES_QUE_PLUS_FPS           = 0xa5   */       
+  {sizeof(T_BAT_res_que_plus_fpw)},        /* BAT_RES_QUE_PLUS_FPW           = 0xa6   */       
+  {sizeof(T_BAT_res_que_plus_frq)},        /* BAT_RES_QUE_PLUS_FRQ           = 0xa7   */       
+  {sizeof(T_BAT_res_que_plus_fsa)},        /* BAT_RES_QUE_PLUS_FSA           = 0xa8   */       
+  {sizeof(T_BAT_res_que_plus_fsp)},        /* BAT_RES_QUE_PLUS_FSP           = 0xa9   */       
+  {sizeof(T_BAT_res_que_plus_icf)},        /* BAT_RES_QUE_PLUS_ICF           = 0xaa   */       
+  {sizeof(T_BAT_res_que_plus_ifc)},        /* BAT_RES_QUE_PLUS_IFC           = 0xab   */       
+  {sizeof(T_BAT_res_que_percent_imei)},    /* BAT_RES_QUE_PERCENT_IMEI       = 0xac   */       
+  {sizeof(T_BAT_res_que_plus_ipr)},        /* BAT_RES_QUE_PLUS_IPR           = 0xad   */       
+  {sizeof(T_BAT_res_que_percent_pbcf)},    /* BAT_RES_QUE_PERCENT_PBCF       = 0xae   */       
+  {sizeof(T_BAT_res_que_percent_ppp)},     /* BAT_RES_QUE_PERCENT_PPP        = 0xaf   */       
+  {sizeof(T_BAT_res_que_percent_pvrf)},    /* BAT_RES_QUE_PERCENT_PVRF       = 0xb0   */       
+  {sizeof(T_BAT_res_que_percent_rdl)},     /* BAT_RES_QUE_PERCENT_RDL        = 0xb1   */       
+  {sizeof(T_BAT_res_que_percent_rdlb)},    /* BAT_RES_QUE_PERCENT_RDLB       = 0xb2   */       
+  {sizeof(T_BAT_res_que_percent_satc)},    /* BAT_RES_QUE_PERCENT_SATC       = 0xb3   */       
+  {sizeof(T_BAT_res_que_percent_satcc)},   /* BAT_RES_QUE_PERCENT_SATCC      = 0xb4   */       
+  {sizeof(T_BAT_res_set_percent_sate)},    /* BAT_RES_SET_PERCENT_SATE       = 0xb5   */       
+  {sizeof(T_BAT_res_que_plus_ws46)},        /* BAT_RES_QUE_PLUS_WS46          = 0xb6   */
+  {sizeof(T_BAT_res_que_plus_cdip)},        /* BAT_RES_QUE_PLUS_CDIP         = 0xb7   */
+  {sizeof(T_BAT_res_set_percent_cmgr)},    /* BAT_RES_SET_PERCENT_CMGR       = 0xb8   */
+  {sizeof(T_BAT_res_set_percent_cmgl)},    /* BAT_RES_SET_PERCENT_CMGL       = 0xb9   */
+  {sizeof(T_BAT_res_set_plus_cmss)},       /* BAT_RES_SET_PLUS_CMSS          = 0xba   */
+  {sizeof(T_BAT_res_set_plus_cgmi)},       /* BAT_RES_SET_PLUS_CGMI          = 0xbb  */ 
+  {sizeof(T_BAT_res_set_plus_cgmm)},       /* BAT_RES_SET_PLUS_CGMM          = 0xbc  */ 
+  {sizeof(T_BAT_res_set_plus_cgmr)},       /* BAT_RES_SET_PLUS_CGMR          = 0xbd   */ 
+  {sizeof(T_BAT_res_set_plus_cgsn)},       /* BAT_RES_SET_PLUS_CGSN          = 0xbe */
+  {0},          /*As response structure of command id=0xbf is absent still  to get the proper size of structure of response according to the command id  */                                   
+  {0},          /*As response structure of command id=0xc0 is absent still to get the proper size of structure of response according to the command id  */
+  {sizeof(T_BAT_res_que_percent_cniv)},     /* BAT_RES_QUE_PERCENT_CNIV        = 0xc1   */
+};
+
+static T_app_map_response_2_size unsolicited_2_size[] =
+{
+  {sizeof(T_BAT_no_parameter)},            /* BAT_RES_UNS_AT_BUSY            = 0x1000 */
+  {sizeof(T_BAT_no_parameter)},            /* BAT_RES_UNS_AT_NO_ANSWER       = 0x1001 */
+  {sizeof(T_BAT_res_uns_plus_cbm)},        /* BAT_RES_UNS_PLUS_CBM           = 0x1002 */
+  {sizeof(T_BAT_res_uns_plus_cbmi)},       /* BAT_RES_UNS_PLUS_CBMI          = 0x1003 */
+  {sizeof(T_BAT_res_uns_percent_ccbs)},    /* BAT_RES_UNS_PERCENT_CCBS       = 0x1004 */
+//  {sizeof(T_BAT_res_uns_percent_cccm)},    /* BAT_RES_UNS_PERCENT_CCCM       = 0x1005 */
+  {sizeof(T_BAT_res_uns_plus_cccm)},       /* BAT_RES_UNS_PLUS_CCCM          = 0x1006 */
+  {sizeof(T_BAT_res_uns_percent_cccn)},    /* BAT_RES_UNS_PERCENT_CCCN       = 0x1007 */
+  {sizeof(T_BAT_res_uns_plus_ccwa)},       /* BAT_RES_UNS_PLUS_CCWA          = 0x1008 */
+  {sizeof(T_BAT_res_uns_plus_ccwa_w)},     /* BAT_RES_UNS_PLUS_CCWA_W        = 0x1009 */
+  {sizeof(T_BAT_no_parameter)},            /* BAT_RES_UNS_PLUS_CCWE          = 0x100a */
+  {sizeof(T_BAT_res_uns_plus_cds)},        /* BAT_RES_UNS_PLUS_CDS           = 0x100b */
+  {sizeof(T_BAT_no_parameter)},            /* BAT_RES_UNS_PLUS_CCWV          = 0x100c */
+  {sizeof(T_BAT_res_uns_percent_cgev)},    /* BAT_RES_UNS_PERCENT_CGEV       = 0x100d */
+  {sizeof(T_BAT_res_uns_plus_cgev)},       /* BAT_RES_UNS_PLUS_CGEV          = 0x100e */
+  {sizeof(T_BAT_res_uns_percent_cgreg)},   /* BAT_RES_UNS_PERCENT_CGREG      = 0x100f */
+  {sizeof(T_BAT_res_uns_plus_cgreg)},      /* BAT_RES_UNS_PLUS_CGREG         = 0x1010 */
+  {sizeof(T_BAT_res_uns_plus_clae)},       /* BAT_RES_UNS_PLUS_CLAE          = 0x1011 */
+  {sizeof(T_BAT_res_uns_plus_clav)},       /* BAT_RES_UNS_PLUS_CLAV          = 0x1012 */
+  {sizeof(T_BAT_res_uns_plus_clip)},       /* BAT_RES_UNS_PLUS_CLIP          = 0x1013 */
+  {sizeof(T_BAT_res_uns_plus_clip_w)},     /* BAT_RES_UNS_PLUS_CLIP_W        = 0x1014 */
+  {sizeof(T_BAT_res_uns_plus_cmt)},        /* BAT_RES_UNS_PLUS_CMT           = 0x1015 */
+  {sizeof(T_BAT_res_uns_plus_cmti)},       /* BAT_RES_UNS_PLUS_CMTI          = 0x1016 */
+  {sizeof(T_BAT_res_uns_plus_cmt_w)},      /* BAT_RES_UNS_PLUS_CMT_W         = 0x1017 */
+  {sizeof(T_BAT_res_uns_percent_cnap)},    /* BAT_RES_UNS_PERCENT_CNAP       = 0x1018 */
+  {sizeof(T_BAT_res_uns_plus_colp)},       /* BAT_RES_UNS_PLUS_COLP          = 0x1019 */
+  {sizeof(T_BAT_res_uns_plus_colp_w)},     /* BAT_RES_UNS_PLUS_COLP_W        = 0x101a */
+  {sizeof(T_BAT_res_uns_percent_cpi)},     /* BAT_RES_UNS_PERCENT_CPI        = 0x101b */
+  {sizeof(T_BAT_res_uns_percent_cpi_w)},   /* BAT_RES_UNS_PERCENT_CPI_W      = 0x101c */
+  {sizeof(T_BAT_res_uns_percent_cpri)},    /* BAT_RES_UNS_PERCENT_CPRI       = 0x101d */
+  {sizeof(T_BAT_res_uns_percent_cproam)},  /* BAT_RES_UNS_PERCENT_CPROAM     = 0x101e */
+  {sizeof(T_BAT_res_uns_percent_cpvwi)},   /* BAT_RES_UNS_PERCENT_CPVWI      = 0x101f */
+  {sizeof(T_BAT_res_uns_plus_cr)},         /* BAT_RES_UNS_PLUS_CR            = 0x1020 */
+  {sizeof(T_BAT_res_uns_percent_creg)},    /* BAT_RES_UNS_PERCENT_CREG       = 0x1021 */
+  {sizeof(T_BAT_res_uns_plus_cring)},      /* BAT_RES_UNS_PLUS_CRING         = 0x1022 */
+  {sizeof(T_BAT_res_uns_percent_csq)},     /* BAT_RES_UNS_PERCENT_CSQ        = 0x1023 */
+  {sizeof(T_BAT_res_uns_plus_cssi)},       /* BAT_RES_UNS_PLUS_CSSI          = 0x1024 */
+  {sizeof(T_BAT_res_uns_percent_cssn)},    /* BAT_RES_UNS_PERCENT_CSSN       = 0x1025 */
+  {sizeof(T_BAT_res_uns_plus_cssu)},       /* BAT_RES_UNS_PLUS_CSSU          = 0x1026 */
+  {sizeof(T_BAT_res_uns_percent_cstat)},   /* BAT_RES_UNS_PERCENT_CSTAT      = 0x1027 */
+  {sizeof(T_BAT_res_uns_percent_ctyi)},    /* BAT_RES_UNS_PERCENT_CTYI       = 0x1028 */
+  {sizeof(T_BAT_res_uns_plus_ctzr)},       /* BAT_RES_UNS_PLUS_CTZR          = 0x1029 */
+  {sizeof(T_BAT_res_uns_percent_ctzv)},    /* BAT_RES_UNS_PERCENT_CTZV       = 0x102a */
+  {sizeof(T_BAT_res_uns_plus_ctzv)},       /* BAT_RES_UNS_PLUS_CTZV          = 0x102b */
+  {sizeof(T_BAT_res_uns_percent_ctzv_w)},  /* BAT_RES_UNS_PERCENT_CTZV_W     = 0x102c */
+  {sizeof(T_BAT_res_uns_plus_cusd)},       /* BAT_RES_UNS_PLUS_CUSD          = 0x102d */
+  {sizeof(T_BAT_res_uns_plus_cusd_w)},     /* BAT_RES_UNS_PLUS_CUSD_W        = 0x102e */
+  {sizeof(T_BAT_no_parameter)},            /* BAT_RES_UNS_AT_NO_CARRIER      = 0x102f */
+  {sizeof(T_BAT_res_uns_plus_fhs)},        /* BAT_RES_UNS_PLUS_FHS           = 0x1030 */
+  {sizeof(T_BAT_res_uns_plus_ilrr)},       /* BAT_RES_UNS_PLUS_ILRR          = 0x1031 */
+  {sizeof(T_BAT_res_uns_percent_rdl)},     /* BAT_RES_UNS_PERCENT_RDL        = 0x1032 */
+  {sizeof(T_BAT_res_uns_percent_rdlb)},    /* BAT_RES_UNS_PERCENT_RDLB       = 0x1033 */
+  {sizeof(T_BAT_res_uns_percent_sata)},    /* BAT_RES_UNS_PERCENT_SATA       = 0x1034 */
+  {sizeof(T_BAT_res_uns_percent_sati)},    /* BAT_RES_UNS_PERCENT_SATI       = 0x1035 */
+  {sizeof(T_BAT_res_uns_percent_satn)},    /* BAT_RES_UNS_PERCENT_SATN       = 0x1036 */
+  {sizeof(T_BAT_res_uns_percent_simef)},   /* BAT_RES_UNS_PERCENT_SIMEF      = 0x1037 */
+  {sizeof(T_BAT_res_uns_percent_simins)},  /* BAT_RES_UNS_PERCENT_SIMINS     = 0x1038 */
+  {sizeof(T_BAT_res_uns_percent_simrem)},  /* BAT_RES_UNS_PERCENT_SIMREM     = 0x1039 */
+  {sizeof(T_BAT_res_uns_percent_sncnt)},    /* BAT_RES_UNS_PERCENT_SNCNT      = 0x103a */
+  {sizeof(T_BAT_res_uns_percent_cniv)}    /* BAT_RES_UNS_PERCENT_CNIV       = 0x103b */
+};
+
+
+
+GLOBAL T_BAT_client clnt_table[BAT_MAX_TEST_INST_NUM][BAT_MAX_TEST_CLNT_NUM+1] = 
+                                          /* NrOfCl, Clnt0, Clnt1, Clnt2, Clnt3 */
+                                                {{0,0xffff,0xffff,0xffff,0xffff},  /* instance 0 */
+                                                 {0,0xffff,0xffff,0xffff,0xffff}}; /* instance 1 */
+
+#define RESP_LINES     20
+#define RESP_LINE_LEN 256
+LOCAL  CHAR  at_cmd_resp_param [RESP_LINES][RESP_LINE_LEN];
+
+struct app_bat_globals
+{
+  T_BAT_plus_cscs_cs  cs;
+} app_bat_globs = {BAT_CSCS_CS_IRA};
+
+/*==== Local functions =======================================================*/
+
+/*---------------------------------------------------------------------------
+ * Definition of command handler functions
+ *---------------------------------------------------------------------------*/
+GLOBAL void signal_cb (T_BAT_client client, T_BAT_signal signal)
+{
+  TRACE_FUNCTION ("signal_cb()");
+  TRACE_EVENT_P2("CLIENT HNDL IS: 0x%04x, SIGNAL IS: %d", client, signal);
+  return;
+}
+
+GLOBAL void signal_cb1 (T_BAT_client client, T_BAT_signal signal)
+{
+  TRACE_FUNCTION ("signal_cb1()");
+  TRACE_EVENT_P2("CLIENT HNDL IS: 0x%04x, SIGNAL IS: %d", client, signal);
+  return;
+}
+
+GLOBAL void signal_cb2 (T_BAT_client client, T_BAT_signal signal)
+{
+  TRACE_FUNCTION ("signal_cb2()");
+  TRACE_EVENT_P2("CLIENT HNDL IS: 0x%04x, SIGNAL IS: %d", client, signal);
+  return;
+}
+
+#define BITFIELD_CHECK(x, y)  (x & y)
+
+LOCAL int app_bat_get_size (T_BAT_ctrl_response ctrl_response)
+{
+  if (BITFIELD_CHECK(ctrl_response, 0x1000)) /* BAT_BIT_12 */
+  {
+    return (unsolicited_2_size[ctrl_response - 0x1000].size);
+  }
+  else
+  {
+    return (response_2_size[ctrl_response].size);
+  }
+}
+
+
+LOCAL void response_content (T_BAT_cmd_response *resp)
+{ 
+  int resp_len = app_bat_get_size(resp->ctrl_response);
+  TRACE_EVENT_P2("response_content(): response = 0x%04X, size = %i", resp->ctrl_response, resp_len);
+  TRACE_BINDUMP(GDD_DIO_handle, TC_USER4, "BAT RESPONSE PARAMETER", (U8 *)resp->response.ptr_at_ok, resp_len);
+}
+
+
+typedef enum
+{
+    CLIENT_HANDLE_OK = 0,
+    CLIENT_HANDLE_OUT_OF_BOUNDS,
+    CLIENT_HANDLE_NOT_VALID
+} T_CLIENT_HANDLE_ERROR;
+
+LOCAL T_CLIENT_HANDLE_ERROR check_client_handle (T_BAT_client clnt_hndl)
+{
+  U8 clnt_hndl_upper = (U8)((clnt_hndl&0xff00)>>8);  /* the instance */
+  U8 clnt_hndl_lower = (U8) (clnt_hndl&0x00ff);      /* the client   */
+
+  TRACE_EVENT_P2("check_client_handle(): instance = %d, client = %d", clnt_hndl_upper, clnt_hndl_lower);
+
+  if((clnt_hndl_lower >= BAT_MAX_TEST_CLNT_NUM) OR (clnt_hndl_upper >= BAT_MAX_TEST_INST_NUM))
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return (CLIENT_HANDLE_OUT_OF_BOUNDS);
+  }
+  if(clnt_table[clnt_hndl_upper][0] EQ 0) /* first element in clnt_table informs about Nr of Clnts */
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return (CLIENT_HANDLE_NOT_VALID);
+  }
+  
+  if(clnt_table[clnt_hndl_upper][clnt_hndl_lower] EQ 0xffff) /* invalid client */
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return (CLIENT_HANDLE_NOT_VALID);
+  }
+
+  return (CLIENT_HANDLE_OK);
+}
+
+LOCAL char *error_client_handle (T_CLIENT_HANDLE_ERROR err)
+{
+  TRACE_FUNCTION("error_client_handle()");
+  switch (err)
+  {
+    case (CLIENT_HANDLE_OUT_OF_BOUNDS):
+    {
+      TRACE_ERROR("Input clnt_hndl out of bounds");
+      return ("Input clnt_hndl out of bounds");
+    }
+    case (CLIENT_HANDLE_NOT_VALID):
+    {
+      TRACE_ERROR("client handle not valid");
+      return ("client handle not valid");
+    }
+    default:
+    {
+      TRACE_ERROR("unknown client handle error");
+      return ("unknown client handle error");
+    }
+  }
+}
+
+
+GLOBAL int response_cb (T_BAT_client client, T_BAT_cmd_response *rsp)
+{
+  TRACE_FUNCTION("response_cb()");
+  TRACE_EVENT_P2("CLIENT HNDL IS: 0x%04x, RESPONSE TAG IS: 0x%04x", client, rsp->ctrl_response);
+  response_content (rsp);
+  
+  switch (rsp->ctrl_response)
+  {
+    case (BAT_RES_SET_PLUS_CMGL):
+    {
+      T_BAT_res_set_plus_cmgl    *ptr_set_plus_cmgl;  
+      ptr_set_plus_cmgl =( void *) (rsp->response.ptr_set_plus_cmgl);   
+      TRACE_EVENT("BAT_RES_SET_PLUS_CMGL response");
+      TRACE_EVENT_P1("index  = %d", ptr_set_plus_cmgl->sms_index);
+      TRACE_EVENT_P1("status = %d", ptr_set_plus_cmgl->stat);
+      break;
+    }
+    case (BAT_RES_SET_PLUS_CPBR):
+    {
+  T_BAT_res_set_plus_cpbr    *ptr_set_plus_cpbr;  
+      ptr_set_plus_cpbr =( void *) (rsp->response.ptr_set_plus_cpbr); 
+      TRACE_EVENT("BAT_RES_SET_PLUS_CPBR response");
+      memset(at_cmd_resp_param[0], 0x00,  RESP_LINE_LEN) ; 
+      memset(at_cmd_resp_param[1], 0x00,  RESP_LINE_LEN) ; 
+      memcpy(at_cmd_resp_param[0],  ptr_set_plus_cpbr->number, ptr_set_plus_cpbr->c_number) ;
+      memcpy(at_cmd_resp_param[1],  ptr_set_plus_cpbr->text, ptr_set_plus_cpbr->c_text) ;
+  
+      TRACE_EVENT_P4("+CPBR: %d,\"%s\",%d,\"%s\"", ptr_set_plus_cpbr->index, 
+                                                   at_cmd_resp_param[0], 
+                                                   ptr_set_plus_cpbr->type,
+                                                   at_cmd_resp_param[1]);
+     break ;
+    }
+    case (BAT_RES_SET_PLUS_CPBF):
+    {
+      T_BAT_res_set_plus_cpbf    *ptr_set_plus_cpbf;  
+      ptr_set_plus_cpbf =( void *) (rsp->response.ptr_set_plus_cpbf); 
+      TRACE_EVENT("BAT_RES_SET_PLUS_CPBF response");
+      memset(at_cmd_resp_param[0], 0x00,  RESP_LINE_LEN) ; 
+      memset(at_cmd_resp_param[1], 0x00,  RESP_LINE_LEN) ; 
+      memcpy(at_cmd_resp_param[0],  ptr_set_plus_cpbf->number, ptr_set_plus_cpbf->c_number) ;
+      memcpy(at_cmd_resp_param[1],  ptr_set_plus_cpbf->text, ptr_set_plus_cpbf->c_text) ;
+  
+      TRACE_EVENT_P4("+CPBF: %d,\"%s\",%d,\"%s\"", ptr_set_plus_cpbf->index, 
+                                                   at_cmd_resp_param[0], 
+                                                   ptr_set_plus_cpbf->type,
+                                                   at_cmd_resp_param[1]);
+     break ;
+    }
+    case (BAT_RES_QUE_PLUS_CGATT):
+    {
+  T_BAT_res_que_plus_cgatt    *ptr_que_plus_cgatt;  
+      ptr_que_plus_cgatt =( void *) (rsp->response.ptr_que_plus_cgatt); 
+
+      TRACE_EVENT("BAT_RES_QUE_PLUS_CGATT:");
+
+      if (ptr_que_plus_cgatt->state EQ BAT_CGATT_STATE_DETACHED)
+        TRACE_EVENT("BAT_RES_QUE_PLUS_CGATT: GPRS DETACHED");
+      else
+        TRACE_EVENT("BAT_RES_QUE_PLUS_CGATT: GPRS ATTACHED");
+
+      break ;
+    }
+    case (BAT_RES_QUE_PLUS_CGACT):
+    {
+  T_BAT_res_que_plus_cgact    *ptr_que_plus_cgact;  
+      ptr_que_plus_cgact =( void *) (rsp->response.ptr_que_plus_cgact); 
+
+      if(ptr_que_plus_cgact->state EQ BAT_CGACT_STATE_DEACTIVATED)
+        TRACE_EVENT("BAT_RES_QUE_PLUS_CGACT: GPRS DEACTIVATED");
+      else
+        TRACE_EVENT("BAT_RES_QUE_PLUS_CGACT: GPRS ACTIVATED");
+      break ;
+    }
+    case (BAT_RES_QUE_PLUS_CGDCONT):
+    {
+  T_BAT_res_que_plus_cgdcont  *ptr_que_plus_cgdcont;  
+      ptr_que_plus_cgdcont =( void *) (rsp->response.ptr_que_plus_cgdcont); 
+
+      memset(at_cmd_resp_param[0], 0x00,  RESP_LINE_LEN) ; 
+      memset(at_cmd_resp_param[1], 0x00,  RESP_LINE_LEN) ; 
+   
+      memcpy(at_cmd_resp_param[0],  ptr_que_plus_cgdcont->apn, ptr_que_plus_cgdcont->c_apn) ;
+      memcpy(at_cmd_resp_param[1],  ptr_que_plus_cgdcont->pdp_addr, ptr_que_plus_cgdcont->c_pdp_addr) ;
+     
+      TRACE_EVENT_P1("BAT_RES_QUE_PLUS_CGCONT: APN is %s",  at_cmd_resp_param[0])  ;
+      TRACE_EVENT_P1("BAT_RES_QUE_PLUS_CGCONT: PDP Address is %s", at_cmd_resp_param[1]);
+      break ;
+    }
+    case (BAT_RES_SET_PERCENT_CGPCO):
+    {
+  T_BAT_res_set_percent_cgpco *ptr_que_per_cgpco;
+      ptr_que_per_cgpco =( void *) (rsp->response.ptr_set_percent_cgpco); 
+
+      memset(at_cmd_resp_param[0], 0x00,  RESP_LINE_LEN) ; 
+      memset(at_cmd_resp_param[1], 0x00,  RESP_LINE_LEN) ; 
+   
+      memcpy(at_cmd_resp_param[0],  ptr_que_per_cgpco->pco, ptr_que_per_cgpco->c_pco) ;
+     
+      TRACE_EVENT_P1("BAT_RES_SET_PERCENT_CGPCO: PCO STRING %s",  at_cmd_resp_param[0])  ;
+      break ;
+    }
+    case (BAT_RES_QUE_PLUS_CPOL):
+    {
+      rsp->response.ptr_que_plus_cpol->oper[rsp->response.ptr_que_plus_cpol->c_oper] = '\0';
+      TRACE_EVENT_P3("BAT_RES_QUE_PLUS_CPOL: %d,%d,\"%s\"", 
+                      rsp->response.ptr_que_plus_cpol->index,
+                      rsp->response.ptr_que_plus_cpol->format,
+                      rsp->response.ptr_que_plus_cpol->oper);
+      break;
+    }
+    case (BAT_RES_TST_PLUS_CPOL):
+    {
+      TRACE_EVENT_P2("BAT_RES_TST_PLUS_CPOL: %d,%d", 
+                      rsp->response.ptr_tst_plus_cpol->index1,
+                      rsp->response.ptr_tst_plus_cpol->index2);
+      break;
+    }
+    case (BAT_RES_QUE_PLUS_CSCS):
+    {
+      TRACE_EVENT_P1("BAT_RES_QUE_PLUS_CSCS: %d", 
+                      rsp->response.ptr_que_plus_cscs->cs);
+      break;
+    }  
+    case (BAT_RES_SET_PLUS_CCWA):
+    {
+      TRACE_EVENT_P1("BAT_RES_SET_PLUS_CCWA: %d", 
+                      rsp->response.ptr_set_plus_ccwa->status);
+      break;
+    }
+    case (BAT_RES_SET_PLUS_CGMI):
+    {
+      TRACE_EVENT_P1("BAT_RES_SET_PLUS_CGMI: %s", 
+                      rsp->response.ptr_set_plus_cgmi->manufacturer);
+      break;
+    } 
+    case (BAT_RES_SET_PLUS_CGMM):
+    {
+      TRACE_EVENT_P1("BAT_RES_SET_PLUS_CGMM: %s", 
+                      rsp->response.ptr_set_plus_cgmm->model);
+      break;
+    } 
+    case (BAT_RES_SET_PLUS_CGMR):
+    {
+      TRACE_EVENT_P1("BAT_RES_SET_PLUS_CGMR: %s", 
+                      rsp->response.ptr_set_plus_cgmr->revision);
+      break;
+    } 
+    case (BAT_RES_SET_PLUS_CGSN):
+    {
+      TRACE_EVENT_P1("BAT_RES_SET_PLUS_CGSN: %s", 
+                      rsp->response.ptr_set_plus_cgsn->sn);
+      break;
+    } 
+    case (BAT_RES_AT_OK):
+    {
+      TRACE_EVENT("BAT_RES_AT_OK"); 
+      break;
+    }
+    case (BAT_RES_AT_CONNECT):
+    {
+      TRACE_EVENT("BAT_RES_AT_CONNECT"); 
+      break;
+    }
+    case (BAT_RES_AT_NO_CARRIER_FINAL):
+    {
+      TRACE_EVENT("BAT_RES_AT_NO_CARRIER_FINAL"); 
+      break;
+    }    
+    case (BAT_RES_PLUS_CME_ERROR):
+    {
+      TRACE_EVENT("BAT_RES_PLUS_CME_ERROR"); 
+      break;
+    }    
+    case (BAT_RES_PLUS_CMS_ERROR):
+    {
+      TRACE_EVENT("BAT_RES_PLUS_CMS_ERROR"); 
+      break;
+    }
+
+    case (BAT_RES_AT_BUSY):
+    {
+      TRACE_EVENT("BAT_RES_AT_BUSY"); 
+      break;
+    }    
+    case BAT_RES_UNS_AT_BUSY:
+    {
+      TRACE_EVENT("BAT_RES_UNS_AT_BUSY");
+      break;
+    }
+    case BAT_RES_AT_CHANNEL_BUSY:
+    {
+      TRACE_EVENT("BAT_RES_AT_CHANNEL_BUSY");
+      break;
+    }
+    case (BAT_RES_AT_NO_ANSWER):
+    {
+      TRACE_EVENT("BAT_RES_AT_NO_ANSWER"); 
+      break;
+    }    
+    case BAT_RES_UNS_AT_NO_ANSWER:
+    {
+      TRACE_EVENT("BAT_RES_UNS_AT_NO_ANSWER");
+      break;
+    }
+    case (BAT_RES_PLUS_EXT_ERROR):
+    {
+      TRACE_EVENT("BAT_RES_PLUS_EXT_ERROR"); 
+      break;
+    }
+    default:
+    {
+     TRACE_EVENT("response_cb(): THIS BAT CMD RESPONSE IS STILL UNCOVERED");          
+     break ;
+    }
+  }
+  return 0;
+}
+
+
+GLOBAL int response_cb_busy (T_BAT_client client, T_BAT_cmd_response *rsp)
+{
+  static int i = 0;
+  TRACE_FUNCTION ("response_cb_busy()");
+  
+  TRACE_EVENT_P2("CLIENT HNDL IS: 0x%04x, RESPONSE TAG IS: 0x%04x", client, rsp->ctrl_response);
+  TRACE_EVENT_P1("CONTENT OF RESPONSE IS: %s", rsp->response.ptr_at_ok);
+ 
+  /* returns 1 (busy) for the the first call and 0 (ok) for the second call */ 
+  if (i EQ 0)
+  {
+    i++;
+    return 1;
+  }
+ 
+  return 0;
+}
+
+typedef enum
+{
+ MOTO_CMD_MAID = 0x2001,
+ MOTO_CMD_MAPV, 
+ MOTO_CMD_MDBAD,
+ MOTO_CMD_MDBL, 
+ MOTO_CMD_MDBR, 
+ MOTO_CMD_MDBW,
+ MOTO_CMD_MDFILE, 
+ MOTO_CMD_MDIR,
+ MOTO_CMD_MFOLDER, 
+ MOTO_CMD_MODE, 
+ MOTO_CMD_MPBR, 
+ MOTO_CMD_MPBW, 
+ MOTO_CMD_MPDPM , 
+ MOTO_CMD_MR, 
+ MOTO_CMD_MSYN, 
+ MOTO_CMD_MTDR, 
+ MOTO_CMD_MW
+} T_MOTO_CMD;
+
+
+GLOBAL int unsolicited_result_cb (T_BAT_client client, T_BAT_cmd_response *rsp)
+{
+  TRACE_FUNCTION ("unsolicited_result_cb()");
+
+  TRACE_EVENT_P2("CLIENT HNDL IS: 0x%04x, RESPONSE TAG IS: 0x%04x", client, rsp->ctrl_response);
+
+  if (rsp->ctrl_response & 0x2000)
+  {
+    rsp->response.ptr_custom->buf[rsp->response.ptr_custom->c_buf] = '\0';
+    TRACE_BINDUMP(GDD_DIO_handle, TC_USER4, "USER DATA", (U8 *)rsp->response.ptr_custom->buf, 
+                                                           rsp->response.ptr_custom->c_buf);
+    
+    TRACE_EVENT_P2("unsolicited_result_cb(): custom: len = %d %s", 
+                    rsp->response.ptr_custom->c_buf, rsp->response.ptr_custom->buf);
+    return 0;
+  }
+  else
+  {
+    response_content (rsp);
+  }
+
+  switch (rsp->ctrl_response)
+  {
+    case (BAT_RES_UNS_PERCENT_CPI):
+    {
+      T_BAT_res_uns_percent_cpi *cpi = rsp->response.ptr_res_percent_cpi;
+
+      switch(cpi->msgtype)
+      {
+        case(BAT_P_CPI_TYPE_SETUP):
+        {
+          TRACE_EVENT("BAT_P_CPI_TYPE_SETUP");
+          break;
+        }
+        case(BAT_P_CPI_TYPE_DISC):
+        {
+          TRACE_EVENT("BAT_P_CPI_TYPE_DISC");
+          break;
+        }        
+        case(BAT_P_CPI_TYPE_ALERTING):
+        {
+          TRACE_EVENT("BAT_P_CPI_TYPE_ALERTING");
+          break;
+        }        
+        case(BAT_P_CPI_TYPE_PROC):
+        {
+          TRACE_EVENT("BAT_P_CPI_TYPE_PROC");
+          break;
+        }        
+        case(BAT_P_CPI_TYPE_SYNC):
+        {
+          TRACE_EVENT("BAT_P_CPI_TYPE_SYNC");
+          break;
+        }
+        case(BAT_P_CPI_TYPE_PROGRESS):
+        {
+          TRACE_EVENT("BAT_P_CPI_TYPE_PROGRESS");
+          break;
+        }
+        case(BAT_P_CPI_TYPE_CONNECT):
+        {
+          TRACE_EVENT("BAT_P_CPI_TYPE_CONNECT");
+          break;
+        }
+        case(BAT_P_CPI_TYPE_RELEASE):
+        {
+          TRACE_EVENT("BAT_P_CPI_TYPE_RELEASE");
+          break;
+        }
+        case(BAT_P_CPI_TYPE_REJECT):
+        {
+          TRACE_EVENT("BAT_P_CPI_TYPE_REJECT");
+          break;
+        }
+      }
+      break;
+    }
+    default:
+    {
+     TRACE_EVENT("unsolicited_result_cb(): THIS BAT CMD RESPONSE IS STILL UNCOVERED");          
+     break ;
+    }
+  }
+
+  return 0;
+}
+GLOBAL void instance_signal_cb (T_BAT_signal result)
+{
+  TRACE_FUNCTION ("instance_signal_cb()");
+  TRACE_EVENT_P1("SIGNAL IS: %d", result);
+  return;
+}
+
+
+/*
++-------------------------------------------------------------------+
+| PROJECT :                       MODULE  : app_bat                 |
+|                                 ROUTINE : app_bat_send_result_prim|
++-------------------------------------------------------------------+
+
+  PURPOSE : Provides the output over APP.
+           
+*/
+GLOBAL void app_bat_send_result_prim (U8 result, U32 add_info)
+{
+#ifndef _TARGET_
+ /* send message to the test interface*/
+  PALLOC (app_bat_test_result, APP_BAT_TEST_RSLT);
+  
+  TRACE_FUNCTION_P2("app_bat_send_result_prim(): result is: %d, add_info is: %d", result, add_info);
+
+  app_bat_test_result->test_rslt = result;
+  app_bat_test_result->additional_info = add_info;
+  PSEND (hCommMMI, app_bat_test_result);
+#endif /* _TARGET_ */
+  return;
+}
+
+GLOBAL char *app_bat_init (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                           char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  void *mem = NULL;
+  int inst_num = get_item(param1, BAT_MAX_TEST_INST_NUM, TRUE);
+ 
+  TRACE_FUNCTION("app_bat_init()");
+  MALLOC(mem, BAT_INSTANCE_HEADER_SIZE*inst_num);  
+  result = bat_init(mem, (U8)inst_num);
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return "Call to bat_init() failed";
+  }
+
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_deinit (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                             char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = bat_deinit();
+  TRACE_FUNCTION("app_bat_deinit()");
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_deinit() failed");
+  }
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_new (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                          char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  void *mem = NULL;
+  T_BAT_instance inst_hndl = BAT_INVALID_INSTANCE_HANDLE;
+  int i = 0;
+  int clnt_num = get_item(param1, BAT_MAX_TEST_CLNT_NUM, TRUE);
+
+  TRACE_FUNCTION("app_bat_new()");
+
+    /* Find free slot for connection handle */
+  for (i = 0; i < BAT_MAX_TEST_INST_NUM && clnt_table[i][0] != 0; i++)
+  {  
+
+  }
+
+  if(clnt_num > BAT_MAX_TEST_CLNT_NUM OR i > BAT_MAX_TEST_INST_NUM)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Max instance num too big");
+  }
+
+
+  MALLOC(mem, (clnt_num*BAT_CLIENT_SIZE + BAT_INSTANCE_SIZE));
+
+  app_set_config ();
+
+  result = bat_new (&inst_hndl, mem, (U8)clnt_num, BAT_APP_CONFIG, instance_signal_cb);
+
+  TRACE_EVENT_P1 ("inst_hndl is %d", inst_hndl);
+
+  if(result != BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return("Call to bat_new() failed");
+  }
+
+  clnt_table[inst_hndl][0]++;
+
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_delete (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                            char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_instance inst_hndl = BAT_BROADCAST_CHANNEL; /* connection number -index into local static connection table */
+
+  TRACE_FUNCTION("app_bat_delete()");
+
+  inst_hndl = get_item(param1, 0, FALSE);
+  if(inst_hndl >= BAT_MAX_TEST_INST_NUM)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Connection number out of bounds");
+  }
+  result = bat_delete (inst_hndl);
+  if(result != BAT_OK )
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to gdd_close failed");
+  }
+
+  clnt_table[inst_hndl][0] = 0;
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_uns_open (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                            char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_client client;
+  TRACE_FUNCTION("app_bat_uns_open()");
+  if (bat_uns_open(0, &client, unsolicited_result_cb))
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_uns_open() failed");
+  }
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_open (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                            char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_INVALID_CLIENT_HANDLE; /* connection number -index into local static connection table */
+  T_BAT_instance inst_hndl = BAT_BROADCAST_CHANNEL;
+  U8 clnt_hndl_upper = 0;
+  U8 clnt_hndl_lower = 0;
+
+  TRACE_FUNCTION("app_bat_open()");
+
+  inst_hndl = get_item(param1, 0, TRUE);
+  if (inst_hndl >= BAT_MAX_TEST_INST_NUM)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("input inst_hndl is wrong");
+  }
+  
+  if ( clnt_table[inst_hndl][0] EQ 0)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return("input inst_hndl is wrong, instance is not opened yet");
+  }
+  
+  result = bat_open (inst_hndl, &clnt_hndl, response_cb, signal_cb);
+  if(result != BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return("Call to bat_open() failed");
+  }
+
+  clnt_hndl_upper = (U8)((0xff00&clnt_hndl)>>8);
+  clnt_hndl_lower = (U8) (0x00ff&clnt_hndl);
+  TRACE_EVENT_P2("The returned clnt_hndl is 0x%02X%02X", clnt_hndl_upper, clnt_hndl_lower);
+
+  if(clnt_hndl_upper NEQ inst_hndl)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return("clnt_hndl is wrong");
+  }
+
+  clnt_table[inst_hndl][clnt_hndl_lower+1] = clnt_hndl;
+  clnt_table[inst_hndl][0]++; 
+
+  TRACE_EVENT_P3("app_bat_open(): clnt_table[%d][%d] = 0x%04X", inst_hndl, clnt_hndl_lower+1, clnt_hndl);
+
+  app_bat_uns_open (cmd_entry_ptr, param1, param2, param3, core_func);
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+
+  return 0;
+}
+
+GLOBAL char *app_bat_close (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                            char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_INVALID_CLIENT_HANDLE; /* connection number -index into local static connection table */
+  U8 clnt_hndl_upper;
+  U8 clnt_hndl_lower;
+  T_CLIENT_HANDLE_ERROR err;
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  clnt_hndl_upper = (U8)((clnt_hndl&0xff00)>>8);
+  clnt_hndl_lower = (U8) (clnt_hndl&0x00ff);
+
+  result = bat_close (clnt_hndl);
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_close() failed");
+  }
+
+  clnt_table[clnt_hndl_upper][clnt_hndl_lower+1] = 0xffff;
+  clnt_table[clnt_hndl_upper][0]--;
+    
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+/*
+ *  sending of BAT commands
+ */
+
+GLOBAL char *app_bat_send_q_clcc(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                                  char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_no_parameter    my_que_plus_clcc; 
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_q_clcc()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  my_bat_cmd_send.ctrl_params = BAT_CMD_QUE_PLUS_CLCC;
+  my_bat_cmd_send.params.ptr_que_plus_clcc = &my_que_plus_clcc ;
+  my_que_plus_clcc.bat_dummy = 0xFF;
+  
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if (result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_q_clcc() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_send_q_cscs(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                                  char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_no_parameter    my_que_plus_cscs; 
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_q_cscs()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  my_bat_cmd_send.ctrl_params = BAT_CMD_QUE_PLUS_CSCS ;
+  my_bat_cmd_send.params.ptr_que_plus_cscs = &my_que_plus_cscs ;
+  my_que_plus_cscs.bat_dummy = 0xFF;
+  
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if (result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_q_cscs() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_send_csms(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                               char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_plus_csms my_set_plus_csms;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_csms()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  memset(&my_set_plus_csms, sizeof(my_set_plus_csms), FALSE);
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CSMS;
+  
+  my_bat_cmd_send.params.ptr_set_plus_csms = &my_set_plus_csms;
+
+  /* resolve the service requested */
+  my_set_plus_csms.service = (T_BAT_plus_csms_service)atoi(param2);;
+
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_csms() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_send_ccwa (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                           char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result    = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_plus_ccwa my_set_plus_ccwa;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_ccwa()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  memset(&my_set_plus_ccwa, sizeof(my_set_plus_ccwa), FALSE);
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CCWA;
+  my_bat_cmd_send.params.ptr_set_plus_ccwa = &my_set_plus_ccwa;
+  my_set_plus_ccwa.mode   = (T_BAT_plus_ccwa_mode) atoi(param2);
+  my_set_plus_ccwa.bearer_class = BAT_CCWA_CLASS_NOT_PRESENT;
+  
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_ccwa() failed");
+  }  
+  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_send_cgsms(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                               char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_plus_cgsms my_set_plus_cgsms;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_cgsms()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  memset(&my_set_plus_cgsms, sizeof(my_set_plus_cgsms), FALSE);
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CGSMS;
+  
+  my_bat_cmd_send.params.ptr_set_plus_cgsms = &my_set_plus_cgsms;
+
+  /* resolve the service requested */
+  my_set_plus_cgsms.service = (T_BAT_plus_cgsms_service) atoi(param2);
+
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_cgsms() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_send_cscs(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                               char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_plus_cscs    my_set_plus_cscs; 
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_cscs()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CSCS ;
+  my_bat_cmd_send.params.ptr_set_plus_cscs = &my_set_plus_cscs;
+  
+  /* on ATI is also supported some Scandinavian smoerebroed */
+  if (param2 NEQ NULL)
+  {     
+    if      (strcmp(param2, "IRA") EQ 0)  my_set_plus_cscs.cs = BAT_CSCS_CS_IRA;
+    else if (strcmp(param2, "GSM") EQ 0)  my_set_plus_cscs.cs = BAT_CSCS_CS_GSM;
+    else if (strcmp(param2, "HEX") EQ 0)  my_set_plus_cscs.cs = BAT_CSCS_CS_HEX;
+    else if (strcmp(param2, "UCS2") EQ 0) my_set_plus_cscs.cs = BAT_CSCS_CS_UCS2;
+    else
+    {
+      TRACE_EVENT("app_bat_send_cscs(): support only UCS2, HEX, GSM, IRA (default)");
+      my_set_plus_cscs.cs = BAT_CSCS_CS_IRA;
+    }
+  }
+  else
+  {
+    my_set_plus_cscs.cs = BAT_CSCS_CS_IRA;  /*default = International Reference Alphabet */
+  }
+
+  app_bat_globs.cs = my_set_plus_cscs.cs;
+  
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if (result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_cscs() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+
+GLOBAL char *app_bat_send_cpbr (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                                char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_plus_cpbr my_set_plus_cpbr;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_cpbr()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+  
+  memset(&my_set_plus_cpbr, sizeof(my_set_plus_cpbr), 0);
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CPBR;
+  my_bat_cmd_send.params.ptr_set_plus_cpbr = &my_set_plus_cpbr;
+
+  /* without given any parameters, set to the same as AT+CPBR=1,1 */
+  if (param2 EQ NULL)
+  {     
+    my_set_plus_cpbr.index1 = 1;
+  }
+  else
+  {
+    my_set_plus_cpbr.index1 = atoi(param2);
+  }
+  if (param3 EQ NULL)
+  {     
+    my_set_plus_cpbr.index2 =  my_set_plus_cpbr.index1;
+  }
+  else
+  {
+    my_set_plus_cpbr.index2 = atoi(param3) ;
+  }
+  TRACE_EVENT_P2("app_bat_send_cpbr(): send binary AT+CPBR=%d,%d", my_set_plus_cpbr.index1,  my_set_plus_cpbr.index2);
+
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_cfun() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+
+GLOBAL char *app_bat_send_cpbw (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                                char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_plus_cpbw  my_set_plus_cpbw;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_cpbw()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  memset(&my_set_plus_cpbw, sizeof(my_set_plus_cpbw), 0);
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CPBW;
+  my_bat_cmd_send.params.ptr_set_plus_cpbw = &my_set_plus_cpbw;
+
+  if( param2 EQ NULL)
+  {
+    my_set_plus_cpbw.index = 1;
+  }
+  else
+  {
+    my_set_plus_cpbw.index = atoi(param2);
+  }
+
+  /*
+   * AT+CPBW=index,"number",type,"name"
+   * with test application we can only get 3 parameters,
+   * where normally param1 --> clnt_hndl
+   *                param2 --> index
+   *                param3 --> number
+   *
+   * But we are more interrested in changing the phone book name
+   * due to different character sets.
+   * That's why we assign param3 to the name and hard code the number
+   */
+
+  if(param3==NULL)
+  {
+    strcpy((char *)(my_set_plus_cpbw.text), "Doe, John");
+    my_set_plus_cpbw.c_text = strlen("Doe, John");
+  }
+  else
+  {
+    strcpy((char *)my_set_plus_cpbw.text, param3);
+    my_set_plus_cpbw.c_text = strlen(param3);
+  }
+  my_set_plus_cpbw.v_text = TRUE; 
+
+  my_set_plus_cpbw.v_number = TRUE; 
+  strcpy((char *)(my_set_plus_cpbw.number), "12345678" ); 
+  my_set_plus_cpbw.c_number = strlen((const char *)(my_set_plus_cpbw.number)); 
+
+  TRACE_EVENT_P2("app_bat_send_cpbw(): %s, %s", my_set_plus_cpbw.number, my_set_plus_cpbw.text);
+
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if (result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_cfun() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+
+GLOBAL char *app_bat_send_cpbf (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                                     char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_plus_cpbf  my_set_plus_cpbf;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_cpbf()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  memset(&my_set_plus_cpbf, sizeof(my_set_plus_cpbf), 0);
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CPBF;
+  my_bat_cmd_send.params.ptr_set_plus_cpbf = &my_set_plus_cpbf;
+
+  if( param2 EQ NULL)
+  {
+    my_set_plus_cpbf.c_findtext = sizeof("Hello")-1;
+    strcpy((char *)my_set_plus_cpbf.findtext,"Hello");   
+  }
+  else
+  {
+    my_set_plus_cpbf.c_findtext = strlen(param2);
+    strcpy((char *)my_set_plus_cpbf.findtext,param2);
+  }
+
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if (result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_cfun() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_send_cgmi(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                                char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result    = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_send     lbatSend;
+  T_BAT_no_parameter lbatDummy;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_cgmi()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  lbatSend.ctrl_params              = BAT_CMD_SET_PLUS_CGMI;
+  lbatDummy.bat_dummy               = 0xFF;
+  lbatSend.params.ptr_set_plus_cgmi = &lbatDummy;
+
+  result = bat_send (clnt_hndl, &lbatSend);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to app_bat_send_cgmi() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_send_cgmm(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                                char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result    = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_send     lbatSend;
+  T_BAT_no_parameter lbatDummy;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_cgmm()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  lbatSend.ctrl_params              = BAT_CMD_SET_PLUS_CGMM;
+  lbatDummy.bat_dummy               = 0xFF;
+  lbatSend.params.ptr_set_plus_cgmm = &lbatDummy;
+
+  result = bat_send (clnt_hndl, &lbatSend);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to app_bat_send_cgmm() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_send_cgmr(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                                char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result    = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_send     lbatSend;
+  T_BAT_no_parameter lbatDummy;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_cgmr()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  lbatSend.ctrl_params              = BAT_CMD_SET_PLUS_CGMR;
+  lbatDummy.bat_dummy               = 0xFF;
+  lbatSend.params.ptr_set_plus_cgmr = &lbatDummy;
+
+  result = bat_send (clnt_hndl, &lbatSend);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to app_bat_send_cgmr() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_send_cgsn(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                                char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result    = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_send     lbatSend;
+  T_BAT_no_parameter lbatDummy;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_cgsn()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  lbatSend.ctrl_params              = BAT_CMD_SET_PLUS_CGSN;
+  lbatDummy.bat_dummy               = 0xFF;
+  lbatSend.params.ptr_set_plus_cgsn = &lbatDummy;
+
+  result = bat_send (clnt_hndl, &lbatSend);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return("Call to app_bat_send_cgsn() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+/*
+ * add some gprs command for test TCPIP
+ */
+GLOBAL char *app_bat_send_q_cgatt(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                           char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_no_parameter    my_que_plus_cgatt; 
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_q_cgactt()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  my_bat_cmd_send.ctrl_params = BAT_CMD_QUE_PLUS_CGATT ;
+  my_bat_cmd_send.params.ptr_que_plus_cgatt = &my_que_plus_cgatt ;
+  /* full functionality mode*/
+  /* Reset the MT before changing functionality level */
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_cfun() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+
+
+GLOBAL char *app_bat_send_q_cgact(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                                  char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_no_parameter    my_que_plus_cgact; 
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_q_cgact()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  my_bat_cmd_send.ctrl_params = BAT_CMD_QUE_PLUS_CGACT ;
+  my_bat_cmd_send.params.ptr_que_plus_cgact = &my_que_plus_cgact ;
+  /* full functionality mode*/
+  /* Reset the MT before changing functionality level */
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_cfun() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+
+
+GLOBAL char *app_bat_send_cgatt(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                                char *param2, char *param3, core_func_t core_func) 
+{
+
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_plus_cgatt  my_set_plus_cgatt;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_cgatt()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  memset(&my_set_plus_cgatt , sizeof(my_set_plus_cgatt),  0 );
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CGATT ;
+  my_bat_cmd_send.params.ptr_set_plus_cgatt = &my_set_plus_cgatt ;
+  /* full functionality mode*/
+  if(param2 EQ NULL)
+    my_set_plus_cgatt.state = BAT_CGATT_STATE_ATTACHED;
+  else
+    my_set_plus_cgatt.state = (T_BAT_plus_cgatt_state) atoi(param2) ;
+
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_cgatt() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+
+GLOBAL char *app_bat_send_cgact(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                           char *param2, char *param3, core_func_t core_func) 
+{
+
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_plus_cgact  my_set_plus_cgact;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_cgact()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  memset(&my_set_plus_cgact , sizeof(my_set_plus_cgact),  0 );
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CGACT ;
+  my_bat_cmd_send.params.ptr_set_plus_cgact = &my_set_plus_cgact ;
+  /* full functionality mode*/
+  if(param2==NULL)
+    my_set_plus_cgact.state =(T_BAT_plus_cgact_state) 1 ;
+  else
+    my_set_plus_cgact.state=(T_BAT_plus_cgact_state) atoi(param2) ;
+
+  /* set Activate which pdp context !!!  */
+  my_set_plus_cgact.c_cid = 1 ; 
+  my_set_plus_cgact.cid[0] = (T_BAT_pdp_cid) 1 ;
+   
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_cgact() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+
+
+GLOBAL char *app_bat_send_cgpco(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                                char *param2, char *param3, core_func_t core_func) 
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_percent_cgpco my_set_per_cgpco ;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+  CHAR User[10] ;
+  CHAR Pass[10] ;
+  USHORT  pco_len = 100;
+  UBYTE   pco_array[100];
+
+  TRACE_FUNCTION("app_bat_send_cgpco()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  memset(&my_set_per_cgpco , sizeof(my_set_per_cgpco),  0 );
+  memset(pco_array , 0x00 , sizeof(pco_array));
+  memset(User , 0x00 , sizeof(User)) ;
+  memset(Pass , 0x00 , sizeof(Pass)) ;
+  
+  
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PERCENT_CGPCO ;
+  my_bat_cmd_send.params.ptr_set_percent_cgpco= &my_set_per_cgpco ;
+  /* full functionality mode*/
+  if(param2!=NULL)
+    strcpy(User ,param2);
+  else
+    strcpy(User ,"WAP");
+
+  if(param3!=NULL)
+    strcpy(Pass ,param3);
+  else
+    strcpy(Pass ,"WAP");
+
+  my_set_per_cgpco.cid = (T_BAT_pdp_cid)1 ;
+  my_set_per_cgpco.format = (T_BAT_percent_cgpco_format) 1 ;  /* ASCII mode */ 
+  my_set_per_cgpco.mode  = (T_BAT_percent_cgpco_mode) 0  ;  /* Set  parameter command */
+  
+  my_set_per_cgpco.v_pco = 1  ;
+  my_set_per_cgpco.c_pco = 0  ; 
+
+#if 0
+ ret = utl_create_pco (pco_array, &pco_len,
+                        ACI_PCO_CONTENTMASK_AUTH | 
+                        ACI_PCO_CONTENTMASK_DNS1 |
+                        ACI_PCO_CONTENTMASK_DNS2,
+                        ACI_PCO_CONFIG_PROT_PPP,
+                        ACI_PCO_AUTH_PROT_PAP, (UBYTE*)&User, (UBYTE*)&Pass, dns_adr1, dns_adr2);
+
+ ret = utl_create_pco (pco_array, &pco_len,
+                        0x00000001 | 
+                        0x00000002 |
+                        0x00000004,
+                        0,
+                        0xc023, (UBYTE*)&User, (UBYTE*)&Pass, dns_adr1, dns_adr2);
+
+#endif  
+
+  strcpy((char *)pco_array, "PAP,WAP,WAP,10.2.3.4,10.0.0.10" ) ;
+ 
+  TRACE_EVENT_P2("=======Input PCO common string is ===%s==== len is %d", pco_array, pco_len) ;
+
+  memcpy(&my_set_per_cgpco.pco, &pco_array, pco_len ) ;
+  my_set_per_cgpco.c_pco = pco_len ; 
+
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_cgpco() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_send_q_cgpco(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                                  char *param2, char *param3, core_func_t core_func) 
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_percent_cgpco my_set_per_cgpco ;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+  USHORT  pco_len = 100;
+  UBYTE   pco_array[100];
+
+
+  TRACE_FUNCTION("app_bat_send_q_cgpco()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  memset(&my_set_per_cgpco , sizeof(my_set_per_cgpco),  0 );
+  memset(pco_array , 0x00 , sizeof(pco_array));
+  
+  
+  my_bat_cmd_send.ctrl_params = (T_BAT_ctrl_params) BAT_CMD_SET_PERCENT_CGPCO ;
+  my_bat_cmd_send.params.ptr_set_percent_cgpco= &my_set_per_cgpco ;
+  /* full functionality mode*/
+  
+  my_set_per_cgpco.cid = (T_BAT_pdp_cid) 1 ;
+  my_set_per_cgpco.format = (T_BAT_percent_cgpco_format) 1 ;  /* ASCII mode */
+  my_set_per_cgpco.mode  = (T_BAT_percent_cgpco_mode) 1  ;  /* Query  parameter command */
+  
+  my_set_per_cgpco.v_pco = 1  ;
+  my_set_per_cgpco.c_pco = 0  ; 
+
+ 
+  TRACE_EVENT_P2("pco_array = %s, len = %d", pco_array, pco_len) ;
+
+  memcpy(&my_set_per_cgpco.pco, &pco_array, pco_len ) ;
+  my_set_per_cgpco.c_pco = pco_len ; 
+ 
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_cgpco() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+
+GLOBAL char *app_bat_send_cgdcont(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                           char *param2, char *param3, core_func_t core_func) 
+{
+
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_plus_cgdcont  my_set_plus_cgdcont ;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_cgdcont()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  memset(&my_set_plus_cgdcont , sizeof(my_set_plus_cgdcont),  0 );
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CGDCONT ;
+  my_bat_cmd_send.params.ptr_set_plus_cgdcont = &my_set_plus_cgdcont ;
+  /* full functionality mode*/
+   if(param2!=NULL )
+   {
+     memcpy( my_set_plus_cgdcont.apn  , param2, strlen(param2)  );   
+          my_set_plus_cgdcont.c_apn = strlen(param2)  ;
+          my_set_plus_cgdcont.v_apn = 1  ;
+          my_set_plus_cgdcont.pdp_type = BAT_PDP_TYPE_IPV4 ;  //PDP_T_IP ;
+
+     my_set_plus_cgdcont.cid =(T_BAT_pdp_cid) 1 ;
+          my_set_plus_cgdcont.v_pdp_addr= 1  ;
+          my_set_plus_cgdcont.c_pdp_addr= 16  ;
+          memset(my_set_plus_cgdcont.pdp_addr , '\0' , 16 ) ; 
+     my_set_plus_cgdcont.d_comp = (T_BAT_plus_cgdcont_d_comp) -1 ;
+     my_set_plus_cgdcont.h_comp = (T_BAT_plus_cgdcont_h_comp) -1 ;
+      
+      
+   }
+   else
+   {
+     strcpy( (char *)my_set_plus_cgdcont.apn  , "CMWAP" );   
+          my_set_plus_cgdcont.c_apn = strlen("CMWAP")  ;
+      
+          my_set_plus_cgdcont.v_apn = 1  ;
+          my_set_plus_cgdcont.pdp_type = BAT_PDP_TYPE_IPV4; //PDP_T_IP ;
+          my_set_plus_cgdcont.cid = (T_BAT_pdp_cid) 1 ;
+      
+          my_set_plus_cgdcont.v_pdp_addr= 1  ;
+          my_set_plus_cgdcont.c_pdp_addr= 16  ;
+          memset(my_set_plus_cgdcont.pdp_addr ,'\0' , 16 ) ;  
+     my_set_plus_cgdcont.d_comp = (T_BAT_plus_cgdcont_d_comp) -1 ;
+     my_set_plus_cgdcont.h_comp = (T_BAT_plus_cgdcont_h_comp) -1 ;
+   }
+
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_cgdcont() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+
+GLOBAL char *app_bat_send_cfun (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                           char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_plus_cfun my_set_plus_cfun;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_cfun()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  memset(&my_set_plus_cfun, sizeof(my_set_plus_cfun), FALSE);
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CFUN;
+  my_bat_cmd_send.params.ptr_set_plus_cfun = &my_set_plus_cfun;
+  /* full functionality mode*/
+  my_set_plus_cfun.fun = BAT_CFUN_FUN_FULL;
+  /* Reset the MT before changing functionality level */
+  my_set_plus_cfun.rst = BAT_CFUN_RST_NOT_PRESENT; 
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_cfun() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+#define MAX_SM_LEN 176
+
+typedef struct            /* data buffer for Short Messages */
+{
+  UBYTE data[MAX_SM_LEN];
+  UBYTE len;
+} T_ACI_SM_DATA;
+
+LOCAL char *HexToGsm(char *cl, U8 *value)
+{
+  int i;
+  U8 character;
+
+  *value = 0;
+
+  /*
+   * for both nibbles
+   */
+  for (i=0;i<2;i++)
+  {
+    /*
+     * shift the result of the last loop
+     */
+    *value = (*value) << 4;
+
+    /*
+     * Isolate next nibble in ASCII
+     */
+    character = toupper(*cl++);
+
+    /*
+     * convert Nibble character to value
+     */
+    switch (character)
+    {
+      case 'A':
+      case 'B':
+      case 'C':
+      case 'D':
+      case 'E':
+      case 'F':
+        *value = *value + (character - 'A' + 10);
+        break;
+      default:
+        /*
+         * 0-9
+         */
+        *value = *value + (character - '0');
+        break;
+    }
+  }
+
+  /*
+   * return pointer to the rest of PDU
+   */
+  return cl;
+}
+
+GLOBAL char *app_bat_send_cmgs (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                           char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result    = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_plus_cmgs my_set_plus_cmgs;
+  T_BAT_cmd_send my_bat_cmd_send;
+  char *cl, cl_str[] = "079194710600403401000B811027513356F8000008C22015442FCFE9";  
+  T_ACI_SM_DATA pdu;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_cmgs()");
+  
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  pdu.len = 0;
+  cl = cl_str;
+
+  {
+    U8 i = 0;
+    U8 sca_len = 0;
+    U8 offset  = 0;
+    U8 pdu_message_octets_length = 0;
+
+    /*
+     * Extract the length (excluding SCA octets) outto be parsed from
+     * the input pointer cl
+     */
+
+    SHORT length_of_pdu_message = strlen(cl)/2 - 8;
+    TRACE_EVENT_P1("length_of_pdu_message: %d", length_of_pdu_message);
+
+    HexToGsm (cl, &sca_len);
+    
+    /*
+    calculation of the real length of PDU string
+    The first octet in the input is an indicator of the length of the SMSC information supplied.
+    And this Octet and the SMSC content do not count in the real length of PDU string.
+    so here, the length of the input needs to minus 2 + sca_len*2 and then divide 2.
+    */
+    pdu_message_octets_length = (strlen(cl)-2-sca_len*2)/2;
+    TRACE_EVENT_P1("pdu_message_octets_length: %d", pdu_message_octets_length);
+
+    pdu.len = length_of_pdu_message + sca_len + 1;
+    TRACE_EVENT_P1("pdu.len: %d", pdu.len);
+
+    for (i = offset; i < pdu.len AND *cl NEQ '\0' AND i < MAX_SM_LEN; i++)
+    {
+      cl = HexToGsm(cl, &pdu.data[i]);
+    }
+  }
+  memset(&my_set_plus_cmgs, sizeof(my_set_plus_cmgs), 0);
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CMGS;
+  my_bat_cmd_send.params.ptr_set_plus_cmgs = &my_set_plus_cmgs;
+  memcpy(my_set_plus_cmgs.pdu, pdu.data, pdu.len);
+  my_set_plus_cmgs.c_pdu = pdu.len;                               /* total length */
+  my_set_plus_cmgs.length = my_set_plus_cmgs.c_pdu;   /* length without SCA */
+
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_cmgs() failed");
+  } 
+  app_bat_send_result_prim(0, NO_ADD_VAL); 
+  return 0;
+}
+
+
+GLOBAL char *app_bat_send_cmgl (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                           char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result    = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_plus_cmgl my_set_plus_cmgl;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_cmgs()");
+  
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  if( param2 EQ NULL)
+  {
+    my_set_plus_cmgl.stat = BAT_CMGL_STAT_ALL;
+  }
+  else
+  {
+    if (strcmp(param2, "ALL") EQ 0)
+    {
+      my_set_plus_cmgl.stat = BAT_CMGL_STAT_ALL;
+    }
+    if (strcmp(param2, "SENT") EQ 0)
+    {
+      my_set_plus_cmgl.stat = BAT_CMGL_STAT_STO_SEND;
+    }
+    if (strcmp(param2, "UNSENT") EQ 0)
+    {
+      my_set_plus_cmgl.stat = BAT_CMGL_STAT_STO_UNSENT;
+    }
+    if (strcmp(param2, "READ") EQ 0)
+    {
+      my_set_plus_cmgl.stat = BAT_CMGL_STAT_REC_READ;
+    }
+    if (strcmp(param2, "UNREAD") EQ 0)
+    {
+      my_set_plus_cmgl.stat = BAT_CMGL_STAT_REC_UNREAD;
+    }
+  }
+  
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CMGL;
+  my_bat_cmd_send.params.ptr_set_plus_cmgl = &my_set_plus_cmgl;
+
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_cmgl() failed");
+  } 
+  app_bat_send_result_prim(0, NO_ADD_VAL); 
+  return 0;
+  
+}
+
+
+GLOBAL char *app_bat_send_cops (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                           char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result    = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_plus_cops my_set_plus_cops;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_cops()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  memset(&my_set_plus_cops, sizeof(my_set_plus_cops), FALSE);
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_COPS;
+  my_bat_cmd_send.params.ptr_set_plus_cops = &my_set_plus_cops;
+  my_set_plus_cops.mode   = BAT_COPS_MODE_AUTO;
+  my_set_plus_cops.format = BAT_COPS_FORMAT_NOT_PRESENT;
+  my_set_plus_cops.v_oper = FALSE; 
+  my_set_plus_cops.c_oper = 0; 
+  
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_cops() failed");
+  }  
+  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_send_cpin (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                           char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_plus_cpin my_cmd_plus_cpin;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+  char number[] = "1236";
+
+  clnt_hndl = get_item(param1, 0, TRUE);
+
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  memset(&my_cmd_plus_cpin, sizeof(my_cmd_plus_cpin), FALSE);
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CPIN;
+  my_bat_cmd_send.params.ptr_set_plus_cpin = &my_cmd_plus_cpin;
+   
+  if (param2)
+  {
+    strcpy((char *)&(my_cmd_plus_cpin.pin), (const char *)param2);
+    my_cmd_plus_cpin.c_pin = strlen(param2);
+  }
+  else
+  {
+    strcpy((char *)&(my_cmd_plus_cpin.pin), (const char *)number);
+    my_cmd_plus_cpin.c_pin = strlen(number);
+  }
+  
+  if (param3)
+  {
+    strcpy((char *)&(my_cmd_plus_cpin.newpin), (const char *)param3);
+    my_cmd_plus_cpin.c_newpin = strlen(param3);
+    my_cmd_plus_cpin.v_newpin = 1;   
+  }
+
+  TRACE_EVENT_P1("app_bat_send_cpin(): PIN = %s", my_cmd_plus_cpin.pin);
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_cpin() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_send_cnmi (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                           char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_plus_cnmi my_cmd_plus_cnmi;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+  SHORT mt   = BAT_CNMI_MT_NOT_PRESENT;
+  SHORT bm   = BAT_CNMI_BM_NOT_PRESENT;
+  SHORT ds   = BAT_CNMI_DS_NOT_PRESENT;
+
+  clnt_hndl = get_item(param1, 0, TRUE);
+
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  memset(&my_cmd_plus_cnmi, sizeof(my_cmd_plus_cnmi), FALSE);
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CNMI;
+  my_bat_cmd_send.params.ptr_set_plus_cnmi = &my_cmd_plus_cnmi;
+
+  /*
+  *   +CNMI has up to three parameters. These may as well all be
+  *   delivered in "param2", separated by commas. We can extract them
+  *   using the ATI function "parse()". The extraction is done
+  *   not to elements of the BAT message directly, but via intermediate local
+  *   variables. This is to avoid any issues with variable sizes.
+  */
+  TRACE_EVENT_P1("app_bat_send_cnmi(): param2 = :%s:", param2);
+  if (!parse(param2,"ddd", &mt, &bm, &ds))
+  {
+    app_bat_send_result_prim(1,NO_ADD_VAL);
+    return("Failed to parse +CNMI"); 
+  }
+
+  /*
+  *   Now copy the data into the BAT message structure.
+  */
+  my_cmd_plus_cnmi.mt = (T_BAT_VAL_plus_cnmi_mt)mt;
+  my_cmd_plus_cnmi.bm = (T_BAT_VAL_plus_cnmi_bm)bm;
+  my_cmd_plus_cnmi.ds = (T_BAT_VAL_plus_cnmi_ds)ds;
+
+  TRACE_EVENT_P3("app_bat_send_cnmi(): mt = %d bm = %d ds = %d", my_cmd_plus_cnmi.mt, 
+		                             my_cmd_plus_cnmi.bm, my_cmd_plus_cnmi.ds);
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_cnmi() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+
+GLOBAL char *app_bat_send_atd (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                           char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_at_d my_cmd_atd;
+  T_BAT_cmd_send my_bat_cmd_send;
+  char number[] = "03039831270;";
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_atd()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  memset(&my_cmd_atd, sizeof(my_cmd_atd), FALSE);
+  my_bat_cmd_send.ctrl_params = BAT_CMD_AT_D;
+  my_bat_cmd_send.params.ptr_at_d = &my_cmd_atd;
+   
+  if (param2)
+  {
+    strcpy((char *)&(my_cmd_atd.dial_string), (const char *)param2);
+    my_cmd_atd.c_dial_string = strlen(param2);
+  }
+  else
+  {
+    strcpy((char *)&(my_cmd_atd.dial_string), (const char *)number);
+    my_cmd_atd.c_dial_string = strlen(number);
+  }
+
+  TRACE_EVENT_P1("app_bat_send_atd(): call %s", my_cmd_atd.dial_string);
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_atd() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+
+GLOBAL char *app_bat_send_ata (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                           char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_BAT_no_parameter dummy;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_ata()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  dummy.bat_dummy = 0xFF;
+  my_bat_cmd_send.ctrl_params = BAT_CMD_AT_A;
+  my_bat_cmd_send.params.ptr_at_a = &dummy;
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_ata() failed");
+  } 
+  app_bat_send_result_prim(0, NO_ADD_VAL); 
+  return 0;
+}
+
+GLOBAL char *app_bat_send_per_als (app_cmd_entry_t *cmd_entry_ptr, char *param1,
+                           char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_BAT_cmd_set_percent_als my_set_per_als;
+  T_BAT_no_parameter my_quer_per_als;
+  int clnt_com = get_item(param2, 0, TRUE);
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_per_als()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+  
+  if(clnt_com EQ BAT_CMD_SET_PERCENT_ALS) /* AT%ALS = 0 or 1 */
+  {
+    memset(&my_set_per_als, sizeof(my_set_per_als), FALSE);
+    my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PERCENT_ALS;
+    my_bat_cmd_send.params.ptr_set_percent_als = &my_set_per_als;
+    my_set_per_als.mode = BAT_P_ALS_MOD_SPEECH;
+  }
+  else /* AT%ALS? */
+  {
+    my_bat_cmd_send.ctrl_params = BAT_CMD_QUE_PERCENT_ALS;
+    my_bat_cmd_send.params.ptr_que_percent_als = &my_quer_per_als;
+  }
+
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_per_als() failed");
+  }
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_send_ath (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                           char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_BAT_no_parameter dummy;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_ath()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  dummy.bat_dummy = 0xFF;
+
+  my_bat_cmd_send.ctrl_params = BAT_CMD_AT_H;
+  my_bat_cmd_send.params.ptr_at_h = &dummy;
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_ath() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+
+  return 0;
+}
+
+
+GLOBAL char *app_bat_send_q_cscb(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                                     char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result    = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_send     lbatSend;
+  T_BAT_no_parameter lbatDummy;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_q_cscb()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  lbatSend.ctrl_params              = BAT_CMD_QUE_PLUS_CSCB;
+  lbatDummy.bat_dummy               = 0xFF;
+  lbatSend.params.ptr_que_plus_cscb = &lbatDummy;
+
+  result = bat_send (clnt_hndl, &lbatSend);
+
+  if(result NEQ BAT_OK)
+  {
+      TRACE_ERROR("Call to app_bat_send_q_cscb() failed");
+      return 0;
+  }  
+  return 0;
+}
+
+GLOBAL char *app_bat_send_q_cpinf(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                                     char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result    = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_send     lbatSend;
+  T_BAT_no_parameter lbatDummy;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("bat_send_q_cpinf()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  lbatSend.ctrl_params              = BAT_CMD_QUE_PERCENT_CPINF;
+  lbatDummy.bat_dummy               = 0xFF;
+  lbatSend.params.ptr_que_percent_cpinf = &lbatDummy;
+
+  result = bat_send (clnt_hndl, &lbatSend);
+
+  if(result NEQ BAT_OK)
+  {
+      TRACE_ERROR("Call to bat_send_q_cpinf() failed");
+      return 0;
+  }  
+  return 0;
+}
+
+
+GLOBAL char *app_bat_send_q_cpol(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                                 char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result    = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_send     lbatSend;
+  T_BAT_no_parameter lbatDummy;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("bat_send_q_cpol()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  lbatSend.ctrl_params              = BAT_CMD_QUE_PLUS_CPOL;
+  lbatDummy.bat_dummy               = 0xFF;
+  lbatSend.params.ptr_que_plus_cpol = &lbatDummy;
+
+  result = bat_send (clnt_hndl, &lbatSend);
+
+  if(result NEQ BAT_OK)
+  {
+      TRACE_ERROR("Call to app_bat_send_q_cpinf() failed");
+      return 0;
+  }  
+  return 0;
+}
+
+GLOBAL char *app_bat_send_t_cpol(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                                 char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result    = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_send     lbatSend;
+  T_BAT_no_parameter lbatDummy;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("bat_send_t_cpol()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  lbatSend.ctrl_params = BAT_CMD_TST_PLUS_CPOL;
+  lbatDummy.bat_dummy  = 0xFF;
+  lbatSend.params.ptr_tst_plus_cpol = &lbatDummy;
+
+  result = bat_send (clnt_hndl, &lbatSend);
+
+  if(result NEQ BAT_OK)
+  {
+      TRACE_ERROR("Call to app_bat_send_t_cpinf() failed");
+      return 0;
+  }  
+  return 0;
+}
+
+
+
+
+
+GLOBAL char *app_bat_quer_set_clck (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                           char *param2, char *param3, core_func_t core_func)
+{
+  /* bat_clck_query 0 0 --> unlock FDN, 0 1 --> lock FDN, 0 2 --> query status FDN */
+  T_BAT_return result    = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_plus_clck my_set_plus_clck;
+  T_BAT_cmd_send my_bat_cmd_send;
+  int mode = BAT_CLCK_MODE_QUERY;
+  char passwd[] = "0000";
+  T_CLIENT_HANDLE_ERROR err;
+  
+  TRACE_FUNCTION("app_bat_quer_set_clck()");
+  
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  mode = get_item(param2, 0, FALSE);
+  
+  memset(&my_set_plus_clck, sizeof(my_set_plus_clck), FALSE);
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CLCK;
+  my_bat_cmd_send.params.ptr_set_plus_clck= &my_set_plus_clck;
+  my_set_plus_clck.fac   = BAT_CLCK_FAC_FD;
+  my_set_plus_clck.bearer_class = BAT_CLASS_NOT_PRESENT;
+  
+  if(mode NEQ BAT_CLCK_MODE_QUERY)
+  {
+    memset(&my_set_plus_clck.passwd, sizeof(my_set_plus_clck.passwd), 0);
+    strcpy((char *)&(my_set_plus_clck.passwd), (const char *)passwd);
+    my_set_plus_clck.c_passwd = strlen(passwd);
+    my_set_plus_clck.v_passwd = 1;   
+  }
+  my_set_plus_clck.mode =(T_BAT_plus_clck_mode) mode;   
+   
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to app_bat_send_cops() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+
+
+GLOBAL char *app_bat_ctrl(app_cmd_entry_t *cmd_entry_ptr,
+                          char *param1, char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_INVALID_CLIENT_HANDLE;
+  T_BAT_ctrl app_bat_ctrl;
+  app_bat_ctrl.event = BAT_ABORT;
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  if(param2 && !strcmp(string_to_lower(param2), "READY"))
+    app_bat_ctrl.event = BAT_APP_READY_RESOURCE;
+
+
+  result = bat_ctrl (clnt_hndl, &app_bat_ctrl);
+
+  if(result != BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_ctrl() failed");
+  }
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_receive_data_cb(app_cmd_entry_t *cmd_entry_ptr,
+                          char *param1, char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_GDD_CON_HANDLE con_hndl = 0xffff;
+  char *buf = "BAT_LIB_TEST";
+  
+  TRACE_FUNCTION("app_bat_receive_data_cb()") ;
+  con_hndl = (T_GDD_CON_HANDLE) get_item(param1, 0x0100, FALSE);
+
+  result = (T_BAT_return) bat_gdd_receive_data_cb(con_hndl, (T_GDD_BUF *)buf);
+
+  if(result != BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to app_bat_receive_data_cb() failed");
+  }    
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_signal_cb(app_cmd_entry_t *cmd_entry_ptr,
+                          char *param1, char *param2, char *param3, core_func_t core_func)
+{
+  T_GDD_CON_HANDLE con_hndl = 0xffff;
+  T_GDD_SIGNAL gdd_sig = {(T_GDD_SIGTYPE)0};
+  
+  con_hndl = get_item(param1, 0x0100, FALSE);
+  gdd_sig.sig = (T_GDD_SIGTYPE) get_item(param2, 1, FALSE);
+
+  bat_gdd_signal_cb(con_hndl, gdd_sig);
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+
+  return 0;
+}
+
+
+/*****************************************************************************************
+ *
+ * This test case tests the complete use scenario: initializing the instances, opening 
+ * different clients, sending cmd, closing the clients, deiniting the instances. Then repeat
+ * this once more.
+ *
+ *****************************************************************************************/
+
+LOCAL void free_mem(void *mem1, void *mem2, void *mem3, void *mem4, void *mem5)
+{
+  if (mem1 NEQ NULL)
+    MFREE(mem1);
+  if (mem2 NEQ NULL)
+    MFREE(mem2);
+  if (mem3 NEQ NULL)
+    MFREE(mem3);
+  if (mem4 NEQ NULL)
+    MFREE(mem4);
+  if (mem5 NEQ NULL)
+    MFREE(mem5);
+  return;
+}
+
+GLOBAL char *app_bat_complete_test(app_cmd_entry_t *cmd_entry_ptr,
+                          char *param1, char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  void *mem1 = NULL;
+  void *mem2 = NULL;
+  int inst_num = 2;
+  int clnt_num = 2;
+  int i;
+
+  T_BAT_instance inst_hndl = BAT_INVALID_INSTANCE_HANDLE;
+  T_BAT_client  clnt_hndl = BAT_INVALID_CLIENT_HANDLE;
+  T_BAT_client  client = BAT_INVALID_CLIENT_HANDLE;
+
+  T_BAT_cmd_set_plus_cfun my_set_plus_cfun;
+  T_BAT_cmd_send my_bat_cmd_send;
+ 
+  TRACE_FUNCTION("app_bat_complete_test()");
+  for (i = 0; i < 2; i ++)
+  {
+    MALLOC(mem1, BAT_INSTANCE_HEADER_SIZE*inst_num);  
+    MALLOC(mem2, (clnt_num*BAT_CLIENT_SIZE + BAT_INSTANCE_SIZE));
+
+
+    TRACE_EVENT_P1 ("calling bat_init() the %d th time", i);
+
+    if (bat_init(mem1, (U8)inst_num) NEQ BAT_OK)
+    {
+      TRACE_ERROR("ERROR: Call to bat_init() failed");
+      free_mem(mem1,mem2,NULL,NULL,NULL);
+      return 0;
+    }
+
+    app_set_config ();
+
+    if (bat_new (&inst_hndl, mem2, (U8)clnt_num, BAT_APP_CONFIG, instance_signal_cb) NEQ BAT_OK)
+    {
+      TRACE_ERROR("Call to bat_new() failed");
+      free_mem(mem1,mem2,NULL,NULL,NULL);
+      return 0;
+    }
+    vsi_t_sleep (VSI_CALLER 100);
+
+    if (bat_open (inst_hndl, &clnt_hndl, response_cb, signal_cb) NEQ BAT_OK)
+    {
+      TRACE_ERROR("Call to bat_open() failed");
+      free_mem(mem1,mem2,NULL,NULL,NULL);
+      return 0;
+    }
+    vsi_t_sleep (VSI_CALLER 100);
+
+    if (bat_uns_open(0, &client, unsolicited_result_cb))
+    {
+      TRACE_ERROR("Call to bat_uns_open() failed");
+      free_mem(mem1,mem2,NULL,NULL,NULL);
+      return 0;
+    }
+
+    memset(&my_set_plus_cfun, sizeof(my_set_plus_cfun), FALSE);
+    my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CFUN;
+    my_bat_cmd_send.params.ptr_set_plus_cfun = &my_set_plus_cfun;
+    /* full functionality mode*/
+    my_set_plus_cfun.fun = BAT_CFUN_FUN_FULL;
+    /* Reset the MT before changing functionality level */
+    my_set_plus_cfun.rst = BAT_CFUN_RST_NOT_PRESENT;
+
+    TRACE_EVENT("calling bat_send()");
+   
+    result = bat_send (clnt_hndl, &my_bat_cmd_send);
+
+    if(result NEQ BAT_OK)
+    {
+      TRACE_ERROR("Call to bat_send() failed");
+      free_mem(mem1,mem2,NULL,NULL,NULL);
+      return 0;
+    }  
+
+    vsi_t_sleep (VSI_CALLER 200);
+
+    TRACE_EVENT("calling bat_close()");
+   
+    result = bat_close (clnt_hndl);
+
+    if(result NEQ BAT_OK)
+    {
+      TRACE_ERROR("Call to bat_close() failed");
+      free_mem(mem1,mem2,NULL,NULL,NULL);
+      return 0;
+    }
+    vsi_t_sleep (VSI_CALLER 100);
+
+    TRACE_EVENT("calling bat_close() for unsolicited");
+
+    result = bat_close (client);
+
+    if(result NEQ BAT_OK)
+    {
+      TRACE_ERROR("Call to bat_close() failed");
+      free_mem(mem1,mem2,NULL,NULL,NULL);
+      return 0;
+    }
+    result = bat_delete(inst_hndl);
+    vsi_t_sleep (VSI_CALLER 300);
+
+    if(result NEQ BAT_OK)
+    {
+      TRACE_ERROR("Call to bat_delete() failed");
+      free_mem(mem1,mem2,NULL,NULL,NULL);
+      return 0;
+    }
+
+    result = bat_deinit();
+
+    if(result NEQ BAT_OK)
+    {
+      TRACE_ERROR("Call to bat_deinit() failed");
+      free_mem(mem1,mem2,NULL,NULL,NULL);
+      return 0;
+    }
+
+    free_mem(mem1,mem2,NULL,NULL,NULL);
+  }
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+/*****************************************************************************************
+ *
+ * This test case tests the flow control between app and BAT Lib
+ *
+ *****************************************************************************************/
+
+GLOBAL char *app_bat_flow_control_test1(app_cmd_entry_t *cmd_entry_ptr,
+                          char *param1, char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  void *mem1 = NULL;
+  void *mem2 = NULL;
+  int inst_num = 2;
+  int clnt_num = 2;
+  T_BAT_instance inst_hndl = BAT_INVALID_INSTANCE_HANDLE;
+  T_BAT_client  clnt_hndl = BAT_INVALID_CLIENT_HANDLE;
+
+  T_BAT_cmd_set_plus_cfun my_set_plus_cfun;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_BAT_ctrl app_bat_ctrl;
+ 
+  TRACE_FUNCTION("app_bat_complete_test1()");
+  MALLOC(mem1, BAT_INSTANCE_HEADER_SIZE*inst_num);  
+  MALLOC(mem2, (clnt_num*BAT_CLIENT_SIZE + BAT_INSTANCE_SIZE));
+
+
+  TRACE_EVENT("calling bat_init()");
+
+  result = bat_init(mem1, (U8)inst_num);
+
+  if(result NEQ BAT_OK)
+  {
+    TRACE_ERROR("ERROR: Call to bat_init() failed");
+    free_mem(mem1,mem2,NULL,NULL,NULL);
+    return 0;
+  }
+
+  app_set_config ();
+
+  TRACE_EVENT("calling bat_new()");
+
+  result = bat_new (&inst_hndl, mem2, (U8)clnt_num, BAT_APP_CONFIG, instance_signal_cb);
+
+  TRACE_EVENT_P1 ("inst_hndl is %d", inst_hndl);
+
+  if(result != BAT_OK)
+  {
+    TRACE_ERROR("Call to bat_new() failed");
+    free_mem(mem1,mem2,NULL,NULL,NULL);
+    return 0;
+  }
+
+  TRACE_EVENT("calling bat_open()");
+
+  result = bat_open (inst_hndl, &clnt_hndl, response_cb_busy, signal_cb);
+
+  if(result NEQ BAT_OK)
+  {
+    TRACE_ERROR("Call to bat_open() failed");
+    free_mem(mem1,mem2,NULL,NULL,NULL);
+    return 0;
+  }
+
+  TRACE_EVENT("calling bat_uns_open()");
+
+  memset(&my_set_plus_cfun, sizeof(my_set_plus_cfun), FALSE);
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CFUN;
+  my_bat_cmd_send.params.ptr_set_plus_cfun = &my_set_plus_cfun;
+  /* full functionality mode*/
+  my_set_plus_cfun.fun = BAT_CFUN_FUN_FULL;
+  /* Reset the MT before changing functionality level */
+  my_set_plus_cfun.rst = BAT_CFUN_RST_NOT_PRESENT;
+
+  TRACE_EVENT("calling bat_send()");
+ 
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+  if(result NEQ BAT_OK)
+  {
+    TRACE_ERROR("Call to bat_send() failed");
+    free_mem(mem1,mem2,NULL,NULL,NULL);
+    return 0;
+  } 
+
+  app_bat_ctrl.event = BAT_APP_READY_RESOURCE;
+  result = bat_ctrl(clnt_hndl, &app_bat_ctrl);
+  vsi_t_sleep (VSI_CALLER 500);
+
+  if(result NEQ BAT_OK)
+  {
+    TRACE_ERROR("Call to bat_ctrl() failed");
+    free_mem(mem1,mem2,NULL,NULL,NULL);
+    return 0;
+  } 
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+  vsi_t_sleep (VSI_CALLER 500);
+
+  if(result NEQ BAT_OK)
+  {
+    TRACE_ERROR("Call to bat_send() failed");
+    free_mem(mem1,mem2,NULL,NULL,NULL);
+    return 0;
+  }
+  app_bat_send_result_prim(0, NO_ADD_VAL); 
+  return 0;
+}
+
+
+/*****************************************************************************************
+ *
+ * This test case specifically tests receiving of unsolicited code, aborting of a 
+ * running command and running a 2nd BAT cmd afterwords.
+ *
+ * NOTE: this test case has to be used together with the PSI simulation stub.
+ *
+ *****************************************************************************************/
+
+GLOBAL char *app_bat_uns_rcv_and_abort_test(app_cmd_entry_t *cmd_entry_ptr,
+                          char *param1, char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_instance inst_hndl = BAT_INVALID_INSTANCE_HANDLE;
+  T_BAT_client  clnt_hndl = BAT_INVALID_CLIENT_HANDLE;
+  int i;
+
+  static T_BAT_client test_clnt_table[1][8+1] = {
+                        {0,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}};
+  static void *mem_hdr = NULL;
+  void *mem_inst = NULL;
+
+  T_BAT_cmd_set_plus_cfun my_set_plus_cfun;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_BAT_ctrl app_bat_ctrl;
+
+
+  memset(&my_set_plus_cfun, sizeof(my_set_plus_cfun), FALSE);
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CFUN;
+  my_bat_cmd_send.params.ptr_set_plus_cfun = &my_set_plus_cfun;
+  /* full functionality mode*/
+  my_set_plus_cfun.fun = BAT_CFUN_FUN_FULL;
+  /* Reset the MT before changing functionality level */
+  my_set_plus_cfun.rst = BAT_CFUN_RST_RESET;
+
+  TRACE_FUNCTION("app_bat_uns_rcv_and_abort_test()");
+
+  MALLOC(mem_hdr, BAT_INSTANCE_HEADER_SIZE*4);  
+  MALLOC(mem_inst, BAT_INSTANCE_SIZE + 8*BAT_CLIENT_SIZE);  
+
+  TRACE_EVENT("calling bat_init()");
+/* init BAT */
+  if ( bat_init(mem_hdr, 1))
+  {
+    TRACE_ERROR ("Call to bat_init () failed!");
+    MFREE(mem_hdr);
+    return 0;
+  }
+  app_set_config ();
+
+  TRACE_EVENT("calling bat_new()");
+
+  if (bat_new (&inst_hndl, mem_inst, 8, BAT_APP_CONFIG, instance_signal_cb) OR inst_hndl NEQ 0)
+  {
+    TRACE_ERROR("Call to bat_new() failed");
+    free_mem(mem_hdr, mem_inst,NULL,NULL,NULL);
+    return 0;
+  }
+  TRACE_EVENT_P1 ("inst_hndl is %d", inst_hndl);
+  vsi_t_sleep (VSI_CALLER 300);
+  
+  TRACE_EVENT("calling bat_uns_open()");
+
+  if (bat_uns_open(0, &clnt_hndl, unsolicited_result_cb))
+  {
+    free_mem(mem_hdr, mem_inst,NULL,NULL,NULL);
+    return 0;
+  }
+
+/* create BAT client for this instance */
+  for (i = 0; i < 8; i ++)
+  {
+    TRACE_EVENT_P1("Open clnt_id  %d for inst 0", i);
+    if (bat_open(inst_hndl, &test_clnt_table[inst_hndl][i+1],response_cb, signal_cb))
+    {
+      TRACE_ERROR("Call to bat_open() failed");
+      free_mem(mem_hdr, mem_inst,NULL,NULL,NULL);
+      return 0;
+    }
+    vsi_t_sleep (VSI_CALLER 100);
+    test_clnt_table[inst_hndl][0]++;
+
+    TRACE_EVENT("calling bat_send()");
+
+ /* send out a command from all clients */
+    if (bat_send (test_clnt_table[inst_hndl][i+1], &my_bat_cmd_send))
+    {
+      TRACE_ERROR("Call to 1st bat_send() failed");
+      free_mem(mem_hdr, mem_inst,NULL,NULL,NULL);
+      return 0;
+    }  
+    vsi_t_sleep (VSI_CALLER 300);
+
+/* abort the cmd running on client 7 */
+    if (i EQ 7)
+    {
+      app_bat_ctrl.event = BAT_ABORT;
+      if (bat_ctrl(test_clnt_table[inst_hndl][i+1], &app_bat_ctrl))
+      {
+        TRACE_ERROR("Call to bat_ctrl() failed");
+        MFREE(mem_inst);
+        return 0;
+      }
+      vsi_t_sleep (VSI_CALLER 300);
+    }
+
+/* send out another command from all clients */
+    if (bat_send (test_clnt_table[inst_hndl][i+1], &my_bat_cmd_send))
+    {
+      TRACE_ERROR("Call to 2nd bat_send() failed");
+      free_mem(mem_hdr, mem_inst,NULL,NULL,NULL);
+      return 0;
+    }  
+    vsi_t_sleep (VSI_CALLER 300);
+  }
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+
+/*****************************************************************************************
+ *
+ * This test case tests the opening of multiple channels, sending of AT cmds, receiving of
+ * unsolicited code, aborting of a running command.
+ *
+ * NOTE: this test case has to be used together with the PSI simulation stub.
+ *
+ *****************************************************************************************/
+
+GLOBAL char *app_bat_multi_channel_creation_test(app_cmd_entry_t *cmd_entry_ptr,
+                          char *param1, char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_instance inst_hndl[4] = {0xff,0xff,0xff,0xff};
+  int i,j;
+
+/* 4 instance with 8 clnts each, the first element is the num of opened clnts */
+  static T_BAT_client test_clnt_table[4][6+1] = {
+                                              {0,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff},
+                                              {0,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff},
+                                              {0,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff},
+                                              {0,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}};
+  void *mem_hdr = NULL;
+
+  void *mem_inst[4] = {NULL,NULL,NULL,NULL};
+
+  T_BAT_cmd_set_plus_cfun my_set_plus_cfun;
+  T_BAT_cmd_send my_bat_cmd_send;
+
+
+  memset(&my_set_plus_cfun, sizeof(my_set_plus_cfun), FALSE);
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CFUN;
+  my_bat_cmd_send.params.ptr_set_plus_cfun = &my_set_plus_cfun;
+  /* full functionality mode*/
+  my_set_plus_cfun.fun = BAT_CFUN_FUN_FULL;
+  /* Reset the MT before changing functionality level */
+  my_set_plus_cfun.rst = BAT_CFUN_RST_RESET;
+
+
+
+  TRACE_FUNCTION("app_bat_multi_channel_creation_test()");
+
+  MALLOC(mem_hdr, BAT_INSTANCE_HEADER_SIZE*4);  
+
+  TRACE_EVENT("calling bat_init()");
+/* init BAT */
+  if ( bat_init(mem_hdr, 4))
+  {
+    TRACE_ERROR ("Call to bat_init () failed!");
+    MFREE(mem_hdr);
+    return 0;
+  }
+  app_set_config ();
+
+
+/*************************************************************************************************
+ *
+ * create 4 BAT instances with each instance 6 clients
+ *
+ ************************************************************************************************/
+  for (i = 0; i < 4; i ++)
+  {
+    TRACE_EVENT_P1("calling bat_new() for the %d th instance", i);
+    MALLOC(mem_inst[i], BAT_INSTANCE_SIZE + 8*BAT_CLIENT_SIZE);  
+    if (bat_new (&inst_hndl[i], mem_inst[i], 8, BAT_APP_CONFIG, instance_signal_cb) OR inst_hndl[i] NEQ i)
+    {
+      free_mem (mem_hdr,mem_inst[0],mem_inst[1],mem_inst[2],mem_inst[3]);
+      return 0;
+    }
+    TRACE_EVENT_P1 ("created inst_hndl:  %d", inst_hndl[i]);
+    for (j = 0; j < 6; j ++)
+    {
+      TRACE_EVENT_P1("Opened clnt_id:  %d ", j);
+      if (bat_open(inst_hndl[i], &test_clnt_table[i][j+1],response_cb, signal_cb))
+      {
+        free_mem (mem_hdr,mem_inst[0],mem_inst[1],mem_inst[2],mem_inst[3]);
+        return 0;
+      }
+      vsi_t_sleep (VSI_CALLER 100);
+      test_clnt_table[inst_hndl[i]][0]++;
+ /* send out a command from all clients */
+      if (bat_send (test_clnt_table[i][j+1], &my_bat_cmd_send))
+      {
+        free_mem (mem_hdr,mem_inst[0],mem_inst[1],mem_inst[2],mem_inst[3]);
+        return 0;
+      }  
+      vsi_t_sleep (VSI_CALLER 300);
+    }
+  }
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_stress_test (app_cmd_entry_t *cmd_entry_ptr, char *param1,
+                                  char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_plus_cfun my_set_plus_cfun;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+  U16 i = 0;
+ 
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  while (i<400)
+  {
+    TRACE_EVENT_P1("Processing cycle %d",i);
+
+    memset(&my_set_plus_cfun, sizeof(my_set_plus_cfun), FALSE);
+
+    my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PLUS_CFUN;
+
+    my_bat_cmd_send.params.ptr_set_plus_cfun = &my_set_plus_cfun;
+
+    /* full functionality mode*/
+    my_set_plus_cfun.fun = BAT_CFUN_FUN_FULL;
+
+    /* Reset the MT before changing functionality level */
+    my_set_plus_cfun.rst = BAT_CFUN_RST_NOT_PRESENT;
+
+    result = bat_send (clnt_hndl, &my_bat_cmd_send);
+ 
+    if(result NEQ BAT_OK)
+    {
+      app_bat_send_result_prim(1, NO_ADD_VAL);
+      break;
+    }
+
+    vsi_t_sleep (VSI_CALLER 3000);
+    i++;
+  }
+
+  if(result NEQ BAT_OK)
+  {
+    return ("Call to bat_send_cfun() failed");
+  }
+  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+}
+
+GLOBAL char *app_bat_send_cniv(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                               char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_set_percent_cniv my_cmd_percent_cniv;
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+  
+  TRACE_FUNCTION("app_bat_send_cniv()");
+  
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+  memset(&my_cmd_percent_cniv, 0 , sizeof(my_cmd_percent_cniv));
+  my_bat_cmd_send.ctrl_params = BAT_CMD_SET_PERCENT_CNIV;
+  my_bat_cmd_send.params.ptr_set_percent_cniv = &my_cmd_percent_cniv;
+  
+  if ( (param2 NEQ NULL) AND atoi(param2) )
+  { 
+    my_cmd_percent_cniv.mode= BAT_CNIV_MODE_ON;
+  }  
+  
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+  
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_cniv() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+  
+  
+}
+
+GLOBAL char *app_bat_send_q_cniv(app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                               char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_no_parameter    my_que_percent_cniv; 
+  T_BAT_cmd_send my_bat_cmd_send;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_q_cniv()");
+  
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  my_bat_cmd_send.ctrl_params = BAT_CMD_QUE_PERCENT_CNIV;
+  my_bat_cmd_send.params.ptr_que_percent_cniv = &my_que_percent_cniv;
+
+  result = bat_send (clnt_hndl, &my_bat_cmd_send);
+  
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_q_cniv() failed");
+  }  
+  app_bat_send_result_prim(0, NO_ADD_VAL);
+  return 0;
+
+}
+
+GLOBAL char *app_bat_send_custom (app_cmd_entry_t *cmd_entry_ptr, char *param1, 
+                                     char *param2, char *param3, core_func_t core_func)
+{
+  T_BAT_return result = BAT_ERROR;
+  T_BAT_client clnt_hndl = BAT_CONTROL_CHANNEL;
+  T_BAT_cmd_send send;  
+  T_BAT_custom custom;
+  T_CLIENT_HANDLE_ERROR err;
+
+  TRACE_FUNCTION("app_bat_send_custom()");
+
+  clnt_hndl = get_item(param1, 0, FALSE);
+  
+  err = check_client_handle (clnt_hndl);
+  if (err NEQ CLIENT_HANDLE_OK)
+  {
+    return (error_client_handle(err));
+  }
+
+  send.ctrl_params = BAT_CMD_CUSTOM;
+  send.params.ptr_custom = &custom;
+
+  if (param2 EQ NULL)
+  {     
+    strcpy((char *)custom.buf, "OK");
+  }
+  else if (strcmp(param2, "DATA") EQ 0)
+  { 
+    custom.buf[0] = 0x80;
+    custom.buf[1] = 0x81;
+    custom.buf[2] = 0x82;
+    custom.buf[3] = 0x83;
+    custom.buf[4] = 0x84;
+    custom.buf[5] = 0x85;
+    custom.buf[6] = 0x86;
+    custom.buf[7] = 0x87;
+    custom.buf[8] = 0x88;
+    custom.buf[9] = 0x89;
+    custom.buf[10] = 0x8A;
+    custom.buf[11] = 0x8B;
+    custom.buf[12] = 0x8C;
+    custom.buf[13] = 0x8D;
+    custom.buf[14] = 0x8E;
+    custom.buf[15] = 0x8F;
+    custom.buf[16] = 0x90;
+    custom.buf[17] = 0x91;
+    custom.buf[18] = 0x92;
+    custom.buf[19] = 0x93;
+    custom.buf[20] = 0x94;
+    custom.buf[21] = 0x95;
+    custom.buf[22] = 0x96;
+    custom.buf[23] = 0x97;
+    custom.buf[24] = 0x98;
+    custom.buf[25] = 0x99;
+    custom.buf[26] = 0x9A;
+    custom.buf[27] = 0x9B;
+    custom.buf[28] = 0x9C;
+    custom.buf[29] = 0x9D;
+    custom.buf[30] = 0x9E;
+    custom.buf[31] = 0x9F;
+    custom.buf[32] = 0xA0;
+    custom.buf[33] = 0xA1;
+    custom.buf[34] = 0xA2;
+    custom.buf[35] = 0xA3;
+    custom.buf[36] = 0xA4;
+    custom.buf[37] = 0xA5;
+    custom.buf[38] = 0xA6;
+    custom.buf[39] = 0xA7;
+    custom.buf[40] = 0xA8;
+    custom.buf[41] = 0xA9;
+    custom.buf[42] = 0xAA;
+    custom.buf[43] = 0xAB;
+    custom.buf[44] = 0xAC;
+    custom.buf[45] = 0xAD;
+    custom.buf[46] = 0xAE;
+    custom.buf[47] = 0xAF;
+    custom.buf[48] = 0xB0;
+    custom.buf[49] = 0xB1;
+    custom.buf[50] = 0xB2;
+    custom.buf[51] = 0xB3;
+    custom.buf[52] = 0xB4;
+    custom.buf[53] = 0xB5;
+    custom.buf[54] = 0xB6;
+    custom.buf[55] = 0xB7;
+    custom.buf[56] = 0xB8;
+    custom.buf[57] = 0xB9;
+    custom.buf[58] = 0xBA;
+    custom.buf[59] = 0xBB;
+    custom.buf[60] = 0xBC;
+    custom.buf[61] = 0xBD;
+    custom.buf[62] = 0xBE;
+    custom.buf[63] = 0xBF;
+    custom.buf[64] = 0xC0;
+    custom.buf[65] = 0xC1;
+    custom.buf[66] = 0xC2;
+    custom.buf[67] = 0xC3;
+    custom.buf[68] = 0xC4;
+    custom.buf[69] = 0xC5;
+    custom.buf[70] = 0xC6;
+    custom.buf[71] = 0xC7;
+    custom.buf[72] = 0xC8;
+    custom.buf[73] = 0xC9;
+    custom.buf[74] = 0xCA;
+    custom.buf[75] = 0xCB;
+    custom.buf[76] = 0xCC;
+    custom.buf[77] = 0xCD;
+    custom.buf[78] = 0xCE;
+    custom.buf[79] = 0xCF;
+    custom.buf[80] = 0xD0;
+    custom.buf[81] = 0xD1;
+    custom.buf[82] = 0xD2;
+    custom.buf[83] = 0xD3;
+    custom.buf[84] = 0xD4;
+    custom.buf[85] = 0xD5;
+    custom.buf[86] = 0xD6;
+    custom.buf[87] = 0xD7;
+    custom.buf[88] = 0xD8;
+    custom.buf[89] = 0xD9;
+    custom.buf[90] = 0xDA;
+    custom.buf[91] = 0xDB;
+    custom.buf[92] = 0xDC;
+    custom.buf[93] = 0xDD;
+    custom.buf[94] = 0xDE;
+    custom.buf[95] = 0xDF;
+    custom.buf[96] = 0xE0;
+    custom.buf[97] = 0xE1;
+    custom.buf[98] = 0xE2;
+    custom.buf[99] = 0xE3;
+    custom.buf[100] = 0xE4;
+    custom.buf[101] = 0xE5;
+    custom.buf[102] = 0xE6;
+    custom.buf[103] = 0xE7;
+    custom.buf[104] = 0xE8;
+    custom.buf[105] = 0xE9;
+    custom.buf[106] = 0xEA;
+    custom.buf[107] = 0xEB;
+    custom.buf[108] = 0xEC;
+    custom.buf[109] = 0xED;
+    custom.buf[110] = 0xEE;
+    custom.buf[111] = 0xEF;
+    custom.buf[112] = 0xF0;
+    custom.buf[113] = 0xF1;
+    custom.buf[114] = 0xF2;
+    custom.buf[115] = 0xF3;
+    custom.buf[116] = 0xF4;
+    custom.buf[117] = 0xF5;
+    custom.buf[118] = 0xF6;
+    custom.buf[119] = 0xF7;
+    custom.buf[120] = 0xF8;
+    custom.buf[121] = 0xF9;
+    custom.buf[122] = 0xFA;
+    custom.buf[123] = 0xFB;
+    custom.buf[124] = 0xFC;
+    custom.buf[125] = 0xFD;
+    custom.buf[126] = 0xFE;
+    custom.buf[127] = 0x00;
+  }
+  else
+  {
+    strcpy((char *)custom.buf, param2);
+  }
+  
+  if (param3 && strcmp(param3, "MR") EQ 0)
+  {
+    send.ctrl_params = (T_BAT_ctrl_params)MOTO_CMD_MR;
+    TRACE_EVENT_P1("app_bat_send_custom():  len = %d ", custom.c_buf);
+  }
+  else
+  {
+    TRACE_EVENT_P2("app_bat_send_custom():  cmd = %s, len = %d ", custom.buf, custom.c_buf);
+  }
+  custom.c_buf = strlen((char *)custom.buf);
+
+  result = bat_send (clnt_hndl, &send);
+
+  if(result NEQ BAT_OK)
+  {
+    app_bat_send_result_prim(1, NO_ADD_VAL);
+    return ("Call to bat_send_ata() failed");
+  } 
+  app_bat_send_result_prim(0, NO_ADD_VAL); 
+  return 0;
+}
+
+
+
+
+
+
+/*---------------------------------------------------------------------------
+ * Definition of core functions
+ *---------------------------------------------------------------------------*/
+
+/* -- No core functions required for now */
+
+
+/*==== Exported functions ====================================================*/
+
+char *app_handle_command_bat(char *command)
+{
+  TRACE_FUNCTION ("app_handle_command_bat()");
+  return app_handle_command(command, app_bat_cmd_table);
+}
+
+
+/* EOF */