⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ap_key_input.c

📁 EMU_FTAbox_ref441328_code_source ali m3327
💻 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 + -