小磷光一

BF对鼠标函数的判断

0
阅读(2576)

 

* 名称 : getcode
* 功能 :获取键值
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
int_t   getcode(void)					// 返回0则无操作 返回1 则说明得到响应 返回2 则说明得到数据
{
    if(newflag == 1)
    	{
    	    if(ResOrDat == 1) 		// 为响应数据
    	    	{ 
    	    	    if(ResNum == 1) 
    	    	    	{
    	    	    	    *pFIO_FLAG_C = 0x0020;  
    						*pFIO_MASKA_C= 0x0020;			//中断 禁止
    	    	    	    mdat1.dat = mkey ;
    	    	    	    mdat1.newly = 1;
    	    	    	    newflag = 0;
    	    	    	    ResNum = ResNum - 1;
    	    	    	    return 1;
    	    	    	}
    	    	    else if(ResNum == 2)
    	    	    	{
    	    	    	    mdat2.dat = mkey ;
    	    	    	    mdat2.newly = 1;
    	    	    	    newflag = 0;
    	    	    	    ResNum = ResNum - 1;
    	    	    	    return 0;
    	    	    	}
    	    	    else if(ResNum == 3)
    	    	    	{
    	    	    	    mdat3.dat = mkey ;
    	    	    	    mdat3.newly = 1;
    	    	    	    newflag = 0;
    	    	    	    ResNum = ResNum - 1;
    	    	    	    return 0;
    	    	    	} 
    	    	    else 
    	    	    	{
    	    	    	 	return 0;
    	    	    	}
    	    	       	    		
    	    	}
    	    if(ResOrDat == 0) 		// 为数据
    	    	{
     	    	    if(RecDat == 1) 
    	    	    	{
    						*pFIO_FLAG_C = 0x0020;  
    						*pFIO_MASKA_C= 0x0020;			//中断 禁止
    	    	    	    mdat1.dat = mkey ;
    	    	    	    mdat1.newly = 1;
    	    	    	    newflag = 0;
    	    	    	    RecDat = RecDat-1;
    	    	    	    return 3;
    	    	    	}
    	    	    else if(RecDat == 2)
    	    	    	{
    	    	    	    mdat2.dat = mkey ;
    	    	    	    mdat2.newly = 1;
    	    	    	    newflag = 0;
    	    	    	    RecDat = RecDat-1;
    	    	    	    return 0;
    	    	    	}
    	    	    else if(RecDat == 3)
    	    	    	{
    	    	    	    mdat3.dat = mkey ;
    	    	    	    mdat3.newly = 1;
    	    	    	    newflag = 0;
    	    	    	    RecDat = RecDat - 1;
    	    	    	    return 0;
    	    	    	} 
    	    	    else 
    	    	    	{
    	    	    	 	return 0;
    	    	    	}   	    	
    	    	}
    	}
    else 
    	{
    	    return 0;
    	}
}

/****************************************************************************
* 名称 : Ps_Mouse_Rec
* 功能 : 读取鼠标键值并打印鼠标动作
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void Ps_Mouse_Rec(void)
{
    int_t   test ;	
    ResOrDat = 0; WR = 0;
    test =getcode();
    if(test==3)
    {
    	Decode_Dat();  
    	RecDat = 3;
    	*pFIO_MASKA_S = 0x0020; 
    }
    else
    {
        //*pFIO_MASKA_S = 0x0020; 
    }
}


/****************************************************************************
* 名称 : Mcmd_Send
* 功能 : 鼠标命令传输
* 入口参数 :cmd:命令
			 res:偏移量
* 出口参数 :0 或 1
****************************************************************************/
int_t   Mcmd_Send (int_t   cmd ,int_t   res )
{
    int_t   tim = 100;
    int_t   test;
    ResOrDat = 1;
    WR =1;
	mcmd = cmd ;
	ResNum = res ;
	ps_send_start();
	do{
	    tim--;
	    mdelay(10);
	    test = getcode();
	}while ((test!=1)&(tim !=0));
	
	if ((tim != 0)& (test ==1))
		{
		    return 1;
		}
	else return 0;	
}  

/****************************************************************************
* 名称 : Ps2_Mouse_Stream
* 功能 : 判断鼠标是否响应
* 入口参数 :无
* 出口参数 :0 或 1
****************************************************************************/
int_t   Ps2_Mouse_Stream(void)
{
    int_t   tim =100;
    int_t   test ; 
    do{
	    tim--;
	    test =  Mcmd_Send(0xea,1);
	}while (((test!=1)|(mdat1.dat !=0xfa))&(tim !=0));
	if ((tim == 0)& (mdat1.dat !=0xfa))
		{
		    return 0;
		}
		
	 *pFIO_MASKA_C= 0x4000;
	tim =100;
	do{
	    tim--;
	    test =  Mcmd_Send(0xf4,1);
	    
	}while (((test!=1)|(mdat1.dat !=0xfa))&(tim !=0));
	if ((tim == 0)&(mdat1.dat !=0xfa))
		{
		    return 0;
		}
    *pFIO_MASKA_C= 0x0020;			//中断禁止
    mdelay(0x100);
    *pFIO_MASKA_S = 0x0020; 
    return 1;
}