view src/ui/bmi/mmiBookController.c @ 303:f76436d19a7a default tip

!GPRS config: fix long-standing AT+COPS chance hanging bug There has been a long-standing bug in FreeCalypso going back years: sometimes in the AT command bring-up sequence of an ACI-only MS, the AT+COPS command would produce only a power scan followed by cessation of protocol stack activity (only L1 ADC traces), instead of the expected network search sequence. This behaviour was seen in different FC firmware versions going back to Citrine, and seemed to follow some law of chance, not reliably repeatable. This bug has been tracked down and found to be specific to !GPRS configuration, stemming from our TCS2/TCS3 hybrid and reconstruction of !GPRS support that was bitrotten in TCS3.2/LoCosto version. ACI module psa_mms.c, needed only for !GPRS, was missing in the TCS3 version and had to be pulled from TCS2 - but as it turns out, there is a new field in the MMR_REG_REQ primitive that needs to be set correctly, and that psa_mms.c module is the place where this initialization needed to be added.
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 08 Jun 2023 08:23:37 +0000
parents ec9f955fc487
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:       PhoneBook
 $File:         MmiBookController.c
 $Revision:     1.0

 $Author:       Condat(UK)
 $Date:         25/10/00

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

 Description:

  The book controller module provides the external
  interface to the phone book. It provides ALL external
  entry points to the phone book system.

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

 $History: MmiBookController.c

    Nov 10, 2006   DRT: OMAPS000103354  x0039928
    Description: Delete all failure in LDN Phonebook
    Solution: phb_delete_all is called with the proper phone book as input.

    Aug 18, 2006   ER: OMAPS00089840  x0039928
    Description: Changes to be made in MMI for the functionality "Delete all" ADN entries
    Solution: A new menu item "Delete All" is added in the phone book menu.

    July 21,2006 REF:DR OMAPS00085695 x0047075
    Description:Fail to delete the correct entry in LDN, LRN and LMN with Locosto.
    Solution:After deleting any entry in the LDN,LRN,LMN book,we highlight the first entry as the
    current selected entry.

       Jun 13, 2005 REF: SPR 31705 x0021308
       Description: Once  maximum limit of the My Number is exceeded, display info : Phonebook full,
       expected is MyNumber Full
       Solution: Replaced the Return tag in function Protected Menu Handler(booksetownNumber) from
       Phonebookfull with MyNumberfull.

       Jun 13, 2005 REF: SPR 31710 x0021308
    Description: Once  maximum limit of the FDN Number  is exceeded, display info : Phonebook full,
       expected is FDNList Full
       Solution: Replaced the Return tag in function Protected Menu Handler(booksetownNumber) from
       Phonebookfull with FDNListfull While checking whether in FDNMenu is active using MenuFDN global
       variable.


    Sep 22, 2004        REF: CRR 21392  xvilliva
    Bug:        PIN2 Screen is not displaying, While Adding FDN Number thru
            Recent call Menu.
    Fix:        We add the "bookRepRedNameEnter" to "ProtectedActions" array.
            If FDN is enabled, Pin2 will be asked.

    June 26, 2006        REF : OMAPS00083148  x0023848
    Bug:        SMS send is failed when trying through missed call list
    Fix:        Assignemnt of SmsData.called_from_reply_item to FALSE is Added

  25/10/00      Original Condat(UK) BMI version.


 $End

 // Issue Number : MMI-FIX-12161 on 07/04/04 by Nishikant Kulkarni/Ajith K.P

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


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

                                Include Files

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

/* MMI phone book specific 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 "mfw_mfw.h"
#include "mfw_win.h"
#include "mfw_kbd.h"
#include "mfw_lng.h"
/* SPR#1428 - SH - New Editor changes */
#ifndef NEW_EDITOR
#include "mfw_edt.h"
#endif
#include "mfw_icn.h"
#include "mfw_mnu.h"
#include "mfw_tim.h"

#include "mfw_sim.h"
#include "mfw_cm.h"
#include "mfw_nm.h"
#include "mfw_phb.h"
#include "mfw_mme.h"
#include "mfw_sat.h"
#include "mfw_sms.h"

#include "dspl.h"

#include "ksd.h"
#include "psa.h"

#include "MmiMain.h"
#include "MmiBookController.h"
#include "MmiDummy.h"
#include "MmiDialogs.h"
#include "MmiLists.h"


#include "MmiMenu.h"
#include "mmiCall.h"
#include "Mmiicons.h"
#include "MmiIdle.h"

#include "MmiSoftKeys.h"
#include "MmiSounds.h"
#include "MmiIdle.h"
#include "MmiNetwork.h"
#include "mmiSat_i.h"
#include "MmiAoc.h"

#include "gdi.h"
#include "audio.h"

#include "cus_aci.h"
#include "MmiTimers.h"


#include "MmiBookController.h"
#include "MmiBookUtils.h"

/* MMI specific includes, outside scope of phone book
*/
#include "MmiPins.h"
#include "mmiSmsMenu.h"
#include "mmismssend.h"
#include "mmiCall.h"
#include "MmiIdle.h"
#include "MmiCPHS.h"


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

                                Definitions

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

/* Since we want to make sure all of the menu handlers get
   treated the same way, and have a protected handler, define
   a new macro, in terms of the MENU_HANDLER, which will
   invoke the protected function correctly (See below for
   further details)
*/
#define PROTECTED_MENU_HANDLER( Name ) \
static MENU_HANDLER( Protected##Name ); \
MENU_HANDLER( Name ) \
{ \
    return Protected( Name, Protected##Name, Menu, Item ); \
} \
static MENU_HANDLER( Protected##Name )

/*
** Since PROTECTED_MENU_HANDLER handles only FDN protection, the following is a menu handler to ensure
** that PIN2 entry is required for any associated menu action
*/
#define PIN2RQD_MENU_HANDLER( Name ) \
static MENU_HANDLER( Pin2Rqd##Name ); \
MENU_HANDLER( Name ) \
{ \
    return Pin2Rqd( Name, Pin2Rqd##Name, Menu, Item ); \
} \
static MENU_HANDLER( Pin2Rqd##Name )

/*Added For Fix:  MMI-FIX-12161 on 07/04/04 by Nishikant Kulkarni/Ajith K.P */
extern T_idle idle_data;


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

                                Local structures

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

/* A number of the actions the phone book is required to perform
   can only be activated when the user enters a security PIN number,
   the PIN2 code. In order to make the operation of the module
   clear, we will build a list of the protected actions, and then
   drive all menu operations through a single clearing process.

   The module will use the following action list perform the
   protection, note that the last entry in this list must be
   NULL
*/
typedef tBookStatus (*tProtectFunction)( tBookMfwMenu *Menu, tBookMfwMenuItem *Item );

tProtectFunction ProtectedActions[] = {
  bookNameEnter,
  bookNameEdit,
  bookNameDelete,
  bookNameDeleteAll,
  // Sep 22, 2004        REF: CRR 21392  xvilliva
  // A function, if added to this array would ask Pin2 when called.
  // Storing a number from recent call list would ask for Pin2, if FDN is enabled.
  bookRepRedNameEnter,
  NULL };

//    May 3, 2004        REF: CRR MMI-SPR-18555  Rashmi C N(Sasken)
//  This flag will indicate when we are in FDN menu
int menuFDN;
extern T_call call_data;


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

                                Private methods

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

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

 $Function:     Mmir_BaseAddress

 $Description:  returns the base address of the Master Index Table

 $Returns:    As above

 $Arguments:  none.

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

/* Provide a local routine which will perform the protection
   method. This will scan the list of protected actions, looking
   for the provided function, if it isn't a protected function
   then we will just call it directly, otherwise we will guard
   it with the PIN2 security code if we have a protected book
*/
static int Protected( tProtectFunction FunTag, tProtectFunction FunPtr, tBookMfwMenu *Menu, tBookMfwMenuItem *Item )
{
    pBookMfwWin    win_data = (pBookMfwWin) bookWindowData();
  pBookPhonebook book     = ((pBookStandard)win_data->user)->phbk;
  int i;

  /* Check for a protected book being used (details to be sorted
     out at a later date)
  */

   // Sep 22, 2004        REF: CRR 21388  xvilliva
   // We check if the call is not from FDN menu and if the current storage
   // for phonebook is internal phone book, we avoid asking Pin2 accordingly.
   if(menuFDN == 0 && bookActiveBook(WRITE) == PHB_IPB)
   {
    //Do nothing.
   }
// May 3, 2004        REF: CRR MMI-SPR-18555  Rashmi C N(Sasken)
//  Pin2 should be prompted when user does FDN related operations in FDN menu
//   In FDN menu, receie an active call and FDN is disabled, pin2 should not be prompted for in call addressbook operations
  else if ( phb_get_mode() == PHB_RESTRICTED || (menuFDN && (call_data.calls.numCalls==0)))
  {
    /* Is the requested function one of the ones we need
       to protect ?
    */
    TRACE_FUNCTION("Phone Book in FDN mode:ask for pin 2");
    for ( i = 0; ProtectedActions[i]; i++ )
    {
      if ( FunTag == ProtectedActions[i] )
      {
        /* Yup, so we need to store the pending action for
           this window, this will be invoked by the checking
           operation, indirectly, if the check is successful
        */
        book->pin2_next = (T_VOID_FUNC) FunPtr;

        //We're cheating and passing the current window to the
        //handler via the unused menu parameter -- MC
        book->menu = (tBookMfwMenu*) bookCurrentWindow();
        book->item = Item;

        /* Call out to get the pin2 number checked, this will
           respond with a message back to this object, which
           we will deal with on receipt
        */
        return pin2_check( bookCurrentWindow());
      }
    }
  }

  /* we've come through the list of functions and either don't
     have a protected action to perform, or the book itself
     is not protected, so just invoke the requested action
  */
  return (FunPtr)( (tBookMfwMenu*) bookCurrentWindow()/*Menu*/, Item );
}


/*
** This function will apply PIN2 protection to the associated menu functions at ALL times
**
*/
static int Pin2Rqd( tProtectFunction FunTag, tProtectFunction FunPtr, tBookMfwMenu *Menu, tBookMfwMenuItem *Item )
{
    pBookMfwWin    win_data = (pBookMfwWin) bookWindowData();
    pBookPhonebook book     = ((pBookStandard)win_data->user)->phbk;
//  int i;   // RAVI

    /* Yup, so we need to store the pending action for
    this window, this will be invoked by the checking
    operation, indirectly, if the check is successful
    */
    book->pin2_next = (T_VOID_FUNC) FunPtr;

    //We're cheating and passing the current window to the
    //handler via the unused menu parameter -- MC
    book->menu = (tBookMfwMenu*) bookCurrentWindow();
    book->item = Item;

    /* Call out to get the pin2 number checked, this will
    respond with a message back to this object, which
    we will deal with on receipt
    */
    return pin2_check( bookCurrentWindow());
}

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

                                Public methods

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

/* Menu Handlers

   We are routing all of the phone book functionality through
   this module to allow the functional modules to be developed
   independantly where possible.

   This gives a single interface point for the rest of the
   MMI subsystem.

   All of the following functions use the MENU_HANDLER macro,
   as such they all have a common interface, this is not therefore
   documented in each case. The following information is common
   for each menu handler


   $Returns:  Status from worker routine

   $Arguments:  Menu, the menu from which the function was activated
                Item, the item associated with the call

*/


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

 $Function:     bookNameEnter

 $Description:

    Add new name to the phone book

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookNameEnter )
{
  //recast the menu parameter as the current window -- MC
    T_MFW_HND     win         = (T_MFW_HND)Menu;
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;

  TRACE_FUNCTION("bookNameEnter");
    /* Clear the input editor structures before we go any further
    */

  if (Phbk->UpdateAction!=ADD_FROM_IDLE)
      memset( Phbk->phbk->edt_buf_number, '\0', PHB_MAX_LEN );
  /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/
      memset( Phbk->phbk->edt_buf_name,   '\0', MAX_ALPHA_LEN );
    /* Indicate this is an additional entry being created
    */
    Phbk->UpdateAction = CREATE_ENTRY;

    // May 3, 2004        REF: CRR MMI-SPR-18555  Rashmi C N(Sasken)
    //  As the book is being changed for FDN menu operations, we need to
    //    get back the current book for the normal phonbook operations
    Phbk->current.status.book = bookActiveBook(READ);

    /* Determine if we have room to add any new entries
    */
  bookGetCurrentStatus( &Phbk->phbk->current.status );
  if ( Phbk->phbk->current.status.avail_entries )
  {
        /* We are okay to input the number, use a worker routine
           from the input handler module to actually deal with this
        */
    Phbk->input_number_win = bookInputStartNumberEditor( win, Phbk->edt_buf_number );
  }
  else
  {
        /* We have no room available to add the name, so check if
           we have filled the namespace or not
        */

        /*If FDN menu active and no room for entries, then display FDN list full */
    tIndexTagNames Tag ;
        if(menuFDN)
            {
             Tag = ( Phbk->phbk->current.status.used_entries )
                ? TxtFDNListFull : TxtOperationNotAvail;          //SPR 31710 x0021308:RamG
            }
         else
        {
         Tag = ( Phbk->phbk->current.status.used_entries )
            ? TxtPhbkFull : TxtOperationNotAvail;
            }
        bookShowInformation( win, Tag,NULL, NULL );


  }

    /* Always return event consumed
    */
    return MFW_EVENT_CONSUMED;
}


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

 $Function:     bookNameEdit

 $Description:

    Edit the name in the phone book

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookNameEdit )
{
  //recast the menu parameter as the current window -- MC
    T_MFW_HND     win         = /*mfwParent( mfw_header() )*/(T_MFW_HND)Menu;
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;

    /* Indicate this is an edit of a current entry
    */
    Phbk->UpdateAction = MODIFY_EXISTING;
    /*MC SPR 1327, if UPN don't change phonebook type*/
    if (data->phbk->current.status.book != PHB_UPN)
        data->phbk->current.status.book = bookActiveBook(READ);

    /*api - clear buffers before edit
    */
    memset( Phbk->phbk->edt_buf_number, '\0', PHB_MAX_LEN );
    memset( Phbk->phbk->edt_buf_name,   '\0', MAX_ALPHA_LEN );

TRACE_EVENT_P2("current phbk is = %d and current entry is = %d", data->phbk->current.status.book,data->phbk->current.entry[ data->phbk->current.selectedName ].book);

    if(data->phbk->current.status.book == PHB_ADN_FDN)
    {
        if(data->phbk->current.entry[ data->phbk->current.selectedName ].book==PHB_FDN)
        {
            bookActivateFDN((T_MFW_HND)Menu);
        }
        else
        {
                /* And populate the buffers with the information to be modified
                */
                #ifdef NO_ASCIIZ
                /*MC , SPR 1242 copy whole name, merged from b-sample build*/
                  memcpy( Phbk->phbk->edt_buf_name,   Phbk->current.entry[ Phbk->current.selectedName ].name.data, MAX_ALPHA_LEN /*Phbk->current.entry[ Phbk->current.selectedName ].name.len*/);
                #else
                  memcpy( Phbk->phbk->edt_buf_name,   Phbk->current.entry[ Phbk->current.selectedName ].name, MAX_ALPHA_LEN );
                #endif
                memcpy( Phbk->phbk->edt_buf_number, Phbk->current.entry[ Phbk->current.selectedName ].number, PHB_MAX_LEN );

                /* And edit the entry we currently have active
                */
                Phbk->input_number_win = bookInputStartNumberEditor( win, Phbk->edt_buf_number );
        }
    }
    else
        {
            /* And populate the buffers with the information to be modified
            */
            #ifdef NO_ASCIIZ
            /*MC , SPR 1242 copy whole name, merged from b-sample build*/
              memcpy( Phbk->phbk->edt_buf_name,   Phbk->current.entry[ Phbk->current.selectedName ].name.data, MAX_ALPHA_LEN/*Phbk->current.entry[ Phbk->current.selectedName ].name.len*/);
            #else
              memcpy( Phbk->phbk->edt_buf_name,   Phbk->current.entry[ Phbk->current.selectedName ].name, MAX_ALPHA_LEN );
            #endif
            memcpy( Phbk->phbk->edt_buf_number, Phbk->current.entry[ Phbk->current.selectedName ].number, PHB_MAX_LEN );

            /* And edit the entry we currently have active
            */
           Phbk->input_number_win = bookInputStartNumberEditor( win, Phbk->edt_buf_number );
        }
    /* Always return event consumed
    */
    return MFW_EVENT_CONSUMED;
}


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

 $Function:     bookNameDelete

 $Description:

    Delete name in phone book

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookNameDelete )
{

    //recast the menu parameter as the current window -- MC
    //and pass it on
    //when ADN_FDN phonebook in use check if current entry is FDN
    //is so then call information screen or allow entry to be deleted. --- AP 23/01/02
    //Issue 1944 MZ  Allow an entry in FDN list to be deleted.
    T_MFW_HND       win         = (T_MFW_HND)Menu;
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data         = (tBookStandard *) win_data->user;

     /*MC SPR 1327, if UPN don't change phonebook type*/
     if (data->phbk->current.status.book != PHB_UPN)
            data->phbk->current.status.book = bookActiveBook(READ);
    if(data->phbk->current.status.book == PHB_ADN_FDN)
        if(data->phbk->current.entry[ data->phbk->current.selectedName ].book==PHB_FDN)
            bookActivateFDN((T_MFW_HND)Menu);
        else
            bookDeleteEntry((T_MFW_HND)Menu);
    else
        bookDeleteEntry((T_MFW_HND)Menu);

    return MFW_EVENT_CONSUMED;
}

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

 $Function:     bookNameCall

 $Description:

    Call name in phone book

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookNameCall )
{   T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;

    callNumber( Phbk->current.entry[ Phbk->current.selectedName ].number );
    return MFW_EVENT_CONSUMED;
}


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

 $Function:     bookDeleteAll

 $Description:

    Delete name in phone book

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookDeleteAll )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;

// Aug 18, 2006   ER: OMAPS00089840  x0039928
    bookDeleteBook(Phbk->win);

    return MFW_EVENT_CONSUMED;
}

// Nov 10, 2006   DRT: OMAPS000103354  x0039928
// Fix: phb_delete_book() is called with proper book information  instead of bookDeleteBook().
/*******************************************************************************

 $Function:     bookDeleteRec

 $Description:

    Delete name in phone book

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookDeleteRec )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;

  if (phb_delete_book(Phbk->current.status.book)==MFW_PHB_OK)
  {
      MmiBookSetCurrentText(  TxtEntryDeleted);
      bookShowInformation( Phbk->win, MmiBookCurrentText(),NULL, NULL );
      bookPhonebookDestroy(Phbk->win);
  }
  else
  {
         MmiBookSetCurrentText(TxtFailed);
         bookShowInformation( Phbk->win, MmiBookCurrentText(),NULL, NULL );
      bookPhonebookDestroy(Phbk->win);
  }

    return MFW_EVENT_CONSUMED;
}

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

 $Function:     bookNameSearch

 $Description:

    Search for name in phone book

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookNameSearch )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;

    data->phbk->current.KindOfSearch = SEARCH_BY_NAME;
    data->phbk->current.status.book = bookActiveBook(READ);
    data->phbk->search_win = bookSearchStart( data->phbk->win );

    return MFW_EVENT_CONSUMED;
}


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

 $Function:     bookNumberSearch

 $Description:

    Search for name in phone book, order the elements by the phone book number

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookNumberSearch )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;

    data->phbk->current.KindOfSearch = SEARCH_BY_NUMBER;
    data->phbk->current.status.book = bookActiveBook(READ);
    data->phbk->search_win = bookSearchStart( data->phbk->win );

    return MFW_EVENT_CONSUMED;
}


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

 $Function:     bookLocationSearch

 $Description:

    Search for number in phone book, using SIM location to order search
    window output

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookLocationSearch )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;

    data->phbk->current.KindOfSearch = SEARCH_BY_LOCATION;
    data->phbk->current.status.book = bookActiveBook(READ);
    data->phbk->search_win = bookSearchStart( data->phbk->win );

    return MFW_EVENT_CONSUMED;
}


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

 $Function:     bookNameDeleteAll

 $Description:

    Delete all names associated with a phone book

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookNameDeleteAll )
{
	return NULL;
}


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

 $Function:     bookNameMessage

 $Description:

    Send message to the number selected

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookSendMessage )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;
    T_SmsUserData   SmsData;

    /* Copy the number and name information to the SMS buffer
    */
  /* API - 13-01-03 - 1409 - Minus the Phbk->current.missedCallsOffset to point at the correct number in the missed calls */
  memcpy( SmsData.NumberBuffer, (UBYTE *) Phbk->current.entry[ Phbk->current.selectedName - Phbk->current.missedCallsOffset ].number,
        sizeof( SmsData.NumberBuffer ) );
    /*MC SPR 1257, zero whole buffer for unicode*/
    memset(SmsData.TextBuffer, '\0', MAX_MSG_LEN_ARRAY);
   /* OMAPS00083148 - Assignement called_from_reply_item to FALSE is added*/
    SmsData.called_from_reply_item = FALSE;

    /* Create a dynamic menu window to perform the SMS sending
    */
  SmsSend_SEND_start( win, (void *) &SmsData );

  return MFW_EVENT_CONSUMED;

}


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

 $Function:     bookGetOwnNumber

 $Description:

    Get own number

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookGetOwnNumber )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;


    data->phbk->current.KindOfSearch = SEARCH_BY_NAME;
    data->phbk->current.status.book = PHB_UPN;
    data->phbk->search_win = bookSearchStart( data->phbk->win );

    return MFW_EVENT_CONSUMED;
}


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

 $Function:     bookSetOwnNumber

 $Description:

    Set own number

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookSetOwnNumber )
{  T_MFW_HND      win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;

    /* Clear the input editor structures before we go any further
    */
    /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/
    memset( Phbk->phbk->edt_buf_name,   '\0', MAX_ALPHA_LEN );
    memset( Phbk->phbk->edt_buf_number, '\0', PHB_MAX_LEN );

    /* Indicate this is an additional entry being created
    */
    Phbk->UpdateAction = CREATE_ENTRY;
    data->phbk->current.status.book = PHB_UPN;
    /* Determine if we have room to add any new entries
    */
  bookGetCurrentStatus( &Phbk->phbk->current.status );
  if ( Phbk->phbk->current.status.avail_entries )
  {
        /* We are okay to input the number, use a worker routine
           from the input handler module to actually deal with this
        */
    Phbk->input_number_win = bookInputStartNumberEditor( win, Phbk->edt_buf_number );
  }
else
  {
        /* We have no room available to add the name, so check if
           we have filled the namespace or not
        */
        tIndexTagNames Tag = ( Phbk->phbk->current.status.used_entries )
            ? TxtMyNumberFull : TxtOperationNotAvail;    //SPR 31705 x0021308:RamG.
        bookShowInformation( win, Tag, NULL, NULL );
  }

    /* Always return event consumed
    */
    return MFW_EVENT_CONSUMED;
}


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

 $Function:     bookRepRedNameEnter

 $Description:

    Enter name associated with Reply-Redial number

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookRepRedNameEnter )
{
    // Sep 22, 2004        REF: CRR 21392  xvilliva
    // We use the variable "Menu", similar to bookNameEnter() to avoid a crash.
    T_MFW_HND     win         = (T_MFW_HND)Menu;
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;
    char*     selected_number;

  selected_number = (char*)data->phbk->current.entry[data->phbk->current.selectedName].number;
    // Sep 22, 2004        REF: CRR 21392  xvilliva
    // We get the exact book that is selected.
    data->phbk->current.status.book  = bookActiveBook(WRITE);

  Phbk->UpdateAction = CREATE_ENTRY;
  bookGetCurrentStatus( &Phbk->phbk->current.status );
  if ( Phbk->phbk->current.status.avail_entries )
  {
        /* We are okay to input the number, use a worker routine
           from the input handler module to actually deal with this
        */

    bookAddName(win,selected_number);
  }
  else
  {
        /* We have no room available to add the name, so check if
           we have filled the namespace or not
        */
        tIndexTagNames Tag = ( Phbk->phbk->current.status.used_entries )
            ? TxtPhbkFull : TxtOperationNotAvail;
        bookShowInformation( win, Tag, NULL, NULL );
  }
/*   free( selected_number);   x0039928 - Lint warning removal */
  return 1;
}


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

 $Function:     bookRepRedDelete

 $Description:

    Delete name associated with Reply-Redial Number

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookRepRedDelete )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;


  deleteFromFile(Phbk,Phbk->current.status.book);
  bookShowInformation( Phbk->win, MmiBookCurrentText(),NULL, NULL );
  bookMenuDestroy(Phbk->menu_call_options_win);
// July 21, 2006    REF:DR OMAPS00085695  x0047075
    // Fix : Always sending the CALLS_LIST_INIT event whenever we delete an entry from LDN ,LRN,LMN phonebook.
//  if(Phbk->current.status.used_entries > 0)
//    SEND_EVENT(Phbk->calls_list_win, SEARCH_SCROLL_UP, 0, 0 );
  SEND_EVENT(Phbk->calls_list_win, CALLS_LIST_INIT, 0, (void*)Phbk->current.status.book );
  return 1;
}


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

 $Function:     bookCallListDetails

 $Description:

    Retrieve details for call list

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookCallListDetails )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;

    bookCallDetailsStart( Phbk->win);
    return 1;
}


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

 $Function:     bookServiceNumbers

 $Description:

    Get service numbers

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookServiceNumbers )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;

    data->phbk->current.KindOfSearch = SEARCH_BY_NAME;
    data->phbk->current.status.book = PHB_SDN;
    data->phbk->search_win = bookSearchStart( data->phbk->win );

    return MFW_EVENT_CONSUMED;
}


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

 $Function:     bookMemoryStatus

 $Description:

    Show the status of the phone book memory.

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookMemoryStatus )
{
    /* This performs the memory view functions, and returns MFW_EVENT_CONSUMED
       in all cases.
    */
    bookMemoryView();
    return MFW_EVENT_CONSUMED;
}


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

 $Function:     bookFDNActivate

 $Description:

   The FDN Activate routine is simply a wrapper for the real
   FDN Activate handler which resides in mmiPins.c

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookFDNActivate )
{
  return fdnActivate( Menu, Item );
}


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

 $Function:     bookFDNDeactivate

 $Description:

   The FDN Deactivate routine is simply a wrapper for the real
   FDN Deactivate handler which resides in mmiPins.c

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookFDNDeactivate )
{
  return fdnDeactivate( Menu, Item );
}

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

 $Function:     bookEnterLDN

 $Description:

    Enters de LDN List

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookEnterLDN )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );

    bookPhonebookStart(win,PhbkRedialListNormal);
    return MFW_EVENT_CONSUMED;
}
/*******************************************************************************

 $Function:     bookEnterLRN

 $Description:

    Enters de LRN List

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookEnterLRN )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );

    bookPhonebookStart(win,PhbkReplyListNormal);
    return MFW_EVENT_CONSUMED;
}

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

 $Function:     bookEnterLMN

 $Description:

    Enters de LMN List

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookEnterLMN )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );

  /* Issue Number : MMI-FIX-1216 on 07/04/04 by Nishikant Kulkarni and Ajith K.P
  Bug : missed call message is displayed after deleting all missed calls from the list
  Solution:  idle_data.missedcalls flag was not updated if the user ckecks/deletes the missed call list
              We rectified the same.*/

  idle_data.missedCalls = 0;

  bookPhonebookStart(win,PhbkMissedCallsListNormal);
    return MFW_EVENT_CONSUMED;
}

/* SPR#1112 - Internal phonebook menu options*/
#ifdef INT_PHONEBOOK

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

 $Function:     bookSelectBook

 $Description:  Open the select book menu, preselecting the appropriate option

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookSelectBook )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN     *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;
    T_MFW_HND       menu_win;
    UBYTE           selectedBook;

    TRACE_FUNCTION("bookSelectBook");

    if (bookGetBookAvailable())
    {
        selectedBook = (UBYTE)bookGetBookSelected();
        menu_win = bookMenuStart(Phbk->win, SelectBookAttributes(), 0);
        SEND_EVENT(menu_win, DEFAULT_OPTION, NULL, (void *)&selectedBook); // Add our own callback
    }
    else
    {
        bookShowInformation( Phbk->win, TxtNotAvailable, NULL, NULL);
    }

    return MFW_EVENT_CONSUMED;
}


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

 $Function:     bookSelectBookSIM

 $Description:  Select the SIM phone book

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookSelectBookSIM )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN     *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;

    if (bookGetBookAvailable())
    {
        bookSetBookSelected(FALSE);
        bookShowInfoScreen( Phbk->win, TxtPleaseWait, NULL, (T_VOID_FUNC)bookChangePB, (USHORT)bookGetBookSelected(), 100);
    }
    else
        bookShowInfoScreen( Phbk->win, TxtPhonebook, TxtChanged, NULL, NULL, 3000);

    return MFW_EVENT_CONSUMED;
}


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

 $Function:     bookSelectBookSIM

 $Description:  Select the SIM phone book

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookSelectBookPhone )
{
    T_MFW_HND       win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;

    if (bookGetBookAvailable())
    {
        bookSetBookSelected(TRUE);
        bookShowInfoScreen( Phbk->win, TxtPleaseWait, NULL, (T_VOID_FUNC)bookChangePB, (USHORT)bookGetBookSelected(), 100);
    }
    else
    {
        bookShowInformation( Phbk->win, TxtNotAvailable,NULL, NULL );
    }

    return MFW_EVENT_CONSUMED;
}

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

 $Function:     bookCopyEntry

 $Description:  Copy a single entry from/to internal memory

 $Returns:     Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookCopyEntry )
{
    T_MFW_HND           win         = mfwParent( mfw_header() );
    T_MFW_WIN           *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard       *data       = (tBookStandard *) win_data->user;
    T_phbk              *Phbk       = data->phbk;

    TRACE_FUNCTION( "bookCopyEntry()" );

    if (bookGetBookAvailable())
    {
        /* Show Please Wait dialog briefly, then call copy function
        */
        bookShowInfoScreen( Phbk->win, TxtPleaseWait, NULL, (T_VOID_FUNC)bookCopySingle, (USHORT)FALSE, 100);
    }
    else
    {
        bookShowInformation( Phbk->win, TxtNotAvailable, NULL, NULL);
    }

    return MFW_EVENT_CONSUMED;
}

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

 $Function:     bookCopyAll

 $Description:  Copy all entries from/to internal memory

 $Returns:     Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookCopyAll )
{
    T_MFW_HND           win         = mfwParent( mfw_header() );
    T_MFW_WIN           *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard       *data       = (tBookStandard *) win_data->user;
    T_phbk              *Phbk       = data->phbk;

    TRACE_FUNCTION( "bookCopyAll()" );

    if (bookGetBookAvailable())
    {
        /* Copy
        */
        bookCopyMultiple(Phbk->win, FALSE, 0);
    }
    else
    {
        bookShowInformation( Phbk->win, TxtNotAvailable, NULL, NULL);
    }

    return MFW_EVENT_CONSUMED;
}

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

 $Function:     bookMoveEntry

 $Description:  Move a single entry from/to internal memory

 $Returns:     Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookMoveEntry )
{
    T_MFW_HND           win         = mfwParent( mfw_header() );
    T_MFW_WIN           *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard       *data       = (tBookStandard *) win_data->user;
    T_phbk              *Phbk       = data->phbk;

    TRACE_FUNCTION( "bookMoveEntry()" );

    if (bookGetBookAvailable())
    {
        /* Show Please Wait dialog briefly, then call move function
        */
        bookShowInfoScreen( Phbk->win, TxtPleaseWait, NULL, (T_VOID_FUNC)bookCopySingle, (USHORT)TRUE, 100);
    }
    else
    {
        bookShowInformation( Phbk->win, TxtNotAvailable, NULL, NULL);
    }

    return MFW_EVENT_CONSUMED;
}

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

 $Function:     bookMoveAll

 $Description:  Move all entries from/to internal memory

 $Returns:     Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

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

PROTECTED_MENU_HANDLER( bookMoveAll )
{
    T_MFW_HND           win         = mfwParent( mfw_header() );
    T_MFW_WIN           *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard       *data       = (tBookStandard *) win_data->user;
    T_phbk              *Phbk       = data->phbk;

    TRACE_FUNCTION( "bookMoveAll()" );

    if (bookGetBookAvailable())
    {
        /* Show Please Wait dialog briefly, then call copy function
        */
        bookCopyMultiple(Phbk->win, TRUE, 0);
    }
    else
    {
        bookShowInformation( Phbk->win, TxtNotAvailable, NULL, NULL);
    }

    return MFW_EVENT_CONSUMED;
}

#endif

PIN2RQD_MENU_HANDLER( CphsAlsLock )
{
    return cphs_lock_als( Menu, Item );
}

PIN2RQD_MENU_HANDLER( CphsAlsUnlock )
{
    return cphs_unlock_als( Menu, Item );
}
/*******************************************************************************

                                End of File

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