⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmismsbroadcast.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:

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

					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:		SMS Cell Broadcast
 $File:		    MmiSmsBroadcast.c
 $Revision:		1.0                                                       
                                                                              
 $Author:		Condat(UK)                                                         
 $Date:		    22/02/01                                                      
                                                                               
********************************************************************************
                                                                              
 Description:

  Implementation of MMI SMS Cell Broadcast dynamic menu handling

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

 $History: MmiSmsBroadcast.c

	25/10/00			Original Condat(UK) BMI version.	
	19/08/02   ver0.111   wangxia  modified 
	   
 $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 "custom.h"
#include "gsm.h"
#include "vsi.h"
#include "p_sim.h"
#include "mfw_sys.h"
#include "mfw_mfw.h"
#include "mfw_win.h"
#include "mfw_kbd.h"
#include "mfw_edt.h"
#include "mfw_lng.h"
#include "mfw_icn.h"
#include "mfw_phb.h"
#include "mfw_sim.h"
#include "mfw_nm.h"
#include "ksd.h"
#include "psa.h"
#include "mfw_sms.h"
#include "mfw_mnu.h"
#include "mfw_sat.h"
#include "mfw_tim.h"

#include "MmiMmi.h"
#include "MmiDummy.h"
#include "MmiDialogs.h"
#include "MmiLists.h"

#include "MmiMain.h"
#include "MmiStart.h"
#include "MmiPins.h"
#include "MmiMenu.h"
#include "MmiSoftKeys.h"

#include "MmiBookController.h"

#include "mmiSmsBroadcast.h"
#include "mmiSmsIdle.h"
#include "MmiEditor.h"
#include "MmiIdle.h"

#include "cus_aci.h"
#include "mmiusersymbolinput.h"
#include "Mmiicons.h"

#define MENU_TEXT_LENGTH 16 /* count of chars to be displayed in one list entry */

/* SH - moved to .h file */

/* storage for Cell Broadcast lists */
typedef struct 
{
    T_SMSCB_ATT 		 cb_attributes[MAX_MIDS];     /* list of attributes of messages stored in fifo */
    CHAR                cb_buffer[CB_STORE_LENGTH]; /* fifo buffer for received cell broadcast messages */

	ListMenuData     	 *cb_list_attributes; 		//atttributes for the menu list

    T_SMSCB_STATUS		current_status;       	       /*read status for all messages    */
    
	UBYTE found_mid;    //indicate the already existing cb in the fifo
	UBYTE clear_mid;     //indicate the deleting process
	UBYTE result_used;	//to update the used-pointer, after deleting the cb message
	UBYTE total_number;  //this include the total number of messages in the fifo; need for Menu-list

	UBYTE multipage_number;  //this include the total page of a particular multipage; need for showing msg.
	UBYTE *multipage;        //pointer to the first page of multipage
	UBYTE start_used;	//indicate the start point of the multipage, used for the searching
	UBYTE end_used;     //indicate the end point of the multipage, used for the searching

	UBYTE used_pointer;  //start point of the free space link list
	UBYTE free_pointer;   //start point of the data link list

	
} T_SMSCB_DATA;



T_SMSCB_DATASTORE g_smscb_data; /* storage for Cell Broadcast lists */
T_SMSCB_DATA smscb_data; /* storage for Cell Broadcast lists */



//Attributes of the list menu
static MfwMnuAttr sms_cb_menuAttrib =
{
    0,
    &smscb_M_CBArea,
    MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu       */
    -1,                                 /* use default font         */
    NULL,                               /* with these items         */
    0                                   /* number of items     */
};


#define OFFSET(index) (index*CB_PAGE_LENGTH)

//this shows traces of some variable
//#define DEBUG_SMS_CB 

#ifdef DEBUG_SMS_CB
	UBYTE DEBUG;
#endif


//these prototypes belongs to saving cb_messages in the fifo
UBYTE sms_cb_count_messages ();
UBYTE sms_cb_count_unread_messages ();
UBYTE sms_cb_delete_message (USHORT mid);
UBYTE sms_cb_find_termination (UBYTE *used);
UBYTE sms_cb_update_free_pointer (UBYTE temp);
UBYTE sms_cb_search_mid (USHORT mid, SHORT sn);
UBYTE sms_cb_store_message (T_MFW_SMS_CB *Message);
UBYTE sms_cb_find_endpoint (USHORT mid, UBYTE end_used);
UBYTE sms_cb_find_startpoint (USHORT mid, UBYTE end_used);
UBYTE sms_cb_give_position_of_msg (UBYTE used, UBYTE positon);
UBYTE sms_cb_overwrite_old_message (T_MFW_SMS_CB *Message);


void sms_cb_show_cb_message(UBYTE link_list_position);
static ListMenuData * sms_cb_create_list (UBYTE number);
static void sms_cb_list_cb(T_MFW_HND win, ListMenuData * ListData);
void   sms_cb_store_attributes (UBYTE position, T_MFW_SMS_CB *Message);
static void sms_cb_editor_cb (T_MFW_HND win, USHORT Identifier, SHORT reason);

void sms_cb_loadEditDefault (T_EDITOR_DATA *editor_data);

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

			cell broadcast declaration

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

typedef struct
{
    int index; /* index of selected item in list */
} T_CB_index_param; 

typedef struct
{
    int index; /* index of selected item in list */
    char name[CB_TAG_LENGTH]; /* buffer for name to be associated with topic */
    char number[CB_MID_LENGTH]; /* buffer for channel number of topic */
} T_CB_EDT_MIDEDT_param;

typedef struct
{
    int index; /* index of selected item in list */
    char text[CB_TAG_LENGTH]; /* buffer for name to be associated with topic ??? size is dummy */
    char number[CB_MID_LENGTH]; /* buffer for channel number of topic ??? size is dummy */
} T_S_param; /* ??? T_S_param not to be defined here, but in "mmiSmsSend.h"! */


/* IDs used for identification of sources of events */
enum {
    smscb_M_CB_ID,
    smscb_M_CB_ACT_ID,
    smscb_M_CB_TOP_ID,
    smscb_M_CB_TOP_CONS_ID,
    smscb_M_CB_TOP_CONS_SEL_ID,
    smscb_CB_ID,
    smscb_CB_TEXTEDT_ID,
    smscb_CB_OPT_ID,
    smscb_CB_OPT_DEL_NOACK_ID,
    smscb_CB_EDT_TEXTEDT_ID,
    smscb_CB_MID,
    smscb_CB_EDT_MIDEDT_ID
} smscb_ID;

enum {
    smscb_CH_ADD,
    smscb_CH_MODIFY,
    smscb_CH_DEL
    }smscb_WIN_ID;

int smscb_win_stat;
void msgsExtractPhoneNumber(UBYTE *InputString, UBYTE *Buffer);
/* forward declaration of local start routines */
static T_MFW_HND smscb_M_CB_ACT_start(T_MFW_HND parent_window, void *dummy);
static T_MFW_HND smscb_M_CB_TOP_start(T_MFW_HND parent_window, void *dummy);
static T_MFW_HND smscb_M_CB_TOP_CONS_start(T_MFW_HND parent_window, void *dummy);
static T_MFW_HND smscb_M_CB_TOP_CONS_SEL_start(T_MFW_HND parent_window, T_CB_index_param * parameter);
static T_MFW_HND smscb_CB_start(T_MFW_HND parent_window, void *dummy);
static T_MFW_HND smscb_CB_TEXTEDT_start(T_MFW_HND parent_window, T_CB_index_param * parameter);
static T_MFW_HND smscb_CB_OPT_start(T_MFW_HND parent_window, T_CB_index_param * parameter);
static T_MFW_HND smscb_CB_OPT_DEL_NOACK_start(T_MFW_HND parent_window, T_CB_index_param * parameter);
static T_MFW_HND smscb_CB_EDT_TEXTEDT_start(T_MFW_HND parent_window, T_CB_index_param * parameter);
static T_MFW_HND smscb_CB_EDT_MIDEDT_start(T_MFW_HND parent_window, T_CB_index_param * parameter);


void info_screen (T_MFW_HND win, USHORT TextId, USHORT TextId2, T_VOID_FUNC  Callback,int iconindex)
    /* present info <TextId> for 3 seconds in a simple infoscreen */
{

    T_DISPLAY_DATA display_info;

    dialog_info_init(&display_info);//gdy add
    display_info.TextString   = 0; 
    display_info.TextString2  = 0;
    display_info.LeftSoftKey  = 0;
    display_info.RightSoftKey = 0;
    display_info.Time         = ONE_SECS;//zy 12/22/2002 change 3sec to 1sec
    display_info.KeyEvents    = KEY_RIGHT|KEY_LEFT|KEY_CLEAR;
    display_info.TextId       = TextId;
    display_info.TextId2      = TextId2;
    display_info.Identifier   = DIALOGS_REASON_NULL;
    display_info.Callback     = (T_VOID_FUNC)Callback;
    display_info.iconindex    =iconindex;
    info_dialog (win, &display_info); 
}

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

			cell broadcast routines DECLARATION

*********************************************************************
**********************************************************************/
static T_MFW smscb_delete_topic(UBYTE MidOffset);
/* SH moved prototype to header file */
#if 0
// c019 rsa
/* this routine is for testing purposes only. It is used to start the submenutree from MmiMenu.c */
int temp_smscb_M_CB_ExeRead (MfwMnu* m, MfwMnuItem* i)
{
    T_MFW_HND       win  = mfwParent((MfwHdr *)mfw_header());

    smscb_InitData();
    return (int)smscb_M_CB_start (win, NULL);
}
// end c019 rsa
static void listCreate(MfwHnd Parent, MfwMnuAttr *a , MfwEvt e, ListCbFunc cbFunc)
{

    ListMenuData list_menu_data;

    /* initialization of the dialog data */
    list_menu_data.Attr           = a;
    list_menu_data.List           = a->items;
    list_menu_data.ListLength     = a->nItems;/* Number of entries in list menu.    */
    list_menu_data.ListPosition   = 1;/* True cursor position in list menu. */
    list_menu_data.CursorPosition = 1;/* Cursor position in list snapshot.  */
    list_menu_data.SnapshotSize   = 4;/* Number of list entries to view.    */
    list_menu_data.Font           = 0;
    list_menu_data.LeftSoftKey    = TxtSoftSelect;
    list_menu_data.RightSoftKey   = TxtSoftBack;
    list_menu_data.KeyEvents      = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUUP | KEY_MNUDOWN;
    list_menu_data.Reason         = 0;
    list_menu_data.Strings        = FALSE;
	list_menu_data.autoDestroy    = TRUE;
	list_menu_data.ListMenuHeadStr  = (char *) MmiRsrcGetText(TxtBroadcast);
    listDisplayListMenu(Parent, &list_menu_data, cbFunc,0);

}
// c020 rsa
// end c020 rsa
/*********************************************************************
**********************************************************************

			M_CB	 DYNAMIC MENU WINDOW. DECLARATION

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

typedef struct
{
    /* administrative data */

    T_MMI_CONTROL   mmi_control;
    T_MFW_HND       win;
    SHORT           id;
    T_MFW_HND       parent;

    /* associated handlers */

    T_MFW_HND       menu;

    /* internal data */
} T_M_CB;

static T_MFW_HND smscb_M_CB_create (T_MFW_HND parent);
static void smscb_M_CB_destroy (T_MFW_HND window);
static void smscb_M_CB_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * dummy);
static void smscb_M_CB_mnu_cb (T_MFW_HND * win, ListMenuData * ListData); // c020 rsa

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

			  M_CB   DYNAMIC MENU WINDOW. CONTENTS DECLARATION

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

static T_MFW_MNU_ITEM smscb_M_CBItems[] =
{
    {0,0,0, (char *)TxtActivate,  0, (MenuFunc)smscb_M_CB_ExeActivate,    item_flag_none},
    {0,0,0, (char *)TxtRead,      0, (MenuFunc)sms_cb_select_read,        item_flag_none},
    {0,0,0, (char *)TxtNew,       0, (MenuFunc)smscb_M_CB_TOP_ExeAddNew,  item_flag_none},
    {0,0,0, (char *)TxtList,      0, (MenuFunc)smscb_M_CB_MID_DEL, item_flag_none}
};

static MfwMnuAttr smscb_M_CBAttrib =
{
    &smscb_M_CBArea,
    MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu       */
    -1,                                 /* use default font         */
    smscb_M_CBItems,                      /* with these items         */
    sizeof(smscb_M_CBItems)/sizeof(MfwMnuItem) /* number of items     */
};

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

			 M_CB    DYNAMIC MENU WINDOW. CONTENTS BEHAVIOUR

*********************************************************************
**********************************************************************/
static int smscb_M_CB_ExeActivate (MfwMnu* m, MfwMnuItem* i)
{
    T_MFW_HND       win  = mfwParent((MfwHdr *)mfw_header());

    //	selection "Activate": menucreate M_CB_ACT
    return (int)smscb_M_CB_ACT_start (win, NULL);
}



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

			M_CB	DYNAMIC MENU WINDOW. IMPLEMENTATION

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




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

 $Function:    	cellbroadcast_start

 $Description:	Calls from the MainMenu

 $Returns:		none.

 $Arguments:	
 
*******************************************************************************/

int cellbroadcast_start(MfwMnu* m, MfwMnuItem* i)
{
    T_MFW_HND       win  = mfwParent(mfw_header());
  
	smscb_M_CB_start(win, NULL);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -