FreeCalypso > hg > fc-magnetite
view src/aci2/bmi/mmiBookInputWindow.c @ 636:57e67ca2e1cb
pcmdata.c: default +CGMI to "FreeCalypso" and +CGMM to model
The present change has no effect whatsoever on Falconia-made and Openmoko-made
devices on which /pcm/CGMI and /pcm/CGMM files have been programmed in FFS
with sensible ID strings by the respective factories, but what should AT+CGMI
and AT+CGMM queries return when the device is a Huawei GTM900 or Tango modem
that has been converted to FreeCalypso with a firmware change? Before the
present change they would return compiled-in defaults of "<manufacturer>" and
"<model>", respectively; with the present change the firmware will self-identify
as "FreeCalypso GTM900-FC" or "FreeCalypso Tango" on the two respective targets.
This firmware identification will become important if someone incorporates an
FC-converted GTM900 or Tango modem into a ZeroPhone-style smartphone where some
high-level software like ofono will be talking to the modem and will need to
properly identify this modem as FreeCalypso, as opposed to some other AT command
modem flavor with different quirks.
In technical terms, the compiled-in default for the AT+CGMI query (which will
always be overridden by the /pcm/CGMI file in FFS if one is present) is now
"FreeCalypso" in all configs on all targets; the compiled-in default for the
AT+CGMM query (likewise always overridden by /pcm/CGMM if present) is
"GTM900-FC" if CONFIG_TARGET_GTM900 or "Tango" if CONFIG_TARGET_TANGO or the
original default of "<model>" otherwise.
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Sun, 19 Jan 2020 20:14:58 +0000 |
| parents | 3c2acfa1a72f |
| 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: MmiBookInputWindow.h $Revision: 1.0 $Author: Condat(UK) $Date: 25/10/00 ******************************************************************************** Description: This module provides the functionality for the input window of the phone book module. ******************************************************************************** $History: MmiBookInputWindow.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" #ifdef EASY_TEXT_ENABLED #include "MmiChineseInput.h" #endif #include "mmiColours.h" /* SPR#1428 - SH - New Editor * This file is obsolete with new editor and should not be compiled */ #ifndef NEW_EDITOR #define NAME 0 #define NUMBER 1 static int DoNextLongPress = FALSE; static UBYTE UPPER_CASE = TRUE; static UBYTE MODE; extern int upCase; /******************************************************************************* Private Methods *******************************************************************************/ /******************************************************************************* $Function: bookInputDialog $Description: Dialog function for the input window $Returns: None $Arguments: win, window handle event, event to be handled value, not used parameter, not used *******************************************************************************/ static void bookInputDialog( 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; tInputSpecifics *properties = (tInputSpecifics *) parameter; TRACE_FUNCTION ("bookInputDialog()"); /* Handle the input event, ew only deal with initialise and destroy of the window in here */ switch( event ) { case INPUT_INIT: { /* Initialise the input window */ data->properties.abc = properties->abc; data->properties.text = properties->text; data->properties.edt_attr_input = properties->edt_attr_input; data->properties.left_soft_key = properties->left_soft_key; data->properties.right_soft_key = properties->right_soft_key; data->properties.callback = properties->callback; data->edt = edtCreate( data->win, data->properties.edt_attr_input, 0, 0 ); /* activate our editor, stopping any others before doing so */ editDeactivate(); editActivate( data->edt, properties->abc ); edtChar( data->edt, ecBottom ); /* show the window */ winShow( data->win ); } break; case INPUT_DESTROY: { /* destroy the input window */ bookInputDestroy( win ); } break; } } /******************************************************************************* $Function: bookInputWindowCB $Description: Window event handler $Returns: MFW_CONSUMED for the visible event, MFW_PASSED otherwise $Arguments: e, event, w, window handle *******************************************************************************/ static int bookInputWindowCB( MfwEvt e, MfwWin *w ) { tBookStandard *data = (tBookStandard *) w->user; TRACE_FUNCTION ("bookInputWindowCB()"); /* Handle the visible event, otherwise return MFW_EVENT_PASSED */ switch( e ) { case MfwWinVisible: { /* Window visible */ MmiBookShowDefault(); edtShow( data->edt ); PROMPT( MmiBookMenuArea().px, MmiBookMenuArea().py, 0, data->properties.text ); softKeys_displayId(data->properties.left_soft_key, data->properties.right_soft_key, 0, COLOUR_LIST_SUBMENU); } break; default: { /* unabel to handle event, pass handling of event back up tree */ return MFW_EVENT_PASSED; } } /* if we get here, we have handled the event */ return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: bookInputKbdCB $Description: Input window keyboard handler $Returns: MFW_EVENT_CONSUMED always, this will pass LEFT, RIGHT and CLEAR events back to the calling window using the installed callback method $Arguments: e, event, k, key handle *******************************************************************************/ static int bookInputKbdCB( 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; TRACE_FUNCTION ("bookInputKbdCB()"); /* make sure the active editor is ours */ if ( activeEditor() != data->edt ) editActivate( data->edt, data->properties.abc ); /* Handle the key press */ switch (k->code) { case KCD_MNUUP: { /* move right */ edtChar( data->edt, ecRight ); } break; case KCD_MNUDOWN: { /* move left */ edtChar( data->edt, ecLeft ); } break; case KCD_MNUSELECT: case KCD_LEFT: { /* select the entry using the parent window callback */ data->properties.callback( data->parent_win, INPUT_LEFT ); } break; case KCD_HUP: { /* get edit control block */ MfwEdt *edt = ( (MfwHdr *) data->edt )->data; data->properties.callback( data->parent_win, INPUT_CLEAR ); } break; case KCD_RIGHT: { MfwEdt *edt = ( (MfwHdr *) data->edt )->data; /* select the entry using the parent windows callback */ //If we have any data input, delete the char before cursor if ( edt->attr->text[0] ) edtChar( data->edt, ecBack ); else { data->properties.callback( data->parent_win, INPUT_RIGHT ); displaySoftKeys_edition (TxtNull, TxtNull ,TxtNull); MODE = NUMBER; } } break; case KCD_HASH: { /* deal with hash key */ edtChar( data->edt, '#' ); } break; case KCD_STAR: { /* deal with star key */ edtChar( data->edt, '*' ); } break; default: { /* default handling for the key being pressed */ /*NM, p015a */ /* it is better to use these two function for different mode*/ if (data->properties.abc EQ TRUE) editEventKey(e, k); /* alpha-mode*/ else edtChar(data->edt ,editControls[k->code]); /*digit -mode*/ edtShow(data->edt); /*p015a end */ } break; } /* always consume the event */ return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: bookInputKbdLongCB $Description: Keyboard long event handler $Returns: MFW_EVENT_CONSUMED always $Arguments: e, event, k, key handle *******************************************************************************/ static int bookInputKbdLongCB( 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; TRACE_FUNCTION ("bookInputKbdLongCB()"); /* subpress unwanted longpresses (mfw throws more than one long press event for one long press on a key)*/ if ( e & KEY_LONG ) { if ( DoNextLongPress EQ FALSE ) DoNextLongPress = TRUE; else DoNextLongPress = FALSE; } if ( !DoNextLongPress ) return MFW_EVENT_CONSUMED; /* don't do current long press */ /* Handling the long keypress events needs to deal with a number of characters in the input window, not just the normal clear event */ /* if the event is long key clear and the buffer is not empty then clear the buffer. Otherwise if the buffer is empty then destroy the input editor */ switch(k->code) { case KCD_HUP: { MfwEdt *edt; /* get edit control block */ edt = ((MfwHdr *) data->edt)->data; /* if buffer empty then kill the editor window, otherwise clear the buffer */ if ( edt->attr->text[0] ) { char *c_ptr = data->properties.edt_attr_input->text; memset( c_ptr, '\0', strlen( c_ptr ) ); edtReset( data->edt ); edtShow( data->edt ); } else bookInputDestroy( data->win ); } break; case KCD_HASH: edtChar( data->edt, ecBack ); edtChar( data->edt, 'p' ); break; case KCD_0: edtChar( data->edt, ecBack ); edtChar( data->edt, '+' ); break; default: if (MODE EQ NAME) { if (UPPER_CASE EQ FALSE) { TRACE_EVENT("UPPER_CASE EQ FALSE"); UPPER_CASE = TRUE; upCase = FALSE; displaySoftKeys_edition (TxtLowercase, TxtNull ,TxtNull); } else { TRACE_EVENT("UPPER_CASE EQ TRUE"); UPPER_CASE = FALSE; upCase = TRUE; displaySoftKeys_edition (TxtUppercase, TxtNull ,TxtNull); } edtChar(data->edt, ecBack); } break; } /* always handle the event */ return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: bookInputCreate $Description: Create the input window and asociate it's handlers $Returns: handle of new window, or NULL if failure $Arguments: parent, handle of the parent window *******************************************************************************/ static T_MFW_HND bookInputCreate( MfwHnd parent ) { T_MFW_WIN *parent_win_data = ( (T_MFW_HDR *) parent )->data; tBookStandard *parent_data = (tBookStandard *) parent_win_data->user; T_phbk *phbk = parent_data->phbk; T_MFW_WIN *win_data; tBookStandard *data; TRACE_FUNCTION ("bookInputCreate()"); /* 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) bookInputWindowCB ) ) == 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) bookInputDialog; 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) bookInputKbdCB ); data->kbd_long = kbdCreate( data->win, KEY_ALL | KEY_LONG, (MfwCb) bookInputKbdLongCB ); /* And return the handle of the newly created window */ return data->win; } /******************************************************************************* Public Methods *******************************************************************************/ /******************************************************************************* $Function: bookInputStart $Description: Start the input handler $Returns: Handle of newly created window, or NULL if failure $Arguments: parent, parent window handle, properties, input window property control block. *******************************************************************************/ MfwHnd bookInputStart( MfwHnd parent,tInputSpecifics *properties ) { T_MFW_HND win; TRACE_FUNCTION ("bookInputStart()"); /* allocate window, and if successful initialise it */ if ( ( win = bookInputCreate( parent ) ) != NULL ) SEND_EVENT( win, INPUT_INIT, 0, properties ); return win; } /******************************************************************************* $Function: bookInputStartNumberEditor $Description: Start the input handler using default properties $Returns: Handle of newly created window, or NULL if failure $Arguments: parent, parent window handle, buffer, input buffer *******************************************************************************/ MfwHnd bookInputStartNumberEditor( MfwHnd parent, void *buffer ) { T_MFW_HND win = parent; T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; tBookStandard *data = (tBookStandard *) win_data->user; T_phbk *Phbk = data->phbk; tInputSpecifics DefaultParameters; TRACE_FUNCTION ("bookInputStartNumberEditor()"); MODE = NUMBER; /* Set up the default parameters for the input window */ bookSetEditAttributes( NUMBER_EDITOR, COLOUR_EDITOR_XX, 0, edtCurBar1, 0, (char *) buffer, NUMBER_LENGTH, &Phbk->edt_attr_number ); DefaultParameters.abc = FALSE; DefaultParameters.text = TxtEnterNumber; DefaultParameters.edt_attr_input = &Phbk->edt_attr_number; DefaultParameters.left_soft_key = TxtSoftOK; DefaultParameters.right_soft_key = TxtDelete;//Changed text // dunno if that changes softkey functionality DefaultParameters.callback = bookAddNumberCB; /* allocate window, and if successful initialise it */ return bookInputStart( parent, &DefaultParameters ); } /******************************************************************************* $Function: bookInputStartNameEditor $Description: Start the input handler using default properties $Returns: Handle of newly created window, or NULL if failure $Arguments: parent, parent window handle, buffer, input buffer *******************************************************************************/ MfwHnd bookInputStartNameEditor( MfwHnd parent, void *buffer ) { T_MFW_WIN *win_data = ( (T_MFW_HDR *) parent )->data; tBookStandard *data = (tBookStandard *) win_data->user; T_phbk *Phbk = data->phbk; tInputSpecifics DefaultParameters; MODE = NAME; TRACE_FUNCTION ("bookInputStartNameEditor()"); /* Set up the default parameters for the input window */ /*MC 1957, name strings should use MAX_ALPHA_LEN*/ bookSetEditAttributes( NUMBER_EDITOR, COLOUR_EDITOR_XX, 0, edtCurBar1, 0, (char *) buffer, MAX_ALPHA_LEN, &Phbk->edt_attr_name ); /*SPR 1434*/ /*SPR 1526, changed #ifdef to #if*/ #if defined(CHINESE_MMI) && defined(EASY_TEXT_ENABLED) /*MC, the chinese editor MUST have a unicode string as input*/ /*MC , SPR 1242 merged in from b-sample build*/ if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) { T_CHINESE_DATA chinese_data; chinese_data.TextString = (char*) Phbk->edt_buf_name; if (chinese_data.TextString[0]== 0)//if, empty string { chinese_data.TextString[0] = 0x80;//give string Unicode tag chinese_data.TextString[1] = 0x7F; } else { char l_name[MAX_ALPHA_LEN]; int ascii_len = strlen(chinese_data.TextString); int i; if (chinese_data.TextString[0]!= 0x80)/*If ASCII string*/ { memset(l_name, '\0', MAX_ALPHA_LEN); l_name[0] = 0x80;//give Unicode tag l_name[1] = 0x7F; /*convert ascii string to unicode*/ { for (i =0; i < (ascii_len); i++) { if ((2+2*i+1)>=MAX_ALPHA_LEN) break; l_name[2+2*i] = 0x00; l_name[2+2*i+1] = chinese_data.TextString[i]; } if ((2+2*i+1)<=MAX_ALPHA_LEN) { l_name[2+2*i] = 0x00; //double null termination l_name[2+2*i+1] = 0x00; } } memcpy(chinese_data.TextString, l_name, MAX_ALPHA_LEN); } } /*MC end*/ chinese_data.Callback = (T_EDIT_CB)bookAddNameCB; chinese_data.Identifier = INPUT_LEFT ; chinese_data.LeftSoftKey = TxtSave; chinese_data.DestroyEditor = TRUE; chinese_data.EditorSize = (USHORT)((MAX_ALPHA_LEN-4)/2);//i.e.8 return chinese_input(parent, &chinese_data); } else #endif { DefaultParameters.abc = TRUE; DefaultParameters.text = TxtEnterName; DefaultParameters.edt_attr_input = &Phbk->edt_attr_name; DefaultParameters.left_soft_key = TxtSoftOK; DefaultParameters.right_soft_key = TxtDelete;//Changed text - MC DefaultParameters.callback = bookAddNameCB; /* allocate window, and if successful initialise it */ return bookInputStart( parent, &DefaultParameters ); } } /******************************************************************************* $Function: bookInputDestroy $Description: Destroy Input Window $Returns: None $Arguments: Handle of window to be destroyed *******************************************************************************/ void bookInputDestroy( MfwHnd window ) { T_MFW_WIN *win = ((T_MFW_HDR *) window)->data; tBookStandard *data = (tBookStandard *) win->user; TRACE_FUNCTION ("bookInputDestroy()"); if (data) { editDeactivate(); winDelete ( data->win ); FREE_MEMORY( (void *) data, sizeof( tBookStandard ) ); } } #endif /* NEW_EDITOR */ /******************************************************************************* End of File *******************************************************************************/
