📄 mmisatinput.c
字号:
UBYTE * temp_buffer;
UBYTE size;
UBYTE outLen;
switch (txt->code)
{
case MFW_DCS_7bits:
size = (source->length/sizeof(wchar_t))+1;
temp_buffer = (UBYTE *)ALLOC_MEMORY(size);
string_UCS2_to_GSM(
MFW_DCS_7bits, // gsm format
(wstring_t *)source,// source unicode string, includes own length
size, // maximum output size
temp_buffer, // destination byte array
&outLen // actual length in bytes is stored here.
);
txt->len = utl_cvt8To7 (temp_buffer, outLen, destination, 0);
FREE_MEMORY ((U8 *)temp_buffer, size);
break;
case MFW_DCS_8bits:
string_UCS2_to_GSM(
MFW_DCS_7bits, // gsm format
(wstring_t *)source,// source unicode string, includes own length
size, // maximum output size
destination, // destination byte array
&txt->len // actual length in bytes is stored here.
);
break;
case MFW_DCS_UCS2:
txt->len = source->length*sizeof(wchar_t); // txt count is in number of bytes
memcpy(destination, source, txt->len);
break;
default:
string_UCS2_to_GSM(
MFW_DCS_7bits, // gsm format
(wstring_t *)source,// source unicode string, includes own length
size, // maximum output size
destination, // destination byte array
&txt->len // actual length in bytes is stored here.
);
TRACE_EVENT("sat_UCODE_to_TEXT() unexp. DCS");
break;
}
}
#endif /* INTEGRATION_SEPT00 */
/*******************************************************************************
$Function: sat_get_key_send_result
$Description:
$Returns: none
$Arguments: data - key info
*******************************************************************************/
static void sat_get_key_send_result (T_sat_get_key * data)
{
T_SAT_RES sat_res;
struct {
T_SAT_TXT txt;
UBYTE buffer[SAT_GET_KEY_BUFFER_SIZE]; /* buffer for result */
} buf; /* NOTE: txt and buffer shall be packed */
/* update the output parameter */
/* set the required DCS for the result to be returned */
if ((data->sat_command->qual & SAT_M_INKEY_UCS2) NEQ 0)
{
buf.txt.code = MFW_DCS_UCS2;
}
else
{
buf.txt.code = MFW_DCS_8bits; /* use the SMS default alphabet */
}
buf.txt.text = sizeof(T_SAT_TXT);
buf.txt.len = 1;
/* convert and send the result */
sat_ASCII_to_TEXT(&buf.txt, buf.buffer, (UBYTE *)data->edt_buffer);
sat_res[SAT_ERR_INDEX] = SatResSuccess;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
satString (data->sat_command, &buf.txt, sat_res, sizeof(T_SAT_RES));
}
/*******************************************************************************
$Function: sat_get_string_send_result
$Description:
$Returns: none
$Arguments: data - string info
SPR#1700 - DS - Modified to handle Chinese/Unicode
*******************************************************************************/
static void sat_get_string_send_result (T_sat_get_string * data)
{
T_SAT_RES sat_res;
T_sat_get_string_result * buf;
U16 length;
U16 size;
TRACE_FUNCTION("sat_get_string_send_result()");
/* allocate sufficient temporary space to return the result (avoid huge stack usage) */
if (((data->sat_command->qual & SAT_M_INPUT_ALPHA) == 1) /* 0=digits, 1=alpha */
&& (data->sat_command->qual & SAT_M_INPUT_UCS2) /* Unicode input requested */
&& (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE))
{
length = 2*ATB_string_UCLength((USHORT*)data->edt_buffer);
}
else /* Ascii */
{
length = strlen(data->edt_buffer);
}
size = sizeof(T_sat_get_string_result) + length;
buf = (T_sat_get_string_result *) ALLOC_MEMORY(size);
/* update the output parameter */
/* set the required DCS for the result to be returned */
if ((data->sat_command->qual & SAT_M_INPUT_UCS2) NEQ 0)
{
buf->txt.code = MFW_DCS_UCS2;
}
else if ((data->sat_command->qual & SAT_M_INPUT_PACKING) NEQ 0)
{
buf->txt.code = MFW_DCS_7bits; /* use the packed SMS alphabet */
}
else
{
buf->txt.code = MFW_DCS_8bits; /* use the SMS default alphabet */
}
buf->txt.text = sizeof(T_SAT_TXT);
buf->txt.len = length;
/* convert and send the result */
if (((data->sat_command->qual & SAT_M_INPUT_ALPHA) == 1) /* 0=digits, 1=alpha */
&& (data->sat_command->qual & SAT_M_INPUT_UCS2) /* Unicode input requested */
&& (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE))
{
//Copy the data into the SAT txt buffer
memcpy(buf->buffer, data->edt_buffer, length);
}
else
{
sat_ASCII_to_TEXT(&buf->txt, buf->buffer, (UBYTE *)data->edt_buffer);
}
sat_res[SAT_ERR_INDEX] = SatResSuccess;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
satString (data->sat_command, &buf->txt, sat_res, sizeof(T_SAT_RES));
FREE_MEMORY((U8 *)buf, size);
}
/*******************************************************************************
$Function: sat_editor_cb
$Description: Sat editor call back function.
$Returns: none
$Arguments: win - window
Identifier - unique id
event - event id
*******************************************************************************/
/* SPR#1428 - SH - New Editor: minor change so function matches callback type */
#ifdef NEW_EDITOR
static void sat_editor_cb (T_MFW_HND win, USHORT Identifier, SHORT event)
#else
static void sat_editor_cb (T_MFW_HND win, USHORT Identifier, USHORT event)
#endif
{
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_SAT_RES sat_res;
TRACE_EVENT ("sat_editor_cb()");
{
char temp[60];
sprintf(temp,"event number %d",event);
TRACE_EVENT(temp);
}
if ((win EQ NULL) || (win_data EQ NULL))
return;
switch (Identifier)
{
case SAT_GET_KEY:
{
T_sat_get_key * data = (T_sat_get_key *)win_data->user;
if (data EQ NULL)
return;
switch(event)
{
case INFO_KCD_LEFT: /* OK or single digit key or YES */
/* update the output parameter */
if ((data->sat_command->qual & SAT_M_INKEY_YES_NO) NEQ 0)
{
data->edt_buffer[0] = 0x01; /* means YES */
data->edt_buffer[1] = 0x00; /* means YES */
}
sat_get_key_send_result (data);
break;
case INFO_KCD_ALTERNATELEFT: /* help */
sat_res[SAT_ERR_INDEX] = SAT_RES_USER_HELP;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
break;
case INFO_KCD_RIGHT: /* back or NO */
if ((data->sat_command->qual & SAT_M_INKEY_YES_NO) NEQ 0)
{
data->edt_buffer[0] = 0x00; /* means NO */
data->edt_buffer[1] = 0x00; /* means NO */
sat_get_key_send_result (data);
}
else
{
sat_res[SAT_ERR_INDEX] = SAT_RES_USER_BACK;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
}
break;
case INFO_KCD_CLEAR: /* clear on empty buffer or long clear */
case INFO_KCD_HUP:
sat_res[SAT_ERR_INDEX] = SAT_RES_USER_ABORT;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
break;
case INFO_TIMEOUT: /* timeout */
sat_res[SAT_ERR_INDEX] = SAT_RES_USER_NO_RESP;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
break;
default:
TRACE_EVENT("sat_editor_cb() unexp. event");
break;
}
sat_get_key_destroy (data->win);
}
break;
case SAT_GET_STRING:
{
T_sat_get_string * data = (T_sat_get_string *)win_data->user;
if (data EQ NULL)
return;
switch(event)
{
case INFO_KCD_LEFT: /* OK */
sat_get_string_send_result (data);
SEND_EVENT(data->win, SAT_DESTROY_WINDOW, 0, 0); /* SPR#1700 - DS - Destroy SAT string data */
break;
case INFO_KCD_ALTERNATELEFT: /* help */
sat_res[SAT_ERR_INDEX] = SAT_RES_USER_HELP;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
break;
case INFO_KCD_RIGHT: /* back */
sat_res[SAT_ERR_INDEX] = SAT_RES_USER_BACK;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
break;
case INFO_KCD_CLEAR: /* clear on empty buffer or long clear */
sat_res[SAT_ERR_INDEX] = SAT_RES_USER_ABORT;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
break;
case INFO_TIMEOUT: /* timeout */
sat_res[SAT_ERR_INDEX] = SAT_RES_USER_NO_RESP;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
break;
default:
TRACE_EVENT("sat_editor_cb() unexp. event");
break;
}
/* SPR#1700 - DS - Only destroy string if not already destroyed */
if (data->win)
{
sat_get_string_destroy (data->win);
data->win = NULL;
}
}
break;
case SAT_DISPLAY_TEXT:
{
T_sat_display_text * data = (T_sat_display_text *)win_data->user;
switch (event)
{
case INFO_KCD_RIGHT: /* back */
sat_res[SAT_ERR_INDEX] = SAT_RES_USER_BACK;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
break;
case INFO_TIMEOUT: /* timeout */
case INFO_KCD_LEFT: /* OK */
sat_res[SAT_ERR_INDEX] = SatResSuccess;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
break;
case INFO_KCD_CLEAR: /* abort */
case INFO_KCD_HUP:
sat_res[SAT_ERR_INDEX] = SAT_RES_USER_ABORT;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
break;
default:
TRACE_EVENT("sat_editor_cb() unexp. event");
break;
}
sat_display_text_destroy (data->win);
}
break;
case SAT_DISPLAY_TEXT_WAIT:
{
T_sat_display_text * data = (T_sat_display_text *)win_data->user;
switch (event)
{
case INFO_TIMEOUT: /* timeout */
sat_res[SAT_ERR_INDEX] = SAT_RES_USER_NO_RESP;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
break;
case INFO_KCD_LEFT: /* OK */
sat_res[SAT_ERR_INDEX] = SatResSuccess;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
break;
case INFO_KCD_RIGHT: /* back */
sat_res[SAT_ERR_INDEX] = SAT_RES_USER_BACK;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
break;
case INFO_KCD_CLEAR: /* abort */
case INFO_KCD_HUP:
sat_res[SAT_ERR_INDEX] = SAT_RES_USER_ABORT;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
break;
default:
TRACE_EVENT("sat_editor_cb() unexp. event");
break;
}
sat_display_text_destroy (data->win);
}
break;
default:
TRACE_EVENT("sat_editor_cb() unexp. Identifier");
break;
}
return;
}
// end c014 rsa
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -