FreeCalypso > hg > fc-magnetite
view src/aci2/bmi/mmiBand.c @ 600:8f50b202e81f
board preprocessor conditionals: prep for more FC hw in the future
This change eliminates the CONFIG_TARGET_FCDEV3B preprocessor symbol and
all preprocessor conditionals throughout the code base that tested for it,
replacing them with CONFIG_TARGET_FCFAM or CONFIG_TARGET_FCMODEM. These
new symbols are specified as follows:
CONFIG_TARGET_FCFAM is intended to cover all hardware designs created by
Mother Mychaela under the FreeCalypso trademark. This family will include
modem products (repackagings of the FCDEV3B, possibly with RFFE or even
RF transceiver changes), and also my desired FreeCalypso handset product.
CONFIG_TARGET_FCMODEM is intended to cover all FreeCalypso modem products
(which will be firmware-compatible with the FCDEV3B if they use TI Rita
transceiver, or will require a different fw build if we switch to one of
Silabs Aero transceivers), but not the handset product. Right now this
CONFIG_TARGET_FCMODEM preprocessor symbol is used to conditionalize
everything dealing with MCSI.
At the present moment the future of FC hardware evolution is still unknown:
it is not known whether we will ever have any beyond-FCDEV3B hardware at all
(contingent on uncertain funding), and if we do produce further FC hardware
designs, it is not known whether they will retain the same FIC modem core
(triband), if we are going to have a quadband design that still retains the
classic Rita transceiver, or if we are going to switch to Silabs Aero II
or some other transceiver. If we produce a quadband modem that still uses
Rita, it will run exactly the same fw as the FCDEV3B thanks to the way we
define TSPACT signals for the RF_FAM=12 && CONFIG_TARGET_FCFAM combination,
and the current fcdev3b build target will be renamed to fcmodem. OTOH, if
that putative quadband modem will be Aero-based, then it will require a
different fw build target, the fcdev3b target will stay as it is, and the
two targets will both define CONFIG_TARGET_FCFAM and CONFIG_TARGET_FCMODEM,
but will have different RF_FAM numbers. But no matter which way we are
going to evolve, it is not right to have conditionals on CONFIG_TARGET_FCDEV3B
in places like ACI, and the present change clears the way for future
evolution.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 01 Apr 2019 01:05:24 +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 $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; }