📄 cphs_mod.c
字号:
/*-----------------------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 + -