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

📄 asix_kb.c

📁 基于东南大学开发的SEP3203的ARM7中的所有驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
					kbctrl->cur_mode=NOINPUT;
					break;
				}
				else
				{
					ActiveAreaSuspend(kbctrl->HW_Icon1[i].icon_id,AREA_SUSPEND);
				}
//				position_temp = xSrc+i*16;
//				if ( ActiveAreaEnable((P_U32)&(kbctrl->HW_Icon2[i].icon_id), ICON_AREA, CONTINUOUS_MODE,\
//				position_temp, ySrc-32, position_temp+16, ySrc-16, kbctrl->wndid) !=PPSM_OK) {
//					kbctrl->cur_mode=NOINPUT;
//					break;
//				}
				kbctrl->HW_Icon1[i].icon_data=0;
//				kbctrl->HW_Icon2[i].icon_data=0;
			}
			DrawRec(kbctrl->pGC,GPC_BLACK,(LCD_WIDTH-CHAR_WIDTH*10)/2-1,ySrc-CHAR_WIDTH-2,(LCD_WIDTH-CHAR_WIDTH*10)/2+CHAR_WIDTH*10,ySrc-1,GPC_SOLID_LINE,GPC_REPLACE_STYLE);
		#endif	//#ifdef SOLIVE
			
			break;
		
		case BOHAO:
			kbctrl->cur_mode=BOHAO;
			if (( kbctrl->BoHaoIcon = Lcalloc( 12*sizeof(U32)))==NULL)
			{
				kbctrl->cur_mode=NOINPUT;
				break;
			}
			{
				U16	width;
				U16	height;

				GroupOn( kbctrl->pGC );

				for (i=0;i<12;i++){
					bmp=LoadBitmap(BohaoList[i].icon_bmp, NULL);
					width = ((BITMAP *)bmp)->info.width +3;
					height = ((BITMAP *)bmp)->info.height +8;
					
					position_temp = xSrc+(i % 3)*width;
					if ( ActiveAreaEnable((P_U32)&(kbctrl->BoHaoIcon[i]), ICON_AREA, CONTINUOUS_MODE,\
					position_temp, ySrc+(i / 3)*height, position_temp+width, ySrc+(i/3+1)*height,kbctrl->wndid) !=PPSM_OK) {
						kbctrl->cur_mode=NOINPUT;
						break;
					}
//modified by dsa 2002/04/17
//				switchonetotwo(BohaoList[i].icon_bmp, position_temp + 4, ySrc+(i / 3)*40+7, \
//				44, 25);
//				SysDrawMonoImage(kbctrl->pGC,BohaoList[i].icon_bmp,position_temp + 4,ySrc+(i / 3)*40+7,\
//						44,25,GPC_WHITE,GPC_BLACK);
					DisplayBMP(kbctrl->pGC,position_temp,ySrc+(i / 3)*height,bmp);
					FreeBitmap(bmp);
				}
				GroupOff( kbctrl->pGC, xSrc, ySrc, PHY_LCD_W-1, PHY_LCD_H-1 );
			}
			break;
		default:
			kbctrl->cur_mode=NOINPUT;
			break;
			
	}	
//ClearRec used follows maybe error!!!!
	if (kbctrl->cur_mode == NOINPUT) {
		/* Clear the control icons*/
		for( i=0; (i<5) && (mode != BOHAO) ;i++) 
			if ( kbctrl->CtrlIcon[i].icon_id!=0 ) ActiveAreaDisable(kbctrl->CtrlIcon[i].icon_id);
		/* Clear Handwriting or Pinying data icons*/
		if (mode==SHOUXIE) {
			if (CurWindow->status & WST_HANDWRITE)
			{
				SysCloseInputPad(kbctrl->areaId1);	
				/* we clear the status bit in the parent win*/
				CurWindow->status &= (~WST_HANDWRITE);
				/* reopen the parent window's client area*/
				ActiveAreaSuspend( ( (struct wn_ctrl *)CurWindow->ctrl_str )->clientid, AREA_REENABLE);
			}
		#ifdef SOLIVE			
			if (kbctrl->HW_Icon1!=NULL)
			{
				for (i=0;i<9;i++)
					if ( kbctrl->HW_Icon1[i].icon_id!=0 )
						ActiveAreaDisable(kbctrl->HW_Icon1[i].icon_id);
				
				Lfree(kbctrl->HW_Icon1);
				kbctrl->HW_Icon1 = NULL;
				ClearRec(kbctrl->pGC,GPC_WHITE,(LCD_WIDTH-CHAR_WIDTH*10)/2-1,ySrc-CHAR_WIDTH-2,CHAR_WIDTH*10+2,CHAR_WIDTH+2,GPC_REPLACE_STYLE);
			}			
//			if (kbctrl->HW_Icon2!=NULL)
//			{
//				for (i=0;i<9;i++)
//					if ( kbctrl->HW_Icon2[i].icon_id!=0 )
//						ActiveAreaDisable(kbctrl->HW_Icon2[i].icon_id);
//				
//				Lfree(kbctrl->HW_Icon2);
//				kbctrl->HW_Icon2 = NULL;
//			}
		#endif
		} else if (mode==PINYING) {
			if (kbctrl->PY_Icon!=NULL)
			{
				for (i=0;i<7;i++) 
					if (kbctrl->PY_Icon[i].icon_id!=0) 
						ActiveAreaDisable(kbctrl->PY_Icon[i].icon_id);
				Lfree(kbctrl->PY_Icon);
				if (kbctrl->PY_LeftButtonId!=0) ActiveAreaDisable(kbctrl->PY_LeftButtonId);
				if (kbctrl->PY_RightButtonId!=0) ActiveAreaDisable(kbctrl->PY_RightButtonId);
				ClearRec(kbctrl->pGC,GPC_WHITE,(LCD_WIDTH-CHAR_WIDTH*7)/2-10,ySrc-CHAR_WIDTH-2,CHAR_WIDTH*7+20,CHAR_WIDTH+2,GPC_REPLACE_STYLE);
			}		
			if (kbctrl->Pycb!=NULL)
			{
				Lfree(kbctrl->Pycb);
			}
		} else if (mode == BOHAO ) {
			if (kbctrl->BoHaoIcon!=NULL)
			{
				for (i=0;i<12;i++)
				{
					if (kbctrl->BoHaoIcon[i]!=0)
						ActiveAreaDisable(kbctrl->BoHaoIcon[i]);
				}
				ClearRec(kbctrl->pGC,GPC_WHITE,2,kbctrl->cur_y,156,160,GPC_REPLACE_STYLE);
				Lfree(kbctrl->BoHaoIcon);
			}
		}			
		ClearRec(kbctrl->pGC,GPC_WHITE,kbctrl->cur_x,kbctrl->cur_y,154,76,GPC_REPLACE_STYLE);
		SysCloseSoftKey(kbctrl->areaId);
		
		memset(kbctrl,0x0,sizeof(struct kbd_ctrl));
	}
	
	return kbctrl->cur_mode;

}

extern const unsigned int ClearWidth;
extern const unsigned int ClearHeight; 

static void closeinput(struct kbd_ctrl *kbctrl)
{
	
	register U16 i;
//	S16 pen_x,pen_y;							//modified by dsa 2002/04/17
	ASIX_WINDOW		*CurWindow;					//add by dsa 2002/04/17
	CurWindow =(ASIX_WINDOW *)GetCurWindow();	//add by dsa 2002/04/17

//modified by dsa 2002/04/17	
//getpen:	
//	PenGetInput(&pen_x,&pen_y);
//	if ( (pen_x>0) && (pen_y>0) ) goto getpen;
	
	if (kbctrl->cur_mode == BOHAO )
		ClearRec(kbctrl->pGC,GPC_WHITE,2,kbctrl->cur_y,156,160,GPC_REPLACE_STYLE);
	else 	
		ClearRec(kbctrl->pGC,GPC_WHITE,kbctrl->cur_x,kbctrl->cur_y, ClearWidth, ClearHeight,GPC_REPLACE_STYLE);
//		ClearRec(kbctrl->pGC,GPC_WHITE,kbctrl->cur_x,kbctrl->cur_y,154,75,GPC_REPLACE_STYLE);
 	if (kbctrl->cur_mode==PINYING){
		for (i=0;i<7;i++) 
			ActiveAreaDisable(kbctrl->PY_Icon[i].icon_id);
		if (kbctrl->PY_LeftButtonId!=0)
		{ 
			ActiveAreaDisable(kbctrl->PY_LeftButtonId);
			kbctrl->PY_LeftButtonId=0;
		}
		if (kbctrl->PY_RightButtonId!=0)
		{	
			ActiveAreaDisable(kbctrl->PY_RightButtonId);
			kbctrl->PY_RightButtonId=0;
		}
		
		Lfree(kbctrl->PY_Icon);
		kbctrl->PY_Icon=NULL;
		
		Lfree(kbctrl->Pycb);
		kbctrl->Pycb=NULL;
		//Pycb.ClearFlag=TRUE;/*2000/2/17*/
//		ClearRec(kbctrl->pGC,GPC_WHITE,kbctrl->cur_x,kbctrl->cur_y-18,154,18,REPLACE_STYLE);	
		ClearRec(kbctrl->pGC,GPC_WHITE,(LCD_WIDTH-CHAR_WIDTH*7)/2-10,kbctrl->cur_y-CHAR_WIDTH-2,CHAR_WIDTH*7+20,CHAR_WIDTH+2,GPC_REPLACE_STYLE );
	} else if (kbctrl->cur_mode==SHOUXIE) {
//		ClearRec(kbctrl->pGC,GPC_WHITE,(LCD_WIDTH-CHAR_WIDTH*10)/2-1,kbctrl->cur_y-CHAR_WIDTH-2,CHAR_WIDTH*10+2,CHAR_WIDTH+2,GPC_REPLACE_STYLE );
		SysCloseInputPad(kbctrl->areaId1);
		//AppSwap(FALSE);
	#ifdef SOLIVE		
		for(i=0;i<10;i++) {
			ActiveAreaDisable(kbctrl->HW_Icon1[i].icon_id);
//			ActiveAreaDisable(kbctrl->HW_Icon2[i].icon_id);
		}
		
		Lfree(kbctrl->HW_Icon1);
		Lfree(kbctrl->HW_Icon2);
		kbctrl->HW_Icon1=NULL;
		kbctrl->HW_Icon2=NULL;
		
	#endif

		ClearRec(kbctrl->pGC,GPC_WHITE,(LCD_WIDTH-CHAR_WIDTH*10)/2-1,kbctrl->cur_y-CHAR_WIDTH-2,CHAR_WIDTH*10+2,CHAR_WIDTH+2,GPC_REPLACE_STYLE);
		/* we clear the status bit in the parent win*/
		CurWindow->status &= (~WST_HANDWRITE);
		/* reopen the parent window's client area*/
		ActiveAreaSuspend( ( (struct wn_ctrl *)CurWindow->ctrl_str )->clientid, AREA_REENABLE);
	} else if (kbctrl->cur_mode == BOHAO ) {
		for (i = 0; i<12 ;i++)
			ActiveAreaDisable(kbctrl->BoHaoIcon[i]);
		
		Lfree(kbctrl->BoHaoIcon);
		kbctrl->BoHaoIcon=NULL;
			
	}

	for( i=0;i<5 && kbctrl->cur_mode!= BOHAO ;i++) 
		if ( kbctrl->CtrlIcon[i].icon_id!=0 ) ActiveAreaDisable(kbctrl->CtrlIcon[i].icon_id);

	SysCloseSoftKey(kbctrl->areaId);
	
	kbctrl->cur_mode=NOINPUT;
	kbctrl->char_flag=KB_NODATA;
	memset(kbctrl->CtrlIcon,0x0,5*sizeof(struct ctrl_icon));/* Clear the ctrol icon list*/	
	memset(kbctrl->icon_select_map,UNSELECTED,6*sizeof(U8));
	
	kbctrl->CtrlIconSelect=0;  
	kbctrl->icon_index=0;
	
}



STATUS kbd_create(char *caption, U32 style, U16 x, U16 y, U16 width, U16 hight,
				 U32 wndid, U32 menu, void **ctrl_str, void *exdata)
{
	
	U8				mode, allow;
	struct kbd_ctrl	*kbctrl_ptr;
	U32				pGC;
	
	mode = HIBYTE(LOWORD(style));
	allow = LOBYTE(LOWORD(style));
	
	asix_kb_memdbgprintf( "### Create Keyboard ###" );
	kbctrl_ptr = Lcalloc( sizeof(struct kbd_ctrl) );
	if ( kbctrl_ptr == NULL ) 
	{
		asix_kb_memdbgprintf( "### Create Keyboard Error ###" );
		return ASIX_NO_MEM;
	}
	
	pGC =GetGC();
	
	kbctrl_ptr->pGC=pGC;
	kbctrl_ptr->classid = (U32)WNDCLASS_KEYBD;
	kbctrl_ptr->wndid	= wndid;
	kbctrl_ptr->cur_x = x;
	if ( openinput(y, mode, allow, kbctrl_ptr) != mode )
	{
		Lfree(kbctrl_ptr);
		*ctrl_str=NULL;
		asix_kb_memdbgprintf( "### Create Keyboard Error ###" );
		return ASIX_ERROR;
	}
			
	*ctrl_str = (void *)kbctrl_ptr;
	asix_kb_memdbgprintf( "### Create Keyboard Successfully ###" );
	return ASIX_OK;
	
}

STATUS kbd_destroy(void *ctrl_str)
{
	
	asix_kb_memdbgprintf( "### Destroy Keyboard ###" );
	closeinput(ctrl_str);
	Lfree(ctrl_str);
	asix_kb_memdbgprintf( "### Destroy Keyboard Successfully ###" );
	return ASIX_OK;
	
}


STATUS kbd_msgtrans(void *ctrl_str, U16 msg_type, U32 areaId, P_U16 data, U32 size, PMSG trans_msg)
{
	register U8		i;
/* Hand writing candidates number*/
#ifdef SOLIVE
	U8 				candy_num = 8;
#endif

#ifdef SANBAO
	U8				candy_num = 4;
#endif 	

/* PingYing */
	char			PY_Key;
	register struct kbd_ctrl *ctrlstr;
	U16				chtext[2];

	chtext[1]=0;
		
	if ( msg_type != ASIX_ICON && msg_type != ASIX_CHINESE/*ASIX_HWR*/ && msg_type != ASIX_SOFTKEY)	return  ASIX_NO_MSG;
	
//	ctrlstr = (struct kb_ctrl *)ctrl_str;
	ctrlstr = (kbd_ctrl *)ctrl_str;
	if (ctrlstr==NULL || ctrlstr->cur_mode==NOINPUT || trans_msg==NULL) 
		return ASIX_ERROR;	
	
	memset( (void *)trans_msg, 0x0, sizeof (MSG) );
	trans_msg->messageType = ASIX_MESSAGE;	//the type of all the ASIX win messages are ASIX_MESSAGE
	
	//ctrl_str->classid = (U16)WNDCLASS_KEYBD;
	
	switch( msg_type )
	{
		case ASIX_ICON:
			
			ctrlstr->CtrlIconSelect = 0;
			for (i=0;i<5;i++)
			{
				if (areaId==ctrlstr->CtrlIcon[i].icon_id )
				{
					ctrlstr->CtrlIconSelect = CONTROL_ICON;
					ctrlstr->icon_index = i;
					ctrlstr->icon_areaid = areaId; 
					goto msg_translate;
				}
			}
			if (ctrlstr->cur_mode == SHOUXIE)
			{
			
			#ifdef SOLIVE
				for (i=0;i<10;i++)
				{
					if ( (areaId==ctrlstr->HW_Icon1[i].icon_id)&&(ctrlstr->HW_Icon1[i].icon_data!=0)) {
						ctrlstr->CtrlIconSelect=HWR_ICON1;
						ctrlstr->icon_index=i;			
						ctrlstr->icon_areaid = areaId; 		
						goto msg_translate;
					}
//					if ( (areaId==ctrlstr->HW_Icon2[i].icon_id)&&(ctrlstr->HW_Icon2[i].icon_data!=0)) {
//						ctrlstr->CtrlIconSelect=HWR_ICON2;
//						ctrlstr->icon_index=i;
//						ctrlstr->icon_areaid = areaId; 
//						goto msg_translate;
//					}
				}
			#endif
			} else if (ctrlstr->cur_mode == PINYING) {
				for (i=0; i<7; i++)
				{
					if ( (areaId==ctrlstr->PY_Icon[i].icon_id)&&(ctrlstr->PY_Icon[i].icon_data!=0)) {
						ctrlstr->CtrlIconSelect = PY_ICON;
						ctrlstr->icon_index = i;
						ctrlstr->icon_areaid = areaId; 
						goto msg_translate;
					}
				}
				if (areaId==ctrlstr->PY_RightButtonId) {
					ctrlstr->CtrlIconSelect = PY_RIGHT;
					ctrlstr->icon_areaid = areaId;
				} else if (areaId==ctrlstr->PY_LeftButtonId) {
					ctrlstr->CtrlIconSelect = PY_LEFT;
					ctrlstr->icon_areaid = areaId;
				}	
					
					
			} else if (ctrlstr->cur_mode == BOHAO ) {
				for (i=0; i<12; i++)
				{
					if (areaId == ctrlstr->BoHaoIcon[i])
					{
						ctrlstr->CtrlIconSelect = 	BH_ICON;
						ctrlstr->icon_index = i;
						ctrlstr->icon_areaid = areaId; 
						goto msg_translate;
					}
				}				
			}

msg_translate:
			if (ctrlstr->cur_mode == 0) return ASIX_NO_MSG;
			
			if (ctrlstr->CtrlIconSelect == 0 ) return ASIX_NO_MSG;
			
			
			trans_msg->lparam = ctrlstr->wndid;
			trans_msg->data = (void *)ctrlstr;
			trans_msg->wparam = (U16)WNDCLASS_KEYBD;
			
//			if ( *data == PPSM_ICON_TOUCH ) trans_msg->message = WM_PENDOWN;
//			else if ( *data == PPSM_ICON_DRAG ) trans_msg->message = WM_PENDRAG;
//			else if ( *data == PPSM_ICON_DRAG_UP ) trans_msg->message = WM_PENDRAGUP;
//			else if ( *data == PPSM_ICON_PEN_UP ) trans_msg->message = WM_PENUP;
			if ( size == PPSM_ICON_TOUCH ) trans_msg->message = WM_PENDOWN;
			else if ( size == PPSM_ICON_DRAG ) trans_msg->message = WM_PENDRAG;
			else if ( size == PPSM_ICON_DRAG_UP ) trans_msg->message = WM_PENDRAGUP;
			else if ( size == PPSM_ICON_PEN_UP ) trans_msg->message = WM_PENUP;
			   							
			break;
		
		case ASIX_CHINESE:/*ASIX_HWR:*/
			
			if ( (data == NULL) || (size == 0) || (*(P_U8)data == 0 ) ) return ASIX_ERROR;
			if ( ctrlstr->cur_mode == SHOUXIE )
			{
		#ifdef SOLIVE	
//			for ( i=0; i<9; i++)
//				ctrlstr->HW_Icon2[i].icon_data = ctrlstr->HW_Icon1[i].icon_data;
//			if ( size < 16 ) candy_num = size/2;
//			for (i=0; i<9; i++)
//			{
//				if (i<=candy_num-1) {
//					ctrlstr->HW_Icon1[i].icon_data = data[i];
//				} else {
//					ctrlstr->HW_Icon1[i].icon_data = 0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -