view src/ui/bmi/mmiBookDetailsWindow.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 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:         MmiBookDetailsWindow.h
 $Revision:     1.0

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

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

 Description:

    Provides the details handlig for the phone book


********************************************************************************
 $History: MmiBookDetailsWindow.h

    25/10/00            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 "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 "mfw_ffs.h"
#include "MmiTimers.h"

#include "MmiBookShared.h"

#include "mmiColours.h"


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

                                Private Methods

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


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

 $Function:     bookDetailsDialog

 $Description:  Dialog function for the details window, doesn't currently do
                anything

 $Returns:      None

 $Arguments:    win, window handle
                event, event to be handled
                value, not used
                parameter, not used

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

static void bookDetailsDialog ( T_MFW_HND win, USHORT event, SHORT value, void *parameter )
{
    T_MFW_WIN       *win_data   = ((T_MFW_HDR *)win)->data;
    tBookStandard   *data = (tBookStandard *)win_data->user;
    T_MFW_PHB_ENTRY *entry;
    /* SPR#1428 - SH - New Editor changes
     * Insert the ascii or unicode name into the buffer */
#ifdef NEW_EDITOR
    T_ATB_TEXT      nameText;
    T_ATB_TEXT      numberText;

    TRACE_FUNCTION("bookDetailsDialog");

    entry = &data->phbk->current.entry[ data->phbk->current.selectedName ];
    /*SPR 2175, no need to do any GSM->ASCII conversions, removed conversion code*/


    numberText.dcs = ATB_DCS_ASCII;
    numberText.data = entry->number;
    ATB_string_Length(&numberText);

    if ( entry->name.data[0] ==0x80)
    {

        /* UNICODE */
        TRACE_EVENT("***UNICODE OUTPUT***");
        nameText.dcs = ATB_DCS_UNICODE;
        nameText.data = &entry->name.data[2];
    }
    else
    {
        nameText.dcs = ATB_DCS_ASCII;
        nameText.data = entry->name.data;
    }

    ATB_string_Length(&nameText);

    ATB_edit_ResetMode(data->editor, ED_MODE_READONLY);     /* Switch off read only to add text */
    ATB_edit_InsertString(data->editor, &nameText);         /* Insert name string */
    ATB_edit_Char(data->editor, ctrlEnter, FALSE);          /* Insert carriage return */
    ATB_edit_InsertString(data->editor, &numberText);       /* Insert number string */
    ATB_edit_SetMode(data->editor, ED_MODE_READONLY);       /* Switch on read only again */

    /* Text has changed, so refresh word wrap */
    ATB_edit_Refresh(data->editor);

    win_show(data->win);

#endif /* NEW_EDITOR */

}


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

 $Function:     bookDetailsWindowCB

 $Description:  Window event handler

 $Returns:      MFW_EVENT_CONSUMED for the window visible event,
                MFW_EVENT_PASSED otherwise

 $Arguments:    e, event, w, window handle

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

static int bookDetailsWindowCB ( MfwEvt e, MfwWin *w )
{
    tBookStandard   *data = (tBookStandard *)w->user;

/* x0045876, 14-Aug-2006 (WR - "ptr" was declared but never referenced) */
#ifndef NEW_EDITOR
    T_MFW_PHB_ENTRY *ptr; // dat;
#endif

//  char debug[50];   // RAVI

    TRACE_FUNCTION("bookDetailsWindowCB");
    switch( e )
    {
        case MfwWinVisible:
        {
            /* handle the visible event, start by shoing the default information
            */
            MmiBookShowDefault();

            /* SPR#1428 - SH - New Editor: display editor here rather than filling up the information.  Do that in
             * dialog function above. */

#ifdef NEW_EDITOR
            ATB_edit_Show(data->editor);
            resources_setTitleColour(COLOUR_EDITOR);

            /* TITLE */

            dspl_Clear(0,0, SCREEN_SIZE_X-1, data->editor->attr->win_size.py-1);
            PROMPT(0,0,0,TxtDetails);
#else /* NEW_EDITOR */
            /* Build and show the editor
            */
            ptr = &data->phbk->current.entry[ data->phbk->current.selectedName ];
#ifdef NO_ASCIIZ

#ifdef EASY_TEXT_ENABLED
                /*MC SPR 1242, changed macros to function calls e.g FIRST_LINE_CHINESE->Mmi_layout_first_line()*/
                if ( ptr->name.data[0] ==0x80)//if unicode
                {
                    TRACE_EVENT("***UNICODE OUTPUT***");
                    dspl_TextOut(0,0,DSPL_TXTATTR_UNICODE,(char *)&ptr->name.data[2]);
                    if ((ptr->name.data[MAX_LINE+2] != 0) && ptr->name.data[MAX_LINE+3] != 0)
                        dspl_TextOut(0,Mmi_layout_line(1),DSPL_TXTATTR_UNICODE,(char *)&(ptr->name.data[MAX_LINE+2]));
                    dspl_TextOut(0,Mmi_layout_line(2),0,(char *)ptr->number);
                    if (strlen((char*)ptr->number) > MAX_LINE)
                        dspl_TextOut(0,Mmi_layout_line(1)+numberLineHeight(),0, (char*)&ptr->number[MAX_LINE]);
                }
                else
#endif /* EASY_TEXT_ENABLED */
                {
                    // convert from GSM to Alpha characters
                    bookGsm2Alpha( (UBYTE *) ptr->name.data );

                    sprintf( data->edtBuf,"%s%s%s", (char *) ptr->name.data, "\n", (char *) ptr->number);
                    edtShow(data->edt);
                }
#else /* NO_ASCIIZ */
                {
                    sprintf( data->edtBuf,"%s%s%s", (char *) ptr->name, "\n", (char *) ptr->number);
                    edtShow(data->edt);
                }
#endif /* NO_ASCIIZ */
#endif /* NEW_EDITOR */
            /* pop up the soft keys
            */
            displaySoftKeys( TxtSoftCall, /* TxtSoftOptions */ TxtSoftBack );
        }
        break;

        default:
        {
            /* default handler just indicate event not handled
            */
            return MFW_EVENT_PASSED;
        }
    }

    return MFW_EVENT_CONSUMED;
}


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

 $Function:     bookDetailsKbdCB

 $Description:  Keyboard handler

 $Returns:      MFW_EVENT_CONSUMED always

 $Arguments:    e, event, k, key handle

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

static int bookDetailsKbdCB ( MfwEvt e, MfwKbd *k )
{
    T_MFW_HND       win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ((T_MFW_HDR *) win)->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    tMmiPhbData     *Current    = &data->phbk->current;

    TRACE_FUNCTION("bookDetailsKbdCB()");

    /* Handle the key events
    */
    switch (k->code)
    {
        case KCD_MNUUP:
        break;

        case KCD_MNUDOWN:
        break;

        case KCD_MNUSELECT:
        case KCD_CALL:
        case KCD_LEFT:
        {
            /* select to make the call
            */
            callNumber( Current->entry[ Current->selectedName ].number );
            bookPhonebookDestroy( data->phbk->win );
        }
        break;

        case KCD_RIGHT:
        {
            /* start up the options menu
            */
            //Cancel this screen
            bookDetailsDestroy( data->win );
        }
        break;

        case KCD_HUP:
        {
            /* Cancel this menu
            */
            bookDetailsDestroy( data->win );
        }
        break;

        default:
        {
            /* default handling is to get us out of here
            */
            memset( data->edtBuf, '\0', sizeof( data->edtBuf ) );
            sprintf( data->edtBuf, "%s%c", (char *) Current->entry[ Current->selectedName ].number, editControls[ k->code ] );
            idleDialBuffer( data->edtBuf );
            bookPhonebookDestroy( data->phbk->win );
        }
        break;
    }

    return MFW_EVENT_CONSUMED;
}


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

 $Function:     bookDetailsKbdLongCB

 $Description:  Keyboard Long Press event handler

 $Returns:      MFW_EVENT_CONSUMED always

 $Arguments:    e, event, k, keyboard handle

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

static int bookDetailsKbdLongCB( MfwEvt e, MfwKbd *k )
{
    T_MFW_HND       win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ((T_MFW_HDR *)win)->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;

    /* hand a long clear event only
    */
    if ( ( e & KEY_CLEAR ) && ( e & KEY_LONG ) )
        bookDetailsDestroy( data->win );

    return MFW_EVENT_CONSUMED;
}


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

 $Function:     bookDetailsCreate

 $Description:  create an instance of the details window

 $Returns:      handle of newly created window, or NULL if we fail to create

 $Arguments:    parent, handle of parent window

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

static T_MFW_HND bookDetailsCreate(MfwHnd parent)
{
    T_MFW_WIN       *parent_win_data = ( (T_MFW_HDR *) parent )->data;
    T_phbk          *phbk = (T_phbk *)parent_win_data->user;
    T_MFW_WIN       *win_data;
    tBookStandard   *data;

    TRACE_FUNCTION ("bookDetailsCreate()");

    /* allocate memory for our control block
    */
    if ( ( data = (tBookStandard *) ALLOC_MEMORY( sizeof( tBookStandard ) ) ) == NULL )
        return NULL;

    /* Create the window if we can
    */
    if ( ( data->win = win_create( parent, 0, E_WIN_VISIBLE, (T_MFW_CB) bookDetailsWindowCB ) ) == NULL )
    {
        FREE_MEMORY( (void *)data, sizeof( tBookStandard ) );
        return NULL;
    }

    /* Okay, we have created the control block and the window, so
       we now need to configure the dialog and data pointers
    */
    data->mmi_control.dialog    = (T_DIALOG_FUNC) bookDetailsDialog;
    data->mmi_control.data      = data;
    win_data                    = ((T_MFW_HDR *)data->win)->data;
    win_data->user              = (void *) data;
    data->phbk                  = phbk;
    data->parent_win            = parent;

    /* create keyboards and menus for our window
    */
    data->kbd       = kbdCreate( data->win, KEY_ALL,            (MfwCb) bookDetailsKbdCB );
    data->kbd_long  = kbdCreate( data->win, KEY_ALL | KEY_LONG, (MfwCb) bookDetailsKbdLongCB );

    /* 1945 MZ Initialise the edtBuf   */
    memset(data->edtBuf,'\0', STANDARD_EDITOR_SIZE );

/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
    AUI_edit_SetAttr( &data->editor_attr, BOOKDETAILS_EDITOR, COLOUR_EDITOR_XX, EDITOR_FONT, ED_MODE_READONLY, ED_CURSOR_NONE, ATB_DCS_UNICODE/*SPR1752*/, (UBYTE *)data->edtBuf, STANDARD_EDITOR_SIZE);
    data->editor = ATB_edit_Create( &data->editor_attr, 0 );
    SEND_EVENT(data->win, 0, 0, 0);
    ATB_edit_Init(data->editor);
#else /*NEW_EDITOR*/
    // API - 08-01-03 - 1540 - change edtCurBar1 to edtCurNone
    bookSetEditAttributes( BOOKDETAILS_EDITOR, COLOUR_EDITOR_XX, 0, edtCurNone, 0, data->edtBuf, STANDARD_EDITOR_SIZE, &data->attr );
    data->edt = edtCreate( data->win, &data->attr, 0, 0 );
    edtUnhide( data->edt );
#endif /*NEW_EDITOR*/

    /* allow the window and menu to be created
    */
    mnuUnhide(data->menu);
    winShow(data->win);

    /* And return the handle of the newly created window
    */
    return data->win;
}


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

                                Public Methods

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


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

 $Function:     bookDetailsStart

 $Description:  Start routine for the phonebook details window

 $Returns:      None, assigns the window handle to the name_details_win
                hook in the current phone book

 $Arguments:    m, menu, i, menu item

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

void bookDetailsStart( MfwMnu* m, MfwMnuItem* i )
{
    T_MFW_HND       win         = mfwParent(mfw_header());
    T_MFW_WIN       *win_data   = ((T_MFW_HDR *)win)->data;
    tBookStandard   *data       = (tBookStandard *)win_data->user;

    TRACE_FUNCTION ("bookDetailsStart()");

    data->phbk->name_details_win = bookDetailsCreate( data->phbk->win );
}


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

 $Function:     bookDetailsDestroy

 $Description:  Destroy the phone book details window

 $Returns:      None

 $Arguments:    window, handle of window to close

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

void bookDetailsDestroy( MfwHnd window )
{
    T_MFW_WIN     *win  = ((T_MFW_HDR *)window)->data;
    tBookStandard *data = (tBookStandard *)win->user;

    TRACE_FUNCTION ("bookDetailsdestroy()");

    /* Only need to do this if the data is valid
    */
    if ( data )
    {
    /* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
        /* New editor no longer destroyed with winDelete,
         * so destroy it here */
        if (data->editor)
        {
            ATB_edit_Destroy(data->editor);
        }
#endif /* NEW_EDITOR */
        data->phbk->name_details_win = 0;
        winDelete( data->win );
        FREE_MEMORY( (void *)data, sizeof( tBookStandard ) );
    }
}


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

                                End of File

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