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

📄 jkdevice.c

📁 motorola jw32 usb 源码
💻 C
📖 第 1 页 / 共 2 页
字号:


#define JK_LENGTH   0x07




#define min_d (90)//79+10
#define max_d (164)//175-20
#define True 1
#define False 0
#define JKDMAX  0xfd
//#define JKDMIN  0x60
#define JKGRADE 0x02
#define JKDVS   0x70
#pragma DATA_SEG DEFAULT
static unsigned char Over;
 extern BYTE Joystick;
//mouse data format:0:(key,01 left.right 01). 1~4:x,y. 5:scroll
unsigned  char mose_buffer[KbLength]={0,0,0,0,0,0} ;	//他们分别是放:鼠标数据,遥感(4/8)键时的x,y值,键盘数据
//keyboard data format: 0:id=0x01,1:modify...
unsigned char kb_buffer[KbLength]={0,0,0,0,0,0} ;
unsigned char joystick_buffer1[KbLength]={0x7f,0x7f,0x7f,0x7f,0x0f,0} ;//send data id is seted by mac
unsigned char joystick_buffer2[KbLength]={0x7f,0x7f,0x7f,0x7f,0x0f,0} ;//send data id is seted by mac
//joystick data format: 0:id:0x06,0x07.1...
//unsigned char  Modifier;
typedef struct bkeybyte
{
	union {
  byte Val;
  struct {
    byte bLeftCtrl       :1;                                       /* modify key Data Bit 0 */
    byte bLeftShift       :1;                                       /* modify keyData Bit 1 */
    byte bLeftAlt       :1;                                       /*modify key Data Bit 2 */
    byte bLeftGUI        :1;                                       /* modify key Data Bit 3 */
    byte bRightCtrl        :1;                                       /* modify key Data Bit 4 */
    byte bRightShift        :1;                                       /* modify key Data Bit 5 */
    byte bRightAlt        :1;                                       /* modify key Data Bit 6 */
    byte bRightGUI        :1;                                       /* modify key Data Bit 7 */
  } Bits;
}Byte;
} KeyModify;
KeyModify  bkeyModify;
#define Modifier                       bkeyModify.Byte.Val
#define BKM                             bkeyModify.Byte
#define LeftCtrl_p                        BKM.Bits.bLeftCtrl
#define LeftShift_p                        BKM.Bits.bLeftShift
#define LeftAlt_p                        BKM.Bits.bLeftAlt
#define LeftGUI_p                        BKM.Bits.bLeftGUI
#define RightCtrl_p                        BKM.Bits.bRightCtrl
#define RightShift_p                        BKM.Bits.bRightShift
#define RightAlt_p                        BKM.Bits.bRightAlt
#define RightGUI_p                        BKM.Bits.bRightGUI
void Joystick_DevInit()
{
	byte i;
	for(i=0;i<KbLength;i++)
	{
		mose_buffer[i]=0x00;
		joystick_buffer1[i]=0x00;
		joystick_buffer2[i]=0x00;
		kb_buffer[i]=0x00;
	}
	joystick_buffer1[4]=0x0f;
	joystick_buffer2[4]=0x0f;
	bkeyModify.Byte.Val =0x00;
	Modifier=0x00;
}
/********************/
unsigned char  modifier_Pressed(unsigned char check_kye,unsigned char kk)
{

  switch(check_kye)
  {
    case LeftCtrl   : {

        if(kk) BKM.Bits.bLeftCtrl=1;
	    else   LeftCtrl_p=0;
	           return( True);
	           break;
    }
    case LeftShift  :if(kk) LeftShift_p=1;
	                 else   LeftShift_p=0;
	                 return( True);break;
    case LeftAlt    :if(kk) LeftAlt_p=1;
	                 else   LeftAlt_p=0;
	                 return( True);break;
    case LeftGUI    :if(kk) LeftGUI_p=1;
	                 else   LeftGUI_p=0;
	                 return( True);break;
    case RightCtrl  :if(kk) RightCtrl_p=1;
	                 else   RightCtrl_p=0;
	                 return( True);break;
    case RightShift :if(kk) RightShift_p=1;
	                 else   RightShift_p=0;
	                 return( True);break;
    case RightAlt   :if(kk) RightAlt_p=1;
	                 else   RightAlt_p=0;
	                 return( True);break;
    case RightGUI   :if(kk) RightGUI_p=1;
					         else   RightGUI_p=0;
	                 return( True);break;
    default         :return( False);break;
  }
}


/************************************************************************
功能:将合法的键值装入EP1_FIFO中
输入:
描述:
************************************************************************/
void FoundKey(unsigned char key,unsigned char keyflag)
{

  unsigned char i,j=0;//LastTx=0;
  static unsigned char  EP1_FIFO_flig=2;
  if (key==0)
     return;
  if(!keyflag)
  {
     if(!modifier_Pressed(key,keyflag))
      {
		    for( i=2; i<KbLength; i++)
            {
              if(kb_buffer[i]==key)
			        j=i;
            }
		    if(j<2||j>(KbLength-1))
		          return;
			else
			{
		  	  for( i=j; i<KbLength-1; i++)
			    {
			       kb_buffer[i]=kb_buffer[i+1];
			    }
		  }
		   Over=0;
		   kb_buffer[KbLength-1]=0x00;
		   if(EP1_FIFO_flig>2)
		      EP1_FIFO_flig--;
		    //  TxRequired=True;
	   }
	   else
	   {
	      kb_buffer[0]=Modifier;
       // TxRequired=True;
     }
  }

 ////////////////////////////////////////////////////////////////////
 else
 {//key pressed
 	 // TxRequired=True;
  	  if(modifier_Pressed(key,keyflag))
  	  {
	      kb_buffer[0]=Modifier;
  	    return;
  	  }

  	  if(EP1_FIFO_flig>KbLength-1)
  	  {
			   Over=1;
         return;
      }
	   for( i=2; i<KbLength; i++)
       {
          if(kb_buffer[i]==key)
	        return;
       }
	     kb_buffer[EP1_FIFO_flig]=key;
       EP1_FIFO_flig++;
  }
}
 void diect(/*unsigned char dir,*/unsigned char opt_Joy,unsigned char *inBuffer1)
 {
 	   unsigned char x,y,output_x,output_y;
      if(opt_Joy==RJK){
    	x = inBuffer1[0];
    	y = inBuffer1[1];
    	}
      if(opt_Joy==LJK){
    	x = inBuffer1[2];
    	y = inBuffer1[3];
    	}
	if(x<min_d) 
  {
  	if(y>=0x7f)
  	 {
  	 	if((y-0x7f)>(0x7f-x))
  	 	      {output_x   =0x7f;
	           output_y   =0xff;} //up  
  	 	else  	   {
	     output_x   =0x00;
	     output_y   =0x7f;}  //left 
  	 }
  	 else
  	 {
  	 	if((0x7f-y)>(0x7f-x))
  	 	      {output_x   =0x7f;
	           output_y   =0x00;}  //down*/
  	 	else  	   {
	     output_x   =0x00;
	     output_y   =0x7f;}  //left 
  	 }
  }
else if(x>max_d)  
 {
 	if(y>=0x7f)
  	 {
  	 	if((y-0x7f)>(x-0x7f))
  	 	     {output_x   =0x7f;
	          output_y   =0xff;
  	 	     }  //up  
  	 	else  	    {
	      output_x   =0xff;
	      output_y   =0x7f;}   //right 
  	 }
  	else
  	 {
  	 	if((0x7f-y)>(x-0x7f))
  	 	     { output_x   =0x7f;
	           output_y   =0x00;
  	 	     	}  //down*/
  	 	else  	    {
	      output_x   =0xff;
	      output_y   =0x7f;}   //right 
  	 } 
 } 
 else 	{
 	       if(y>max_d)
          {output_x   =0x7f;
	         output_y   =0xff;
          } //up  
         else if(y<min_d)
          {output_x   =0x7f;
	         output_y   =0x00;}  //down*/  
         else {output_x   =0x7f;
	             output_y   =0x7f;} 
        }
	    if(Joystick==1)
	   	{joystick_buffer1[2]=output_x;
	     joystick_buffer1[3]=output_y;}
	    if(Joystick==2)
	   	{joystick_buffer2[2]=output_x;
	     joystick_buffer2[3]=output_y;}
	    //}
}


//+++++++++++++++++++++++++++++++++++++++++++++++++++

/*********************************************************************
 * Function:      Joystick_AnalogOutput(unsigned char mode,unsigned char x,unsigned char y,unsigned char *outbuffer,unsigned char *length)
 *
 * Input:         mode:joystick key map mode.
 									x:joystick analog x value.
 									y:joystick analog y value.
 *								outbuffer: device outbuffer data buffer.
 *								length:    outbuffer length
 * Output:        if have data output ,return 1.
 									else return 0
 *
 *
 *
 * Note:            joystick analog data should be indepensive
 ********************************************************************/
/*byte  Joystick_AnalogOutput(unsigned char mode,unsigned char x,unsigned char y,unsigned char *outbuffer,unsigned char *length)
{

}*/
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void mouse_tr(unsigned char opt_Joy,unsigned char *inBuffer1)
{
    unsigned char x,y;
    signed char smouse;
    if(opt_Joy==RJK){
    	y = inBuffer1[1];
    	x = inBuffer1[0];
    	}
      if(opt_Joy==LJK){
    	y = inBuffer1[3];
    	x = inBuffer1[2];
    	}
    	if(x>JKDMAX)
    	{
    		x=JKDMAX;
    	}
    	if(y>JKDMAX)
    	{
    		y=JKDMAX;

⌨️ 快捷键说明

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