mmismsread.c
来自「是一个手机功能的模拟程序」· C语言 代码 · 共 1,783 行 · 第 1/5 页
C
1,783 行
$Returns: if success return location else return 0
$Arguments:
*******************************************************************************/
void FreshTableId(UBYTE id)
{
int i,j=0;
BOOL k=FALSE;
TRACE_FUNCTION ("FreshTableId()");
for( i=0;i<FlashSMStotal;i++ )
{
if( Flash_sms_sort_index[i].id>id )
{
Flash_sms_sort_index[i].id--;
//sprintf(buf,">>>> ,Flash_sms_sort_index[%d].id=%d",i,Flash_sms_sort_index[i].id);
//TRACE_EVENT(buf);
}
}
for( j=0;((j<FlashSMS_Table));j++ )//&&(j !=CurrentFlashSmsTable)
{
flash_Smsread(FlashSMSTable[j]);
for( i=0;i<FlashSMS_table_len;i++ )
{
if( (Flash_sms_messages[j*FlashSMS_table_len+i].id>id)
&&(Flash_sms_messages[j*FlashSMS_table_len+i].flag!=FALSE) )
{
Flash_sms_messages[j*FlashSMS_table_len+i].id--;
//sprintf(buf,">>>> ,Flash_sms_messages[%d].id=%d",
// j*FlashSMS_table_len+i,Flash_sms_messages[j*FlashSMS_table_len+i].id);
//TRACE_EVENT(buf);
}
if( (FFS_SMSData.NVMSMS[i].id>id)&&(FFS_SMSData.NVMSMS[i].flag!=FALSE) )
{
FFS_SMSData.NVMSMS[i].id--;
//sprintf(buf,">>>> ,FFS_SMSData.NVMSMS[i].id=%d",FFS_SMSData.NVMSMS[i].id);
//TRACE_EVENT(buf);
k=TRUE;
}
}
if( k )
{
flash_Smswrite(FlashSMSTable[j]);
k=FALSE;
}
}
flash_Smsread(FlashSMSTable[CurrentFlashSmsTable]);
return ;
}
/*******************************************************************************
$Function: SortFlashSms
$Description: sort the sms by its time stamp
$Returns: the sorted sms list
$Arguments:
*******************************************************************************/
void SortFlashSms(T_MFW_SMS_STAT stat,T_MMI_FLASH_SMS_INDEX * msg_list)
{
UINT8 i,j;
T_MMI_FLASH_SORT_INDEX temp;
UINT16 year,month,day,hour,minute,year0,month0,day0,hour0,minute0;
T_MMI_FLASH_SMS_INDEX *temp1,*temp2;
TRACE_FUNCTION ("SortFlashSms()");
memset(Flash_sms_sort_index,0,sizeof(T_MMI_FLASH_SORT_INDEX)*FLSAH_SMS_NUM);
total=0;
switch( stat )
{
case MFW_SMS_FLASH_MT:
for( i=0;i<FLSAH_SMS_NUM;i++ )
{
if( msg_list[i].flag!=FALSE )
{
if( msg_list[i].state==MFW_SMS_MT )
{
Flash_sms_sort_index[total].index=msg_list[i].index;
Flash_sms_sort_index[total].id=msg_list[i].id;
sprintf(buf,">>>> ,SortFlashSms,msg_list[%d].state=%d",i,msg_list[i].state);
TRACE_EVENT(buf);
total++;
}
}
}
break;
case MFW_SMS_FLASH_MO:
for( i=0;i<FLSAH_SMS_NUM;i++ )
{
if( msg_list[i].flag!=FALSE )
{
if( msg_list[i].state == MFW_SMS_STOR_UNSENT
||msg_list[i].state == MFW_SMS_STOR_SENT )
{
Flash_sms_sort_index[total].index=msg_list[i].index;
Flash_sms_sort_index[total].id=msg_list[i].id;
total++;
}
}
}
break;
default:
break;
}
//sprintf(buf,">>>> ,SortFlashSms,Flash_sms_sort_index[total].index=%d,id=%d,total=%d",list_data->nb_sms_stored);
//TRACE_EVENT(buf);
#if 1
switch( stat )
{
case MFW_SMS_FLASH_MT:
for( i=1;i<total;i++ )
for( j=0;j<total-i;j++ )
{
temp1=&Flash_sms_messages[Flash_sms_sort_index[j].index];
temp2=&Flash_sms_messages[Flash_sms_sort_index[j+1].index];
year=((temp1->time.year[0])%13)*10+(temp1->time.year[1])%13;
month=(temp1->time.month[0]%13)*10+temp1->time.month[1]%13;
day=(temp1->time.day[0]%32)*10+temp1->time.day[1]%32;
hour=(temp1->time.hour[0]%24)*10+temp1->time.hour[1]%24;
minute=(temp1->time.minute[0]%60)*10+temp1->time.minute[1]%60;
year0=((temp2->time.year[0])%13)*10+(temp2->time.year[1])%13;
month0=(temp2->time.month[0]%13)*10+temp2->time.month[1]%13;
day0=(temp2->time.day[0]%32)*10+temp2->time.day[1]%32;
hour0=(temp2->time.hour[0]%24)*10+temp2->time.hour[1]%24;
minute0=(temp2->time.minute[0]%60)*10+temp2->time.minute[1]%60;
if( ComTime(year0,month0,day0,hour0,minute0,year,month,day,hour,minute) )
{
memset(&temp, 0, sizeof(T_MMI_FLASH_SORT_INDEX));
memcpy(&temp,&Flash_sms_sort_index[j],sizeof(T_MMI_FLASH_SORT_INDEX));
memcpy(&Flash_sms_sort_index[j],&Flash_sms_sort_index[j+1],sizeof(T_MMI_FLASH_SORT_INDEX));
memcpy(&Flash_sms_sort_index[j+1],&temp,sizeof(T_MMI_FLASH_SORT_INDEX));
}
}
break;
case MFW_SMS_FLASH_MO:
for( i=1;i<total;i++ )
for( j=0;j<total-i;j++ )
{
if( Flash_sms_sort_index[j].id>Flash_sms_sort_index[j+1].id )
{
memset(&temp, 0, sizeof(T_MMI_FLASH_SORT_INDEX));
memcpy(&temp,&Flash_sms_sort_index[j],sizeof(T_MMI_FLASH_SORT_INDEX));
memcpy(&Flash_sms_sort_index[j],&Flash_sms_sort_index[j+1],sizeof(T_MMI_FLASH_SORT_INDEX));
memcpy(&Flash_sms_sort_index[j+1],&temp,sizeof(T_MMI_FLASH_SORT_INDEX));
}
}
break;
default:
break;
}
#endif
}
/*******************************************************************************
$Function: Fresh_Del_TableId
$Description: delete the requsted item and fresh every item's ID more than that of the deleted one
$Returns: if success return location else return 0
$Arguments:
*******************************************************************************/
void Fresh_Del_TableId(UBYTE id)
{
int i,j=0;
BOOL k=FALSE;
TRACE_FUNCTION ("Fresh_Del_TableId()");
for( j=0;((j<FlashSMS_Table));j++ )//&&(j !=CurrentFlashSmsTable)
{
flash_Smsread(FlashSMSTable[j]);
CurrentFlashSmsTable=j;
for( i=0;i<FlashSMS_table_len;i++ )
{
if( (Flash_sms_messages[j*FlashSMS_table_len+i].id==id)
&&(Flash_sms_messages[j*FlashSMS_table_len+i].flag!=FALSE) )
{
Flash_sms_messages[j*FlashSMS_table_len+i].flag=FALSE;
}
else if( (Flash_sms_messages[j*FlashSMS_table_len+i].id>id)
&& (Flash_sms_messages[j*FlashSMS_table_len+i].flag!=FALSE) )
{
Flash_sms_messages[j*FlashSMS_table_len+i].id--;
//sprintf(buf,">>>> ,Flash_sms_messages[%d].id=%d",
// j*FlashSMS_table_len+i,Flash_sms_messages[j*FlashSMS_table_len+i].id);
//TRACE_EVENT(buf);
}
if( (FFS_SMSData.NVMSMS[i].id==id) && (FFS_SMSData.NVMSMS[i].flag!=FALSE) )
{
FFS_SMSData.NVMSMS[i].flag=FALSE;
k=TRUE;
}
else if( (FFS_SMSData.NVMSMS[i].id>id)&&(FFS_SMSData.NVMSMS[i].flag!=FALSE) )
{
FFS_SMSData.NVMSMS[i].id--;
k=TRUE;
//sprintf(buf,">>>> ,FFS_SMSData.NVMSMS[i].id=%d",FFS_SMSData.NVMSMS[i].id);
//TRACE_EVENT(buf);
}
}
if( k )
{
flash_Smswrite(FlashSMSTable[j]);
k=FALSE;
}
}
for( i=0;i<FlashSMStotal;i++ )
{
if( Flash_sms_sort_index[i].id>id )
{
Flash_sms_sort_index[i].id--;
//sprintf(buf,">>>> ,Flash_sms_sort_index[%d].id=%d",i,Flash_sms_sort_index[i].id);
//TRACE_EVENT(buf);
}
}
//flash_Smsread(FlashSMSTable[CurrentFlashSmsTable]);
return ;
}
/*******************************************************************************
$Function: Flash_sms_delete
$Description: delete sms saved at FLASH
$Returns: if success return 1 else return 0
$Arguments:
*******************************************************************************/
int Flash_sms_delete(SHORT index,ListMenuData *menu_list_data)
{
FlashSms * tmp;
int i ;
UBYTE id;
TRACE_FUNCTION ("Flash_sms_delete()");
id=Flash_sms_sort_index[index].id;
/*i=Find_Del_Table(Flash_sms_sort_index[index].id);
sprintf(buf,">>>> ,Flash_sms_sort_index[%d].id=%d",index,Flash_sms_sort_index[index].id);
TRACE_EVENT(buf);
tmp=&FFS_SMSData.NVMSMS[i];
tmp->flag=FALSE;
Flash_sms_messages[i+CurrentFlashSmsTable*FlashSMS_table_len].flag=FALSE;
flash_Smswrite(FlashSMSTable[CurrentFlashSmsTable]);
FreshTableId( id);*/
/*decrease the id of those items whose id is more than the one deleted*/
Fresh_Del_TableId( id);
for( i=index;i<FlashSMStotal-1;i++ )
{
Flash_sms_sort_index[i]=Flash_sms_sort_index[i+1];
memcpy(menu_list_data->List[i].str,menu_list_data->List[i+1].str,MENU_TEXT_LENGTH);
menu_list_data->List[i].icon=menu_list_data->List[i+1].icon;
}
FlashSMStotal--;
total--;
//g_nb_line_sms =FFS_SMSData.total;
menu_list_data->ListLength--;
menu_list_data->SnapshotSize--;
//flash_Smswrite(FlashSMSTable[CurrentFlashSmsTable]);
return MFW_SMS_OK;
}
/*******************************************************************************
$Function: SmsRead_convertSMSmsg
$Description: Convert a string into an ascii string with 0x80 as first word if data is unicode
$Returns: execution status
$Arguments: ipString - input byte array
ipDataType - type of input data
ipLength - length of input string (in bytes)
opString - output byte array
opDataType - type of output data
opLength - length of output string (in bytes)
*******************************************************************************/
int SmsRead_convertSMSmsg( char * ipString, UBYTE ipDataType, int ipLength,
char * opString, UBYTE opDataType, int opLength, UBYTE addNull)
{
int i;
UBYTE text_8bit[MAX_EDITOR_LEN+1]; //buffer for conversion from 7bit to 8bit
int len;
if( (opString == NULL) || (ipString==NULL) || (opLength ==0) )
return(FALSE);
opString[0] = 'X';
opString[1] = '?';
opString[2] = 0x00;
switch( ipDataType )
{
case MFW_DCS_UCS2:
default: //assume if no valid type, input type is 8bit ascii.
if( opDataType == MFW_DCS_UCS2 )
{ //Copy array and add 0x80, 0x7F as first word
if( ipLength < opLength )
len = ipLength;
else
len = opLength;
opString[0]=0x80;
for( i=1;i<=len;i++ )
opString[i] = ipString[i-1];
if( len+2<opLength )
{
opString[len+1 ] = 0x00;
opString[len+2] = 0x00;
}
}
else if( opDataType == MFW_DCS_8bits )
{
if( ipLength/2 < opLength )
len = ipLength/2;
else
len = opLength;
for( i=0;i<len;i++ )
{
if( ipString[i*2] == 0x00 ) //ascii char - display
opString[i] = ipString[i*2+1];
else //unknown char - display '?'
opString[i] = '?';
}
if( len<opLength )
{
opString[len ] = 0x00;
}
}
else //Output data type is 7 bits - not implemented
{
}
break;
case MFW_DCS_8bits:
// default: //assume if no valid type, input type is 8bit ascii.
if( ipLength <=0 )
ipLength = strlen(ipString); //calculate length if not supplied
if( opDataType == MFW_DCS_UCS2 )
{ //Convert data to unicode
if( ipLength*2 < opLength )
len = ipLength;
else
len = opLength/2;
for( i = 0; i < len; i++ )
{
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?