📄 pcsyn_application.c
字号:
l_phb_index[i].number[2]=GetShortNumber((char *)buffer->office);
l_phb_index[i].flag=buffer->info;
/* l_phb_index[i].flag=SetAddFlag(i);//#define SetAddFlag(i) ((l_phb_index[i].flag & 0x3F) | 0x40)
l_phb_index[i].flag|=0x0F;// set grouping=0x0f,it means no group;此时一般为0x4F,可以用SetGroupingFlag(i,j)来指定组号
l_phb_index[i].flag=SetFirstNumFlag(i, 1);//设置第一个号码为首拨号码,此时一般为0x5F
*/
if( CurrentTable!=(i/PHB_table_len) )
{
if( flash_PBread(PBTable[i/PHB_table_len])!=0 )
CurrentTable=i/PHB_table_len;
}
memcpy(FFS_PBData.NVMBook[i%PHB_table_len].name,buffer->name,PHB_name_len+3);//名字一定要按全长度覆盖
CompressNum((char *)buffer->number,FFS_PBData.NVMBook[i%PHB_table_len].number);
CompressNum((char *)buffer->home,FFS_PBData.NVMBook[i%PHB_table_len].home);
CompressNum((char *)buffer->office,FFS_PBData.NVMBook[i%PHB_table_len].office);
memcpy(FFS_PBData.NVMBook[i%PHB_table_len].memo,buffer->memo,PHB_memo_len+3);
FFS_PBData.NVMBook[i%PHB_table_len].info=l_phb_index[i].flag;
flash_PBwrite(PBTable[CurrentTable]);
if (index==0)//是手机新加记录
{
NVMTotal=NVMTotal+1;
PHBKTotal=PHBKTotal+1;
}
Create_SORT_Table(l_phb_index,ALL_NUMBER_LIST);
break;
case SIM_BOOK_SEL:
memset(&entry,0,sizeof(T_MFW_PHB_ENTRY));
ReadSIMRecord(i,&entry);
memcpy(entry.name.data, buffer->name, PHB_name_len);
entry.name.len=PHB_name_len;
//smsentry.name.len =wstrlen((char*)entries.name.data);
memcpy(entry.number, buffer->number, PHB_number_len);
if(phb_store_entry(PHB_ADN,&entry,&status)!=MFW_PHB_OK)
return App_Error_ModifyError;
GetSIMData();
Create_SORT_Table(l_phb_index,ALL_NUMBER_LIST);
//GetSIMData() will do SetAddFlag, SIMTotal++, PHBKTotal++, Create_SORT_Table(l_phb_index,ALL_NUMBER_LIST )
break;
default:
return App_Error_IllegalCmdData;
}
return App_Error_NoError;
}
unsigned int getPhoneBook(PC_PHB_Content *PHB_content, BYTE type, BYTE index)
{
PhbkDetailItem *buffer = &(PHB_content->phkitem);
PhbkDetailItem l_phb_NVMEntry;
int i,j;
if(index>PHBKTotal) //index带上来的是从1开始的顺序号
return App_Error_InfoError;
//l_phb_index的前500个是NVM类型的,后256个是SIM类型的
// Create_SORT_Table(l_phb_index,ALL_NUMBER_LIST);
//每次全局查找l_phb_index中的有效电话簿记录,
//获得的i 就是第index个有效记录所对应的在l_phb_index中的索引值
for (i=0,j=0;i<ALL_NUMBER_LIST;i++)
{
if (CheckFlag(i))
{
j=j+1;
if (j==index) break;
}
}
// PCSYN_TRACE_EVENT(("<<<<found index=%d>>>>",i));
switch(l_phb_index[i].phonebook)
{
case NVM_BOOK_SEL:
// memset((char *)l_phb_NVMentry.name,'\0',sizeof(PhbkDetailItem));
if (ReadNVMRecord(l_phb_index[i].index,&l_phb_NVMEntry)==TRUE)
{
PHB_content->phonebook=NVM_BOOK_SEL;
PHB_content->id=l_phb_index[i].index+1;//保证index从1开始,0作为新记录的标志
memcpy(buffer, &l_phb_NVMEntry, sizeof(PhbkDetailItem));
}
else
return App_Error_ReadError;
break;
case SIM_BOOK_SEL:
PHB_content->phonebook=SIM_BOOK_SEL;
PHB_content->id=l_phb_index[i].index;
memcpy((char *)buffer->name,(char *)l_phb_index[i].name,PHB_name_len+3);//PHB_name_len+3);
UnCompressNum((char *)SimNumber[i-ALL_NVM_LIST],buffer->number);
memset(buffer->office, '\0', sizeof(buffer->office) );
memset(buffer->home, '\0', sizeof(buffer->home) );
memset(buffer->memo, '\0', sizeof(buffer->memo) );
buffer->info=l_phb_index[i].flag;//info has the phbitem group infomation
break;
default:
return App_Error_ReadError;
}
return App_Error_NoError;
}
unsigned int pc_interface_PHB(PC_Interface_Info * info, PC_App_Cmd_PHB *cmd)
{
static PC_PHB_Info_dl* PHB_info_dl;
static T_MFW_PHB_STATUS status;
switch(cmd->cid2)
{
case PC_AppCID2_Read:
info->flag = PC_IF_FLAGS_DATADL;
info->size_dlbuff = sizeof(PC_PHB_Content);
return getPhoneBook((PC_PHB_Content *)( info->pdata_dlbuff),cmd->type, cmd->index);
break;
case PC_AppCID2_Write:
if(info->flag == PC_IF_FLAGS_CMD)
info->flag = PC_IF_FLAGS_DATAUL;
else
return editPhonebook((PC_PHB_Content *)(info->pdata_ulbuff),cmd->type,cmd->index);
break;
case PC_AppCID2_Delete:
if(info->flag == PC_IF_FLAGS_CMD)
info->flag = PC_IF_FLAGS_DATAUL;
else
{
if (info->size_ulbuff>0)
return delphonebook((DelRec *)info->pdata_ulbuff,((int)info->size_ulbuff)/4);
}
break;
case PC_AppCID2_Info://get phonebook info
info->flag = PC_IF_FLAGS_DATADL;
info->size_dlbuff = sizeof(PC_PHB_Info_dl);
PHB_info_dl = (PC_PHB_Info_dl *)info->pdata_dlbuff;
GetSIMData();
PHBKTotal=NVMTotal+SIMTotal;
PHB_info_dl->NVMTotal = NVMTotal;
PHB_info_dl->SIMTotal = SIMTotal;
PHB_info_dl->MaxNVM= ALL_NVM_LIST;
status.book=PHB_ADN;
if (phb_get_status(&status)==MFW_PHB_OK)
PHB_info_dl->MaxSIM=status.max_entries;
else
PHB_info_dl->MaxSIM=0;
break;
default:
return App_Error_UnknownCID2;
}
return App_Error_NoError;
}
/******************************phone book end*********************************/
/******************************short message *********************************/
#if 0
unsigned int getShortMessage(PC_Interface_Info * info,BYTE type, BYTE index)
{
PC_SMS_Content * SMS_content=(PC_SMS_Content *)info->pdata_dlbuff;
FlashSms *buffer = &(SMS_content->flashsmsitem);
int i,count;
T_FindName searchPhdata;
static T_MFW_SMS_MSG msg_list[MAX_MESSAGES];
//static T_MFW_SMS_IDX msg_list[MAX_MESSAGES];
// if(index>FlashSMStotal)
// return App_Error_NoFound;
if (type==PCSYN_SMS_FLASH_MO||type==PCSYN_SMS_FLASH_MT)
{
if (type==PCSYN_SMS_FLASH_MO)//需要将pcsyn类型翻译成MFW类型
SortFlashSms(MFW_SMS_FLASH_MO,Flash_sms_messages);
if (type==PCSYN_SMS_FLASH_MT)
SortFlashSms(MFW_SMS_FLASH_MT,Flash_sms_messages);
if( CurrentFlashSmsTable!=Flash_sms_sort_index[index-1].index/FlashSMS_table_len )
{
CurrentFlashSmsTable=Flash_sms_sort_index[index-1].index/FlashSMS_table_len;
flash_Smsread(FlashSMSTable[CurrentFlashSmsTable]);
}
i=Flash_sms_sort_index[index-1].index%FlashSMS_table_len;
memcpy(buffer, &FFS_SMSData.NVMSMS[i], sizeof(FlashSms));
switch (FFS_SMSData.NVMSMS[i].state)//pc端定义的类型和手机定义的类型可能不一致,所以传给pc端的类型信息需要翻译成pc端可以识别的
{
case MFW_SMS_UNKNOWN:buffer->state=PCSYN_SMS_UNKNOWN;break;
case MFW_SMS_UNREAD: buffer->state=PCSYN_SMS_UNREAD;break; /* received unread message */
case MFW_SMS_READ: buffer->state=PCSYN_SMS_READ;break; /* received read message */
case MFW_SMS_STOR_UNSENT: buffer->state=PCSYN_SMS_STOR_UNSENT;break; /* stored unsent messgae */
case MFW_SMS_STOR_SENT: buffer->state=PCSYN_SMS_STOR_SENT;break; /* stored sent message */
case MFW_SMS_ALL: buffer->state=PCSYN_SMS_ALL;break;
case MFW_SMS_NotVOICE: buffer->state=PCSYN_SMS_NotVOICE;break;
case MFW_SMS_FLASH: buffer->state=PCSYN_SMS_FLASH;break; /*FLASH SMS*/
case MFW_SMS_FLASH_MO: buffer->state=PCSYN_SMS_FLASH_MO;break;
case MFW_SMS_FLASH_MT: buffer->state=PCSYN_SMS_FLASH_MT;break;
case MFW_SMS_MO: buffer->state=PCSYN_SMS_MO;break; /* MO SMS message */
case MFW_SMS_MT: buffer->state=PCSYN_SMS_MT;break; /* MT SMS message */
case MFW_SMS_INVALID: buffer->state=PCSYN_SMS_INVALID;break;/*SPR1830*/
case MFW_SMS_VOICE: buffer->state=PCSYN_SMS_VOICE;break; /* voice mail message */
}
if( FindNumber((char*)FFS_SMSData.NVMSMS[i].addr, (T_FindName *)&searchPhdata) )
memcpy((char*)SMS_content->name,(char*)searchPhdata.name,13);
else
memcpy((char*)SMS_content->name,(char*)FFS_SMSData.NVMSMS[i].addr,12);
}
else
if(type==PCSYN_SMS_ALL)
{
memset(msg_list,0,sizeof(msg_list));
count=sms_message_list(MFW_SMS_ALL,msg_list, MAX_MESSAGES);
// count=sms_index_list(MFW_SMS_ALL,msg_list, MAX_MESSAGES);
buffer->id=msg_list[index-1].index;
if (msg_list[index-1].index==-1) return App_Error_ReadError;
memcpy((char*)buffer->addr,(char*)msg_list[index-1].addr.number,MFW_NUM_LEN);
memcpy(&buffer->time,&msg_list[index-1].rctp, sizeof(T_MFW_SMS_SCTP));
memset(buffer->sms_msg,0,MAX_MSG_LEN);
switch (msg_list[index-1].stat)
{
case MFW_SMS_UNKNOWN:buffer->state=PCSYN_SMS_UNKNOWN;break;
case MFW_SMS_UNREAD: buffer->state=PCSYN_SMS_UNREAD;break; /* received unread message */
case MFW_SMS_READ: buffer->state=PCSYN_SMS_READ;break; /* received read message */
case MFW_SMS_STOR_UNSENT: buffer->state=PCSYN_SMS_STOR_UNSENT;break; /* stored unsent messgae */
case MFW_SMS_STOR_SENT: buffer->state=PCSYN_SMS_STOR_SENT;break; /* stored sent message */
case MFW_SMS_ALL: buffer->state=PCSYN_SMS_ALL;break;
case MFW_SMS_NotVOICE: buffer->state=PCSYN_SMS_NotVOICE;break;
case MFW_SMS_FLASH: buffer->state=PCSYN_SMS_FLASH;break; /*FLASH SMS*/
case MFW_SMS_FLASH_MO: buffer->state=PCSYN_SMS_FLASH_MO;break;
case MFW_SMS_FLASH_MT: buffer->state=PCSYN_SMS_FLASH_MT;break;
case MFW_SMS_MO: buffer->state=PCSYN_SMS_MO;break; /* MO SMS message */
case MFW_SMS_MT: buffer->state=PCSYN_SMS_MT;break; /* MT SMS message */
case MFW_SMS_INVALID: buffer->state=PCSYN_SMS_INVALID;break;/*SPR1830*/
case MFW_SMS_VOICE: buffer->state=PCSYN_SMS_VOICE;break; /* voice mail message */
}
buffer->flag=TRUE;
if( FindNumber((char*)msg_list[index-1].addr.number, (T_FindName *)&searchPhdata) )
memcpy((char*)SMS_content->name,(char*)searchPhdata.name,13);
else
memcpy((char*)SMS_content->name,(char*)msg_list[index-1].addr.number,12);
g_pcsyncstatus = 1;
if( sms_read(MFW_SMS_MESSAGE, msg_list[index-1].index)!=MFW_SMS_OK )
{
g_pcsyncstatus =0;
return App_Error_ReadError;//错误信息
}
/* switch( sAT_PlusCMGR(CMD_SRC_LCL, msg_list[index-1].index, SMS_READ_Preview))
{
case AT_EXCT :
break;
case AT_CMPL:
break;
case AT_FAIL:
return 0x81;
break;
case AT_BUSY:
return 0x82;
break;
}*/
info->status = PC_Error_WaitData;
pc_waitdata.info = info;
pc_waitdata.status=1;
// PCSYN_TRACE_EVENT(("<<<<smstype=sim,count=%d,index :%d,%08x>>>>",count,msg_list[index-1].index,buffer));
return PC_Error_WaitData;//返回值为等待,用于异步操作
}
else
return App_Error_InfoError;
return App_Error_NoError;
}
#else
unsigned int getShortMessage(PC_Interface_Info * info,BYTE type, BYTE index)
{
PC_SMS_Content * SMS_content=(PC_SMS_Content *)info->pdata_dlbuff;
int i,count;
T_FindName searchPhdata;
static T_MFW_SMS_MSG msg_list[MAX_MESSAGES];
//static T_MFW_SMS_IDX msg_list[MAX_MESSAGES];
// if(index>FlashSMStotal)
// return App_Error_NoFound;
if (type==PCSYN_SMS_FLASH_MO||type==PCSYN_SMS_FLASH_MT)
{
if (type==PCSYN_SMS_FLASH_MO)//需要将pcsyn类型翻译成MFW类型
SortFlashSms(MFW_SMS_FLASH_MO,Flash_sms_messages);
if (type==PCSYN_SMS_FLASH_MT)
SortFlashSms(MFW_SMS_FLASH_MT,Flash_sms_messages);
if( CurrentFlashSmsTable!=Flash_sms_sort_index[index-1].index/FlashSMS_table_len )
{
CurrentFlashSmsTable=Flash_sms_sort_index[index-1].index/FlashSMS_table_len;
flash_Smsread(FlashSMSTable[CurrentFlashSmsTable]);
}
i=Flash_sms_sort_index[index-1].index%FlashSMS_table_len;
SMS_content->id=FFS_SMSData.NVMSMS[i].id;
memcpy((char *)SMS_content->addr,(char *)FFS_SMSData.NVMSMS[i].addr,40);
memcpy(&SMS_content->time, &FFS_SMSData.NVMSMS[i].time, sizeof(T_MFW_SMS_SCTP));
switch (FFS_SMSData.NVMSMS[i].state)//pc端定义的类型和手机定义的类型可能不一致,所以传给pc端的类型信息需要翻译成pc端可以识别的
{
case MFW_SMS_UNKNOWN:SMS_content->state=PCSYN_SMS_UNKNOWN;break;
case MFW_SMS_UNREAD:SMS_content->state=PCSYN_SMS_UNREAD;break; /* received unread message */
case MFW_SMS_READ: SMS_content->state=PCSYN_SMS_READ;break; /* received read message */
case MFW_SMS_STOR_UNSENT: SMS_content->state=PCSYN_SMS_STOR_UNSENT;break; /* stored unsent messgae */
case MFW_SMS_STOR_SENT: SMS_content->state=PCSYN_SMS_STOR_SENT;break; /* stored sent message */
case MFW_SMS_ALL: SMS_content->state=PCSYN_SMS_ALL;break;
case MFW_SMS_NotVOICE: SMS_content->state=PCSYN_SMS_NotVOICE;break;
case MFW_SMS_FLASH: SMS_content->state=PCSYN_SMS_FLASH;break; /*FLASH SMS*/
case MFW_SMS_FLASH_MO: SMS_content->state=PCSYN_SMS_FLASH_MO;break;
case MFW_SMS_FLASH_MT: SMS_content->state=PCSYN_SMS_FLASH_MT;break;
case MFW_SMS_MO: SMS_content->state=PCSYN_SMS_MO;break; /* MO SMS message */
case MFW_SMS_MT: SMS_content->state=PCSYN_SMS_MT;break; /* MT SMS message */
case MFW_SMS_INVALID: SMS_content->state=PCSYN_SMS_INVALID;break;/*SPR1830*/
case MFW_SMS_VOICE: SMS_content->state=PCSYN_SMS_VOICE;break; /* voice mail message */
}
if( FindNumber((char*)FFS_SMSData.NVMSMS[i].addr, (T_FindName *)&searchPhdata) )
memcpy((char*)SMS_content->name,(char*)searchPhdata.name,13);
else
memcpy((char*)SMS_content->name,(char*)FFS_SMSData.NVMSMS[i].addr,12);
SMS_content->flag=FFS_SMSData.NVMSMS[i].flag;
SMS_content->dcs=FFS_SMSData.NVMSMS[i].dcs;
SMS_content->msg_len=FFS_SMSData.NVMSMS[i].msg_len;
memcpy((char*)SMS_content->sms_msg,(char*)FFS_SMSData.NVMSMS[i].sms_msg,SMS_content->msg_len);
info->size_dlbuff=sizeof(PC_SMS_Content)-1+SMS_content->msg_len;
}
else
{
if(type==PCSYN_SMS_ALL)
{
memset(msg_list,0,sizeof(msg_list));
count=sms_message_list(MFW_SMS_ALL,msg_list, MAX_MESSAGES);
// count=sms_index_list(MFW_SMS_ALL,msg_list, MAX_MESSAGES);
SMS_content->id=msg_list[index-1].index;
if (msg_list[index-1].index==-1) return App_Error_ReadError;
memcpy((char*)SMS_content->addr,(char*)msg_list[index-1].addr.number,40);
memcpy(&SMS_content->time,&msg_list[index-1].rctp, sizeof(T_MFW_SMS_SCTP));
//memset(SMS_content->sms_msg,0,SMS_content->msg_len);
switch (msg_list[index-1].stat)
{
case MFW_SMS_UNKNOWN:SMS_content->state=PCSYN_SMS_UNKNOWN;break;
case MFW_SMS_UNREAD:SMS_content->state=PCSYN_SMS_UNREAD;break; /* received unread message */
case MFW_SMS_READ: SMS_content->state=PCSYN_SMS_READ;break; /* received read message */
case MFW_SMS_STOR_UNSENT: SMS_content->state=PCSYN_SMS_STOR_UNSENT;break; /* stored unsent messgae */
case MFW_SMS_STOR_SENT: SMS_content->state=PCSYN_SMS_STOR_SENT;break; /* stored sent message */
case MFW_SMS_ALL: SMS_content->state=PCSYN_SMS_ALL;break;
case MFW_SMS_NotVOICE: SMS_content->state=PCSYN_SMS_NotVOICE;break;
case MFW_SMS_FLASH: SMS_content->state=PCSYN_SMS_FLASH;break; /*FLASH SMS*/
case MFW_SMS_FLASH_MO: SMS_content->state=PCSYN_SMS_FLASH_MO;break;
case MFW_SMS_FLASH_MT: SMS_content->state=PCSYN_SMS_FLASH_MT;break;
case MFW_SMS_MO: SMS_content->state=PCSYN_SMS_MO;break; /* MO SMS message */
case MFW_SMS_MT: SMS_content->state=PCSYN_SMS_MT;break; /* MT SMS message */
case MFW_SMS_INVALID: SMS_content->state=PCSYN_SMS_INVALID;break;/*SPR1830*/
case MFW_SMS_VOICE: SMS_content->state=PCSYN_SMS_VOICE;break; /* voice mail message */
}
SMS_content->flag=TRUE;
if( FindNumber((char*)msg_list[index-1].addr.number, (T_FindName *)&searchPhdata) )
memcpy((char*)SMS_content->name,(char*)searchPhdata.name,13);
else
memcpy((char*)SMS_content->name,(char*)msg_list[index-1].addr.number,12);
g_pcsyncstatus = 1;
if( sms_read(MFW_SMS_MESSAGE, msg_list[index-1].index)!=MFW_SMS_OK )
{
g_pcsyncstatus =0;
return App_Error_ReadError;//错误信息
}
info->status = PC_Error_WaitData;
pc_waitdata.info = info;
pc_waitdata.status=1;
// PCSYN_TRACE_EVENT(("<<<<smstype=sim,count=%d,index :%d,%08x>>>>",count,msg_list[index-1].index,buffer));
return PC_Error_WaitData;//返回值为等待,用于异步操作
}
else
return App_Error_InfoError;
}
return App_Error_NoError;
}
#endif
#if 0
void Waitdata_getsms(void * p, BYTE ctype,U8 para)
{
static T_MFW_SMS_MT *mt;
static T_MFW_SMS_MO *mo;
PC_SMS_Content * SMS_content;
FlashSms *buffer;
if(pc_waitdata.status == 0)
return;
pc_waitdata.status = 0;
if(pc_waitdata.info == 0)
return;
if(pc_waitdata.info->status != PC_Error_WaitData)
return;
//fill info by parameter
if (p NEQ NULL)
{
SMS_content=(PC_SMS_Content *)(pc_waitdata.info->pdata_dlbuff);
buffer= &(SMS_content->flashsmsitem);
switch(ctype)
{
case MFW_SMS_MT:
mt=(T_MFW_SMS_MT *)p;
buffer->msg_len=mt->msg_len;
memcpy((char*)buffer->sms_msg,(char*)mt->sms_msg,mt->msg_len);
buffer->dcs=mt->dcs;
break;
case MFW_SMS_MO:
mo=(T_MFW_SMS_MO *)p;
buffer->msg_len=mo->msg_len;
memcpy((char*)buffer->sms_msg,(char*)mo->sms_msg,mo->msg_len);
buffer->dcs=mo->dcs;
break;
}
}
//PCSYN_TRACE_EVENT(("<<<<callback size=%d ,%08x>>>>",buffer->msg_len,buffer));
//PCSYN_TRACE_EVENT(("<<<<g_pcsyncstatus=%d>>>>",g_pcsyncstatus));
pc_waitdata.info =0;
{
T_MMI_PCSYN_DATAWAIT_IND parameter;
//zkc add 07/22/04
switch(para)
{
case MFW_SMS_OK:
parameter.dummy=PC_Error_NoError;
PCSYN_TRACE_EVENT(("<<<<get sms ok callback >>>>"));
break;
case CMD_SMS_READ: /* read message */
parameter.dummy=App_Error_ReadError;
PCSYN_TRACE_EVENT(("<<<<get sms fail callback >>>>"));
break;
default:
parameter.dummy=App_Error_DefaultError;
PCSYN_TRACE_EVENT(("<<<<get sms default fail callback=%d>>>>",para));
}
M_MMI_PCSYN_WAITDATA_IND(¶meter);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -