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

📄 cphs_mod.c

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

#define ENTITY_MFW


#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <limits.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 "pcm.h"

#ifndef GPRS
#include "ffs.h"
#undef GPRS  /* ffs.h anyhow defines GPRS: has to be undef ifndef GPRS */

#else /* GPRS */
#include "ffs.h"
#endif /* GPRS */
#include "ffs_coat.h"

#ifdef SIM_TOOLKIT
//#include "mfw_sat.h"
#endif

#if defined (FAX_AND_DATA)

#include "message.h"
#include "prim.h"
#include "aci_cmh.h"
#include "aci_fd.h"
#endif

#ifdef GPRS
#include "gprs.h"
#endif
#include "dti_conn_mng.h"

#include "phb.h"
#include "psa.h"
#include "cmh.h"
#include "cmh_phb.h"
#include "psa.h"
#include "psa_sim.h"
#include "cus_aci.h"
#include "cmh_mm.h"
#include "cmh_sim.h"
#include "CPHS_mod.h"

/*--------------------- Constant definitions  ---------------------------*/


#define MFW_INVALID_SIM_DATA	0xFF
#define MAX_CPHS_ENTRY          4
#define MAX_PCM_MAILBOX_LEN     10


#define NO_ALLOCATED 0
#define FALSE 0
#define TRUE 1
#define LONG_NAME         26
#define SHORT_NAME        10
#define SP_NAME           17
#define NUMERIC_LENGTH    6

//GW-SPR#762- 40 digit phonebook size.
#ifdef PHONEBOOK_EXTENSION
#define PHB_MAX_LEN        41 /* Phonebook number length + '\0' */
#else
#define PHB_MAX_LEN        21 /* Phonebook number length + '\0' */
#endif


/*--------------------- Types --------------------------------------*/
typedef enum              /* numbering plan identifier */
{
  CPHS_NPI_UNKNOWN,
  CPHS_NPI_ISDN      = 1,
  CPHS_NPI_DATA      = 3,
  CPHS_NPI_TELEX     = 4,
  CPHS_NPI_NATIONAL  = 8,
  CPHS_NPI_PRIVATE   = 9,
  CPHS_NPI_M_ERMES   = 10,
  CPHS_NPI_M_CTS     = 11
} T_PHB_NPI;

typedef enum            /* type of number */
{
  CPHS_TON_UNKNOWN,
  CPHS_TON_INTERNATIONAL,
  CPHS_TON_NATIONAL,
  CPHS_TON_NET_SPECIFIC,
  CPHS_TON_DED_ACCESS,
  CPHS_TON_ALPHA_NUMERIC,
  CPHS_TON_ABBREVIATED,
  CPHS_TON_EXTENDED
} T_CPHS_PHB_TON;

typedef enum              /* CPHS service */
{
  CPHS_CSP = 1,             /* customer service profile */
  CPHS_SST,                 /* service string table     */
  CPHS_MB_NUMBER,           /* mailbox numbers          */
  CHPS_NAME_SHORT,          /* operator name shortform  */
  CHPS_INFO_NUMBERS         /* information numbers      */
} T_CPHS_SERVICE;

#define CPHS_SERVICE_TABLE   2 /* size of CPHS service table            */
#define CPHS_INFO_SIZE   3 /* size of CPHS information field (6F16) */
#define CPHS_ONS_SIZE   20 /* size of operator name string (6F14) - read first 20 bytes only */
#define CPHS_ONSF_SIZE  10 /* size of operator name short form (6F18) */
#define CPHS_MIN_MBN_SIZE 14
#define CPHS_MBS_SIZE    2 /* size of voice message waiting flag (6F11) */
#define CPHS_CFF_SIZE    2 /* size of call forwarding flags (6F13)  */
#define CPHS_ALS_SIZE    1 /* size of alternate line service (6F9F) */
#define CPHS_ALSS_SIZE   1 /* size of alternate line service status (6F92) */
#define CPHS_CSP_SIZE   20 /* size of customer service profile (6F15) */
#define CPHS_MIN_INS_SIZE 5

typedef struct {

	T_CPHS_OPN       			opName;
	T_CPHS_MAILBOX_NUM_LIST		mbNum;
	T_CPHS_LINE_IND       		mbStatus;
	T_CPHS_LINE_IND       		dvStatus;
	T_CPHS_ALS_INFO   			alsStatus;
	T_CPHS_ALS_LINE				Line1_desc;
	T_CPHS_ALS_LINE				Line2_desc;
	T_CPHS_CSP           		csProfile;
	T_CPHS_INFO_NUM_LIST*  	numList;
	T_CPHS_INFO_NUM_ENTRY* 	infoEntry;
	T_CPHS_ROAMING_IND			roaming_ind;
	UBYTE                    mbnData[40]; // it should be allocated dynamically.

	UBYTE                    mbsData[CPHS_MBS_SIZE]; // it should be allocated dynamically.
	UBYTE                    dvData[CPHS_CFF_SIZE]; // it should be allocated dynamically.

//	T_CPHS_READ_SIM_ENTRY read_sim_entry;//MC

	UBYTE        			cphsStatus;
	UBYTE                    cphsPhase;
	UBYTE                    cphsServTab[CPHS_SERVICE_TABLE];
	UBYTE                    maxRec;

	T_CPHS_MAILBOX_NUM_ENTRY         MbnEntry;

	T_CPHS_MAILBOX_NUM_ENTRY    *vcEntry;
	T_CPHS_SIMOP_STATUS     simStatus;
	UBYTE                    alsData;
	UBYTE                    idxLevel;
	UBYTE                    startIdx;
	 UBYTE                    cphsUpdate ;
	ULONG                   cphsPrevRead;
	T_CPHS_CB_FUNC			InfoNumberListCB;
	T_CPHS_CB_FUNC			InfoNumberCB;
	T_CPHS_CB_FUNC			RefreshCB;
}T_CPHS_CACHED_DATA;


static T_CPHS_CACHED_DATA* cphs_data = NULL;

void Cphs_support_check (void);
UBYTE Cphs_ssc (UBYTE nr, UBYTE * serv_table);
void Cphs_update_info_cnf (SHORT errCode, UBYTE *data, UBYTE dataLen);
void Cphs_read_information(SHORT errCode, UBYTE *data, UBYTE dataLen);
void Cphs_read_csp(SHORT errCode, UBYTE *data, UBYTE dataLen);
void Cphs_read_cff(SHORT errCode, UBYTE *data, UBYTE dataLen);
void Cphs_read_mbs(SHORT errCode, UBYTE *data, UBYTE dataLen);
void Cphs_read_mbn(SHORT table_id);
void Cphs_read_onsf(SHORT errCode, UBYTE *data, UBYTE dataLen);
void Cphs_read_ons(SHORT errCode, UBYTE *data, UBYTE dataLen);
void Cphs_get_csp ();
void Cphs_get_mailbox (void);
void Cphs_read_sim_dat_cb(SHORT table_id);
BOOL Cphs_read_sim_dat(USHORT data_id, UBYTE len, UBYTE max_length);
T_CPHS_RET Cphs_set_divert_status  (T_CPHS_FLAG_STATUS line1,
                               T_CPHS_FLAG_STATUS line2,
                               T_CPHS_FLAG_STATUS fax,
                               T_CPHS_FLAG_STATUS data);
T_CPHS_RET Cphs_set_mailbox_status (T_CPHS_FLAG_STATUS line1,
                               T_CPHS_FLAG_STATUS line2,
                               T_CPHS_FLAG_STATUS fax,
                               T_CPHS_FLAG_STATUS data);
void Cphs_operator_name (void);
void Cphs_get_mailbox_status ();
void Cphs_get_divert_status () ;


void Cphs_write_eeprom_mailbox(T_CPHS_MAILBOX_NUM_ENTRY *entry);
void Cphs_read_eeprom_mailbox(void);
void Cphs_build_mbn_data(UBYTE *data, UBYTE len);
void Cphs_req_info_num_read(UBYTE rcd_num, UBYTE dataLen);
void Cphs_get_info_num (UBYTE level, UBYTE startIndex);
void Cphs_read_info_num(SHORT table_id);
void Cphs_read_first_info_num(SHORT table_id);
void Cphs_read_sim_rcd_cb (SHORT table_id);
BOOL Cphs_read_sim_rcd(USHORT data_id, UBYTE rcd_num, UBYTE len);
void Cphs_select_info_num (UBYTE index) ;
void Cphs_write_sim_dat_cb(SHORT table_id);
BOOL Cphs_write_sim_dat(USHORT data_id, UBYTE *data, UBYTE length);
void Cphs_write_sim_rcd_cb (SHORT table_id);
BOOL Cphs_write_sim_rcd(USHORT data_id, UBYTE rcd_num,
                        UBYTE *data,    UBYTE dataLen);
void Cphs_read_eeprom_als_desc();
void Cphs_write_eeprom_als_desc(T_CPHS_ALS_LINE* line);
T_CPHS_RET Cphs_write_eeprom_als(T_CPHS_ALS_INFO* info);
T_CPHS_RET Cphs_read_eeprom_als(T_CPHS_ALS_INFO* info);
void Cphs_get_als_info ();
T_CPHS_PHB_TON cvtTon(T_ACI_TOA_TON ton);
  /* initializes CPHS module, reads CPHS data fields from SIM and caches */
  /* the read data.  */
#ifdef _TESTING__
T_CPHS_INFO_NUM_LIST num_list;
T_CPHS_INFO_NUM_ENTRY num_entry;


int Info_Numbers_Callback(T_CPHS_INFO_NUM_LIST* list, T_CPHS_INFO_NUM_ENTRY* entry)
{	char debug[50];
	TRACE_FUNCTION("Info_Numbers_Callback()");

	if (list != NULL)
	{	sprintf(debug, "INFO_NUMLIST:%s, count:%d",(char*)list->entry[0].alpha.data, list->count);
		TRACE_EVENT(debug);

	}

	if (entry != NULL)
	{
		sprintf(debug, "INFO_NUM:%s",(char*)entry->alpha.data);
		TRACE_EVENT(debug);
	}
	if (list == NULL && entry == NULL)
		TRACE_EVENT("REFRESH DONE!!!!");


}

void Cphs_reading_test()
{	T_CPHS_ALS_INFO als_info;
	T_CPHS_ALS_LINE als_line;
	T_CPHS_INFO cphs_info;
	T_CPHS_CSP cphs_csp;
	T_CPHS_LINE_IND dv_ind;
	T_CPHS_MAILBOX_NUM_LIST mb_nums;
	T_CPHS_OPN op_name;
	T_CPHS_ROAMING_IND roam_ind;

	char debug[60];

	//cphs_Init(Info_Numbers_Callback);
	cphs_refresh(Info_Numbers_Callback);

	//cphs_getInfoNumbers(&num_list,1,1, Info_Numbers_Callback);
	/*cphs_getAlsInfo(&als_info);
	sprintf(debug,"line:%d, locked:%d", als_info.line, als_info.locked);
	TRACE_FUNCTION(debug);
	als_line.line = CPHS_LINE_INDEX_LINE2;
	cphs_getAlsLineDescr(&als_line);
	sprintf(debug,"line:%d, desc:%0.22s", als_line.line, als_line.description.data);
	TRACE_EVENT(debug);
	cphs_getVoiceMessageInd(&dv_ind);
	sprintf(debug, "VM result:%d, line1:%d, line2: %d", dv_ind.result, dv_ind.line1, dv_ind.line2);
	TRACE_EVENT(debug);
	cphs_getCPHSInfo(&cphs_info);
	sprintf(debug, "Phase:%d InfoNum:%d, shortname:%d, mb:%d", cphs_info.phase, cphs_info.info_num, cphs_info.opn_short, cphs_info.mailbox_num);
	TRACE_EVENT(debug);

	cphs_getCSP(&cphs_csp);
	sprintf(debug, "Result: %d, CSP:%x,%x,%x,%x,%x,%x", cphs_csp.result, cphs_csp.csp[0].services,  cphs_csp.csp[1].services,
		 cphs_csp.csp[2].services,  cphs_csp.csp[3].services,  cphs_csp.csp[4].services,  cphs_csp.csp[5].services);
	TRACE_EVENT(debug);
//#ifdef FRED
	cphs_getDivertCallInd(&dv_ind);
	sprintf(debug, "Divert result: %d, line1:%d, line2:%d", dv_ind.result, dv_ind.line1, dv_ind.line2);
	TRACE_EVENT(debug);

//#endif

	cphs_getOPN(&op_name);
	sprintf(debug, "res:%d long_name:%s, short_name%0.22s", op_name.result, op_name.long_name, op_name.short_name);
	TRACE_EVENT(debug);

	cphs_getRoamingInd(&roam_ind);
	sprintf(debug, "Roaming ind: %d", roam_ind);
	TRACE_EVENT(debug);

	cphs_getMailboxNumbers(&mb_nums);

	sprintf(debug, "MBN result: %d, count:%d, first:%0.22s",mb_nums.result, mb_nums.count, mb_nums.entries[0].number);
	TRACE_EVENT(debug);*/


}


void Cphs_writing_test()
{	T_CPHS_ALS_INFO als_info;
	T_CPHS_ALS_LINE als_line;
	T_CPHS_LINE_IND dv_ind;
	T_CPHS_ROAMING_IND roam_ind;
	char debug[50];



	cphs_Init(Info_Numbers_Callback);
	//cphs_refresh(Info_Numbers_Callback);

	als_line.line = CPHS_LINE_INDEX_LINE2;
	memcpy(als_line.description.data, (UBYTE*)"Second Line !!", 8);
	als_line.description.len = 8;
	cphs_setAlsLineDescr(als_line);

	als_info.line = CPHS_LINE_INDEX_LINE2;
	als_info.locked= CPHS_LINEFLAG_SET;
	cphs_setAlsInfo(&als_info);
	cphs_setDivertCallInd(CPHS_LINE_INDEX_LINE1, CPHS_LINEFLAG_NOT_SET);
	cphs_setDivertCallInd(CPHS_LINE_INDEX_LINE2, CPHS_LINEFLAG_SET);

	cphs_setVoiceMessageInd(CPHS_LINE_INDEX_LINE1, CPHS_LINEFLAG_NOT_SET);
	cphs_setVoiceMessageInd(CPHS_LINE_INDEX_LINE2, CPHS_LINEFLAG_SET);

	roam_ind = CPHS_ROAMING_OFF;
	cphs_setRoamingInd(&roam_ind);

	//cphs_selectInfoNumber(2, &num_entry, Info_Numbers_Callback);

}
#endif

 /*
+--------------------------------------------------------------------+
|         MODULE  : CPHS standalone module           |
| STATE   : code                        ROUTINE : cphs_Init |
+--------------------------------------------------------------------+

*/
T_CPHS_RET cphs_Init(T_CPHS_CB_FUNC callback)
{	//check if already initilaised?
	if (cphs_data)
		return CPHS_IS_OK;
	cphs_data = (T_CPHS_CACHED_DATA*)malloc(sizeof(T_CPHS_CACHED_DATA));
	if (cphs_data)
  	{	cphs_data->cphsStatus = CPHS_NOT_PRESENT;
  		cphs_data->simStatus  = SIMOP_UNKNOWN;
  		cphs_data->cphsUpdate = FALSE;
		cphs_data->cphsPrevRead = 0;
		cphs_data->InfoNumberListCB = NULL;
		cphs_data->InfoNumberCB = NULL;
  		Cphs_support_check();
  		cphs_refresh(callback);
  		return CPHS_IS_OK;
	}
	else
		return CPHS_FAIL;
}



 /*
+--------------------------------------------------------------------+
|         MODULE  : CPHS standalone module           |
| STATE   : code                        ROUTINE : cphs_refresh() |
+--------------------------------------------------------------------+


*/

 /* reads CPHS data fields from SIM and updates the cached CPHS data    */
T_CPHS_RET cphs_refresh(T_CPHS_CB_FUNC callback)
 {	T_CPHS_RET res;

 	if (cphs_data EQ NULL)
 	{	TRACE_EVENT("CPHS not initialised");
		return CPHS_NOT_INIT;
 	}
 	//get call divert indicator
	Cphs_get_divert_status ();
 	cphs_data->RefreshCB = callback; //set call back function
 	//get mailbox numbers
	/*Cphs_get_mailbox ();
 	Cphs_operator_name ();
	//get voice message indicator
	Cphs_read_eeprom_als_desc();
	//get als line description
	Cphs_get_mailbox_status ();
	//get CSP
	Cphs_get_csp ();*/

⌨️ 快捷键说明

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