📄 messages.cpp
字号:
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
// Messages.cpp: implementation of the SMS Message Req Handling.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Messages.h"
#include "stdio.h"
#include "MemAllocator.h"
#include "stdlib.h"
#include "time.h"
#include "string.h"
U8 voicemailcount = 0;
static unreadCount = 0;
static mmi_call_price_unit_req_struct PriceUnitData;
U8 LastListReq = 0; // 1 For Inbox, 2 For Outbox
U16 ReferenceNumber = 1;
struct InBoxStructType
{
smsal_inbox_struct listInfo;
mmi_sms_get_msg_rsp_struct message;
char messageSpace[160];
}InboxMsgStruct;
struct
{
U8 count;
struct InBoxStructType inBoxStruct[MAX_MESSAGES_LIMIT];
}inbox;
//abhi:start:voicemail box structure
struct
{
U8 count;
mmi_sms_get_mailbox_address_rsp_struct vmbox;
}voicemailbox;
//abhi:End
struct OutBoxStructType
{
smsal_outbox_struct listInfo;
mmi_sms_get_msg_rsp_struct message;
char messageSpace[160];
}outboxMsgStruct;
struct OutBoxType
{
U8 count;
struct OutBoxStructType outBoxStruct[MAX_MESSAGES_LIMIT];
}outbox;
smsal_prefer_storage_struct gMemoryStatus = { 0 , 1, 2, 4, 5, 6, 20, 20, 20 }; //we can store total 20 messages in inbox+outbox
void *gSMSBuffer;
void *SendSMSResponse()
{
mmi_sms_send_msg_req_struct * SendSMSReq = (mmi_sms_send_msg_req_struct *)gSMSBuffer;
mmi_sms_send_msg_rsp_struct * SendSMSRsp = (mmi_sms_send_msg_rsp_struct * )
CMemAllocator::MyMallocDataPtr(sizeof(*SendSMSRsp));
/* Start : JP : 20050515 */
SendSMSRsp->result = (kal_bool)TRUE;
SendSMSRsp->cause = 8;
SendSMSRsp->mr = 0;
SendSMSRsp->msg_len = 0;
SendSMSRsp->ref_count = 0;
strcpy((S8*)SendSMSRsp->scts,(S8*)"0000000");
SendSMSRsp->seq_num = 0;
/* End : JP : 20050515 */
return (void *)SendSMSRsp;
}
void *SendMessageList()
{
mmi_sms_get_msg_list_req_struct *SMSListReq = ( mmi_sms_get_msg_list_req_struct * )gSMSBuffer;
mmi_sms_get_msg_list_rsp_struct *ListResponse = (mmi_sms_get_msg_list_rsp_struct *)
CMemAllocator::MyMallocDataPtr(sizeof(*ListResponse));
memset( ListResponse, 0, sizeof(mmi_sms_get_msg_list_rsp_struct) );
// Code Start For Inbox List
if( SMSListReq->status == 5 )
{
readSMSFile(INBOX_FILE_INDEX);
LastListReq = 1;
ListResponse->inbox.msg_count = SMSListReq->no_msg;//inbox.count;
//for( U8 i = 0 ; i<inbox.count; i++ )
for( U8 i = SMSListReq->start_index, j=0 ; i<SMSListReq->start_index+SMSListReq->no_msg; i++,j++ )
{
ListResponse->inbox.inbox_list[j].index = i;
ListResponse->inbox.inbox_list[j].status = inbox.inBoxStruct[i].listInfo.status;
ListResponse->inbox.inbox_list[j].storage_type = 1;
memcpy( &ListResponse->inbox.inbox_list[j].oa.number, &inbox.inBoxStruct[i].listInfo.oa.number,
sizeof(l4c_number_struct) );
memcpy( &ListResponse->inbox.inbox_list[j].concat_info,
&inbox.inBoxStruct[i].listInfo.concat_info,
sizeof(smsal_concat_struct) );
memcpy( &ListResponse->inbox.inbox_list[j].scts,
&inbox.inBoxStruct[i].listInfo.scts,
sizeof(ListResponse->inbox.inbox_list[j].scts) );
}
}
else if( SMSListReq->status == 6 )
{
readSMSFile(OUTBOX_FILE_INDEX);
LastListReq = 2;
ListResponse->outbox.msg_count = SMSListReq->no_msg;//outbox.count;
//for( U8 i = 0 ; i<outbox.count; i++ )
for( U8 i = SMSListReq->start_index,j=0 ; i<SMSListReq->start_index+SMSListReq->no_msg; i++,j++ )
{
ListResponse->outbox.outbox_list[j].index = i;
ListResponse->outbox.outbox_list[j].status = outbox.outBoxStruct[i].listInfo.status;
ListResponse->outbox.outbox_list[j].storage_type = 1;
memcpy( &ListResponse->outbox.outbox_list[j].da.number,
&outbox.outBoxStruct[i].listInfo.da.number,
sizeof(l4c_number_struct) );
memcpy( &ListResponse->outbox.outbox_list[j].concat_info,
&outbox.outBoxStruct[i].listInfo.concat_info,
sizeof(smsal_concat_struct) );
}
}
return (void *)ListResponse;
}
void SaveVoiceMailBoxNumbers()
{
char vmdata1[]="VoiceMailNumber1";
char vmnumber1[]="11111";
char vmdata2[]="VoiceMailNumber2";
char vmnumber2[]="22222";
mmi_sms_get_mailbox_address_rsp_struct *VoicemailGetRsp= & voicemailbox.vmbox;
memset(& voicemailbox.vmbox,0,sizeof(voicemailbox.vmbox));
voicemailbox.count=1; //abhi:
VoicemailGetRsp->result = KAL_TRUE;
VoicemailGetRsp->mailbox_num = 2;
VoicemailGetRsp->mailbox_info[0].name.name_length = strlen(vmdata1);
VoicemailGetRsp->mailbox_info[0].name.name_dcs = 4;
strcpy((char*)VoicemailGetRsp->mailbox_info[0].name.name,vmdata1);
VoicemailGetRsp->mailbox_info[0].number_info.type = 145;
strcpy((char*)VoicemailGetRsp->mailbox_info[0].number_info.number,vmnumber1);
VoicemailGetRsp->mailbox_info[0].number_info.length= strlen(vmnumber1);
VoicemailGetRsp->mailbox_info[1].name.name_length = strlen(vmdata2);
VoicemailGetRsp->mailbox_info[1].name.name_dcs = 4;
strcpy((char*)VoicemailGetRsp->mailbox_info[1].name.name,vmdata2);
VoicemailGetRsp->mailbox_info[1].number_info.type = 129;
strcpy((char*)VoicemailGetRsp->mailbox_info[1].number_info.number,vmnumber2);
VoicemailGetRsp->mailbox_info[1].number_info.length= strlen(vmnumber2);
memcpy (&voicemailbox.vmbox,VoicemailGetRsp,sizeof(mmi_sms_get_mailbox_address_rsp_struct));
WriteVoiceMailFile();
}
void *SendGetVoicemailAddressRsp()
{
mmi_sms_get_mailbox_address_rsp_struct *VoicemailGetRsp= (mmi_sms_get_mailbox_address_rsp_struct *)
CMemAllocator::MyMallocDataPtr(sizeof(*VoicemailGetRsp));
memset(VoicemailGetRsp,0,sizeof(*VoicemailGetRsp));
ReadVoiceMailFile();
memcpy(VoicemailGetRsp,&voicemailbox.vmbox,sizeof(*VoicemailGetRsp));
VoicemailGetRsp->result= KAL_TRUE; // for ok 0 for fail 1;
voicemailcount++;
return (void*)VoicemailGetRsp;
}
void *SendSetVoicemailAddressRsp()
{
mmi_sms_set_mailbox_address_req_struct *VoicemailSetReq = (mmi_sms_set_mailbox_address_req_struct *)gSMSBuffer;
mmi_sms_set_mailbox_address_rsp_struct *VoicemailSetRsp = (mmi_sms_set_mailbox_address_rsp_struct *)
CMemAllocator::MyMallocDataPtr(sizeof(mmi_sms_set_mailbox_address_rsp_struct));
mmi_sms_get_mailbox_address_rsp_struct *VoicemailGetRsp= (mmi_sms_get_mailbox_address_rsp_struct *)
CMemAllocator::MyMallocDataPtr(sizeof(mmi_sms_get_mailbox_address_rsp_struct));
memset(VoicemailSetRsp,0,sizeof(mmi_sms_set_mailbox_address_rsp_struct));
memset(VoicemailGetRsp,0,sizeof(*VoicemailGetRsp));
ReadVoiceMailFile();
memcpy(VoicemailGetRsp,&voicemailbox.vmbox,sizeof(*VoicemailGetRsp));
if(VoicemailSetReq->mailbox_num == 0)
{
VoicemailGetRsp->mailbox_info[0].number_info.type = VoicemailSetReq->num_addr.type;
memcpy(VoicemailGetRsp->mailbox_info[0].number_info.number,VoicemailSetReq->num_addr.number,VoicemailSetReq->num_addr.length);
VoicemailGetRsp->mailbox_info[0].number_info.length= VoicemailSetReq->num_addr.length;
}
if(VoicemailSetReq->mailbox_num == 1)
{
VoicemailGetRsp->mailbox_info[1].number_info.type = VoicemailSetReq->num_addr.type;
memcpy(VoicemailGetRsp->mailbox_info[1].number_info.number,VoicemailSetReq->num_addr.number,VoicemailSetReq->num_addr.length);
VoicemailGetRsp->mailbox_info[1].number_info.length= VoicemailSetReq->num_addr.length;
}
memcpy (&voicemailbox.vmbox,VoicemailGetRsp,sizeof(mmi_sms_get_mailbox_address_rsp_struct));
WriteVoiceMailFile();
VoicemailSetRsp->result = KAL_TRUE;
VoicemailSetRsp->cause = 0;
return (void *)VoicemailSetRsp;
}
//abhi:End
void *GetMemoryStorage()
{
mmi_sms_get_preferred_storage_rsp_struct *MemoryRsp = ( mmi_sms_get_preferred_storage_rsp_struct *)CMemAllocator::MyMallocDataPtr(sizeof(mmi_sms_get_preferred_storage_rsp_struct));
memset( MemoryRsp, 0, sizeof(mmi_sms_get_preferred_storage_rsp_struct));
MemoryRsp->result = KAL_TRUE;
memcpy( &MemoryRsp->info, &gMemoryStatus, sizeof(smsal_prefer_storage_struct));
//MemoryRsp->info.used2 = 0;
readSMSFile(INBOX_FILE_INDEX);
readSMSFile(OUTBOX_FILE_INDEX);
//abhi
if (gMemoryStatus.mem2 == 0) //for SIM
MemoryRsp->info.used2 = 0;
else
MemoryRsp->info.used2 = inbox.count + outbox.count;
/* MemoryRsp->info.mem1 = 0; MemoryRsp->info.used1=4; MemoryRsp->info.total1 = 10;
MemoryRsp->info.mem2 = 1; MemoryRsp->info.used2=5; MemoryRsp->info.total2 = 10;
MemoryRsp->info.mem3 = 2; MemoryRsp->info.used3=6; MemoryRsp->info.total3 = 20;*/
return (void*) MemoryRsp;
}
void *SetMemoryStorage()
{
mmi_sms_set_preferred_storage_req_struct *SetMemoryReq = (mmi_sms_set_preferred_storage_req_struct *)gSMSBuffer;
mmi_sms_set_preferred_storage_rsp_struct *SetMemoryRsp = (mmi_sms_set_preferred_storage_rsp_struct *)CMemAllocator::MyMallocDataPtr(sizeof(mmi_sms_set_preferred_storage_rsp_struct));
memset( SetMemoryRsp, 0, sizeof(mmi_sms_set_preferred_storage_rsp_struct) );
gMemoryStatus.mem1 = SetMemoryReq->mem1; gMemoryStatus.mem2 = SetMemoryReq->mem2; gMemoryStatus.mem3 = SetMemoryReq->mem3;
SetMemoryRsp->result = KAL_TRUE; /* JP Added for PC Simulator 20050516 */
SetMemoryRsp->param = gMemoryStatus ;
return (void*)SetMemoryRsp;
}
void SetBufferForMessage( void * dataBuf )
{
gSMSBuffer = dataBuf ;
}
void writeSMSFile(U8 flag) // flag = 0 for inbox, flag = 1 for outbox
{
FILE *fp;
if( flag == INBOX_FILE_INDEX )
{
fp = fopen( INBOX_FILE, "wb" );
fwrite(&inbox, sizeof(inbox), 1, fp );
}
else if( flag == OUTBOX_FILE_INDEX )
{
fp = fopen( OUTBOX_FILE, "wb" );
fwrite(&outbox, sizeof(outbox), 1, fp );
}
if( fp != NULL )fclose(fp);
}
void readSMSFile(U8 flag) // flag = 0 for inbox, flag = 1 for outbox
{
FILE *fp;
if( flag == INBOX_FILE_INDEX )
{
if( (fp = fopen( INBOX_FILE, "rb" )) == NULL )
{
//exit(0);
}
else
{
U8 i;
unreadCount = 0;
fread(&inbox, sizeof(inbox), 1, fp );
for (i = 0; i < inbox.count; i++)
{
if (inbox.inBoxStruct[i].listInfo.status == 0)
unreadCount++;
}
}
}
else if( flag == OUTBOX_FILE_INDEX )
{
if( (fp = fopen( OUTBOX_FILE, "rb" )) == NULL )
{
//exit(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -