📄 mmicphs.c
字号:
TRACE_EVENT("Divert status set");
cphs_get_divert_status(); //refresh divert status
}
break;
case E_CPHS_GET_ALS_STATUS:
{ if(para != NULL)
memcpy(&als_status, para, sizeof(T_MFW_CPHS_ALS_STATUS));
}
break;
case E_CPHS_SET_LINE:
{ //result of set ALS line
UBYTE write_result;
if(para != NULL)
{ write_result = *(UBYTE*)para;
if (write_result == MFW_SIMOP_WRITE_OK)
ShowMessage(parent, TxtChanged, TxtNull);
if (write_result == MFW_SIMOP_WRITE_ERR)
ShowMessage(parent, TxtWriteError, TxtNull);//display "Write Error"
}
cphs_get_als_info();//refresh current line
cphs_get_divert_status(); //refresh divert status
}
break;
case E_CPHS_SET_ALS_STATUS:
{ //result of setting ALS status
UBYTE write_result;
if(para != NULL)
{ write_result = *(UBYTE*)para;
if (write_result == MFW_SIMOP_WRITE_OK)
ShowMessage(parent, TxtSaved, TxtNull);
if (write_result == MFW_SIMOP_WRITE_ERR)
ShowMessage(parent, TxtWriteError, TxtNull);//display "Write Error"
}
}
break;
case E_CPHS_GET_CSP:
{ if(para != NULL)
{ memcpy(&customer_service_profile, para, sizeof(T_MFW_CPHS_CSP));
sprintf(debug, "CSP: %x,%x,%x,%x,%x,%x,%x,%x,%x,%x", customer_service_profile.csp[0], customer_service_profile.csp[1],
customer_service_profile.csp[2], customer_service_profile.csp[3], customer_service_profile.csp[4], customer_service_profile.csp[5],
customer_service_profile.csp[6], customer_service_profile.csp[7], customer_service_profile.csp[8], customer_service_profile.csp[9]);
debug[49] = 0;//ensure we've got a null-terminated string
TRACE_EVENT(debug);
sprintf(debug, "CSP: %x,%x,%x,%x,%x,%x,%x,%x,%x,%x", customer_service_profile.csp[10], customer_service_profile.csp[11],
customer_service_profile.csp[12], customer_service_profile.csp[13], customer_service_profile.csp[14], customer_service_profile.csp[15],
customer_service_profile.csp[16], customer_service_profile.csp[17], customer_service_profile.csp[18], customer_service_profile.csp[19]);
debug[49] = 0;//ensure we've got a null-terminated string
TRACE_EVENT(debug);
cphs_get_info_num(1, info_num_index);
}
}break;
case E_CPHS_GET_INFO_NUM:
{
if(para != NULL)
{
memcpy(¤t_info_num, para, sizeof( T_MFW_CPHS_INFONUM_ENTRY));
TRACE_EVENT("Getting info number");
if (current_info_num.result !=MFW_SIMOP_READ_ERR)
{ T_DISPLAY_DATA Dialog;
TRACE_EVENT("Displaying num");
/* Initialise the dialog control block with default information
*/
dlg_initDisplayData_TextStr( &Dialog, TxtSoftCall, TxtSoftBack, (char*)current_info_num.alpha.data, (char*)current_info_num.number, COLOUR_STATUS);
dlg_initDisplayData_events( &Dialog, (T_VOID_FUNC) info_num_display_cb, FOREVER, KEY_LEFT| KEY_RIGHT|KEY_CLEAR );
/* Show the dialog
*/
info_dialog( parent, &Dialog );
}
}
}
break;
case E_CPHS_GET_INFO_LIST:
{
if (para == NULL)
{
TRACE_EVENT("Invalid info num list");
}
else
{ //populate next pointer
if (info_numbers[info_num_level] = (T_MFW_CPHS_INFONUM_LIST*) ALLOC_MEMORY(sizeof(T_MFW_CPHS_INFONUM_LIST)))
memcpy(info_numbers[info_num_level], para, sizeof(T_MFW_CPHS_INFONUM_LIST));
TRACE_EVENT("Getting info numbers!!");
if (info_numbers[info_num_level]->count != 0)
{ sprintf(debug, "Valid info num list, count:%d",info_numbers[info_num_level]->count);
TRACE_EVENT(debug);
if (info_num_level)
{ info_num_level++;
InfoNumbers2();
}
}
else
info_numbers[info_num_level]=NULL;
}
}
break;
case E_CPHS_GET_SIM_FIELD:
{ T_MFW_CPHS_READ_SIM_ENTRY temp;
memcpy(&temp, para, sizeof(T_MFW_CPHS_READ_SIM_ENTRY));
if (temp.data_len >0)
temp.exchange_data[temp.data_len-1] = 0;
sprintf(debug, "Sim Read, Field: %d (Record: %d) Errcode: %d",temp.requested_field, temp.record, temp.sim_result);
TRACE_EVENT(debug);
/* SPR759 - SH - Read Sim for homezone, calls appropriate functions */
#ifdef MMI_HOMEZONE_ENABLED
if (temp.requested_field>=HZ_SIM_PARAMETERS
&& temp.requested_field < (HZ_SIM_CELL_CACHE+HZ_ZONES_MAX) )
{
homezoneReadSimCb(temp.requested_field, temp.record, temp.sim_result);
}
#endif
}
break;
case E_CPHS_SET_SIM_FIELD:
{
T_MFW_CPHS_READ_SIM_ENTRY temp;
memcpy(&temp, para, sizeof(T_MFW_CPHS_READ_SIM_ENTRY));
if (temp.data_len >0)
temp.exchange_data[temp.data_len-1] = 0;
sprintf(debug, "Sim Write, Requested_field: %d Errcode: %d",temp.requested_field, temp.sim_result);
TRACE_EVENT(debug);
/* SPR759 - SH - Read Sim for homezone, calls appropriate functions */
#ifdef MMI_HOMEZONE_ENABLED
if (temp.requested_field>=HZ_SIM_PARAMETERS
&& temp.requested_field < (HZ_SIM_CELL_CACHE+HZ_ZONES_MAX) )
{
homezoneWriteSimCb(temp.requested_field, temp.record, temp.sim_result);
}
#endif
}
break;
default: break;
}
return TRUE;
}
/*******************************************************************************
$Function: int InfoNumbers2( )
$Description: Displays info number sub-menus
$Returns: status int
$Arguments: nothing
*******************************************************************************/
//for sub-menus
int InfoNumbers2( )
{
T_MFW_HND win;
T_MFW_HND parent_win = mfw_parent(mfw_header());
TRACE_FUNCTION("InfoNumbers2");
if (info_numbers != NULL)
{ type_of_list = INFO_NUM_LIST;
win = buildInfoNumberMenu(parent_win);
if (win NEQ NULL)
{
SEND_EVENT (win, E_INIT, 0, 0);
}
}
return MFW_EVENT_CONSUMED;
}
/*******************************************************************************
$Function: buildInfoNumberMenu
$Description: Creates window for Information numbers
$Returns: window created
$Arguments: parent window
*******************************************************************************/
static T_MFW_HND buildInfoNumberMenu( MfwHnd parent_window)
{
T_INFO_NUM_INFO * data = (T_INFO_NUM_INFO *)ALLOC_MEMORY (sizeof (T_INFO_NUM_INFO));
T_MFW_WIN * win;
/*
* Create window handler
*/
data->numbers_win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)info_num_win_cb);
if (data->numbers_win EQ NULL)
{
return NULL;
}
TRACE_EVENT(">>>> Info num window created: " );
/*
* connect the dialog data to the MFW-window
*/
data->mmi_control.dialog = (T_DIALOG_FUNC)info_num_exec_cb;
data->mmi_control.data = data;
win = ((T_MFW_HDR *)data->numbers_win)->data;
win->user = (void *)data;
data->parent = parent_window;
winShow(data->numbers_win);
/*
* return window handle
*/
return data->numbers_win;
}
/*******************************************************************************
$Function: info_num_display_cb
$Description: Dialogue callback function of the information Numbers display window
$Returns: none
$Arguments: win - window handler, dialogue id, key pressed
*******************************************************************************/
void info_num_display_cb(T_MFW_HND win, USHORT identifier, UBYTE reason)
{
char buf [40];
TRACE_FUNCTION ("info_num_display_cb");
switch (reason)
{
case INFO_KCD_LEFT: callNumber((UBYTE*)current_info_num.number);
deafault: break;
}
}
/*******************************************************************************
$Function: info_num_exec_cb
$Description: Exec callback function of the information Numbers window
$Returns: none
$Arguments: win - window handler
event - mfw event
parameter - optional data.
*******************************************************************************/
void info_num_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data;
T_INFO_NUM_INFO * data = (T_INFO_NUM_INFO *)win_data->user;
UBYTE i;
UBYTE numberOfEntries;
ListWinInfo * mnu_data = (ListWinInfo *)parameter;
char* Mailboxes[4];
Mailboxes[0] = MmiRsrcGetText(TxtLine1);
Mailboxes[1] =MmiRsrcGetText(TxtLine2);
Mailboxes[2] = MmiRsrcGetText(TxtFax);
Mailboxes[3] = MmiRsrcGetText(TxtData);
TRACE_FUNCTION (">>>>> info_num_exec_cb()");
switch (event)
{
case E_INIT:
TRACE_EVENT(">>>> info_num_exec_cb() Event:E_INIT");
/* initialization of administrative data */
data->menu_list_data = (ListMenuData *)ALLOC_MEMORY(sizeof(ListMenuData));
if(data->menu_list_data == 0)
{
TRACE_EVENT("Failed memory alloc 1 ");
return;
}
if (type_of_list == MAILBOX_LIST || type_of_list == MAILBOX_LIST_CALL)
{ numberOfEntries = cphs_voicemail_numbers.count;
if (numberOfEntries > 4)
numberOfEntries = 4;
}
else
numberOfEntries = info_numbers[info_num_level-1]->count;
data->menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( 4 * sizeof(T_MFW_MNU_ITEM) );
if(data->menu_list_data->List == 0)
{
TRACE_EVENT("Failed memory alloc 2");
return;
}
for (i = 0; i < numberOfEntries ; i++)
{
mnuInitDataItem(&data->menu_list_data->List[i]);
if (type_of_list == MAILBOX_LIST || type_of_list == MAILBOX_LIST_CALL)
data->menu_list_data->List[i].str = (char *)cphs_voicemail_numbers.entries[i].alpha.data;
else
data->menu_list_data->List[i].str = (char *)info_numbers[info_num_level-1]->entry[i].alpha.data;
data->menu_list_data->List[i].flagFunc = item_flag_none;
}
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;
if (type_of_list == MAILBOX_LIST_CALL)
data->menu_list_data->LeftSoftKey = TxtSoftCall;
else
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 = TRUE;
data->menu_list_data->Attr = &InfoNum_menuAttrib;
data->menu_list_data->autoDestroy = FALSE;
/* Create the dynamic menu window */
listDisplayListMenu(win, data->menu_list_data,(ListCbFunc)InfonumList_cb,0);
break;
default:
break;
}
}
/*******************************************************************************
$Function: InfonumList_cb
$Description: Callback function for the info num list.
$Returns: none
$Arguments: Parent - parent window.
ListData - Menu item list
*******************************************************************************/
void InfonumList_cb(T_MFW_HND * Parent, ListMenuData * ListData)
{
T_MFW_WIN * win_data = ((T_MFW_HDR *)Parent)->data;
T_INFO_NUM_INFO * data = (T_INFO_NUM_INFO *)win_data->user;
char debug[40];
if ((ListData->Reason EQ LISTS_REASON_BACK) || (ListData->Reason EQ LISTS_REASON_CLEAR))
{
listsDestroy(ListData->win);
InfoNum_destroy(data->numbers_win);
info_num_level--;
}
else if(ListData->Reason EQ LISTS_REASON_SELECT)
{
if (type_of_list == MAILBOX_LIST || type_of_list == MAILBOX_LIST_CALL) //get the correct voicemail num
{
if (type_of_list == MAILBOX_LIST)
{ /*If we're editing*/
show_cphs_mb_number(&cphs_voicemail_numbers.entries[ListData->ListPosition]);
memcpy(&cphs_voicemail_num, &cphs_voicemail_numbers.entries[ListData->ListPosition], sizeof(T_MFW_CPHS_ENTRY));
}
else
{ char temp_number[PHB_MAX_LEN];
memcpy(&cphs_voicemail_num, &cphs_voicemail_numbers.entries[ListData->ListPosition], sizeof(T_MFW_CPHS_ENTRY));
memset(temp_number, 0, PHB_MAX_LEN);
/*If we're calling the number*/
//if it's an international number without a '+'
if (cphs_voicemail_num.ton == MFW_TON_INTERNATIONAL && cphs_voicemail_num.number[0] != '+')
{ strcat(temp_number, "+"); //put a + in front of number
strcat(temp_number, (char*)cphs_voicemail_num.number);
strcpy((char*)cphs_voicemail_num.number, temp_number);
}
callNumber(cphs_voicemail_num.number);
}
}
else
{
//get the number/directory
info_num_index = info_numbers[info_num_level-1]->entry[ListData->ListPosition].index;
sprintf (debug, "Index selected: %d, Level, %d, entryStat:%d",info_num_index, info_num_level,
info_numbers[info_num_level-1]->entry[ListData->ListPosition].entryStat);
TRACE_EVENT(debug);
if (info_numbers[info_num_level-1]->entry[ListData->ListPosition].entryStat & 0x80) //if bit 8 set
{ TRACE_EVENT("CPHS INFO:Should be number entry");
if (info_num_level < 4)
cphs_select_info_num(info_num_index);
}
else
{ if (info_num_level < 4)
{ TRACE_EVENT("CPHS INFO:Should be dir entry");
cphs_get_info_num(info_num_level+1, info_num_index+1);
}
}
}
}
}
/*******************************************************************************
$Function: InfoNum_destroy
$Description: Destroy the info num window.
$Returns: none
$Arguments: own_window- current window
*******************************************************************************/
static void InfoNum_destroy(MfwHnd own_window)
{
T_MFW_WIN * win_data;
T_INFO_NUM_INFO * data;
UBYTE numberOfEntries;
TRACE_FUNCTION ("InfoNum_destroy()");
if (own_window)
{
win_data = ((T_MFW_HDR *)own_window)->data;
data = (T_INFO_NUM_INFO *)win_data->user;
if (data)
{
/*
* Delete WIN handler
*/
win_delete (data->numbers_win);
/*
* Free Memory
*/
if (type_of_list == MAILBOX_LIST)
{ numberOfEntries = cphs_voicemail_numbers.count;
if (numberOfEntries > 4)
numberOfEntries = 4;
}
else
numberOfEntries =info_numbers[info_num_level-1]->count;
if (data->menu_list_data != NULL)
{ int i;
FREE_MEMORY ((void *)data->menu_list_data->List, numberOfEntries * sizeof (T_MFW_MNU_ITEM));
FREE_MEMORY ((void *)data->menu_list_data, sizeof (ListMenuData));
if (type_of_list == INFO_NUM_LIST && info_num_level > 1)//if info numbers,
{ FREE_MEMORY((void*)info_numbers[info_num_level-1], sizeof(T_MFW_CPHS_INFONUM_LIST));
info_numbers[info_num_level-1] = NULL;
}
}
FREE_MEMORY ((void *)data, sizeof (T_INFO_NUM_INFO));
}
else
{
TRACE_EVENT ("InfoNum_destroy() called twice");
}
}
}
/*******************************************************************************
$Function: info_num_win_cb
$Description: Window callback function for the info numbers window.
$Returns: none
$Arguments: w - mfw window handler
e - mfw event
*******************************************************************************/
static int info_num_win_cb (MfwEvt e, MfwWin *w) /* yyy window event handler */
{
TRACE_EVENT ("info_num_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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -