📄 dcw_pb_sim.c
字号:
/*****************************************************************************
** File Name: dcw_pb_sim.c *
** Author: ************* *
** Date: 2006-04-05 *
** Copyright: 2006 ************* All Rights *
** Description: 此文件包含与sim有关的操作 *
/*****************************************************************************
** Important Edit History *
** --------------------------------------------------------------------------*
** DATE NAME DESCRIPTION *
** 2006-04-05 ************* Create *
******************************************************************************/
#ifndef _DCW_PB_SIM_C_
#define _DCW_PB_SIM_C_
#include "dcw_pb.h"
#include "mmi_signal_ext.h"
uint16 g_pb_operate_pos = 0;
uint16 g_pb_operate_offset = 0;
uint16 g_pb_simId = 0;
/****************************************************************************
* Function name : DCW_PB_ReadOneRecordFromSim
* Description : 从sim卡的第 "id" 个记录地址读出一条记录,放入 "record"
* Param : record:读出的记录存放的地址
* id :从sim的哪个记录地址读出数据
* Return : 读出的数据是否有效
* Author: : *************
* Note : None
*****************************************************************************/
BOOLEAN DCW_PB_ReadOneRecordFromSim(T_PB_SIM_RECORD *recordPtr, uint16 id,PHONEBOOK_STORAGE_E storage)
{
uint8 outLen = 0;
uint8 outStr[DCW_PB_M_STR_MAX_LEN];
uint16 len;
PHONEBOOK_ALPHABET_TYPE_E type;
MN_NUMBER_TYPE_E numberType;
MN_NUMBER_PLAN_E numberPlan;
T_PB_SIM_SAVE_RECORD saveRecord;
BOOLEAN ret = FALSE;
MMI_STRING_T defaultStr;
SCI_MEMSET(recordPtr,0x00,sizeof(T_PB_SIM_RECORD));
/* 读取的位置 */
saveRecord.entry_id = (id + 1);
/* 读取 */
if(PHONEBOOK_ReadPhonebookEntry(storage, &saveRecord) == MN_RETURN_SUCCESS)
{
if(saveRecord.number_len > 0)
{
/* 姓名 */
if(saveRecord.alpha_len > 0)
{
SCI_TRACE_LOW("\r\n--DCW_PB_ReadOneRecordFromSim-- g_pb.sim.nameMaxLen = %d", g_pb.sim.nameMaxLen);
SCI_TRACE_LOW("\r\n--DCW_PB_ReadOneRecordFromSim-- saveRecord.alpha_len = %d", saveRecord.alpha_len);
SCI_ASSERT(PHONEBOOK_DecodeAlphabetWithSimStandard
(&type, saveRecord.alpha_len, saveRecord.alpha, &outLen, outStr) == MN_RETURN_SUCCESS);
/* ucs2码:两个uint8字符表示一个显示单元 */
/* 非ucs2码:一个uint8表示一个显示单元,一般是ASCII码 */
recordPtr->outerName.ucs2 = (type == PHONEBOOK_ALPHABET_UCS2) ? TRUE : FALSE;
recordPtr->outerName.len = (uint8)MIN(g_pb.sim.nameMaxLen * 2 , outLen);
SCI_MEMCPY(recordPtr->outerName.array, outStr, recordPtr->outerName.len);
SCI_TRACE_LOW("\r\n--DCW_PB_ReadOneRecordFromSim-- outLen = %d", outLen);
}
else
{ /* 如果无姓名,给一个默认的名字 */
MMI_GetLabelTextByLang(TXT_CC_UNKNOW_NUM,&defaultStr);
recordPtr->outerName.ucs2 = defaultStr.is_ucs2;
recordPtr->outerName.len = MIN(g_pb.sim.nameMaxLen * 2, defaultStr.length);
SCI_MEMCPY(recordPtr->outerName.array, defaultStr.str_ptr, recordPtr->outerName.len);
}
/* 电话号码 */
len =(uint8)MIN(saveRecord.number_len, g_pb.sim.numberMaxLen);
recordPtr->num.npi_ton = MMI_ChangeTypePlanToUint8(saveRecord.ton, saveRecord.npi);
recordPtr->num.len = len;
SCI_MEMCPY(recordPtr->num.number, saveRecord.number, len);
/* 在Sim卡上的位置 */
recordPtr->id = (saveRecord.entry_id - 1);
ret = TRUE;
}
}
return ret;
}
BOOLEAN DCW_PB_writeLocalRecordToSim(T_PB_SIM_RECORD *recordPtr,uint16 index)
{
PHONEBOOK_ALPHABET_TYPE_E type;
T_PB_SIM_SAVE_RECORD saveRecord;
T_PB_L_STRING stringInfo;
if(recordPtr->outerName.ucs2 == TRUE)
{
type = PHONEBOOK_ALPHABET_UCS2;
}
else
{
type = PHONEBOOK_ALPHABET_ASCII;
}
SCI_ASSERT(PHONEBOOK_EncodeAlphabetToSimStandard(type, recordPtr->outerName.len,
recordPtr->outerName.array, &stringInfo.len,stringInfo.array) == MN_RETURN_SUCCESS );
saveRecord.alpha_len = MIN(DCW_PB_S_STR_MAX_LEN,stringInfo.len);
SCI_MEMCPY(saveRecord.alpha, stringInfo.array, saveRecord.alpha_len);
saveRecord.ton = (MN_NUMBER_TYPE_E)(recordPtr->num.npi_ton >> 4);
saveRecord.npi = (MN_NUMBER_PLAN_E)(recordPtr->num.npi_ton & 0x0f);
saveRecord.number_len = MIN(DCW_PB_BCD_NUMBER_MAX_LEN,recordPtr->num.len);
SCI_MEMCPY(saveRecord.number,recordPtr->num.number,saveRecord.number_len);
saveRecord.entry_id = index + 1;
if(PHONEBOOK_UpdatePhonebookEntry(PHONEBOOK_MSISDN_STORAGE,&saveRecord) == MN_RETURN_SUCCESS)
{
return TRUE;
}
{
return FALSE;
}
}
/****************************************************************************
* Function name : DCW_PB_WriteOneRecordToSim
* Description : 向SIM中写入一条记录
* Param : record:写入记录存放的地址
* isAdd :是否增加
* Return : None
* Author: : *************
* Note : None
*****************************************************************************/
BOOLEAN DCW_PB_WriteOneRecordToSim(T_PB_SIM_RECORD *recordPtr,BOOLEAN isAdd)
{
uint16 i = 0;
uint16 emptyId;
uint16 pos;
PHONEBOOK_ALPHABET_TYPE_E type;
T_PB_SIM_SAVE_RECORD saveRecord;
T_PB_L_STRING stringInfo;
SCI_ASSERT(recordPtr != PNULL);
SCI_MEMSET(&saveRecord, 0x00, sizeof(T_PB_SIM_SAVE_RECORD));
if(recordPtr->outerName.ucs2 == TRUE)
{
type = PHONEBOOK_ALPHABET_UCS2;
}
else
{
type = PHONEBOOK_ALPHABET_ASCII;
}
SCI_ASSERT(PHONEBOOK_EncodeAlphabetToSimStandard(type, recordPtr->outerName.len,
recordPtr->outerName.array, &stringInfo.len,stringInfo.array) == MN_RETURN_SUCCESS );
saveRecord.alpha_len = MIN(DCW_PB_S_STR_MAX_LEN,stringInfo.len);
SCI_MEMCPY(saveRecord.alpha, stringInfo.array, saveRecord.alpha_len);
saveRecord.ton = (MN_NUMBER_TYPE_E)(recordPtr->num.npi_ton >> 4);
saveRecord.npi = (MN_NUMBER_PLAN_E)(recordPtr->num.npi_ton & 0x0f);
saveRecord.number_len = MIN(DCW_PB_BCD_NUMBER_MAX_LEN,recordPtr->num.len);
SCI_MEMCPY(saveRecord.number,recordPtr->num.number,saveRecord.number_len);
SCI_TRACE_LOW("\r\n--DCW_PB_WriteOneRecordToSim--saveRecord.alpha_len = %d", saveRecord.alpha_len);
if(isAdd == TRUE)
{
recordPtr->id = DCW_PB_getEmptyId(&g_pb.sim.idManager);
}
saveRecord.entry_id = recordPtr->id + 1;
if(PHONEBOOK_UpdatePhonebookEntry(PHONEBOOK_SIM_STORAGE,&saveRecord) == MN_RETURN_SUCCESS)
{ /*******************Trace************/
g_pb_simId = saveRecord.entry_id - 1;
if(isAdd == TRUE)
{
SCI_TRACE_LOW("\r\n--DCW_PB_WriteOneRecordToSim--Add--Sim ID = %d", g_pb_simId);
}
else
{
SCI_TRACE_LOW("\r\n--DCW_PB_WriteOneRecordToSim--Modify--Sim ID = %d", g_pb_simId);
}
return TRUE;
}
else
{
SCI_TRACE_LOW("\r\n--DCW_PB_WriteOneRecordToSim--Write Failed : %d",recordPtr->id);
g_pb.operate.processing = FALSE;
return FALSE;
}
}
/****************************************************************************
* Function name : DCW_PB_deleteOneRecordFromSim
* Description : 从SIM中删除一条记录
* Param : None
* Return : None
* Author: : *************
* Note : None
*****************************************************************************/
void DCW_PB_deleteOneRecordFromSim(uint16 pos)
{
DCW_PB_deleteSimRecordCallBack(pos);
}
void DCW_PB_deleteManyRecordsFromSim(void)
{
T_PB_RECORD_ITEM_ADDR *pAddr;
pAddr = &g_pb.operate.listInfo.addrManager.ptr[g_pb.operate.listInfo.selectItemPtr[g_pb.operate.listInfo.selectNumber - 1]];
SCI_ASSERT(pAddr->type == PHONEBOOK_SIM_STORAGE);
DCW_PB_deleteSimRecordCallBack(pAddr->pos);
g_pb.operate.listInfo.selectNumber--;
}
/****************************************************************************
* Function name : DCW_PB_deleteAllRecordFromSim
* Description : 删除SIM卡中的所有记录
* Param : void
* Return : None
* Author: : *************
* Note : None
*****************************************************************************/
void DCW_PB_deleteAllRecordFromSim(void)
{
if(g_pb.sim.usedRecord > 0)
{
g_pb_simId = 0;
DCW_PB_deleteSimRecordCallBack(g_pb.sim.usedRecord - 1);
}
}
/****************************************************************************
* Function name : DCW_PB_deleteSimRecordCallBack
* Description : PS回调函数
* Param : pos 删除的条目
* Return : None
* Author: : *************
* Note : None
*****************************************************************************/
BOOLEAN DCW_PB_deleteSimRecordCallBack(uint16 pos)
{
uint16 i;
uint16 index;
uint16 recordId;
uint16 curPosInAll;
T_PB_SIM_RECORD simRecord;
if(pos >= g_pb.sim.usedRecord)
{
SCI_TRACE_LOW("\r\n--DCW_PB_deleteSimRecordCallBack---go_out---pos = %d,max = %d",pos,g_pb.sim.usedRecord);
return FALSE;
}
DCW_PB_adjustNumList(PNULL,(void *)&g_pb.sim.recordPtr[pos],PHONEBOOK_SIM_STORAGE,PB_DELETE_E);
recordId = g_pb.sim.recordPtr[pos].id;
curPosInAll = g_pb.sim.recordPtr[pos].posInAll;
if((pos + 1)< g_pb.sim.usedRecord)
{
if(g_pb.sim.recordPtr[pos].keyEqualFront == FALSE &&
g_pb.sim.recordPtr[pos + 1].keyEqualFront == TRUE)
{
g_pb.sim.recordPtr[pos + 1].keyEqualFront = FALSE;
}
}
for(i = pos; i < g_pb.sim.usedRecord; i++)
{
g_pb.sim.recordPtr[i] = g_pb.sim.recordPtr[i + 1];
g_pb.sim.recordPtr[i].posInAll--;
}
g_pb.sim.usedRecord--;
for(i = 0; i < g_pb.nv.usedRecord; i++)
{
if(g_pb.nv.recordPtr[i].posInAll > curPosInAll)
{
g_pb.nv.recordPtr[i].posInAll--;
}
}
if(PHONEBOOK_DeletePhonebookEntry(PHONEBOOK_SIM_STORAGE,(uint32)(recordId + 1)) == MN_RETURN_SUCCESS)
{
g_pb_simId = recordId;
SCI_TRACE_LOW("\r\n--DCW_PB_deleteSimRecordCallBack---TRUE--Sim ID = %d", recordId);
return TRUE;
}
else
{
SCI_TRACE_LOW("\r\n--DCW_PB_deleteSimRecordCallBack---FALSE--Sim ID = %d", recordId);
g_pb.operate.processing = FALSE;
return FALSE;
}
}
/****************************************************************************
* Function name : DCW_PB_copyOneRecordFromNvToSim
* Description : 把一条NV记录拷贝到SIM卡
* Param : offset 电话类型
* Return : None
* Author: : *************
* Note : None
*****************************************************************************/
void DCW_PB_copyOneRecordFromNvToSim(uint8 offset)
{
uint16 pos;
BOOLEAN ret;
T_PB_RECORD_ITEM_ADDR *pAddr;
T_PB_NV_RECORD *nvRecordPtr;
SCI_MEMSET(&g_pb_simRecord,0x00,sizeof(T_PB_SIM_RECORD));
pAddr = DCW_PB_getRecordAddr(g_pb.operate.listInfo.selectItemPtr[0]);
SCI_ASSERT(pAddr != PNULL);
pos = pAddr->pos;
nvRecordPtr = &g_pb.nv.recordPtr[pos];
g_pb_simRecord.outerName = nvRecordPtr->outerName;
g_pb_simRecord.innerName = nvRecordPtr->innerName;
g_pb_simRecord.shortName = nvRecordPtr->shortName;
g_pb_simRecord.num = nvRecordPtr->num[offset];
ret = DCW_PB_WriteOneRecordToSim(&g_pb_simRecord,TRUE);
if(ret == TRUE)
{
DCW_PB_adjustNumList((void *)&g_pb_simRecord,PNULL,PHONEBOOK_SIM_STORAGE,PB_ADD_E);
DCW_PB_insertOneRecordToSimList(&g_pb_simRecord);
}
}
void DCW_PB_copyManyRecordsFromNvToSim(void)
{
T_PB_RECORD_ITEM_ADDR *pAddr;
g_pb_operate_pos = 0;
g_pb_operate_offset = 0;
g_pb_simId = 0;
pAddr = DCW_PB_getRecordAddr(g_pb.operate.listInfo.selectItemPtr[g_pb.operate.listInfo.selectNumber-1]);
DCW_PB_updateSimRecordCallBack(pAddr->pos,pAddr->offset,TRUE);
g_pb.operate.listInfo.selectNumber--;
}
/****************************************************************************
* Function name : DCW_PB_copyAllRecordsFromNvToSim
* Description : 把所有NV记录拷贝到SIM卡
* Param : offset 电话类型
* Return : None
* Author: : *************
* Note : None
*****************************************************************************/
void DCW_PB_copyAllRecordsFromNvToSim()
{
g_pb_operate_pos = 0;
g_pb_operate_offset = 0;
g_pb_simId = 0;
DCW_PB_updateSimRecordCallBack(0,0,TRUE);
}
/****************************************************************************
* Function name : DCW_PB_updateSimRecordCallBack
* Description : 向SIM中写入一条记录
* Param : pos:写入记录存放的地址
offset:电话偏移
* add :是否增加
* Return : None
* Author: : *************
* Note : None
*****************************************************************************/
BOOLEAN DCW_PB_updateSimRecordCallBack(uint16 pos,uint16 offset,BOOLEAN isAdd)
{
uint16 i;
uint16 j;
BOOLEAN ret;
SCI_TRACE_LOW("\r\n--DCW_PB_updateSimRecordCallBack---START--pos = %d,offset = %d", pos,offset);
if(offset >= DCW_PB_MAX_NV_PHONE_NUM)
{
pos++;
offset = 0;
}
if(pos >= g_pb.nv.maxRecord)
{
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -