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 + -
显示快捷键?