📄 mmismsread.c
字号:
static const MfwMnuItem SmsRead_R_OPTItems [] =
{
{0,0,0,(char *)TxtDelete,0,(MenuFunc)SmsRead_R_OPTExeDelete,item_flag_none},
{0,0,0,(char *)TxtReply,0,(MenuFunc)SmsRead_R_OPTExeReply,item_flag_none},
{0,0,0,(char *)TxtEdit,0,(MenuFunc)SmsRead_R_OPTExeEdit,item_flag_none},
{0,0,0,(char *)TxtExtractNumber,0,(MenuFunc)SmsRead_R_OPTExeStoreNumber,item_flag_none},
{0,0,0,(char *)TxtCallNumber,0,(MenuFunc)SmsRead_StoreNumber,item_flag_none}
};
static const MfwMnuAttr SmsRead_R_OPTAttrib =
{
&SmsRead_R_OPTArea,
MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */
-1, /* use default font */
(MfwMnuItem*) SmsRead_R_OPTItems, /* with these items */
sizeof(SmsRead_R_OPTItems)/sizeof(MfwMnuItem) /* number of items */
};
/*******************************************************************************
$Function: charPtrToUBYTEPtr
$Description: Converts a char ptr to a UBYTE ptr. The procedures can be replaced by macro
once all conversions are confirmed as valid.
$Returns: data set to new type
$Arguments: data -data item of input type.
*******************************************************************************/
#ifndef MMI_USE_MACROS
UBYTE charToUBYTE ( char chr ) { return((UBYTE)chr); }
UBYTE* charPtrToUBYTEPtr ( char *ptr ) { return((UBYTE*)ptr); }
UBYTE SHORTToUBYTE ( SHORT data ) { return((UBYTE)data); }
char UBYTEToChar ( UBYTE data) { return((char)data); }
char* UBYTEPtrToCharPtr ( UBYTE* data) { return((char*)data); }
char* USHORTPtrToCharPtr ( USHORT* data) { return((char*)data); }
USHORT charToUSHORT ( char chr ) { return((USHORT)chr); }
USHORT UBYTEToUSHORT ( UBYTE data) { return((USHORT)data); }
USHORT* charPtrToUSHORTPtr (char* data) { return((USHORT*)data); }
#else
#define charToUBYTE (UBYTE)
#define charPtrToUBYTEPtr (UBYTE*)
#define SHORTToUBYTE (UBYTE)
#define UBYTEPtrToCharPtr (char*)
#define UBYTEToChar (char)
#define USHORTPtrToCharPtr (char*)
#define charToUSHORT (USHORT)
#define UBYTEToUSHORT (USHORT)
#define charPtrToUSHORTPtr (USHORT*)
#endif
/*******************************************************************************
$Function: convertUCS2_2_ascii_char
$Description: convert unicode char to ASCII char. Added for SPR 1508.
$Returns: ASCII char
$Arguments: pointer to first byte of unicode char
*******************************************************************************/
char convertUCS2_2_ascii_char(char* ipString)
{
U16 word_code;
BOOL match_found= FALSE;
int k;
char debug[60];
word_code = ipString[0]*0x100 + ipString[1];
sprintf(debug, "Word code: %d", word_code);
TRACE_EVENT(debug);
if (word_code <= 0xFF)
if (translation_ascii_2_unicode[word_code] == word_code)
return word_code;
for (k=0; k < 256; k++)
{ if(translation_ascii_2_unicode[k] == word_code)
{ sprintf(debug, "Match found: %d, %d", word_code, k);
TRACE_EVENT(debug);
match_found = TRUE;
return k;
}
}
if (!match_found)
{ TRACE_EVENT("No match");
return 0x3F;/*question mark*/
}
}
/*******************************************************************************
$Function: convertUCS2_2_ascii_char
$Description: convert unicode char to GSM char. Added for SPR 1508.
$Returns: GSM char
$Arguments: pointer to first byte of unicode char
*******************************************************************************/
char convertUCS2_2_gsm_char(char* ipString)
{
U16 word_code;
BOOL match_found= FALSE;
int k;
word_code = ipString[0]*0x100 + ipString[1];
if ( word_code > 0x7F || g_translation_unicode[word_code] != word_code)
{
for (k=0; k < 256; k++)
{ if(g_translation_unicode[k] == word_code)
{
match_found = TRUE;
return k;
}
}
}
else
return word_code;
if (!match_found)
{ return '?';
}
}
/*******************************************************************************
$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)
*******************************************************************************/
/* MC, SPR 1257, merged in b-sample version of this function*/
int SmsRead_convertSMSmsg( char * ipString, UBYTE ipDataType, int ipLength,
char * opString, UBYTE opDataType, int opLength, UBYTE addNull)
{
int i;/*SPR 1946, changed from byte to int*/
int j;/*SPR 1946, changed from byte to int*/
/*JVJ SPR1298 Converted to dynamic variable */
UBYTE* text_8bit = (UBYTE*)ALLOC_MEMORY(MAX_EDITOR_LEN+1);
int len;/*SPR 1946, changed from byte to int*/
#ifdef TRACE_SMSREAD
char buf[150];
sprintf(buf, "opString%x ipString%x ipLength%d opLength%d",opString, ipString, ipLength, opLength);
TRACE_EVENT(buf);
#endif
if ((opString == NULL) || (ipString==NULL) || (opLength ==0))
return (FALSE);
if (ipLength>MAX_EDITOR_LEN)
{
TRACE_EVENT("Too long, returning.");
return;
}
opString[0] = 'X';
opString[1] = '?';
opString[2] = 0x00;
#ifdef TRACE_SMSREAD
sprintf(buf,"iDT: %d,iL:%d, oDT:%d, oL:%d, A0:%d",ipDataType,ipLength,opDataType,opLength,addNull);
TRACE_EVENT(buf);
#endif
switch (ipDataType)
{
case MFW_DCS_UCS2:
if (opDataType == MFW_DCS_UCS2)
{ //Copy array and add 0x80, 0x7F as first word
if (ipLength < opLength)
len = ipLength;
else
len = opLength;
/*SPR 1507, copy the bytes in pairs*/
for (i=0;i<len;i+=2)
{ opString[i] = ipString[i];
opString[i+1] = ipString[i+1];
}
if (i+1<opLength)
{
opString[i ] = 0x00;
opString[i+1] = 0x00;
}
}
else if ((opDataType == MFW_DCS_8bits) ||
(opDataType == MFW_ASCII))
{
if ((ipLength/2 ) < opLength)
len = ipLength/2;
else
len = opLength;
for (i=0;i<len;i++)
{ /*SPR 1508, use new functions to convert to ASCII/GSM*/
if (opDataType == MFW_ASCII)
opString[i] = convertUCS2_2_ascii_char(&ipString[i*2]);
else
opString[i] = convertUCS2_2_gsm_char(&ipString[i*2]);
}
if (len<opLength)
{
opString[len ] = 0x00;
}
}
else //Output data type is 7 bits - not implemented
{
}
break;
case MFW_DCS_8bits:
if (opDataType == MFW_DCS_UCS2)
{ //Convert data to unicode
if (ipLength*2 < opLength)
len = ipLength;
else
len = opLength/2;
#ifdef TRACE_SMSREAD
sprintf(buf, "8->UCS2, len:%d", len);
TRACE_EVENT(buf);
#endif
for (i = 0; i < len; i++)
{ /*SPR 1508 use table to convert to Unicode*/
opString[i*2] = (g_translation_unicode[ipString[i]]>>8)&0x00FF;
opString[i*2+1] = (g_translation_unicode[ipString[i]])&0x00FF;
}
if (len*2+1 < opLength)
{
opString[len*2] = 0x00;
opString[len*2+1] = 0x00;
}
}
else if (opDataType == MFW_DCS_8bits)
{ //Data already in correct format - copy
if (ipLength < opLength)
len = ipLength;
else
len = opLength;
for (i=0;i<len;i++)
opString[i] = ipString[i];
if (len<opLength)
opString[len] = 0x00;
}
else if (opDataType == MFW_ASCII) // SH - translate characters, don't change bit width
{
len = ipLength;
if (len > opLength)
len = opLength;
for (i=0;i<len;i++)
{
opString[i] = g_translation_ascii_table[ipString[i]];
#ifdef TRACE_SMSREAD
if (opString[i]!=ipString[i])
{
sprintf(buf, "Converted %x to %x (%c)", ipString[i], opString[i], (char)opString[i]);
TRACE_EVENT(buf);
}
#endif
}
if (len<opLength)
opString[len] = 0x00;
}
else // convert data to 7bit
{
len = utl_cvt8To7 ((UBYTE *)ipString , ipLength, (UBYTE*)opString, 0);
}
break;
case MFW_DCS_7bits:
default:
if (opDataType == MFW_DCS_7bits) //text string is already in this format
{
//Data already in correct format - copy
if (ipLength < opLength)
len = ipLength;
else
len = opLength;
for (i=0;i<len;i++)
opString[i] = ipString[i];
if (len<opLength)
opString[len] = 0x00;
}
else if (opDataType == MFW_DCS_8bits)
{
len = utl_cvt7To8 ((UBYTE *)ipString , ipLength, (UBYTE *)opString, 0 );
if (len <opLength)
opString[len] = 0x00;
else
opString[opLength]=0x00;
}
else if (opDataType == MFW_ASCII) // SH - expand to 8 bit and convert chars
{
len = utl_cvt7To8 ((UBYTE *)ipString , ipLength, text_8bit, 0 );
if (len > opLength)
len = opLength;
for (i = 0; i < len; i++)
{
opString[i] = g_translation_ascii_table[UBYTEToChar(text_8bit[i])];
}
if (len <opLength)
opString[len] = 0x00;
}
else
{ //Convert to unicode
len = utl_cvt7To8 ((UBYTE *)ipString , ipLength, text_8bit, 0);
if (len*2 > opLength)
len = opLength/2;
for (i = 0; i < len; i++)
{/*SPR 1508, use new table to convert to Unicode*/
opString[i*2] = (g_translation_unicode[ipString[i]]>>8)&0x00FF;
opString[i*2+1] = g_translation_unicode[UBYTEToChar(text_8bit[i])];
}
if (len*2+1 < opLength)
{
opString[len*2] = 0x00;
opString[len*2+1] = 0x00;
}
}
break;
case MFW_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++)
{ /*SPR 1508, convert to Unicode using new table*/
opString[i*2] = (translation_ascii_2_unicode[ ipString[i]]>>8)&0x00FF;
opString[i*2+1] = (translation_ascii_2_unicode[ ipString[i]])&0x00FF;
}
if (len*2+1 < opLength)
{
opString[len*2] = 0x00;
opString[len*2+1] = 0x00;
}
}
else if (opDataType == MFW_ASCII)
{ //Data already in correct format - copy
if (ipLength < opLength)
len = ipLength;
else
len = opLength;
for (i=0;i<len;i++)
opString[i] = ipString[i];
if (len<opLength)
opString[len] = 0x00;
}
else if (opDataType == MFW_DCS_8bits || opDataType == MFW_DCS_7bits) // SH - translate characters, don't change bit width
{
if (ipLength < opLength)
len = ipLength;
else
len = opLength;
for (i=0;i<len;i++)
{
opString[i] = ipString[i];
if (ipString[i]>=128 || g_translation_ascii_table[ipString[i]]!=ipString[i])
{
for (j=0; j<128; j++) // Reverse translation
{
if (ipString[i] == g_translation_ascii_table[j])
opString[i] = j;
}
#ifdef TRACE_SMSREAD
sprintf(buf, "Converted %x to %x", ipString[i], opString[i]);
TRACE_EVENT(buf);
#endif
}
}
if (len<opLength)
opString[len] = 0x00;
}
if (opDataType == MFW_DCS_7bits) // convert data to 7bit
{
len = utl_cvt8To7 ((UBYTE *)ipString , ipLength, (UBYTE*)opString, 0);
}
break;
}
if (addNull)
{ //Add 0x00 (or 0x00,0x00) to end of array
/*SPR925 - SH - changed so NULL is in right place for unicode*/
if (opDataType == MFW_DCS_UCS2)
{
if (len*2+1>opLength)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -