示例#1
0
UINT8 bootota_input_proc()
{
	union BOOT_INFO *boot_info;
	struct OSDRect rect;
	lpVSCR 		pVscr;
	UINT8 *pstr;
	UINT8 str[20];
	UINT16 ustr[100];
	UINT16 i;
	UINT16 back_sh,txt_sh,sh;
	UINT32 new_focus_id;
	UINT32 value;
	UINT32 strlen;

	boot_info = get_boot_info();

	input_data[LNBFREQ_ID-1] = 0;
	input_data[DISEQC_ID-1] = 0;
	input_data[K22_ID-1] = 0;
	input_data[FREQUENCEY_ID-1] = boot_info->s_info.ota_frequency;
	input_data[SYMBOL_ID-1] = boot_info->s_info.ota_symbol;
	input_data[PID_ID-1] = boot_info->s_info.ota_pid;
	input_data[POL_ID-1] =0;
	focus_id = LNBFREQ_ID;
	input_status = SELECT_STATUS;
	value = 0;

	// draw input frame
	OSD_SetRect(&rect, INPUT_CON_L, INPUT_CON_T, INPUT_CON_W, INPUT_CON_H);	
	OSDDrv_RegionFill((HANDLE)osd_dev,0,&rect,INPUT_CON_SH);

	for(i=0;i<7;i++)
	{
		pstr = input_strs[i];
		ComAscStr2Uni(pstr, ustr);
		OSD_SetRect(&rect, INPUT_TXTN_L, INPUT_TXTN_T+(INPUT_TXTN_H+INPUT_TXT_GAP)*i, INPUT_TXTN_W, INPUT_TXTN_H);	
		pVscr = OSD_GetVscr(&rect,OSD_GET_BACK);
		OSD_DrawText(&rect,ustr,INPUT_TXT_SH,C_ALIGN_LEFT,0,pVscr);

		if(pVscr->lpbScr != NULL)
			pVscr->updatePending = 1;
		OSD_UpdateVscr(pVscr);
		pVscr->lpbScr = NULL;

		if(focus_id-1 == i)
		{
			back_sh = INPUT_CON_HL;
			txt_sh = INPUT_TXT_HL;
		}
		else
		{
			back_sh = INPUT_CON_SH;
			txt_sh = INPUT_TXT_SH;
		}

		OSD_SetRect(&rect, INPUT_TXTS_L, INPUT_TXTS_T+(INPUT_TXTS_H+INPUT_TXT_GAP)*i, INPUT_TXTS_W, INPUT_TXTS_H);	
		OSDDrv_RegionFill((HANDLE)osd_dev,0,&rect,back_sh);
		pVscr = OSD_GetVscr(&rect,OSD_GET_BACK);
		bootota_get_ustr(i,ustr);
		OSD_DrawText(&rect,ustr,txt_sh,C_ALIGN_CENTER,0,pVscr);
		if((focus_id-1==i) && (i<K22_ID||i==POL_ID-1))
		{
			OSD_SetRect(&rect, INPUT_TXTS_L, INPUT_TXTS_T+(INPUT_TXTS_H+INPUT_TXT_GAP)*i, 26, INPUT_TXTS_H);	
			ComAscStr2Uni("<", ustr);
			OSD_DrawText(&rect,ustr,txt_sh,C_ALIGN_CENTER,0,pVscr);

			OSD_SetRect(&rect, INPUT_TXTS_L+INPUT_TXTS_W-26, INPUT_TXTS_T+(INPUT_TXTS_H+INPUT_TXT_GAP)*i, 26, INPUT_TXTS_H);	
			ComAscStr2Uni(">", ustr);
			OSD_DrawText(&rect,ustr,txt_sh,C_ALIGN_CENTER,0,pVscr);
		}
			
		if(pVscr->lpbScr != NULL)
			pVscr->updatePending = 1;
		OSD_UpdateVscr(pVscr);
		pVscr->lpbScr = NULL;
	}

	// start button
	pstr = input_strs[START_ID-1];
	ComAscStr2Uni(pstr, ustr);
	OSD_SetRect(&rect, INPUT_TXTSTART_L, INPUT_TXTSTART_T, INPUT_TXTSTART_W, INPUT_TXTSTART_H);	
	OSDDrv_RegionFill((HANDLE)osd_dev,0,&rect,INPUT_START_SH);
	pVscr = OSD_GetVscr(&rect,OSD_GET_BACK);
	OSD_DrawText(&rect,ustr,INPUT_TXT_HL,C_ALIGN_CENTER,0,pVscr);

	if(pVscr->lpbScr != NULL)
		pVscr->updatePending = 1;
	OSD_UpdateVscr(pVscr);
	pVscr->lpbScr = NULL;
	
		// cancel button
	pstr = input_strs[CANCEL_ID-1];
	ComAscStr2Uni(pstr, ustr);
	OSD_SetRect(&rect, INPUT_TXTCANCEL_L, INPUT_TXTCANCEL_T, INPUT_TXTSTART_W, INPUT_TXTSTART_H);	
	OSDDrv_RegionFill((HANDLE)osd_dev,0,&rect,INPUT_START_SH);
	pVscr = OSD_GetVscr(&rect,OSD_GET_BACK);
	OSD_DrawText(&rect,ustr,INPUT_TXT_HL,C_ALIGN_CENTER,0,pVscr);
	//

	if(pVscr->lpbScr != NULL)
		pVscr->updatePending = 1;
	OSD_UpdateVscr(pVscr);
	pVscr->lpbScr = NULL;

	UINT32 hkey;
	UINT32 vkey;
	UINT8 tmpdata;
	while(1)
	{
		hkey = boot_get_key_msg();
		if(hkey == INVALID_HK || hkey == INVALID_MSG)
			continue;

		ap_hk_to_vk(0,hkey, &vkey);

		if(vkey == V_KEY_ENTER)
		{
			if(focus_id != START_ID&&focus_id!=CANCEL_ID)
				continue;
			if(focus_id==CANCEL_ID)
			{
				return 1;
			}
			boot_info->s_info.ota_frequency = input_data[FREQUENCEY_ID-1];
			boot_info->s_info.ota_symbol = input_data[SYMBOL_ID-1];
			boot_info->s_info.ota_pid = input_data[PID_ID-1];

			if(input_data[LNBFREQ_ID-1]==0)
			{
				boot_info->s_info.antenna_info.lnb_type = LNB_CTRL_STD;
				boot_info->s_info.antenna_info.lnb_low = 5150;
				boot_info->s_info.antenna_info.lnb_high = 5150;
			}
			else if(input_data[LNBFREQ_ID-1]==1)
			{
				boot_info->s_info.antenna_info.lnb_type = LNB_CTRL_STD;
				boot_info->s_info.antenna_info.lnb_low = 11300;
				boot_info->s_info.antenna_info.lnb_high = 11300;
			}
			else if(input_data[LNBFREQ_ID-1]==2)
			{
				boot_info->s_info.antenna_info.lnb_type = LNB_CTRL_POL;
				boot_info->s_info.antenna_info.lnb_low = 5150;
				boot_info->s_info.antenna_info.lnb_high = 5750;
			}
			else if(input_data[LNBFREQ_ID-1]==3)
			{
				boot_info->s_info.antenna_info.lnb_type = LNB_CTRL_22K;
				boot_info->s_info.antenna_info.lnb_low = 9750;
				boot_info->s_info.antenna_info.lnb_high = 10600;
			}

			if(input_data[DISEQC_ID-1] == 0)
			{
				boot_info->s_info.antenna_info.DiSEqC11_type = 0;
			}
			else
			{
				boot_info->s_info.antenna_info.DiSEqC11_type = 2;
				boot_info->s_info.antenna_info.DiSEqC11_port = input_data[DISEQC_ID-1]-1;
			}

			boot_info->s_info.antenna_info.k22 = input_data[K22_ID-1]; 
			boot_info->s_info.antenna_info.pol = input_data[POL_ID-1]; 
			OSD_SetRect(&rect, INPUT_CON_L, INPUT_CON_T, INPUT_CON_W, INPUT_CON_H);	
			OSDDrv_RegionFill((HANDLE)osd_dev,0,&rect,OSD_TRANSPARENT_COLOR);

			return 0;
		}
		else if(vkey == V_KEY_UP || vkey == V_KEY_DOWN)
		{
			if(input_status == EDIT_STATUS)
			{
				input_status = SELECT_STATUS;
				if(value>=input_range[focus_id-1].min && value<=input_range[focus_id-1].max)
					input_data[focus_id-1] = value;
			}

FOCUS_CHANGE:
			if(vkey == V_KEY_UP)
				new_focus_id = id_navi[focus_id-1].upID;
			else if(vkey == V_KEY_DOWN)
				new_focus_id = id_navi[focus_id-1].downID;
			else if(vkey == V_KEY_LEFT)
				new_focus_id = id_navi[focus_id-1].leftID;
			else
				new_focus_id = id_navi[focus_id-1].rightID;

			if(new_focus_id == 0)
				continue;
				
			if(focus_id == START_ID)
			{
				ComAscStr2Uni(input_strs[START_ID-1], ustr);
				OSD_SetRect(&rect, INPUT_TXTSTART_L, INPUT_TXTSTART_T, INPUT_TXTSTART_W, INPUT_TXTSTART_H);	
				back_sh = INPUT_START_SH;
				txt_sh = INPUT_TXT_HL;
			}
			else if(focus_id == CANCEL_ID)
			{
				ComAscStr2Uni(input_strs[CANCEL_ID-1], ustr);
				OSD_SetRect(&rect, INPUT_TXTCANCEL_L, INPUT_TXTCANCEL_T, INPUT_TXTSTART_W, INPUT_TXTSTART_H);	
				back_sh = INPUT_START_SH;
				txt_sh = INPUT_TXT_HL;
			}
			else
			{
				
				bootota_get_ustr(focus_id-1, ustr);
				OSD_SetRect(&rect, INPUT_TXTS_L, INPUT_TXTS_T+(INPUT_TXTS_H+INPUT_TXT_GAP)*(focus_id-1), INPUT_TXTS_W, INPUT_TXTS_H);	
				back_sh = INPUT_CON_SH;
				txt_sh = INPUT_TXT_SH;
			}
			OSDDrv_RegionFill((HANDLE)osd_dev,0,&rect,back_sh);
			pVscr = OSD_GetVscr(&rect,OSD_GET_BACK);
			OSD_DrawText(&rect,ustr,txt_sh,C_ALIGN_CENTER,0,pVscr);

			if(pVscr->lpbScr != NULL)
			pVscr->updatePending = 1;
			OSD_UpdateVscr(pVscr);
			pVscr->lpbScr = NULL;

			if(new_focus_id == START_ID)
			{
				ComAscStr2Uni(input_strs[START_ID-1], ustr);
				OSD_SetRect(&rect, INPUT_TXTSTART_L, INPUT_TXTSTART_T, INPUT_TXTSTART_W, INPUT_TXTSTART_H);	
				back_sh = INPUT_START_HL;
				txt_sh = INPUT_TXT_HL;
			}
			else  if(new_focus_id == CANCEL_ID)
			{
				ComAscStr2Uni(input_strs[CANCEL_ID-1], ustr);
				OSD_SetRect(&rect, INPUT_TXTCANCEL_L, INPUT_TXTCANCEL_T, INPUT_TXTSTART_W, INPUT_TXTSTART_H);	
				back_sh = INPUT_START_HL;
				txt_sh = INPUT_TXT_HL;
			}
			else
			{
				bootota_get_ustr(new_focus_id-1, ustr);
				OSD_SetRect(&rect, INPUT_TXTS_L, INPUT_TXTS_T+(INPUT_TXTS_H+INPUT_TXT_GAP)*(new_focus_id-1), INPUT_TXTS_W, INPUT_TXTS_H);	
				back_sh = INPUT_CON_HL;
				txt_sh = INPUT_TXT_HL;
			}
			OSDDrv_RegionFill((HANDLE)osd_dev,0,&rect,back_sh);
			pVscr = OSD_GetVscr(&rect,OSD_GET_BACK);
			OSD_DrawText(&rect,ustr,txt_sh,C_ALIGN_CENTER,0,pVscr);

			if(new_focus_id-1<K22_ID||new_focus_id==POL_ID)
			{
				OSD_SetRect(&rect, INPUT_TXTS_L, INPUT_TXTS_T+(INPUT_TXTS_H+INPUT_TXT_GAP)*(new_focus_id-1), 26, INPUT_TXTS_H);	
				ComAscStr2Uni("<", ustr);
				OSD_DrawText(&rect,ustr,txt_sh,C_ALIGN_CENTER,0,pVscr);

				OSD_SetRect(&rect, INPUT_TXTS_L+INPUT_TXTS_W-26, INPUT_TXTS_T+(INPUT_TXTS_H+INPUT_TXT_GAP)*(new_focus_id-1), 26, INPUT_TXTS_H);	
				ComAscStr2Uni(">", ustr);
				OSD_DrawText(&rect,ustr,txt_sh,C_ALIGN_CENTER,0,pVscr);
			}

			focus_id = new_focus_id;
		}
		else if(vkey>=V_KEY_0 && vkey<=V_KEY_9)
		{
			if(focus_id<FREQUENCEY_ID || focus_id>PID_ID)
				continue;
			
			if(input_status == SELECT_STATUS)
			{
				value = 0;
				input_status = EDIT_STATUS;
			}

			value = value*10 + vkey - V_KEY_0;
			
			sprintf(str,"%d",value);
			strlen = STRLEN(str);

			if(strlen >= input_range[focus_id-1].len)
			{
				input_status = SELECT_STATUS;
				if(value>=input_range[focus_id-1].min && value<=input_range[focus_id-1].max)
					input_data[focus_id-1] = value;
			}
			else
			{
				sprintf(str,"%d_",value);
			}
			ComAscStr2Uni(str, ustr);
			OSD_SetRect(&rect, INPUT_TXTS_L, INPUT_TXTS_T+(INPUT_TXTS_H+INPUT_TXT_GAP)*(focus_id-1), INPUT_TXTS_W, INPUT_TXTS_H);	
			OSDDrv_RegionFill((HANDLE)osd_dev,0,&rect,INPUT_CON_HL);
			pVscr = OSD_GetVscr(&rect,OSD_GET_BACK);
			OSD_DrawText(&rect,ustr,INPUT_TXT_HL,C_ALIGN_CENTER,0,pVscr);
		}
		else if(vkey == V_KEY_LEFT || vkey == V_KEY_RIGHT)
		{
			if(focus_id == START_ID || focus_id ==CANCEL_ID)
				goto FOCUS_CHANGE;
			
			if(focus_id==FREQUENCEY_ID || focus_id==PID_ID || focus_id==SYMBOL_ID)
			{
				if(vkey == V_KEY_RIGHT || input_status == SELECT_STATUS)
					continue;

				value = value/10;
				sprintf(str,"%d_",value);
				ComAscStr2Uni(str, ustr);
				OSD_SetRect(&rect, INPUT_TXTS_L, INPUT_TXTS_T+(INPUT_TXTS_H+INPUT_TXT_GAP)*(focus_id-1), INPUT_TXTS_W, INPUT_TXTS_H);	
				OSDDrv_RegionFill((HANDLE)osd_dev,0,&rect,INPUT_CON_HL);
				pVscr = OSD_GetVscr(&rect,OSD_GET_BACK);
				OSD_DrawText(&rect,ustr,INPUT_TXT_HL,C_ALIGN_CENTER,0,pVscr);

				if(pVscr->lpbScr != NULL)
				pVscr->updatePending = 1;
				OSD_UpdateVscr(pVscr);
				pVscr->lpbScr = NULL;
			}
			else if(focus_id==LNBFREQ_ID || focus_id==DISEQC_ID || focus_id==K22_ID||focus_id==POL_ID)
			{
				if(vkey == V_KEY_LEFT)
					value = -1;
				else
					value = 1;

				input_data[focus_id-1] = (input_data[focus_id-1]+value+input_range[focus_id-1].len)%input_range[focus_id-1].len;
				bootota_get_ustr(focus_id-1, ustr);
				OSD_SetRect(&rect, INPUT_TXTS_L, INPUT_TXTS_T+(INPUT_TXTS_H+INPUT_TXT_GAP)*(focus_id-1), INPUT_TXTS_W, INPUT_TXTS_H);	
				back_sh = INPUT_CON_HL;
				txt_sh = INPUT_TXT_HL;
				OSDDrv_RegionFill((HANDLE)osd_dev,0,&rect,back_sh);
				pVscr = OSD_GetVscr(&rect,OSD_GET_BACK);
				OSD_DrawText(&rect,ustr,txt_sh,C_ALIGN_CENTER,0,pVscr);

				OSD_SetRect(&rect, INPUT_TXTS_L, INPUT_TXTS_T+(INPUT_TXTS_H+INPUT_TXT_GAP)*(focus_id-1), 26, INPUT_TXTS_H);	
				ComAscStr2Uni("<", ustr);
				OSD_DrawText(&rect,ustr,txt_sh,C_ALIGN_CENTER,0,pVscr);

				OSD_SetRect(&rect, INPUT_TXTS_L+INPUT_TXTS_W-26, INPUT_TXTS_T+(INPUT_TXTS_H+INPUT_TXT_GAP)*(focus_id-1), 26, INPUT_TXTS_H);	
				ComAscStr2Uni(">", ustr);
				OSD_DrawText(&rect,ustr,txt_sh,C_ALIGN_CENTER,0,pVscr);
			}
		}
		if(pVscr->lpbScr != NULL)
			pVscr->updatePending = 1;
		OSD_UpdateVscr(pVscr);
		pVscr->lpbScr = NULL;
	}
	return 0;
}
示例#2
0
UINT32 gelib_olst_focuslide(POBJECT_HEAD psobj,POBJECT_HEAD ptobj,UINT32 param)
{//start and terminal point
	UINT16 i,yy,pyy,tyy,byy,hy,urevert,uborder;
	GUI_RECT rcvscr,rctop,rctborder,*psrct,*ptrct;
	PGUI_VSCR pvscr;
	PGUI_REGION pgma,pmem;

	psrct = &psobj->frame;
	ptrct = &ptobj->frame;
	if(gui_rctsize(psrct,ptrct) == 0)
		return (UINT32)(-1);//do not support focus slide
	else if(ge_version <= GE_MODULE_M3329D)
		return (UINT32)(-2);

	urevert = 0;
	uborder = 0;
	if((psrct->uStartX) != (ptrct->uStartX))
		return (UINT32)(-3);//do not support horizontal focus slide
	else if(ABS((psobj->bID) - (ptobj->bID))>1)
		return (UINT32)(-4);//uborder = 1;//return (UINT32)(-4);
	else if((psrct->uStartY)>(ptrct->uStartY))
		urevert = 1;
	
	hy = (ptrct->uHeight);
	tyy = MIN((psrct->uStartY),(ptrct->uStartY));
	byy = MAX((psrct->uStartY),(ptrct->uStartY))+(ptrct->uHeight);
	rcvscr.uStartX = (ptrct->uStartX);
	rcvscr.uStartY = tyy;
	rcvscr.uWidth = (ptrct->uWidth);
	rcvscr.uHeight = (byy - tyy);
	rctop.uHeight = hy;
	rctop.uStartX = (ptrct->uStartX);
	rctop.uWidth = (ptrct->uWidth);

	pvscr = OSD_GetTaskVscr(osal_task_get_current_id());
	OSD_SetVscrModified(pvscr);
	OSD_UpdateVscr(pvscr);	
	OSD_SetVscrSuspend(pvscr);
	
	pmem = gelib_getdstrgn(pvscr->root_layer,pvscr->root_rgn);
	pgma = gelib_getdstrgn(pvscr->dst_layer,pvscr->dst_rgn);

	if(uborder == 1)
	{
		if((psrct->uStartY)<(ptrct->uStartY))
			urevert = 1;
		else
			urevert = 0;
		
		rctop.uStartY = (psrct->uStartX);
		rctop.uStartY = (psrct->uStartY);
		rctop.uWidth = (psrct->uWidth);
		rctop.uHeight = (psrct->uHeight);
		rctborder.uStartX = (ptrct->uStartX);
		rctborder.uStartY = (ptrct->uStartY);
		rctborder.uWidth = (ptrct->uWidth);
		rctborder.uHeight = (ptrct->uHeight);
		for(i = 0;i < (rctop.uHeight); i += 2)
		{
			if(urevert)
			{
				rctop.uHeight -= 2;
				rctborder.uStartY = (ptrct->uStartY + ptrct->uHeight -i);
			}
			else
			{
				rctop.uStartY += 2;
				rctop.uHeight -= 2;
			}
			
			rctborder.uHeight = i;
			OSD_DrawStyleRect(&rctop,psobj->style.bHLIdx,pvscr);
			OSD_DrawStyleRect(&rctborder,ptobj->style.bHLIdx,pvscr);
			
			OSD_DrawObject(psobj,C_UPDATE_CONTENT);
			OSD_DrawObject(ptobj,C_UPDATE_CONTENT);
			gelib_flush_rgn(pgma,pmem,&rcvscr,&rcvscr,0);
			
			OSD_DrawStyleRect(&rctop,psobj->style.bShowIdx,pvscr);
			OSD_DrawStyleRect(&rctborder,ptobj->style.bShowIdx,pvscr);
			GELIB_EFFECT_DELAY(0);
		}
	}
	else
	{
		for(i = tyy;i < (byy-hy); i += 2)
		{
			if(urevert)
				rctop.uStartY = (byy-hy-i + tyy);
			else
				rctop.uStartY = i;
			OSD_DrawStyleRect(&rctop,psobj->style.bHLIdx,pvscr);
			
			OSD_DrawObject(psobj,C_UPDATE_CONTENT);
			OSD_DrawObject(ptobj,C_UPDATE_CONTENT);
			gelib_flush_rgn(pgma,pmem,&rcvscr,&rcvscr,0);
			
			OSD_DrawStyleRect(&rctop,psobj->style.bShowIdx,pvscr);
			GELIB_EFFECT_DELAY(0);
		}
	}
	
	pvscr = OSD_GetVscr(&rcvscr,VSCR_NULL); 
	OSD_DrawObject(psobj,C_UPDATE_ALL);
	OSD_TrackObject(ptobj,C_UPDATE_ALL);
	OSD_ClearVscrSuspend(pvscr);
	OSD_SetVscrModified(pvscr);
	OSD_UpdateVscr(pvscr);
	
	return 0;
}