📄 ap_key_input.c
字号:
#include "control.h"
#include "system_data.h"
#include <api/libc/string.h>
#include "ap_key_input.h"
#include "keydata.h"
#include "ap_root.h"
#include "ucas.h"
#include "cas_api.h"
#define MEMCPY_I(a,b,c) ali_memcpy(b,a,c)
//#define KEY_DEBUG
#define KEY_PRINTF libc_printf
//#define KEY_PRINTF(...) do{}while(0)
cas_key_data g_key_input_data;
cas_key_data *p_ap_key_input_data;
struct WinReturnInfo ki_updata_cmd;
UINT16 g_KI_First_StrTab[MAX_CAS_KEY_NUMBER][20];
UINT16 g_KI_Second_StrTab[MAX_CAS_KEY_NUMBER][30];
UINT16 g_KI_CAS_StrTab[30];
UINT16 g_KI_PP_StrTab[30];
UINT16 g_KI_INDEX_StrTab[MAX_CAS_KEY_NUMBER][20];
UINT16 g_KI_ID_StrTab[MAX_CAS_KEY_NUMBER][10];
UINT16 g_KI_KEYTYPE_StrTab[MAX_CAS_KEY_NUMBER][10];
UINT8 g_KI_CAS_type=0;
UINT8 g_Garosu_LineNumber=0;
UINT8 g_Garosu_TotalNumber=0;
UINT8 KeyEditFunc = 0;
T_UIMXboxKeyList uimXboxList[UIM_XBOX_ID_MAX];
T_UIMXboxConvertString tableXboxString[UIM_XBOX_MAX_STRING];
//UINT8 memory_temp[0xf000];
//get cas type string
void ap_key_input_get_cas_str()
{
ComAscStr2Uni(CAS_OSD_GetCurrentCASName(), g_KI_CAS_StrTab);
}
//get pp name string
void ap_key_input_get_PP_str()
{
#if 1
UINT8 temp[30];
UINT16 key_index;
struct WinReturnInfo ki_updata;
char* pstr;
ki_updata.sub_type=KI_UPDATE_GET_FOCUS;
ap_key_input_hdl.win_handle->update(&ki_updata, WIN_UPDATE_DATA);
key_index = ki_updata.para1+p_ap_key_input_data->key_begin_number;
ComAscStr2Uni(CAS_OSD_GetProviderNameByItemIndex(key_index), g_KI_PP_StrTab);
#endif
}
//read key value
void ap_key_input_read_page()
{
char temp[40];
int i,j,k;
for(i=0;i<MAX_CAS_KEY_NUMBER;i++)
{
j=p_ap_key_input_data->key_begin_number+i;
if(j<p_ap_key_input_data->key_end_number)
{
sprintf(temp,"%d",j+1 );
ComAscStr2Uni(temp, g_KI_First_StrTab[i]);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
sprintf(temp,"%02x %02x %02x",CAS_OSD_GetItemProviderId(j,0)&0x000000ff,
CAS_OSD_GetItemProviderId(j,1)&0x000000ff,
CAS_OSD_GetItemProviderId(j,2)&0x000000ff);
ComAscStr2Uni(temp, g_KI_INDEX_StrTab[i]);
sprintf(temp,"%02x",CAS_OSD_GetItemKeyIndex(j)&0x000000ff);
ComAscStr2Uni(temp, g_KI_ID_StrTab[i]);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
sprintf(temp,"%02x %02x %02x %02x %02x %02x %02x %02x",CAS_OSD_GetItemKeyOneChar(j,0)&0x000000ff,
CAS_OSD_GetItemKeyOneChar(j,1)&0x000000ff,
CAS_OSD_GetItemKeyOneChar(j,2)&0x000000ff,
CAS_OSD_GetItemKeyOneChar(j,3)&0x000000ff,
CAS_OSD_GetItemKeyOneChar(j,4)&0x000000ff,
CAS_OSD_GetItemKeyOneChar(j,5)&0x000000ff,
CAS_OSD_GetItemKeyOneChar(j,6)&0x000000ff,
CAS_OSD_GetItemKeyOneChar(j,7)&0x000000ff);
ComAscStr2Uni(temp, g_KI_Second_StrTab[i]);
}
else
{
MEMSET(g_KI_First_StrTab[i], 0 , 20 * sizeof(UINT16));
MEMSET(g_KI_INDEX_StrTab[i], 0 , 20* sizeof(UINT16));
MEMSET(g_KI_ID_StrTab[i], 0 , 10 * sizeof(UINT16));
//MEMSET(g_KI_KEYTYPE_StrTab[i],0,10 * sizeof(UINT16));
MEMSET(g_KI_Second_StrTab[i], 0 , 30 * sizeof(UINT16));
}
}
}
//get key number
void ap_key_input_key_number()
{
p_ap_key_input_data->key_total_number = CAS_OSD_GetItemCount();
g_Garosu_TotalNumber = p_ap_key_input_data->key_total_number;
}
void ap_key_input_init_data(void)
{
UINT8 i;
struct WinReturnInfo updata_cmd;
p_ap_key_input_data=&g_key_input_data;
for(i=0;i<MAX_CAS_KEY_NUMBER;i++)
{
p_ap_key_input_data->p_FirstStrTab[i]=g_KI_First_StrTab[i];
p_ap_key_input_data->p_SecondStrTab[i]=g_KI_Second_StrTab[i];
p_ap_key_input_data->p_StrINDEX[i]=g_KI_INDEX_StrTab[i];
p_ap_key_input_data->p_StrID[i]=g_KI_ID_StrTab[i];
//p_ap_key_input_data->p_Strkeytype[i]=g_KI_KEYTYPE_StrTab[i];
}
p_ap_key_input_data->p_CAS_StrTab=g_KI_CAS_StrTab;
p_ap_key_input_data->p_Type_StrTab=g_KI_PP_StrTab;
updata_cmd.sub_type=KI_UPDATE_GLOBAL_POINT;
updata_cmd.para1=(UINT32)p_ap_key_input_data;
ap_key_input_hdl.win_handle->update(&updata_cmd, WIN_UPDATE_DATA);
}
UINT8 ap_key_input_str2value(UINT16 first_char,UINT16 second_char)
{
UINT8 result;
first_char=first_char>>8;
second_char=second_char>>8;
if(first_char>'9')
{
if(second_char>'9')
{
result=(first_char-'a'+0x0a)*0x10+(second_char-'a'+0x0a);
}
else
{
result=(first_char-'a'+0x0a)*0x10+(second_char-'0');
}
}
else
{
if(second_char>'9')
{
result=(first_char-'0')*0x10+(second_char-'a'+0x0a);
}
else
{
result=(first_char-'0')*0x10+(second_char-'0');
}
}
return result;
}
//save key value
void ap_key_input_save_key(UINT16 key_index)
{
UINT8 i;
UINT8 keyvalue;
for(i=0;i<8;i++)
{
keyvalue =ap_key_input_str2value(g_KI_Second_StrTab[key_index][3*i],g_KI_Second_StrTab[key_index][3*i+1]);
CAS_OSD_SetItemKeyOneChar(key_index+p_ap_key_input_data->key_begin_number,i,(char)keyvalue);
}
}
ap_key_input_save_INDEX(UINT16 key_index)
{
#if 0
UINT8 i;
for(i=0;i<3;i++)
{
uimXboxList[g_KI_CAS_type].key[key_index+p_ap_key_input_data->key_begin_number].id[i]
=ap_key_input_str2value(g_KI_INDEX_StrTab[key_index][3*i],g_KI_INDEX_StrTab[key_index][3*i+1]);
}
#endif
}
ap_key_input_save_ID(UINT16 key_index)
{
#if 0
uimXboxList[g_KI_CAS_type].key[key_index+p_ap_key_input_data->key_begin_number].offset
=ap_key_input_str2value(g_KI_ID_StrTab[key_index][0],g_KI_ID_StrTab[key_index][1]);
#endif
}
//djg keyedit start
void ap_KI_init()
{
UINT8 rtn;
ap_key_input_get_cas_str();
ap_key_input_key_number();
p_ap_key_input_data->key_begin_number=0;
if(p_ap_key_input_data->key_total_number>=MAX_CAS_KEY_NUMBER)
p_ap_key_input_data->key_end_number=MAX_CAS_KEY_NUMBER;
else
p_ap_key_input_data->key_end_number=p_ap_key_input_data->key_total_number;
ap_key_input_read_page();
ap_key_input_get_PP_str();
}
//djg keyedit end
BOOL ap_key_input_init(ControlMsg_t* msg, struct winhandle_t* p_win_handle)
{
CAS_OSD_InitData();
ap_key_input_init_data();
p_win_handle->display(0, 0);
ap_KI_init();
p_win_handle->update(NULL, WIN_UPDATE_ALL);
return TRUE;
}
BYTE ap_key_input_proc(UINT32 msg_type,UINT32 msg_sub_type, UINT32 msg_code)
{
UINT8 result = PROC_PASS;
struct WinReturnInfo update_data;
struct WinReturnInfo ReturnInfo;
struct WinReturnInfo ki_updata;
if(NULL != ap_key_input_hdl.win_handle->proc)
{
result = ap_key_input_hdl.win_handle->proc(msg_type, msg_sub_type, msg_code,(struct WinReturnInfo*) &ReturnInfo);
}
//djg keyedit start
if(KeyEditFunc != NOSELECT)
{
switch(KeyEditFunc)
{
#if 0
case DELETE_F: //red key
UIMXboxDeleteList(0, g_KI_CAS_type);
ap_key_input_read_page();
ap_key_input_get_PP_str();
update_data.sub_type=KI_UPDATE_LIST;
ap_key_input_hdl.win_handle->update(&update_data, WIN_UPDATE_DATA);
break;
case ADD_F: //green key
UIMXboxAddList(0, g_KI_CAS_type);
ap_key_input_read_page();
ap_key_input_get_PP_str();
update_data.sub_type=KI_UPDATE_LIST;
ap_key_input_hdl.win_handle->update(&update_data, WIN_UPDATE_DATA);
break;
#endif
case SAVE_F: //yellow key
ki_updata.sub_type=KI_UPDATE_SHOW_MSG;
ki_updata.para1=1;
ap_key_input_hdl.win_handle->update(&ki_updata, WIN_UPDATE_DATA);
if(CAS_OSD_IsNeedSave())
CAS_OSD_SaveData();
//ConvertCASEditDBToFlash();
//UIMXboxSaveList();
ki_updata.sub_type=KI_UPDATE_RECOVERY;
ap_key_input_hdl.win_handle->update(&ki_updata, WIN_UPDATE_DATA);
break;
#if 0
case DEFAULT_F: //Blue key
// by_lgp for patch
libc_printf("........................... load DEFAULT_F key. \n");
ki_updata.sub_type=KI_UPDATE_SHOW_MSG;
ki_updata.para1=2;
ap_key_input_hdl.win_handle->update(&ki_updata, WIN_UPDATE_DATA);
UIMXboxReadList(0);
ki_updata.sub_type=KI_UPDATE_RECOVERY;
ap_key_input_hdl.win_handle->update(&ki_updata, WIN_UPDATE_DATA);
ap_key_input_key_number();
p_ap_key_input_data->key_begin_number=0;
if(p_ap_key_input_data->key_total_number>=MAX_CAS_KEY_NUMBER)
p_ap_key_input_data->key_end_number=MAX_CAS_KEY_NUMBER;
else
p_ap_key_input_data->key_end_number=p_ap_key_input_data->key_total_number;
ki_updata.sub_type=KI_UPDATE_SET_FOCUS;
ki_updata.para1=0;
ap_key_input_hdl.win_handle->update(&ki_updata, WIN_UPDATE_DATA);
ap_key_input_read_page();
ap_key_input_get_PP_str();
update_data.sub_type=KI_UPDATE_LIST;
ap_key_input_hdl.win_handle->update(&update_data, WIN_UPDATE_DATA);
break;
#endif
default:
break;
}
KeyEditFunc=NOSELECT;
}
else
{
if(ReturnInfo.type==WIN_CMD)
{
if(ReturnInfo.sub_type==AP_KI_READPAGE)
{
ap_key_input_read_page();
ap_key_input_get_PP_str();
update_data.sub_type=KI_UPDATE_LIST;
ap_key_input_hdl.win_handle->update(&update_data, WIN_UPDATE_DATA);
}
else if(ReturnInfo.sub_type==AP_KI_READ_PPNAME)
{
ap_key_input_get_PP_str();
update_data.sub_type=KI_UPDATE_PPNAME;
ap_key_input_hdl.win_handle->update(&update_data, WIN_UPDATE_DATA);
}
}
else if(result==PROC_LEAVE)
{
ap_key_input_hdl.win_handle->update(NULL, WIN_UPDATE_CLOSE);
}
}
//djg keyedit end
return result;
}
//djg keyedit start
char *UIMXboxGetIdString(UINT32 provider,UINT16 ca_id)
{
char *ptr = "Unknown";
UINT32 i = 0;
//KEY_PRINTF(" .....> get id string %x %x %x \n",index[0],index[1],index[2]);
while(i < UIM_XBOX_MAX_STRING)
{
if ((tableXboxString[i].provider == provider) && (tableXboxString[i].ca_id == ca_id))
{
ptr=tableXboxString[i].name;
break;
}
else
i++;
}
return ptr;
}
void WritePatchData(unsigned char* pData)
{
api_cas_mem_write(pData, 0x10000-128);
api_cas_load_keycode();
}
UINT8 UIMXboxSaveList()
{
UINT8 *data;
data = MALLOC(0x10000-128);
if(data == 0){
cas_print("UIMXboxSaveList :: alloc memory error\r\n");
return UIM_XBOX_FAILURE;
}
MEMSET(data, 0xFF, 0x10000-128);
api_cas_mem_read(data, 16);
ConvertCASEditDBToFlash(data, 0x10000-128);
#ifdef KEY_DEBUG
int i;
for(i=0;i<20;i++)
KEY_PRINTF("data[%x]=%x\n",i,data[i]);
#endif
api_cas_mem_write(data, 0x10000-128);
FREE(data);
return SUCCESS;
}
void ap_key_input_set_listindex(UINT8 index)
{
uimXboxList[g_KI_CAS_type].index = index;
}
UINT8 UIMXboxAddList(UINT8 mode, UINT16 idCas)
{
UINT8 rtn = UIM_XBOX_SUCCESS;
INT16 i;
T_UIMXboxKeyList *list;
list = &uimXboxList[idCas];
if(list->max >= UIM_XBOX_MAX_KEY_LIST)
return UIM_XBOX_FAILURE;
if(list->max == 0)
{
MEMSET(&(list->key[0]), 0x00, sizeof(T_UIMXboxKey));
}
else if(list->index)
{
for(i = (list->max-1); i >= (list->index-1); i--)
list->key[i+1] = list->key[i];
//MEMCPY(&(list->key[list->index]), &(list->key[list->index-1]), sizeof(T_UIMXboxKey));
}
//list->index++;
list->max++;
MEMSET(list->key[list->index-1].key, 0x00, 8);
if(p_ap_key_input_data->key_total_number<MAX_CAS_KEY_NUMBER)//less than one page
{
p_ap_key_input_data->key_total_number++;
p_ap_key_input_data->key_begin_number=0;
p_ap_key_input_data->key_end_number++;
}
else
{
p_ap_key_input_data->key_total_number++;
}
return rtn;
}
UINT8 UIMXboxDeleteList(UINT8 mode, UINT16 idCas)
{
UINT8 rtn = UIM_XBOX_SUCCESS;
UINT16 i;
T_UIMXboxKeyList *list;
struct WinReturnInfo ki_updata;
list = &uimXboxList[idCas];
if(list->max == 0 || list->index == 0)
return UIM_XBOX_FAILURE;
if(list->index)
{
for(i = (list->index - 1); i < list->max; i++)
list->key[i] = list->key[i+1];
}
if(list->max)
list->max--;
if(list->index > list->max)
list->index = list->max;
if(p_ap_key_input_data->key_total_number<=MAX_CAS_KEY_NUMBER)//less than one page
{
p_ap_key_input_data->key_total_number--;
p_ap_key_input_data->key_begin_number=0;
p_ap_key_input_data->key_end_number=p_ap_key_input_data->key_total_number;
ki_updata.sub_type=KI_UPDATE_SET_FOCUS;
ki_updata.para1=0;
ap_key_input_hdl.win_handle->update(&ki_updata, WIN_UPDATE_DATA);
}
else if(p_ap_key_input_data->key_end_number==p_ap_key_input_data->key_total_number)//focus in on the last page
{
p_ap_key_input_data->key_total_number--;
p_ap_key_input_data->key_begin_number--;
p_ap_key_input_data->key_end_number--;
}
else
{
p_ap_key_input_data->key_total_number--;
}
return rtn;
}
//djg keyedit end
struct ap_handle_t ap_key_input_hdl =
{
ap_key_input_init,
ap_key_input_proc,
&win_key_input_handle
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -