view src/ui/bmi/mmiEm.c @ 261:841a848ba762

SPI SWE: clear any pending boot-time interrupts in spi_init() Charger plug/unplug hw logic in the Iota ABB has no built-in debouncing, thus electrical contact bounce on the charging power connection interface produces a lot of charger plug/unplug interrupts. When we boot in charging mode (charging power present at boot time and is presumably the cause of Switch-ON), some bounce may occur between the initial Iota Switch-ON action and Calypso firmware booting. By clearing any accumulated ITSTATREG interrupts on boot, we prevent these pre-boot interrupts from generating charger plug/unplug events to FCHG, which would upset smooth from-boot charging.
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 14 May 2021 02:49:05 +0000
parents 24ea5d2ad89b
children
line wrap: on
line source

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

                    CONDAT (UK)

********************************************************************************

 This software product is the property of Condat (UK) Ltd and may not be
 disclosed to any third party without the express permission of the owner.

********************************************************************************

 $Project name: Basic MMI
 $Project code: BMI (6349)
 $Module:       MMI
 $File:         MmiEm.c
 $Revision:     1.0

 $Author:       Condat(UK)
 $Date:         23/09/02

********************************************************************************

 Description:

    MMI engineering mode handling

********************************************************************************
 $History: MmiEm.c

    Apr 24, 2006    ERT: OMAPS00067603 x0043642
    Description: Engineering mode
    Solution:  Added new engineering mode functionalities to satisfy Neptune engineering mode
    requirements.

    23/09/02            Original Condat(UK) BMI version.

 $End


*******************************************************************************

                                Include Files

*******************************************************************************/
#define ENTITY_MFW

/* includes */
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#if defined (NEW_FRAME)

#include "typedefs.h"
#include "vsi.h"
#include "pei.h"
#include "custom.h"
#include "gsm.h"

#else

#include "STDDEFS.H"
#include "custom.h"
#include "gsm.h"
#include "vsi.h"

#endif
#include "mfw_sys.h"

#include "prim.h"
#include "cus_aci.h"

#include "mfw_mfw.h"
#include "mfw_win.h"
#include "mfw_kbd.h"
/* SPR#1428 - SH - New Editor changes */
#ifndef NEW_EDITOR
#include "mfw_edt.h"
#endif
#include "mfw_lng.h"
#include "mfw_tim.h"
#include "mfw_icn.h"
#include "mfw_mnu.h"
#include "mfw_phb.h"
#include "mfw_cm.h"
#include "mfw_sim.h"
#include "mfw_nm.h"
#include "mfw_sat.h"
#include "mfw_ss.h" /*for convert*/
#include "mfw_phb.h"
#include "ksd.h"
#include "psa.h"
#include "mfw_sms.h"
#include "mfw_cphs.h"
#include "mfw_sat.h"
#include "Mfw_band.h"
#include "mfw_ffs.h"

#include "dspl.h"

#include "MmiMmi.h"
#include "MmiDialogs.h"
#include "MmiLists.h"
#include "MmiBand.h"
#include "MmiCPHS.h"
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
#include "ATBCommon.h"
#include "ATBDisplay.h"
#include "ATBEditor.h"
#include "AUIEditor.h"
#else
#include "MmiEditor.h"
#endif
#include"MmiBookShared.h"


#include "Mfw_em.h"
#include "MmiEm.h"

#include "mmiColours.h"

#ifdef NEPTUNE_BOARD
#include "ffs.h"
#endif

#define EM_UPDATE_RATE 1000

#ifdef NEPTUNE_BOARD
#define EM_EDITOR_SIZE 500 /*SPR 1757, increased size of editor buffer*/
#else
#define EM_EDITOR_SIZE 300 /*SPR 1757, increased size of editor buffer*/
#endif


#ifdef NEPTUNE_BOARD /*EngMode */
#define SAT_REQUEST_SENT 1
#define TIMER_ONE_SEC 1
#define TIMER_STOP 0

EXTERN T_ENG_INFO_REQ* Eng_Info_Req;
EXTERN T_ENG_INFO_STATIC_REQ* Eng_Info_Static_Req;

EXTERN unsigned long *picture_col;
EXTERN UBYTE RssiVal;

int EmRequest = NULL;
#endif

/*
**************************************Datatypes****************************************
*/
typedef struct _tEmData_
{
    /* administrative data */

    T_MMI_CONTROL     mmi_control;
    T_MFW_HND         win;
    T_MFW_HND         parent_win;

    /* associated handlers */

    T_MFW_HND         kbd; /*keyboard handler*/
    T_MFW_HND         tim;  /*timer handler*/

/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
    T_ED_DATA *         editor;
    T_ED_ATTR           editor_attr;
#else /* NEW_EDITOR */
    T_MFW_HND         edt; /*mfw editor handler*/
    MfwEdtAttr      editor_data;                        /*editor config data*/
#endif /* NEW_EDITOR */

    /* internal data */
    char    edtBuffer[EM_EDITOR_SIZE*2];/*SPR 1757*//*editor contentbuffer*/
    MfwEmDataType CurrentWindow;                        /*type of data being displayed*/

} tEmData;


/*
**************************************Prototypes****************************************
*/
int Mmi_em_event_cb(T_MFW_EVENT event, T_MFW_HND para); //Handles events from the MFW
T_MFW_HND Mmi_em_create(T_MFW_HND parent_window, MfwEmDataType data_type); //Create a window to display the information, specifying the keyboard, display and timer handlers.
void Mmi_em_destroy(T_MFW_HND own_window); //Deallocate window data and delete window.
int Mmi_em_kbd_cb(T_MFW_EVENT event,T_MFW_KBD *  kc ); //Handles key presses in the display window
int Mmi_em_win_cb(T_MFW_EVENT event,T_MFW_WIN * win );// Handles the information display.
void Mmi_em_tim_cb(T_MFW_EVENT event,T_MFW_TIM * t); //Handles the timer events.


/*
**************************************Public functions****************************************
*/


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

 $Function:     mmi_em_init()

 $Description:  initialise Engineering Mode module

 $Returns:      None

 $Arguments:    None

*******************************************************************************/
void mmi_em_init(void)
{
    Mfw_em_init();
}

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

 $Function:     mmi_em_enit()

 $Description:  exit Engineering Mode module

 $Returns:      None

 $Arguments:    None

*******************************************************************************/
void mmi_em_exit(void)
{
    Mfw_em_exit();
}

//#ifdef TI_PS_FF_EM
#if defined (TI_PS_FF_EM) || defined (MMI_EM_ENABLED)
/*******************************************************************************

 $Function:     mmi_em_start_eng_mode_menus()

 $Description:  starts the emergency mode menu

 $Returns:      None

 $Arguments:    parent window

*******************************************************************************/
void mmi_em_start_eng_mode_menus(T_MFW_HND parent)
{
    TRACE_EVENT("mmi_em_start_eng_mode_menus");
    bookMenuStart(parent, EngModeAttributes(), NULL);
}
#endif

#ifndef NEPTUNE_BOARD

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

 $Function:     Mmi_em_display_mobile_info_data()

 $Description:  Called from menu; begins process to display Mobile Information

 $Returns:      status integer

 $Arguments:    menu and item (not used)

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

int Mmi_em_display_mobile_info_data(MfwMnu* m, MfwMnuItem* i)
{   T_MFW_HND       parent       = mfwParent( mfw_header());
    TRACE_EVENT_P1("Mmi_em_display_mobile_info(), parent win %d", parent);
    TRACE_EVENT_P1("Memory left:%d", mfwCheckMemoryLeft());
    Mmi_em_create(parent, EM_MOBILE_INFO);

    return MFW_EVENT_CONSUMED;
}
/*******************************************************************************

 $Function:     Mmi_em_display_serving_cell_params()

 $Description:  Called from menu; begins process to display Serving Cell parameters

 $Returns:      status integer

 $Arguments:    menu and item (not used)

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

int Mmi_em_display_serving_cell_params(MfwMnu* m, MfwMnuItem* i)
{   T_MFW_HND       parent       = mfwParent( mfw_header());
    TRACE_EVENT_P1("MMiEm, Memory left:%d", mfwCheckMemoryLeft());
    Mmi_em_create(parent, EM_SERVING_CELL_PARAMS);

    return MFW_EVENT_CONSUMED;
}
/*******************************************************************************

 $Function:     Mmi_em_display_neighbour_cell_params()

 $Description:  Called from menu; begins process to display Neighbouring Cell parameters

 $Returns:      status integer

 $Arguments:    menu and item (not used)

*******************************************************************************/
int Mmi_em_display_neighbour_cell_params(MfwMnu* m, MfwMnuItem* i)
{   T_MFW_HND       parent       = mfwParent( mfw_header());
    TRACE_EVENT_P1("MMiEm, Memory left:%d", mfwCheckMemoryLeft());
    Mmi_em_create(parent, EM_NEIGHBOURING_CELL_PARAMS);

    return MFW_EVENT_CONSUMED;
}

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

 $Function:     Mmi_em_display_location_params()

 $Description:  Called from menu; begins process to display Locationparameters

 $Returns:      status integer

 $Arguments:    menu and item (not used)

*******************************************************************************/
int Mmi_em_display_location_params(MfwMnu* m, MfwMnuItem*i )
{   T_MFW_HND       parent       = mfwParent( mfw_header());

    Mmi_em_create(parent, EM_LOCATION_PARAMS);

    return MFW_EVENT_CONSUMED;
}

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

 $Function:     Mmi_em_display_ciph_hop_DTX_params()

 $Description:  Called from menu; begins process to display Ciphering, hopping and
 discontinuous transmission parameters

 $Returns:      status integer

 $Arguments:    menu and item (not used)

*******************************************************************************/
int Mmi_em_display_ciph_hop_DTX_params(MfwMnu* m, MfwMnuItem* i)
{   T_MFW_HND       parent       = mfwParent( mfw_header());
    TRACE_EVENT_P1("MMiEm, Memory left:%d", mfwCheckMemoryLeft());
    Mmi_em_create(parent, EM_CIPH_HOP_DTX_PARAMS);

    return MFW_EVENT_CONSUMED;
}

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

 $Function:     Mmi_em_display_GPRS_params()

 $Description:  Called from menu; begins process to display GPRS specific parameters

 $Returns:      status integer

 $Arguments:    menu and item (not used)

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

int Mmi_em_display_GPRS_params(MfwMnu* m, MfwMnuItem* i)
{   T_MFW_HND       parent       = mfwParent( mfw_header());
    TRACE_EVENT_P1("MMiEm, Memory left:%d", mfwCheckMemoryLeft());
    Mmi_em_create(parent, EM_GPRS_PARAMS);

    return MFW_EVENT_CONSUMED;
}

#else    /* if NEPTUNE_BOARD */

int Mmi_em_start(MfwMnu* m, MfwMnuItem* i)
{
    T_MFW_HND       parent       = mfwParent( mfw_header());
    TRACE_EVENT_P1("Mmi_em_display_mobile_info(), parent win %d", parent);
    TRACE_EVENT_P1("Memory left:%d", mfwCheckMemoryLeft());

    TRACE_EVENT_P1("Selected item: %d", m->lCursor[m->level]);

    Mmi_em_create(parent, m->lCursor[m->level]);

    if(!EmRequest)
    {
        sAT_PercentESINFO(CMD_SRC_LCL,TIMER_ONE_SEC);
        sAT_PercentEINFO(CMD_SRC_LCL,TIMER_ONE_SEC);
    }
    EmRequest = SAT_REQUEST_SENT;

    return MFW_EVENT_CONSUMED;
}

#endif  /* ifndef NEPTUNE_BOARD */
/*
************************************Internal Functions**************************************
*/

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

 $Function:     Mmi_em_create()

 $Description:  Creates emergency mode display window

 $Returns:      window handle

 $Arguments:    parent window, kind of data to be displayed

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

T_MFW_HND Mmi_em_create(T_MFW_HND parent_window, MfwEmDataType data_type)
{
    tEmData     * data = (tEmData *)ALLOC_MEMORY (sizeof (tEmData ));
    T_MFW_WIN  * win;

    if (data EQ NULL)
    {
        return NULL;
    }

    // Create window handler
    data->win = win_create (parent_window, 0, E_WIN_VISIBLE, (MfwCb)Mmi_em_win_cb);
    if (data->win EQ NULL)
    {
        return NULL;
    }
    TRACE_EVENT_P1("Mmi_em_create(), data->win %d", data->win);
    //no window event handler needed
    data->mmi_control.dialog = (T_DIALOG_FUNC)NULL;
    data->mmi_control.data   = data;

    data->kbd      = kbd_create (data->win, KEY_ALL,         (T_MFW_CB)Mmi_em_kbd_cb);

#ifndef NEPTUNE_BOARD
    /*Mobile Info is the only data screen which doesn't need to be updated every second*/
    if (data_type != EM_MOBILE_INFO)
    {
        data->tim       = tim_create(data->win, EM_UPDATE_RATE, (T_MFW_CB)Mmi_em_tim_cb);
        timStart(data->tim);//start timer
    }
#endif

    /*populate the user data*/
    win                      = ((T_MFW_HDR *)data->win)->data;
    win->user                = (void *)data;
    data->parent_win         = parent_window;

    /* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
    /*SPR 1757, removed code for Chinese special case*/
    AUI_edit_SetAttr(&data->editor_attr, EM_CREATE_EDITOR, COLOUR_EDITOR_XX, EDITOR_FONT, ED_MODE_READONLY, ED_CURSOR_NONE, ATB_DCS_ASCII, (UBYTE *)data->edtBuffer,EM_EDITOR_SIZE);
    data->editor = ATB_edit_Create(&data->editor_attr,0);
    /*Clear editor buffer*/
    memset(data->edtBuffer, 0, sizeof(EM_EDITOR_SIZE*2));
    ATB_edit_Init(data->editor);
#else /* NEW_EDITOR */
    /*SPR 1757, removed code for Chinese special case*/
    bookSetEditAttributes(EM_CREATE_EDITOR,COLOUR_EDITOR_XX,0,edtCurNone,0,data->edtBuffer,EM_EDITOR_SIZE*2,&data->editor_data);
    data->edt = edtCreate(data->win, &data->editor_data, NULL, NULL);
    edtUnhide( data->edt );
    /*Clear editor buffer*/
    memset(data->edtBuffer, 0, sizeof(EM_EDITOR_SIZE*2));
#endif /* NEW_EDITOR */

    /*Make sure we store the kind of window we want to show*/
    data->CurrentWindow = data_type;

    /*bind the MFW event handler to any events from the MFW Eng Mode module*/
    Mfw_em_create(data->win, 0xFF,  (MfwCb)Mmi_em_event_cb);
    Mfw_em_get_data(data_type);/*ask MFW for the required data*/
    win_show(data->win);/*show the screen*/
    return data->win;
}

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

 $Function:     Mmi_em_event_cb()

 $Description:  Handles events coming from the MFW

 $Returns:      status integer

 $Arguments:    event type, pointer to data

*******************************************************************************/
int Mmi_em_event_cb(T_MFW_EVENT event,void* para)
{
    T_MFW_HND       win  = mfw_parent (mfw_header());
    T_MFW_WIN     * win_data = ((T_MFW_HDR *)win)->data;
    tEmData * data = (tEmData *)win_data->user;

#ifndef NEPTUNE_BOARD
    MFW_EM_Mobile_Info* mob_info;
    MFW_EM_Serving_Cell_Parameters* sc_info;
    MFW_EM_Neighbour_Cell_Parameters* nc_info;
    MFW_EM_Location_Parameters* loc_info;
    MFW_EM_Ciph_hop_DTX_Parameters* ciph_hop_dtx_info;
    MFW_EM_GPRS_Parameter* gprs_info;
    char * DTX_Status;
#else
    fd_t fd;
    char file[10];
    char timeAndDate[25];
#endif

    char *temp_buffer=NULL;

#ifdef NEW_EDITOR
    T_ATB_TEXT temp_text;/*SPR 1757*/
#endif
    TRACE_EVENT_P1("Mmi_em_event_cb(), event:%d", event);
    temp_buffer=(char*)malloc(EM_EDITOR_SIZE*2*sizeof(char)); /*a0393213 lint warnings removal - dynamically allocated*/
    if(temp_buffer==NULL)
        {
        TRACE_ERROR("Mmi_em_event_cb():No memory");
    return MFW_EVENT_CONSUMED;
        }

    memset(temp_buffer, 0, EM_EDITOR_SIZE*2);

#ifdef NEPTUNE_BOARD
    strcpy(file, "/NOR/Em.txt");
    fd = ffs_open(file, FFS_O_CREATE|FFS_O_WRONLY|FFS_O_APPEND);
    if(fd < 0 )
    {
        TRACE_EVENT("Error in Openning File");
      free(temp_buffer);
        return FALSE;
    }

    sprintf(timeAndDate, "%s  %s\n", mfw_td_get_clock_str(), mfw_td_get_date_str());
    ffs_write(fd, timeAndDate, strlen(timeAndDate));

#endif


    /*if event matches current window type*/
    if (event == data->CurrentWindow)
    {
        switch (event)
        {
#ifndef NEPTUNE_BOARD         /*EngMode */

            case EM_MOBILE_INFO:
            {
                            mob_info = (MFW_EM_Mobile_Info*)para;/*cast parameter to appropriate type*/
                            /*copy data to editor buffer*/
                            /*MC, SPR 1554 Added all SW versions to editor string*/
                            sprintf(temp_buffer, "SIM_VERSION:%s CC_VERSION:%s SS_VERSION:%s SMS_VERSION:%s MM_VERSION:%s RR_VERSION:%s DL_VERSION:%s ALR_VERSION:%s  IMEI:%s IMSI:%s TMSI:%u",
                            mob_info->SIM_version, mob_info->CC_version,  mob_info->SS_version,
                            mob_info->SMS_version, mob_info->MM_version, mob_info->RR_version,
                            mob_info->DL_version, mob_info->ALR_version,mob_info->IMEI, mob_info->IMSI,
                            mob_info->TMSI);
                            /* SPR#1428 - SH - New Editor - string has changed, update word wrap */
#ifdef NEW_EDITOR
                /*SPR 1757 Insert temp buffer into editor*/
                temp_text.data = (UBYTE*)temp_buffer;
                temp_text.dcs = ATB_DCS_ASCII;
                ATB_string_Length(&temp_text);
                ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
                ATB_edit_ClearAll(data->editor);
                ATB_edit_InsertString(data->editor, &temp_text);            /* Insert name string */
                ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */
                ATB_edit_Refresh(data->editor);
#else /* !NEW_EDITOR */
                strncpy(data->edtBuffer, temp_buffer, EM_EDITOR_SIZE);/*SPR 1757*/
#endif
                win_show(data->win);/*show data*/
            }
            break;
#endif

            case EM_SERVING_CELL_PARAMS:
            {
#ifndef NEPTUNE_BOARD
                sc_info = (MFW_EM_Serving_Cell_Parameters*)para;/*cast parameter to appropriate type*/
                sprintf(temp_buffer, "ARFCN:%d RSSI:%d RXQ:%d RLT:%d C1:%d C2:%d LAC:%d BSIC:%d TAV:%d",\
          sc_info->arfcn, sc_info->RSSI, sc_info->RXQ, sc_info->RLT, sc_info->C1, sc_info->C2,\
          sc_info->LAC, sc_info->BSIC, sc_info->TAV);
#else
            sprintf (temp_buffer, "AFRCN = %u   Cell ID = %u \nMCC<>: = %u    %u    %u\nMNC<>: %u    %u    %u\nLAC<> = %u    %u\nRAC = %u\nMultiframe period = %u \nTMSI<> = %u   %u   %u   %u \nMax retransmission = %u  \nCall re establishment status flag = %u \nMax o/p pw on common control channel = %u \nMinimum signal level for access = %u",
                Eng_Info_Req->info_rr.gsm_info.gsm_info_idle.pccch_info.pccch_channel.gsm_channel_static.arfcn,
                Eng_Info_Req->info_rr.gsm_info.gsm_info_idle.gsm_cell_id,
                Eng_Info_Static_Req->info_mm.mm_cmd_info.user_selected_plmn.mcc[0],
                Eng_Info_Static_Req->info_mm.mm_cmd_info.user_selected_plmn.mcc[1],
                Eng_Info_Static_Req->info_mm.mm_cmd_info.user_selected_plmn.mcc[2],
                Eng_Info_Static_Req->info_mm.mm_cmd_info.user_selected_plmn.mnc[0],
                Eng_Info_Static_Req->info_mm.mm_cmd_info.user_selected_plmn.mnc[1],
                Eng_Info_Static_Req->info_mm.mm_cmd_info.user_selected_plmn.mnc[2],
                Eng_Info_Static_Req->info_mm.mm_sim_info.last_registered_cs_lac.lac_element[0],
                Eng_Info_Static_Req->info_mm.mm_sim_info.last_registered_cs_lac.lac_element[1],
                Eng_Info_Req->info_mm.mm_reg_ps_info.registered_rac,
                Eng_Info_Req->info_rr.gsm_info.gsm_info_idle.ccch_info.bs_pa_mfrms,
                Eng_Info_Req->info_mm.mm_reg_cs_info.tmsi[0],
                Eng_Info_Req->info_mm.mm_reg_cs_info.tmsi[1],
                Eng_Info_Req->info_mm.mm_reg_cs_info.tmsi[2],
                Eng_Info_Req->info_mm.mm_reg_cs_info.tmsi[3],
                Eng_Info_Req->info_rr.gsm_info.gsm_info_idle.ccch_info.max_retrans,
                Eng_Info_Req->info_rr.gsm_info.gsm_info_idle.call_reestablishment_allowed,
                Eng_Info_Req->info_rr.gsm_bba_cell[0].gsm_cell_info.gsm_cell_info_bcch.ms_txpwr_max_cch,
                Eng_Info_Req->info_rr.gsm_bba_cell[0].gsm_cell_info.gsm_cell_info_bcch.rxlev_access_min
                );

                ffs_write(fd, "Serving cell info\n",20 );
                ffs_write(fd, temp_buffer, strlen(temp_buffer));

#endif

    /* SPR#1428 - SH - New Editor - string has changed, update word wrap */
#ifdef NEW_EDITOR
                /*SPR 1757 Insert temp buffer into editor*/
                temp_text.data = (UBYTE*)temp_buffer;
                temp_text.dcs = ATB_DCS_ASCII;
                ATB_string_Length(&temp_text);
                ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
                ATB_edit_ClearAll(data->editor);
                ATB_edit_InsertString(data->editor, &temp_text);            /* Insert name string */
                ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */
                ATB_edit_Refresh(data->editor);
#else /* !NEW_EDITOR */
                strncpy(data->edtBuffer, temp_buffer, EM_EDITOR_SIZE);/*SPR 1757*/
#endif
                win_show(data->win);
            }
            break;

            case EM_NEIGHBOURING_CELL_PARAMS:
            {
#ifndef NEPTUNE_BOARD
                    nc_info = (MFW_EM_Neighbour_Cell_Parameters*)para;/*cast parameter to appropriate type*/
                /*copy data to editor buffer*/
                sprintf(temp_buffer, "NUM:%d\nARFCN:RSSI:C2:LAC:BSIC\n %5d%5d%5d%6d%5d\n %5d%5d%5d%6d%5d\n %5d%5d%5d%6d%5d\n %5d%5d%5d%6d%5d\n %5d%5d%5d%6d%5d\n %5d%5d%5d%6d%5d\n SC%4d%5d%5d%6d%5d",\
          nc_info->NUM,\
          nc_info->arfcn[0], nc_info->RSSI[0], nc_info->C2[0], nc_info->LAC_NC[0], nc_info->BSIC_NC[0],\
          nc_info->arfcn[1], nc_info->RSSI[1], nc_info->C2[1], nc_info->LAC_NC[1], nc_info->BSIC_NC[1],\
          nc_info->arfcn[2], nc_info->RSSI[2], nc_info->C2[2], nc_info->LAC_NC[2], nc_info->BSIC_NC[2],\
          nc_info->arfcn[3], nc_info->RSSI[3], nc_info->C2[3], nc_info->LAC_NC[3], nc_info->BSIC_NC[3],\
          nc_info->arfcn[4], nc_info->RSSI[4], nc_info->C2[4], nc_info->LAC_NC[4], nc_info->BSIC_NC[4],\
          nc_info->arfcn[5], nc_info->RSSI[5], nc_info->C2[5], nc_info->LAC_NC[5], nc_info->BSIC_NC[5],\
          nc_info->arfcn[6], nc_info->RSSI[6], nc_info->C2[6], nc_info->LAC_NC[6], nc_info->BSIC_NC[6]);
    /* SPR#1428 - SH - New Editor - string has changed, update word wrap */
                /*show the window*/
                win_show(data->win);

#else /* NEPTUNE_BOARD*/
                sprintf (temp_buffer, "NEIGHBOURING CELL\nNUM : %d\nBCCH <>  %d  \nBSIC <>  %d  %d  %d  %d  %d  %d \nRXLEV <>  %d  %d  %d  %d  %d  %d\nC1 <>  %d  %d  %d  %d  %d  %d\nC2 <>  %d  %d  %d  %d  %d  %d\nC31 <>  %d  %d  %d  %d  %d  %d\nC32 <>  %d  %d  %d  %d  %d  %d\nARFCN <>  %d  %d  %d  %d  %d  %d\nFRAME OFFSET <>  %d  %d  %d  %d  %d  %d\nTIME ALIGN <>  %d  %d  %d  %d  %d  %d",
                        Eng_Info_Req->info_rr.c_gsm_bba_cell,
                        Eng_Info_Req->info_rr.gsm_info.gsm_info_active.gsm_info_dedicated.bcch_channel,


                        Eng_Info_Req->info_rr.gsm_bba_cell[1].gsm_cell_info.gsm_cell_info_pbcch.bsic_match,
                        Eng_Info_Req->info_rr.gsm_bba_cell[2].gsm_cell_info.gsm_cell_info_pbcch.bsic_match,
                        Eng_Info_Req->info_rr.gsm_bba_cell[3].gsm_cell_info.gsm_cell_info_pbcch.bsic_match,
                        Eng_Info_Req->info_rr.gsm_bba_cell[4].gsm_cell_info.gsm_cell_info_pbcch.bsic_match,
                        Eng_Info_Req->info_rr.gsm_bba_cell[5].gsm_cell_info.gsm_cell_info_pbcch.bsic_match,
                        Eng_Info_Req->info_rr.gsm_bba_cell[6].gsm_cell_info.gsm_cell_info_pbcch.bsic_match,
                        Eng_Info_Req->info_rr.gsm_bba_cell[1].rxlev,
                        Eng_Info_Req->info_rr.gsm_bba_cell[2].rxlev,
                        Eng_Info_Req->info_rr.gsm_bba_cell[3].rxlev,
                        Eng_Info_Req->info_rr.gsm_bba_cell[4].rxlev,
                        Eng_Info_Req->info_rr.gsm_bba_cell[5].rxlev,
                        Eng_Info_Req->info_rr.gsm_bba_cell[6].rxlev,
                        Eng_Info_Req->info_rr.gsm_bba_cell[1].gsm_cell_info.gsm_cell_info_bcch.c1,
                        Eng_Info_Req->info_rr.gsm_bba_cell[2].gsm_cell_info.gsm_cell_info_bcch.c1,
                        Eng_Info_Req->info_rr.gsm_bba_cell[3].gsm_cell_info.gsm_cell_info_bcch.c1,
                        Eng_Info_Req->info_rr.gsm_bba_cell[4].gsm_cell_info.gsm_cell_info_bcch.c1,
                        Eng_Info_Req->info_rr.gsm_bba_cell[5].gsm_cell_info.gsm_cell_info_bcch.c1,
                        Eng_Info_Req->info_rr.gsm_bba_cell[6].gsm_cell_info.gsm_cell_info_bcch.c1,
                        Eng_Info_Req->info_rr.gsm_bba_cell[1].gsm_cell_info.gsm_cell_info_bcch.c2,
                        Eng_Info_Req->info_rr.gsm_bba_cell[2].gsm_cell_info.gsm_cell_info_bcch.c2,
                        Eng_Info_Req->info_rr.gsm_bba_cell[3].gsm_cell_info.gsm_cell_info_bcch.c2,
                        Eng_Info_Req->info_rr.gsm_bba_cell[4].gsm_cell_info.gsm_cell_info_bcch.c2,
                        Eng_Info_Req->info_rr.gsm_bba_cell[5].gsm_cell_info.gsm_cell_info_bcch.c2,
                        Eng_Info_Req->info_rr.gsm_bba_cell[6].gsm_cell_info.gsm_cell_info_bcch.c2,
                        Eng_Info_Req->info_rr.gsm_bba_cell[1].gsm_cell_info.gsm_cell_info_pbcch.c31,
                        Eng_Info_Req->info_rr.gsm_bba_cell[2].gsm_cell_info.gsm_cell_info_pbcch.c31,
                        Eng_Info_Req->info_rr.gsm_bba_cell[3].gsm_cell_info.gsm_cell_info_pbcch.c31,
                        Eng_Info_Req->info_rr.gsm_bba_cell[4].gsm_cell_info.gsm_cell_info_pbcch.c31,
                        Eng_Info_Req->info_rr.gsm_bba_cell[5].gsm_cell_info.gsm_cell_info_pbcch.c31,
                        Eng_Info_Req->info_rr.gsm_bba_cell[6].gsm_cell_info.gsm_cell_info_pbcch.c31,
                        Eng_Info_Req->info_rr.gsm_bba_cell[1].gsm_cell_info.gsm_cell_info_pbcch.c32,
                        Eng_Info_Req->info_rr.gsm_bba_cell[2].gsm_cell_info.gsm_cell_info_pbcch.c32,
                        Eng_Info_Req->info_rr.gsm_bba_cell[3].gsm_cell_info.gsm_cell_info_pbcch.c32,
                        Eng_Info_Req->info_rr.gsm_bba_cell[4].gsm_cell_info.gsm_cell_info_pbcch.c32,
                        Eng_Info_Req->info_rr.gsm_bba_cell[5].gsm_cell_info.gsm_cell_info_pbcch.c32,
                        Eng_Info_Req->info_rr.gsm_bba_cell[6].gsm_cell_info.gsm_cell_info_pbcch.c32,
                        Eng_Info_Req->info_rr.gsm_bba_cell[1].arfcn,
                        Eng_Info_Req->info_rr.gsm_bba_cell[2].arfcn,
                        Eng_Info_Req->info_rr.gsm_bba_cell[3].arfcn,
                        Eng_Info_Req->info_rr.gsm_bba_cell[4].arfcn,
                        Eng_Info_Req->info_rr.gsm_bba_cell[5].arfcn,
                        Eng_Info_Req->info_rr.gsm_bba_cell[6].arfcn,
                        Eng_Info_Req->info_rr.gsm_bba_cell[1].gsm_sync_info.fn_offset,
                        Eng_Info_Req->info_rr.gsm_bba_cell[2].gsm_sync_info.fn_offset,
                        Eng_Info_Req->info_rr.gsm_bba_cell[3].gsm_sync_info.fn_offset,
                        Eng_Info_Req->info_rr.gsm_bba_cell[4].gsm_sync_info.fn_offset,
                        Eng_Info_Req->info_rr.gsm_bba_cell[5].gsm_sync_info.fn_offset,
                        Eng_Info_Req->info_rr.gsm_bba_cell[6].gsm_sync_info.fn_offset,
                        Eng_Info_Req->info_rr.gsm_bba_cell[1].gsm_sync_info.time_align,
                        Eng_Info_Req->info_rr.gsm_bba_cell[2].gsm_sync_info.time_align,
                        Eng_Info_Req->info_rr.gsm_bba_cell[3].gsm_sync_info.time_align,
                        Eng_Info_Req->info_rr.gsm_bba_cell[4].gsm_sync_info.time_align,
                        Eng_Info_Req->info_rr.gsm_bba_cell[5].gsm_sync_info.time_align,
                        Eng_Info_Req->info_rr.gsm_bba_cell[6].gsm_sync_info.time_align
                        );
                        ffs_write(fd, "Neighbouring cell info\n",25 );
                        ffs_write(fd, temp_buffer, strlen(temp_buffer));

#endif
#ifdef NEW_EDITOR
                /*SPR 1757 Insert temp buffer into editor*/
                temp_text.data = (UBYTE*)temp_buffer;
                temp_text.dcs = ATB_DCS_ASCII;
                ATB_string_Length(&temp_text);
                ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
                ATB_edit_ClearAll(data->editor);
                ATB_edit_InsertString(data->editor, &temp_text);            /* Insert name string */
                ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */
                ATB_edit_Refresh(data->editor);
#else /* !NEW_EDITOR */
                strncpy(data->edtBuffer, temp_buffer, EM_EDITOR_SIZE);/*SPR 1757*/
#endif
                        win_show(data->win);
            }
            break;

#ifndef NEPTUNE_BOARD
                    case EM_LOCATION_PARAMS:
            {
                        loc_info = (MFW_EM_Location_Parameters*)para;/*cast parameter to appropriate type*/
                /*copy data to editor buffer*/
                /*MC, SPR 1554 Removed Cell id from editor string*/
                sprintf(temp_buffer, "LUP:%d MCC:%s MNC:%s LAC:%d ", loc_info->LUP, loc_info->MCC, loc_info->MNC, loc_info->LAC);
    /* SPR#1428 - SH - New Editor - string has changed, update word wrap */
#ifdef NEW_EDITOR
                /*SPR 1757 Insert temp buffer into editor*/
                temp_text.data = (UBYTE*)temp_buffer;
                temp_text.dcs = ATB_DCS_ASCII;
                ATB_string_Length(&temp_text);
                ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
                ATB_edit_ClearAll(data->editor);
                ATB_edit_InsertString(data->editor, &temp_text);            /* Insert name string */
                ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */
                ATB_edit_Refresh(data->editor);
#else /* !NEW_EDITOR */
                strncpy(data->edtBuffer, temp_buffer, EM_EDITOR_SIZE);/*SPR 1757*/
#endif
                /*show the window*/
                win_show(data->win);
            }
            break;
#endif

#ifndef NEPTUNE_BOARD
            case EM_CIPH_HOP_DTX_PARAMS:
            {
                            ciph_hop_dtx_info = (MFW_EM_Ciph_hop_DTX_Parameters*)para;/*cast parameter to appropriate type*/
                /*convert DTX status to string*/
                if (ciph_hop_dtx_info->DTX_status == FALSE)
                    DTX_Status = "Off";
                else
                    DTX_Status = "On";
                //copy data to editor
                sprintf(temp_buffer, "STATUS:%d HSN:%d DTX:%s ", ciph_hop_dtx_info->ciph_status, ciph_hop_dtx_info->HSN, DTX_Status);
                /*show the window*/
                /* SPR#1428 - SH - New Editor - string has changed, update word wrap */
#ifdef NEW_EDITOR
                /*SPR 1757 Insert temp buffer into editor*/
                temp_text.data = (UBYTE*)temp_buffer;
                temp_text.dcs = ATB_DCS_ASCII;
                ATB_string_Length(&temp_text);
                ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
                ATB_edit_ClearAll(data->editor);
                ATB_edit_InsertString(data->editor, &temp_text);            /* Insert name string */
                ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */
                ATB_edit_Refresh(data->editor);
#else /* !NEW_EDITOR */
                strncpy(data->edtBuffer, temp_buffer, EM_EDITOR_SIZE);/*SPR 1757*/
#endif
                win_show(data->win);
            }
            break;
#endif

#ifndef NEPTUNE_BOARD
            case EM_GPRS_PARAMS:
            {
                            gprs_info = (MFW_EM_GPRS_Parameter*)para;//cast parameter to appropriate type
                /*MC, SPR 1554 Changed ediotr string to show Network Mode of Operation*/
                sprintf(temp_buffer, "NMO:%d  NDTS:%d  RAC:%d  C31:%d  C32:%d",\
          gprs_info->NMO, gprs_info->NDTS, gprs_info->RAC, gprs_info->C31, gprs_info->C32);
                //show the window
                /* SPR#1428 - SH - New Editor - string has changed, update word wrap */
#ifdef NEW_EDITOR
                /*SPR 1757 Insert temp buffer into editor*/
                temp_text.data = (UBYTE*)temp_buffer;
                temp_text.dcs = ATB_DCS_ASCII;
                ATB_string_Length(&temp_text);
                ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
                ATB_edit_ClearAll(data->editor);
                ATB_edit_InsertString(data->editor, &temp_text);            /* Insert name string */
                ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */
                ATB_edit_Refresh(data->editor);
#else /* !NEW_EDITOR */
                strncpy(data->edtBuffer, temp_buffer, EM_EDITOR_SIZE);/*SPR 1757*/
#endif
                win_show(data->win);
            }
            break;
#endif


#ifdef NEPTUNE_BOARD
            case EM_SERVING_CELL_RF_PARAMS:
                sprintf (temp_buffer, "RSSI = %u\nDTX = %d  \nC1 = %u \nC2 = %u \nCELL-RESELECT HYSTERESIS = %u \nC32 = %d\nRXLEV (FULL) = %u \nRXLEV(SUB) = %u \nRXQUAL(FULL) = %u \nRXQUAL(SUB) = %u \nTXPOWER Timing advance = %u\nSignal variance =%u",
                RssiVal,
                Eng_Info_Req->info_rr.gsm_info.gsm_info_active.gsm_info_dedicated.codec_info.dtx_used,
                Eng_Info_Req->info_rr.gsm_bba_cell[0].gsm_cell_info.gsm_cell_info_bcch.c1,
                Eng_Info_Req->info_rr.gsm_bba_cell[0].gsm_cell_info.gsm_cell_info_bcch.c2,
                Eng_Info_Req->info_rr.gsm_bba_cell[0].gsm_cell_info.gsm_cell_info_bcch.cell_reselect_hysteresis,
                Eng_Info_Req->info_rr.gsm_bba_cell[0].gsm_cell_info.gsm_cell_info_pbcch.c32,
                Eng_Info_Req->info_rr.gsm_info.gsm_info_active.gsm_info_dedicated.rxlev_full,
                Eng_Info_Req->info_rr.gsm_info.gsm_info_active.gsm_info_dedicated.rxlev_sub,
                Eng_Info_Req->info_rr.gsm_info.gsm_info_active.gsm_info_dedicated.rxqual_full,
                Eng_Info_Req->info_rr.gsm_info.gsm_info_active.gsm_info_dedicated.rxqual_sub,
                Eng_Info_Req->info_grlc.channel_quality.timing_advance,
                Eng_Info_Req->info_grlc.channel_quality.signal_variance
                );

                ffs_write(fd, "Serving cell RF info\n",25 );
                ffs_write(fd, temp_buffer, strlen(temp_buffer));
                        /* SPR#1428 - SH - New Editor - string has changed, update word wrap */
                #ifdef NEW_EDITOR
                    /*SPR 1757 Insert temp buffer into editor*/
                        temp_text.data = (UBYTE*)temp_buffer;
                        temp_text.dcs = ATB_DCS_ASCII;
                        ATB_string_Length(&temp_text);
                        ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
                        ATB_edit_ClearAll(data->editor);
                        ATB_edit_InsertString(data->editor, &temp_text);            /* Insert name string */
                        ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */
                        ATB_edit_Refresh(data->editor);
                #else /* !NEW_EDITOR */
                        strncpy(data->edtBuffer, temp_buffer, EM_EDITOR_SIZE);/*SPR 1757*/
                #endif
                        win_show(data->win);/*show data*/

                break;

            case EM_SERVING_CHANNEL_PARAMS:

                sprintf (temp_buffer, "BCCH = %u \n HSN = %u \nBSIC = %u \n MAIO = %u \nARFCN = %u \nMobile allocation:\n MA index offset = %u\nMA number =%u",
                    Eng_Info_Req->info_rr.gsm_info.gsm_info_active.gsm_info_dedicated.bcch_channel,
                    Eng_Info_Req->info_rr.gsm_info.gsm_info_idle.pccch_info.pccch_channel.gsm_channel_hopping.hsn,
                    Eng_Info_Req->info_rr.gsm_bba_cell[0].gsm_cell_info.gsm_cell_info_pbcch.bsic_match,
                    Eng_Info_Req->info_rr.gsm_info.gsm_info_idle.pccch_info.pccch_channel.gsm_channel_hopping.maio,
                    Eng_Info_Req->info_rr.gsm_bba_cell[0].arfcn,
                    Eng_Info_Req->info_rr.gsm_info.gsm_info_idle.pccch_info.pccch_channel.gsm_channel_hopping.maio,
                    Eng_Info_Req->info_rr.gsm_info.gsm_info_idle.pccch_info.pccch_channel.gsm_channel_hopping.ma_number
                    );

                ffs_write(fd, "Serving Channel info\n",25 );
                ffs_write(fd, temp_buffer, strlen(temp_buffer));
                        /* SPR#1428 - SH - New Editor - string has changed, update word wrap */
                #ifdef NEW_EDITOR
                    /*SPR 1757 Insert temp buffer into editor*/
                        temp_text.data = (UBYTE*)temp_buffer;
                        temp_text.dcs = ATB_DCS_ASCII;
                        ATB_string_Length(&temp_text);
                        ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
                        ATB_edit_ClearAll(data->editor);
                        ATB_edit_InsertString(data->editor, &temp_text);            /* Insert name string */
                        ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */
                        ATB_edit_Refresh(data->editor);
                #else /* !NEW_EDITOR */
                        strncpy(data->edtBuffer, temp_buffer, EM_EDITOR_SIZE);/*SPR 1757*/
                #endif
                        win_show(data->win);/*show data*/

                break;

            case EM_AMR_PARAMS:

                sprintf (temp_buffer, "Threshold = %u\nHysteresis = %u\n Link quality estimate:\nMean bit error probability = %u\nVariation coefficient of BEP =%u\n\nBEP period = %u\nLQM mode =%u",
                    Eng_Info_Req->info_rr.gsm_bba_cell[0].gsm_cell_info.gsm_cell_info_pbcch.hcs_thr,
                    Eng_Info_Req->info_rr.gsm_bba_cell[0].gsm_cell_info.gsm_cell_info_bcch.cell_reselect_hysteresis,
                    Eng_Info_Req->info_grlc.channel_quality.bep_lqm.bep_lqm_gmsk.mean_bep,
                    Eng_Info_Req->info_grlc.channel_quality.bep_lqm.bep_lqm_gmsk.cv_bep,
                    Eng_Info_Req->info_grlc.channel_quality.bep_lqm.bep_period,
                    Eng_Info_Req->info_grlc.channel_quality.bep_lqm.lqm_mode
                    );

                ffs_write(fd, "Serving AMR info\n",20 );
                ffs_write(fd, temp_buffer, strlen(temp_buffer));

                        /* SPR#1428 - SH - New Editor - string has changed, update word wrap */
                #ifdef NEW_EDITOR
                    /*SPR 1757 Insert temp buffer into editor*/
                        temp_text.data = (UBYTE*)temp_buffer;
                        temp_text.dcs = ATB_DCS_ASCII;
                        ATB_string_Length(&temp_text);
                        ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
                        ATB_edit_ClearAll(data->editor);
                        ATB_edit_InsertString(data->editor, &temp_text);            /* Insert name string */
                        ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */
                        ATB_edit_Refresh(data->editor);
                #else /* !NEW_EDITOR */
                        strncpy(data->edtBuffer, temp_buffer, EM_EDITOR_SIZE);/*SPR 1757*/
                #endif
                        win_show(data->win);/*show data*/

                break;

            case EM_SNDCP_PARAMS:

                    sprintf (temp_buffer, "Header compression status = %u %u %u %u\n Data compression status = %u %u %u %u",
                        Eng_Info_Req->info_sm.connection_info_sm[0].compression_header,
                        Eng_Info_Req->info_sm.connection_info_sm[1].compression_header,
                        Eng_Info_Req->info_sm.connection_info_sm[2].compression_header,
                        Eng_Info_Req->info_sm.connection_info_sm[3].compression_header,
                        Eng_Info_Req->info_sm.connection_info_sm[0].compression_data,
                        Eng_Info_Req->info_sm.connection_info_sm[1].compression_data,
                        Eng_Info_Req->info_sm.connection_info_sm[2].compression_data,
                        Eng_Info_Req->info_sm.connection_info_sm[3].compression_data
                        );

                    ffs_write(fd, "Serving SNDCP info\n",21 );
                    ffs_write(fd, temp_buffer, strlen(temp_buffer));

                        /* SPR#1428 - SH - New Editor - string has changed, update word wrap */
                #ifdef NEW_EDITOR
                    /*SPR 1757 Insert temp buffer into editor*/
                        temp_text.data = (UBYTE*)temp_buffer;
                        temp_text.dcs = ATB_DCS_ASCII;
                        ATB_string_Length(&temp_text);
                        ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
                        ATB_edit_ClearAll(data->editor);
                        ATB_edit_InsertString(data->editor, &temp_text);            /* Insert name string */
                        ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */
                        ATB_edit_Refresh(data->editor);
                #else /* !NEW_EDITOR */
                        strncpy(data->edtBuffer, temp_buffer, EM_EDITOR_SIZE);/*SPR 1757*/
                #endif
                        win_show(data->win);/*show data*/
                        break;


                case EM_USERLEVEL_PARAMS:

                    sprintf (temp_buffer, "Application Data throughput\n Data rate = %u   %u\n data_rate_retx = %u  %u",
                        Eng_Info_Req->info_grlc.rlc_mac_statistic[0].throughput.data_rate,
                        Eng_Info_Req->info_grlc.rlc_mac_statistic[1].throughput.data_rate,
                        Eng_Info_Req->info_grlc.rlc_mac_statistic[0].throughput.data_rate_retx,
                        Eng_Info_Req->info_grlc.rlc_mac_statistic[1].throughput.data_rate_retx
                        );
                ffs_write(fd, "Serving user level info\n",26 );
                ffs_write(fd, temp_buffer, strlen(temp_buffer));
                        /* SPR#1428 - SH - New Editor - string has changed, update word wrap */
                #ifdef NEW_EDITOR
                    /*SPR 1757 Insert temp buffer into editor*/
                        temp_text.data = (UBYTE*)temp_buffer;
                        temp_text.dcs = ATB_DCS_ASCII;
                        ATB_string_Length(&temp_text);
                        ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
                        ATB_edit_ClearAll(data->editor);
                        ATB_edit_InsertString(data->editor, &temp_text);            /* Insert name string */
                        ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */
                        ATB_edit_Refresh(data->editor);
                #else /* !NEW_EDITOR */
                        strncpy(data->edtBuffer, temp_buffer, EM_EDITOR_SIZE);/*SPR 1757*/
                #endif
                        win_show(data->win);/*show data*/
                    break;


            case EM_LLCTRACING_PARAMS:

                    sprintf (temp_buffer, "LLC Data throughput UL/DL\n throughput UL: \nData rate= %u\ndata_rate_retx=%u\nthroughput DL\nData rate = %u\nndata_rate_retx = %u",
                        Eng_Info_Req->info_llc.throughput_ul.data_rate,
                        Eng_Info_Req->info_llc.throughput_ul.data_rate_retx,
                        Eng_Info_Req->info_llc.throughput_dl.data_rate,
                        Eng_Info_Req->info_llc.throughput_dl.data_rate_retx
                        );
                        ffs_write(fd, "Serving LLC tracing info\n",26 );
                        ffs_write(fd, temp_buffer, strlen(temp_buffer));

                        /* SPR#1428 - SH - New Editor - string has changed, update word wrap */
                #ifdef NEW_EDITOR
                    /*SPR 1757 Insert temp buffer into editor*/
                        temp_text.data = (UBYTE*)temp_buffer;
                        temp_text.dcs = ATB_DCS_ASCII;
                        ATB_string_Length(&temp_text);
                        ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
                        ATB_edit_ClearAll(data->editor);
                        ATB_edit_InsertString(data->editor, &temp_text);            /* Insert name string */
                        ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */
                        ATB_edit_Refresh(data->editor);
                #else /* !NEW_EDITOR */
                        strncpy(data->edtBuffer, temp_buffer, EM_EDITOR_SIZE);/*SPR 1757*/
                #endif
                        win_show(data->win);/*show data*/
                break;

            case EM_RLC_MAC_PARAMS:

                    sprintf (temp_buffer, "RLC/MAC Data throughput\n Data through-put value in bits/s = %u  %u\nData through-put value of retransmitted bytes in bits/s = %u  %u",
                        Eng_Info_Req->info_grlc.rlc_mac_statistic[0].throughput.data_rate,
                        Eng_Info_Req->info_grlc.rlc_mac_statistic[1].throughput.data_rate,
                        Eng_Info_Req->info_grlc.rlc_mac_statistic[0].throughput.data_rate_retx,
                        Eng_Info_Req->info_grlc.rlc_mac_statistic[1].throughput.data_rate_retx
                        );
                    ffs_write(fd, "Serving RLC/MAC info\n",23 );
                    ffs_write(fd, temp_buffer, strlen(temp_buffer));

                        /* SPR#1428 - SH - New Editor - string has changed, update word wrap */
                #ifdef NEW_EDITOR
                    /*SPR 1757 Insert temp buffer into editor*/
                        temp_text.data = (UBYTE*)temp_buffer;
                        temp_text.dcs = ATB_DCS_ASCII;
                        ATB_string_Length(&temp_text);
                        ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
                        ATB_edit_ClearAll(data->editor);
                        ATB_edit_InsertString(data->editor, &temp_text);            /* Insert name string */
                        ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */
                        ATB_edit_Refresh(data->editor);
                #else /* !NEW_EDITOR */
                        strncpy(data->edtBuffer, temp_buffer, EM_EDITOR_SIZE);/*SPR 1757*/
                #endif
                        win_show(data->win);/*show data*/
                break;

            case EM_GMM_INFO_PARAMS:

                    sprintf (temp_buffer, "Attach state = %u \nSM information (per PDP context) \nNo of active primary PDP contexts= %u\nNo of active secondary PDP context= %u Radio priority =%u\n\nDelay class = %d\nReliability class =%d\nPeak throughput = %d\nPrecedence class = %d\nMean throughput =%d\n\nIPv4/v6 address\nipv4 = %d\nipv6 = %d",
                        Eng_Info_Req->info_sm.attached,
                        Eng_Info_Req->info_sm.pdp_context_count_primary,
                        Eng_Info_Req->info_sm.pdp_context_count_secondary,
                        Eng_Info_Req->info_sm.connection_info_sm[2].radio_prio,
                        Eng_Info_Static_Req->info_sm.context_info[0].qos.qos_r97.delay,
                        Eng_Info_Static_Req->info_sm.context_info[0].qos.qos_r97.relclass,
                        Eng_Info_Static_Req->info_sm.context_info[0].qos.qos_r97.peak,
                        Eng_Info_Static_Req->info_sm.context_info[0].qos.qos_r97.preced,
                        Eng_Info_Static_Req->info_sm.context_info[0].qos.qos_r97.mean,
                        Eng_Info_Static_Req->info_sm.context_info[0].ip_address.ipv4_addr.aelement[0],
                        Eng_Info_Static_Req->info_sm.context_info[0].ip_address.ipv6_addr.aelement[0]
                        );
                    ffs_write(fd, "Serving GMM info\n",20 );
                    ffs_write(fd, temp_buffer, strlen(temp_buffer));
                        /* SPR#1428 - SH - New Editor - string has changed, update word wrap */
                #ifdef NEW_EDITOR
                    /*SPR 1757 Insert temp buffer into editor*/
                        temp_text.data = (UBYTE*)temp_buffer;
                        temp_text.dcs = ATB_DCS_ASCII;
                        ATB_string_Length(&temp_text);
                        ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
                        ATB_edit_ClearAll(data->editor);
                        ATB_edit_InsertString(data->editor, &temp_text);            /* Insert name string */
                        ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */
                        ATB_edit_Refresh(data->editor);
                #else /* !NEW_EDITOR */
                        strncpy(data->edtBuffer, temp_buffer, EM_EDITOR_SIZE);/*SPR 1757*/
                #endif
                        win_show(data->win);/*show data*/

                break;

            case EM_CALL_STATUS_PARAMS:

                    sprintf (temp_buffer, "CALL STATUS\nTransaction id = %u\nDirection = %u \nStatecc = %u \nOn hold = %u",
                        Eng_Info_Req->info_cc.connection_info_cc[0].transaction_id,
                        Eng_Info_Req->info_cc.connection_info_cc[0].direction,
                        Eng_Info_Req->info_cc.connection_info_cc[0].state_cc,
                        Eng_Info_Req->info_cc.connection_info_cc[0].on_hold
                        );
                    ffs_write(fd, "Serving call status info\n",27 );
                    ffs_write(fd, temp_buffer, strlen(temp_buffer));
                        /* SPR#1428 - SH - New Editor - string has changed, update word wrap */
                #ifdef NEW_EDITOR
                    /*SPR 1757 Insert temp buffer into editor*/
                        temp_text.data = (UBYTE*)temp_buffer;
                        temp_text.dcs = ATB_DCS_ASCII;
                        ATB_string_Length(&temp_text);
                        ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
                        ATB_edit_ClearAll(data->editor);
                        ATB_edit_InsertString(data->editor, &temp_text);            /* Insert name string */
                        ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */
                        ATB_edit_Refresh(data->editor);
                #else /* !NEW_EDITOR */
                        strncpy(data->edtBuffer, temp_buffer, EM_EDITOR_SIZE);/*SPR 1757*/
                #endif
                        win_show(data->win);/*show data*/

                break;

            case EM_LAYER_MESSAGE_PARAMS:

                    sprintf (temp_buffer, "LAYER MESSAGE\nLogical Channel: \narfcn=%d\n\nMobile allocation index offset=%d\nHopping sequence number =%d\nvalid-flag=%d\nMobile allocation number = %d",
                        Eng_Info_Req->info_rr.gsm_info.gsm_info_idle.pccch_info.pccch_channel.gsm_channel_static.arfcn,
                        Eng_Info_Req->info_rr.gsm_info.gsm_info_idle.pccch_info.pccch_channel.gsm_channel_hopping.maio,
                        Eng_Info_Req->info_rr.gsm_info.gsm_info_idle.pccch_info.pccch_channel.gsm_channel_hopping.hsn,
                        Eng_Info_Req->info_rr.gsm_info.gsm_info_idle.pccch_info.pccch_channel.gsm_channel_hopping.v_ma_number,
                        Eng_Info_Req->info_rr.gsm_info.gsm_info_idle.pccch_info.pccch_channel.gsm_channel_hopping.ma_number
                        );
                    ffs_write(fd, "Serving Layer message\n",25 );
                    ffs_write(fd, temp_buffer, strlen(temp_buffer));
                        /* SPR#1428 - SH - New Editor - string has changed, update word wrap */
                #ifdef NEW_EDITOR
                    /*SPR 1757 Insert temp buffer into editor*/
                        temp_text.data = (UBYTE*)temp_buffer;
                        temp_text.dcs = ATB_DCS_ASCII;
                        ATB_string_Length(&temp_text);
                        ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
                        ATB_edit_ClearAll(data->editor);
                        ATB_edit_InsertString(data->editor, &temp_text);            /* Insert name string */
                        ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */
                        ATB_edit_Refresh(data->editor);
                #else /* !NEW_EDITOR */
                        strncpy(data->edtBuffer, temp_buffer, EM_EDITOR_SIZE);/*SPR 1757*/
                #endif
                        win_show(data->win);/*show data*/
                break;

            case EM_WCDMA_LAYER_MESSAGE_PARAMS:

                    sprintf (temp_buffer, "%s",
                        "WCDMA LAYER MESSAGE"
                        );
                    ffs_write(fd, "Serving WCDMA Layer info\n",32 );
                    ffs_write(fd, temp_buffer, strlen(temp_buffer));
                        /* SPR#1428 - SH - New Editor - string has changed, update word wrap */
                #ifdef NEW_EDITOR
                    /*SPR 1757 Insert temp buffer into editor*/
                        temp_text.data = (UBYTE*)temp_buffer;
                        temp_text.dcs = ATB_DCS_ASCII;
                        ATB_string_Length(&temp_text);
                        ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
                        ATB_edit_ClearAll(data->editor);
                        ATB_edit_InsertString(data->editor, &temp_text);            /* Insert name string */
                        ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */
                        ATB_edit_Refresh(data->editor);
                #else /* !NEW_EDITOR */
                        strncpy(data->edtBuffer, temp_buffer, EM_EDITOR_SIZE);/*SPR 1757*/
                #endif
                        win_show(data->win);/*show data*/
                break;

            case EM_3G_INFO_PARAMS:

                sprintf (temp_buffer, "%s",
                    "3G INFO"
                    );
                ffs_write(fd, temp_buffer, strlen(temp_buffer));
                        /* SPR#1428 - SH - New Editor - string has changed, update word wrap */
                #ifdef NEW_EDITOR
                    /*SPR 1757 Insert temp buffer into editor*/
                        temp_text.data = (UBYTE*)temp_buffer;
                        temp_text.dcs = ATB_DCS_ASCII;
                        ATB_string_Length(&temp_text);
                        ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
                        ATB_edit_ClearAll(data->editor);
                        ATB_edit_InsertString(data->editor, &temp_text);            /* Insert name string */
                        ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */
                        ATB_edit_Refresh(data->editor);
                #else /* !NEW_EDITOR */
                        strncpy(data->edtBuffer, temp_buffer, EM_EDITOR_SIZE);/*SPR 1757*/
                #endif
                        win_show(data->win);/*show data*/
                break;

            case EM_PACKET_DATA_PARAMS:

                sprintf (temp_buffer, "PACKET DATA\nGMM State = %d\n ",
                        Eng_Info_Req->info_mm.mm_reg_ps_info.gmm_main_state
                        );
                ffs_write(fd, "Serving packet data info\n",27 );
                ffs_write(fd, temp_buffer, strlen(temp_buffer));
                        /* SPR#1428 - SH - New Editor - string has changed, update word wrap */
                #ifdef NEW_EDITOR
                    /*SPR 1757 Insert temp buffer into editor*/
                        temp_text.data = (UBYTE*)temp_buffer;
                        temp_text.dcs = ATB_DCS_ASCII;
                        ATB_string_Length(&temp_text);
                        ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
                        ATB_edit_ClearAll(data->editor);
                        ATB_edit_InsertString(data->editor, &temp_text);            /* Insert name string */
                        ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */
                        ATB_edit_Refresh(data->editor);
                #else /* !NEW_EDITOR */
                        strncpy(data->edtBuffer, temp_buffer, EM_EDITOR_SIZE);/*SPR 1757*/
                #endif
                        win_show(data->win);/*show data*/

                break;

#endif   /*ifndef NEPTUNE BOARD */
        default:
            free(temp_buffer);
            return MFW_EVENT_REJECTED;
        }
    }
    else
    {
        free(temp_buffer);
        return MFW_EVENT_REJECTED;
    }

#ifdef NEPTUNE_BOARD
    ffs_write(fd, "\n****************\n\n",20 );
    ffs_close(fd);
#endif
    free(temp_buffer);
    return MFW_EVENT_CONSUMED;
}

/*******************************************************************************
 $Function:     Mmi_em_destroy()
 $Description:  Delete the window
 $Returns:      none
 $Arguments:    window handle
*******************************************************************************/
void Mmi_em_destroy(T_MFW_HND own_window)
{
  T_MFW_WIN     * win  = ((T_MFW_HDR *)own_window)->data;
  tEmData * data = (tEmData *)win->user;

  TRACE_EVENT ("Mmi_em_destroy()");

  if (own_window == NULL)
  {
    TRACE_EVENT ("Error :- Called with NULL Pointer");
    return;
  }
  if (data)
  {
    /*
     * Exit TIMER & KEYBOARD Handle
     */
    kbd_delete (data->kbd);
    tim_delete (data->tim);
    /* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
    ATB_edit_Destroy(data->editor);
#else
    edt_delete(data->edt);
#endif
    /*
     * Delete WIN Handler
     */
    win_delete (data->win);
    /*
     * Free Memory
     */
    FREE_MEMORY ((void *)data, sizeof (tEmData));
  }
  TRACE_EVENT_P1("MMiEm END, Memory left:%d", mfwCheckMemoryLeft());
}

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

 $Function:     Mmi_em_kbd_cb()

 $Description:  Keyboard handler

 $Returns:      status int

 $Arguments:    event, keyboard data

*******************************************************************************/
int Mmi_em_kbd_cb(T_MFW_EVENT event,T_MFW_KBD *  kc )
{
    T_MFW_HND       win  = mfw_parent (mfw_header());
    T_MFW_WIN     * win_data = ((T_MFW_HDR *)win)->data;
    tEmData * data = (tEmData *)win_data->user;
#ifdef NEPTUNE_BOARD /*EngMode */
    char strTemp[4];
    int nCopy;

    char pic[9];
    U16 *p;
    fd_t fd;
    char file[15];

    static char command[10];

    if(strlen(command) > 8)
    {
        memset(command, '\0', sizeof(command));
    }
#endif

    TRACE_EVENT_P2("Mmi_em_kbd_cb, key:%d, win;%d", kc->code, data->win);

    switch(kc->code)
    {

        case KCD_MNUUP:/*scroll up */
        /* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
        ATB_edit_MoveCursor(data->editor, ctrlUp, TRUE);
#else /* NEW_EDITOR */
        edtChar(data->edt,ecUp);
#endif /* NEW_EDITOR */
            break;

        case KCD_MNUDOWN:/*scroll down*/
        /* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
            ATB_edit_Char(data->editor,ctrlDown, TRUE);
#else /* NEW_EDITOR */
            edtChar(data->edt,ecDown);
#endif /* NEW_EDITOR */

            break;
#ifdef NEPTUNE_BOARD /*EngMode */
                case KCD_0:
                    strcat(command, "0");
                    break;
                case KCD_1:
                    strcat(command, "1");
                    break;
                case KCD_2:
                    strcat(command, "2");
                    break;
                case KCD_3:
                    strcat(command, "3");
                    break;
                case KCD_4:
                    strcat(command, "4");
                    break;
                case KCD_5:
                    strcat(command, "5");
                    break;
                case KCD_6:
                    strcat(command, "6");
                    break;
                case KCD_7:
                    strcat(command, "7");
                    break;
                case KCD_8:
                    strcat(command, "8");
                    break;
                case KCD_9:
                    strcat(command, "9");
                    break;
                case KCD_STAR:
                    strcat(command, "*");
                    break;
                case KCD_HASH:
                    strcat(command, "#");
                    if(!strcmp(command,"###1234#"))
                    {
                        TRACE_EVENT_P1("Handle capture, command :%s", command);

                        strcpy(file, "/NOR/pic");
//                        strcpy(strTemp, "/NOR/pic");
                        memset(strTemp, '\0', sizeof(strTemp));
                        nCopy = 0;
                        while ( (fd = (int) ffs_open(  file, FFS_O_RDONLY )) > 0 )
                        {

                                nCopy++;
                                sprintf(strTemp, "%d", nCopy);
                                strcat(file, strTemp);
                                ffs_close((fd_t) fd);
                        }
                        TRACE_EVENT_P1("nCopy:%d", nCopy);
                        sprintf( strTemp, "%d", nCopy);
//                        strcat( file, strTemp );
                        TRACE_EVENT_P1("file:%s", file);
                        fd = ffs_open(file, FFS_O_CREATE|FFS_O_WRONLY|FFS_O_TRUNC);
                        ffs_write(fd, picture_col, 320*240);
                        ffs_close(fd);

                        memset(command, '\0', sizeof(command));

                    }

                    break;
#endif

        case KCD_HUP:   /*destroy window*/
        case KCD_RIGHT:
#ifdef NEPTUNE_BOARD
            EmRequest = NULL;
            sAT_PercentEINFO(CMD_SRC_LCL,TIMER_STOP);
            sAT_PercentESINFO(CMD_SRC_LCL,TIMER_STOP);
            Mmi_em_destroy(data->win);
            memset(command, '\0', sizeof(command));
#else
            Mmi_em_destroy(data->win);
#endif
            break;
        default:
            break;
    }
    return MFW_EVENT_CONSUMED;
}

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

 $Function:     Mmi_em_win_cb()

 $Description:  Display handler

 $Returns:      status int

 $Arguments:    event, window handle

*******************************************************************************/
int Mmi_em_win_cb(T_MFW_EVENT event,T_MFW_WIN * win )
{
    tEmData* data = (tEmData *)win->user;

    TRACE_EVENT_P1("EM window: %d", win);
    TRACE_EVENT_P1("Mmi_em_win_cb(), data->CurrentWindow %d", data->CurrentWindow);

    switch( event )
    {
        case MfwWinVisible:
            /*clear screen*/
            dspl_ClearAll();

       /*Show editor content*/
       /* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
            ATB_edit_Show(data->editor);
#else /* NEW_EDITOR */
            edtShow(data->edt);
#endif /* NEW_EDITOR */

            displaySoftKeys(TxtNull, TxtSoftBack); /*show the softkeys*/
            break;
        default:
            return MFW_EVENT_PASSED;
        /*break;*/
    }

    return MFW_EVENT_CONSUMED;

}

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

 $Function:     Mmi_em_tim_cb()

 $Description:  Timer handler (every second)

 $Returns:      none

 $Arguments:    event, timer data

*******************************************************************************/
void Mmi_em_tim_cb(T_MFW_EVENT event,T_MFW_TIM * t)
{
    T_MFW_HND win  = mfw_parent (mfw_header());
    T_MFW_WIN     * win_data = ((T_MFW_HDR *)win)->data;
    tEmData * data = (tEmData *)win_data->user;
    TRACE_EVENT_P1("Mmi_em_tim_cb(), win:%d", data->win);
    /*Request the data from MFW again*/
    Mfw_em_get_data(data->CurrentWindow);
    /*restart timer*/
    timStart(data->tim);
}