FreeCalypso > hg > tcs211-l1-reconst
diff g23m/condat/ms/src/bmi/MmiBand.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/g23m/condat/ms/src/bmi/MmiBand.c Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,765 @@ +/******************************************************************************* + + 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 + $Module: Frequency band selection + $File: MmiBand.c + $Revision: 1.0 + + $Author: Condat(UK) + $Date: 03/04/02 + +******************************************************************************** + + Description: + + This provides the functionality for menu options to select and display the current + band used. + +******************************************************************************** + $History: MmiBand.c + + 03/04/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 "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" +#include "mmiColours.h" + +/***********************************Macros**********************************************/ + +#define MAX_NUMBER_OF_FREQS 5 +#define NO_OF_BAND_MODES 2 +#define BAND_INIT 1 +#define BAND_DESTROY 2 + + + +/*********************Structure Definitions********************************************************/ +typedef struct +{ + T_MMI_CONTROL mmi_control; + T_MFW_HND freq_win; /* MFW win handler */ + T_MFW_HND parent; + UBYTE available_freqs; + UBYTE selected_freqs; /* SPR#998 - SH - Used to store list of selected frequencies */ + T_MFW_BAND_MODE mode; /* SPR#998 - SH */ + UBYTE type[MAX_NUMBER_OF_FREQS]; + ListMenuData * menu_list_data; + UBYTE no_of_entries; +} T_FREQ_INFO; + + +static const MfwMnuAttr Freq_menuAttrib = +{ + &melody_menuArea, + MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */ + -1, /* use default font */ + NULL, /* with these items */ + 0, /* number of items */ + COLOUR_LIST_SMS, + TxtNull, + MNUATTRSPARE}; + +/* List of all possible frequencies */ + +static const int band_list[MAX_NUMBER_OF_FREQS] = { + MFW_BAND_GSM_900, + MFW_BAND_DCS_1800, + MFW_BAND_PCS_1900, + MFW_BAND_E_GSM, + MFW_BAND_GSM_850 +}; + +/* SPR#998 - SH - Static handle to allow callback functions to access data */ +static T_FREQ_INFO *current_data = NULL; + +/*********************************Function Prototypes*****************************/ + +char* Freq2Str(int freq); + +int Freq2StrID(int freq); +static T_MFW_HND mmi_band_build_freq_list( MfwHnd parent_window, UBYTE available_freqs); +static int mmi_band_display_status(T_MFW_HND parent); +static int mmi_band_display_status_cb(T_MFW_HND parent, USHORT identifier, USHORT reason); +void mmi_band_freq_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); +void mmi_band_freq_list_cb(T_MFW_HND * Parent, ListMenuData * ListData); +static void mmi_band_freq_list_destroy(MfwHnd own_window); +static int mmi_band_freq_win_cb (MfwEvt e, MfwWin *w); +/* SPR#998 - SH - Functions used by new checkbox menus */ +int mmi_band_menu_func(MfwMnu* menu, MfwMnuItem* item); +USHORT mmi_band_menu_flag( struct MfwMnuTag *menu, struct MfwMnuAttrTag *attr, struct MfwMnuItemTag *item ); + + +/************************************Public Functions************************/ + + +/************************************************************************* + + $Function: mmi_band_radio_mode_change_auto + + $Description: Changes multiband mode to automatic. Selected from menu. + + $Returns: status int + + $Arguments: menu and menu item (not used) + + +*******************************************************************************/ + +int mmi_band_radio_mode_change_auto(MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND parent = mfwParent( mfw_header()); +// T_MFW_BAND_MODE mode; // RAVI + + TRACE_FUNCTION("mmi_band_radio_mode_change_auto"); + + if (band_radio_mode_switch(MFW_BAND_MODE_Auto, 0) >= MFW_BAND_OK) + { + ShowMessage(parent, TxtDone, TxtNull); + } + else + ShowMessage(parent, TxtFailed, TxtNull); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: mmi_band_radio_mode_change_manual + + $Description: Gets a list of available manual bands. Selected from menu. + + $Returns: status int + + $Arguments: menu and menu item (not used) + + +*******************************************************************************/ + +int mmi_band_radio_mode_change_manual(MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND parent = mfwParent( mfw_header()); + T_MFW_BAND_MODE maxMode; + UBYTE available_freqs; + T_MFW_HND win; + + if (band_get_radio_modes(&maxMode, &available_freqs) >= MFW_BAND_OK) + { + if (maxMode >= MFW_BAND_MODE_Manual) /* Make sure manual is an accepted mode */ + { + win = mmi_band_build_freq_list(parent, available_freqs); + if (win NEQ NULL) + { + SEND_EVENT (win, BAND_INIT, 0, 0); + } + else + ShowMessage(parent, TxtManual, TxtNotSupported); + } + } + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: mmi_band_radio_mode_info + + $Description: Get current band setting + + $Returns: status int + + $Arguments: menu and menu item (not used) + + +*******************************************************************************/ + +int mmi_band_radio_mode_info(MfwMnu* m, MfwMnuItem* i) +{ T_MFW_HND parent = mfwParent( mfw_header()); + + mmi_band_display_status(parent); + + return MFW_EVENT_CONSUMED; +} + + +/*******************************Private Functions**********************************/ + + + +/******************************************************************************* + + $Function: Freq2Str + + $Description: Converts the band enum into an appropraite string + + $Returns: string + + $Arguments: Band (integer) + + +*******************************************************************************/ + +char* Freq2Str(int freq) +{ + switch (freq) + { + case MFW_BAND_DCS_1800: return MmiRsrcGetText(TxtDCS_1800); //break; // RAVI + case MFW_BAND_PCS_1900: return MmiRsrcGetText(TxtPCS_1900); //break; // RAVI + case MFW_BAND_E_GSM: return MmiRsrcGetText(TxtE_GSM); //break; // RAVI + case MFW_BAND_GSM_850: return MmiRsrcGetText(TxtGSM_850); // break; // RAVI + case MFW_BAND_GSM_900: return MmiRsrcGetText(TxtGSM_900); // break; // RAVI + default: return MmiRsrcGetText(TxtError); // break; // RAVI + } +} + + +/******************************************************************************* + + $Function: Freq2Str + + $Description: Converts the band enum into an appropraite string ID + + $Returns: string ID + + $Arguments: Band (integer) + + +*******************************************************************************/ + +int Freq2StrID(int freq) +{ + switch (freq) + { + case MFW_BAND_DCS_1800: return TxtDCS_1800; //break; // RAVI + case MFW_BAND_PCS_1900: return TxtPCS_1900; //break; // RAVI + case MFW_BAND_E_GSM: return TxtE_GSM; //break; // RAVI + case MFW_BAND_GSM_850: return TxtGSM_850; // break; // RAVI + case MFW_BAND_GSM_900: return TxtGSM_900; //break; // RAVI + default: return TxtError; //break; // RAVI + } +} + + +/******************************************************************************* + + $Function: mmi_band_display_status + $Description: Displays the current band status + $Returns: none + $Arguments: parent - parent window + +*******************************************************************************/ + +static int mmi_band_display_status(T_MFW_HND parent) +{ + /* SPR#998 - SH - Now store mode in data->mode */ + T_MFW_WIN *win_data = ((T_MFW_HDR *) parent)->data; + T_FREQ_INFO *data = (T_FREQ_INFO *)win_data->user; + + if (band_get_current_radio_mode(&data->mode, &data->selected_freqs) >= MFW_BAND_OK) + { + if (data->mode == MFW_BAND_MODE_Auto) + { + ShowMessage(parent, TxtAutomatic, TxtNull); + } + else + { + ShowMessage(parent, TxtManual, TxtNull); + } + } + else + { + ShowMessage(parent, TxtReadError, TxtNull); + } + + return 1; // RAVI - Changed return to return 1. +} + + +/******************************************************************************* + + $Function: mmi_band_display_status_cb + $Description: Callback for status list window - currently does nothing + $Returns: none + $Arguments: parent - parent window + identifier - length of status string + reason - not used + +*******************************************************************************/ + +static int mmi_band_display_status_cb(T_MFW_HND parent, USHORT identifier, USHORT reason) +{ + return 1; // RAVI - Changed return to return 1. +} + + +/******************************************************************************* + + $Function: mmi_band_build_freq_list + $Description: Creates window for frequency list + $Returns: window created + $Arguments: parent window + +*******************************************************************************/ + +static T_MFW_HND mmi_band_build_freq_list( MfwHnd parent_window, UBYTE available_freqs) +{ + T_FREQ_INFO *data = (T_FREQ_INFO *)ALLOC_MEMORY (sizeof (T_FREQ_INFO)); + T_MFW_WIN *win; +// int index; // RAVI + + TRACE_FUNCTION("mmi_band_build_freq_list()"); + /* + * Create window handler + */ + + data->freq_win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)mmi_band_freq_win_cb); + if (data->freq_win EQ NULL) + { + return NULL; + } + + current_data = data; /* SPR#998 - SH - Store handle for data; used by callbacks */ + + /* + * connect the dialog data to the MFW-window + */ + + data->mmi_control.dialog = (T_DIALOG_FUNC)mmi_band_freq_exec_cb; + data->mmi_control.data = data; + win = ((T_MFW_HDR *)data->freq_win)->data; + win->user = (void *)data; + data->parent = parent_window; + data->available_freqs = available_freqs; + + winShow(data->freq_win); + /* + * return window handle + */ + + return data->freq_win; +} + + +/******************************************************************************* + + $Function: mmi_band_freq_exec_cb + + $Description: Exec callback function of the information Numbers window + + $Returns: none + + $Arguments: win - window handler + event - mfw event + parameter - optional data. + +*******************************************************************************/ + +void mmi_band_freq_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) +{ + T_MFW_WIN *win_data = ((T_MFW_HDR *) win)->data; + T_FREQ_INFO *data = (T_FREQ_INFO *)win_data->user; + UBYTE numberOfEntries; + int index; + T_MFW_BAND_MODE maxMode; +// char *menuItem; // RAVI + /* SPR#998 - SH - Remove code that implements custom checkbox implementaton, + * as checkboxes now handled by mfw */ + + TRACE_FUNCTION ("mmi_band_freq_exec_cb()"); + + switch (event) + { + case BAND_INIT: + + TRACE_EVENT("mmi_band_freq_exec_cb() Event:BAND_INIT"); + + /* initialization of administrative data */ + + data->menu_list_data = (ListMenuData *)ALLOC_MEMORY(sizeof(ListMenuData)); + + if(!data->menu_list_data) + { + TRACE_EVENT("Failed memory alloc 1 "); + return; + } + + band_get_radio_modes(&maxMode, &data->available_freqs); + + /* Run through the list of possible frequencies first to obtain + the number of frequencies permitted (how many will be in the menu) */ + /* SPR#998 - SH - Removed custom checkbox implementation */ + + numberOfEntries = 0; + + for (index=0; index<MAX_NUMBER_OF_FREQS; index++) + { + if (data->available_freqs & band_list[index]) + { + data->type[numberOfEntries] = band_list[index]; + numberOfEntries++; + } + } + + /* If there are no entries, show "Empty List" message and exit */ + + if (numberOfEntries==0) + { + ShowMessage(data->parent, TxtEmptyList, TxtNull); + mmi_band_freq_list_destroy(win); + return; + } + + /* Get the status of all the frequencies */ + /* SPR#998 - SH - Use data->mode */ + + if (band_get_current_radio_mode(&data->mode, &data->selected_freqs) >= MFW_BAND_OK) + { + /* If we're not in manual choose manual */ + + if (data->mode!=MFW_BAND_MODE_Manual) + { + data->selected_freqs = data->available_freqs; /* SH - default when choosing manual is all */ + band_radio_mode_switch(MFW_BAND_MODE_Manual, data->selected_freqs); + } + + /* Allocate the memory for the list structure */ + + data->no_of_entries = numberOfEntries; + + data->menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( numberOfEntries * sizeof(T_MFW_MNU_ITEM) ); + + if(!data->menu_list_data->List) + { + TRACE_EVENT("Failed memory alloc 2"); + return; + } + + /* Allocate memory for the menu texts, and populate the list structure */ + + numberOfEntries = 0; + + for (index=0; index<MAX_NUMBER_OF_FREQS; index++) + { + if (data->available_freqs & band_list[index]) + { + /* SPR#998 - SH - Removed code, checkboxes now handled by MFW */ + mnuInitDataItem(&data->menu_list_data->List[numberOfEntries]); + /* Here we specify the function that checks and unchecks the checkboxes */ + data->menu_list_data->List[numberOfEntries].func = mmi_band_menu_func; + data->menu_list_data->List[numberOfEntries].str = (char *)Freq2StrID(band_list[index]); + /* Here we specify the function that returns the checkbox status of any menu item */ + data->menu_list_data->List[numberOfEntries].flagFunc = mmi_band_menu_flag; + numberOfEntries++; + } + } + + data->menu_list_data->ListLength =numberOfEntries; + data->menu_list_data->ListPosition = 1; + data->menu_list_data->CursorPosition = 1; + data->menu_list_data->SnapshotSize = numberOfEntries; + data->menu_list_data->Font = 0; + data->menu_list_data->LeftSoftKey = TxtSoftSelect; + data->menu_list_data->RightSoftKey = TxtSoftBack; + data->menu_list_data->KeyEvents = KEY_ALL; + data->menu_list_data->Reason = 0; + data->menu_list_data->Strings = FALSE; /* SPR#998 - SH - We no longer alter the menu strings */ + data->menu_list_data->Attr = (MfwMnuAttr*)&Freq_menuAttrib; + data->menu_list_data->autoDestroy = FALSE; + + /* Create the dynamic menu window */ + listDisplayListMenu(win, data->menu_list_data,(ListCbFunc)mmi_band_freq_list_cb,0); + } + else /* We haven't been able to read the status */ + { + ShowMessage(win, TxtReadError, TxtNull); + } + + break; + + case BAND_DESTROY: + TRACE_EVENT("mmi_band_freq_exec_cb() Event:BAND_DESTROY"); + /* + * Free Memory + */ + + /* SPR#998 - SH - No longer free allocated strings here */ + + numberOfEntries = data->no_of_entries; + + if (data->menu_list_data != NULL) + { + FREE_MEMORY ((void *)data->menu_list_data->List, numberOfEntries * sizeof (T_MFW_MNU_ITEM)); + FREE_MEMORY ((void *)data->menu_list_data, sizeof (ListMenuData)); + } + + FREE_MEMORY ((void *)data, sizeof (T_FREQ_INFO)); + break; + + default: + break; + } +} + + +/******************************************************************************* + + $Function: mmi_band_freq_list_cb + + $Description: Callback function for the info num list. + + $Returns: none + + $Arguments: Parent - parent window. + ListData - Menu item list +*******************************************************************************/ + +void mmi_band_freq_list_cb(T_MFW_HND * Parent, ListMenuData * ListData) +{ + /* SPR#998 - SH - Selecting a checkbox is handled now by the checkbox functions, + * so much less is required here */ + + T_MFW_WIN *win_data = ((T_MFW_HDR *)Parent)->data; + T_FREQ_INFO *data = (T_FREQ_INFO *)win_data->user; + + TRACE_FUNCTION("mmi_band_freq_list_cb"); + + if ((ListData->Reason EQ LISTS_REASON_BACK) || (ListData->Reason EQ LISTS_REASON_CLEAR)) + { + listsDestroy(ListData->win); + mmi_band_freq_list_destroy(data->freq_win); + } + else if(ListData->Reason EQ LISTS_REASON_SELECT) + { + winShow(Parent); + } +} + + +/******************************************************************************* + + $Function: mmi_band_freq_list_destroy + + $Description: Destroy the info num window. + + $Returns: none + + $Arguments: own_window- current window +*******************************************************************************/ + +static void mmi_band_freq_list_destroy(MfwHnd own_window) +{ + T_MFW_WIN *win_data; + T_FREQ_INFO *data; + + TRACE_FUNCTION ("mmi_band_freq_list_destroy()"); + + if (own_window) + { + win_data = ((T_MFW_HDR *)own_window)->data; + data = (T_FREQ_INFO *)win_data->user; + + if (data) + { + /* + * Free Memory + */ + SEND_EVENT (own_window, BAND_DESTROY, 0, 0); + /* + * Delete WIN handler + */ + win_delete (own_window); + + current_data = NULL; /* SPR#998 - SH - Set the data handle to NULL */ + } + else + { + TRACE_EVENT ("mmi_band_freq_list_destroy() called twice"); + } + } +} + + +/******************************************************************************* + + $Function: mmi_band_freq_win_cb + + $Description: Window callback function for the info numbers window. + + $Returns: none + + $Arguments: w - mfw window handler + e - mfw event + +*******************************************************************************/ + +static int mmi_band_freq_win_cb (MfwEvt e, MfwWin *w) /* yyy window event handler */ +{ + TRACE_FUNCTION ("mmi_band_freq_win_cb()"); + switch (e) + { + case MfwWinVisible: /* window is visible */ + break; + case MfwWinFocussed: /* input focus / selected */ + case MfwWinDelete: /* window will be deleted */ + + default: + return MFW_EVENT_REJECTED; + } + return MFW_EVENT_CONSUMED; +} + + + +/******************************************************************************* + + $Function: mmi_band_menu_func + + $Description: SPR#998 - SH - Added + Select or deselect a checkbox item. The appropriate band function is + called, to ensure that the selection is valid. + + $Returns: None. + + $Arguments: m, ma, mi - not used + +*******************************************************************************/ + +int mmi_band_menu_func(MfwMnu* menu, MfwMnuItem* item) +{ + T_FREQ_INFO *data = current_data; + + TRACE_FUNCTION("mmi_band_menu_func"); + + data->selected_freqs ^= data->type[menu->lCursor[menu->level]]; /* Toggle this band */ + + if (band_radio_mode_switch(MFW_BAND_MODE_Manual, data->selected_freqs) >= MFW_BAND_OK) + { + mnuUpdate(menu); + } + else + { + data->selected_freqs ^= data->type[menu->lCursor[menu->level]]; /* Undo change */ + ShowMessage(data->freq_win, TxtFailed, TxtNull); + } + + return 1; +} + + +/******************************************************************************* + + $Function: mmi_band_menu_flag + + $Description: Attribut function for menu entries. + + $Returns: Checked or unchecked + + $Arguments: m, ma, mi - not used + +*******************************************************************************/ + +USHORT mmi_band_menu_flag( struct MfwMnuTag *menu, struct MfwMnuAttrTag *attr, struct MfwMnuItemTag *item ) +{ + T_FREQ_INFO *data = current_data; /* SPR#998 - SH - Get data from static handle */ + int currentOption; + + TRACE_FUNCTION("mmi_band_menu_flag()"); + TRACE_EVENT_P1("Freq info data: %x", data); + + /* Identify current menu option */ + + currentOption = mnuIdentify(attr, item); + + /* If we find it, work out if it's checked or not */ + + if (currentOption>-1) + { + if (data->selected_freqs & data->type[currentOption]) + return MNU_ITEM_CHECKED; + else + return MNU_ITEM_UNCHECKED; + } + return 0; +} +