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

📄 jkeyout.c

📁 motorola jw32 usb 源码
💻 C
字号:
///////////////////////////////////////////////////////////////////////////////
//                                   pate 1                                  //
///////////////////////////////////////////////////////////////////////////////
#define min_d (90)//79+10
#define max_d (164)//175-20
//#define JK_LENGTH   0x08
#define KEY_SLENTH  0x05
typedef struct {
	 unsigned char key_state[KEY_SLENTH];
	 unsigned char key_save1[KEY_SLENTH];
	 unsigned char key_save2[KEY_SLENTH];
}keybit;
keybit JkeyState;
byte jkState=0,save0,save1,save2,save3,save4,save5=0x7f,save6=0x7f; //right or left jk data state
//static JkeyState key;
//+++++++++++++++++++++++++++++++++++++++++++++++++++
/*********************************************************************
 * Function:       byte Joystick_Waykey(byte x,byte y)
 *
 * Input:          x:joystick x analog value.
 									 y:joystick y analog value.
 *
 * Output:          joystick transfered direction key value .
 *
 * Side Effects:    None
 *
 *
 * Note:            None
 ********************************************************************/
byte Joystick_Waykey(byte x,byte y)
{
    byte output_key;
  if(x<min_d)
  {
    if(y>=0x7f){
  	 	if((y-0x7f)>(0x7f-x))
  	 	   output_key =0x02;     //up
  	 	else  output_key =0x04;  //left
  	           }
  	 else {
  	 	if((0x7f-y)>(0x7f-x))
  	 	      output_key =0x01;  //down*/
  	 	else  output_key =0x04;  //left
  	 	    }
  }
else if(x>max_d)
 {
    if(y>=0x7f){
  	 	if((y-0x7f)>(x-0x7f))
  	 	      output_key =0x02;  //up
  	 	else  output_key =0x08;  //right
               }
    else{
  	 	if((0x7f-y)>(x-0x7f))
  	 	      output_key =0x01;  //down*/
  	  else  output_key =0x08;  //right
  	    }
 }
 else 	{
 	       if(y>max_d)
          output_key =0x02;    //up
         else if(y<min_d)
          output_key =0x01;    //down*/
         else output_key =0x00;
        }
return (output_key);
 /*   byte output_key;

  if(x<max_d&&x>min_d&&y<min_d)
	 {  output_key =0x01;
   }  //down
//----------------------------------
	else if(x>min_d&&x<max_d&&y>max_d)
	 { output_key =0x02;
	 }  //up
//----------------------------------
  else if(x<min_d&&y>min_d&&y<max_d)
	 {  output_key =0x04;
   }    //left
//----------------------------------
	else if(x>max_d&&y<max_d&&y>min_d)
	 { output_key =0x08;
   }  //right


//----------------------------------
  else if(x<min_d&&y<min_d)
	 {  output_key =0x10;
   }  //down and left
 //----------------------------------
  else if(x>max_d&&y<min_d)
	 {  output_key =0x20;
   }  //right and down
 //----------------------------------
  else if(x<min_d&&y>max_d)
   {  output_key =0x40;
   }   //up and left
 //----------------------------------
	else if(x>max_d&&y>max_d)
	 { output_key =0x80;
   }  //up and right
//----------------------------------
  else 	{
          output_key =0x00;
        }
  return (output_key);   */

}
//+++++++++++++++++++++++++++++++++++++++++++++++++++
/*********************************************************************
 * Function:       byte Joystick_Waykey(byte x,byte y)
 *
 * Input:         inbuffer:joystick data buffer.
 									inlength:joystick data length.
 									outputbuffer:	joystick key out data buffer.
 									outlength:    joystick key out data length.
 *
 * Output:          joystick transfered direction key value .
 *
 *
 *
 * Note:            *outength is outbuffer max length.when put data into
 	                  outputbuffer,should chekc input data length less than
 	                  *outength.in case outputbuffer overflow
 	output :  0: no key map.1:normal key map.2:especial key map
 ********************************************************************/
byte Joystick_KeyFilter(byte *inbuffer,byte inlength,byte *outputbuffer,byte* outlength)//,byte *outputbuffer
{
	 unsigned char key_r,key_l,i,lenth=0;
//——————————————————————————————————————————————————————————————————————
	if(inlength!=JK_LENGTH)
	{
		* outlength = 0;
			return 0;
	}
	if(*outlength==0)
	{
		return 0;
	}
   key_r = Joystick_Waykey(inbuffer[0],inbuffer[1]);
   key_l = Joystick_Waykey(inbuffer[2],inbuffer[3]);
	 JkeyState.key_state[0] = inbuffer[4]>>4;
	 JkeyState.key_state[1] = inbuffer[5];
	 JkeyState.key_state[2] = inbuffer[6];
	 JkeyState.key_state[3] = key_l;
	 JkeyState.key_state[4] = key_r;
	 if(Joystick==1){
	 save0=JkeyState.key_save1[0];
	 save1=JkeyState.key_save1[1];
	 save2=JkeyState.key_save1[2];
	 save3=JkeyState.key_save1[3];
	 save4=JkeyState.key_save1[4];
	 }
	 if(Joystick==2){
	 save0=JkeyState.key_save2[0];
	 save1=JkeyState.key_save2[1];
	 save2=JkeyState.key_save2[2];
	 save3=JkeyState.key_save2[3];
	 save4=JkeyState.key_save2[4];
	 }

//——————————————————————————————————————————————————————————————————————
for(i=0;i<8;i++)
 {
//——————————————————————————————————————————————————————————————————————
	 	 if(JkeyState.key_state[0]&Groupbit[i]) //
		 {
		  if((save0&Groupbit[i])==0)  //有键按下
		   {
			   outputbuffer[lenth] = ((i+1)<<1)+1;
			   if(lenth<*outlength)
	 				  lenth++;
		   }
		 }

	 	else{
		       if(save0&Groupbit[i]) //有键松起
			   {
	 			   outputbuffer[lenth] = (i+1)<<1;
	 			   if(lenth<*outlength)
	 				    lenth++;
			   }
		    }
//————————————————————————————————————————————————————————————————
	 	 if(JkeyState.key_state[1]&Groupbit[i])
		 {
		  if((save1&Groupbit[i])==0)  // 有键按下
		   {
			   outputbuffer[lenth]= ((i+5)<<1)+1;
	 			 if(lenth<*outlength)
	 				  lenth++;
		   }
		 }

	 	else{
		       if(save1&Groupbit[i]) //有键松起
			   {
	 			  outputbuffer[lenth]= (i+5)<<1;
	 			  if(lenth<*outlength)
	 				 lenth++;
			   }
		    }
//——————————————————————————————————————————————————————————————————
	 	 if(JkeyState.key_state[2]&Groupbit[i])
		 {
		  if((save2&Groupbit[i])==0)  // 有键按下
		   {
			   outputbuffer[lenth] = ((i+13)<<1)+1;
	 	     if(lenth<*outlength)
	 				 lenth++;
		   }
		 }

	 	else{
		       if(save2&Groupbit[i]) //有键松起
			   {
	 			 outputbuffer[lenth] = (i+13)<<1;
	 			 if(lenth<*outlength)
	 				 lenth++;
			   }
		    }
//——————————————————————————————————————————————————————————————————————
	 	 if(JkeyState.key_state[3]&Groupbit[i])
		 {
		  if((save3&Groupbit[i])==0x00)  // 有键按下
		   {
			    outputbuffer[lenth] = ((i+20)<<1)+1;
	 			  if(lenth<*outlength)
	 				 lenth++;
		   }
		 }

	 	else{
		       if(save3&Groupbit[i]) //有键松起
			   {
	 			    outputbuffer[lenth]= (i+20)<<1;
	 			    if(lenth<*outlength)
	 				     lenth++;
			   }
		    }
//——————————————————————————————————————————————————————————————————————
	 	 if(JkeyState.key_state[4]&Groupbit[i])
		 {
		  if((save4&Groupbit[i])==0x00)  // 有键按下
		   {
			    outputbuffer[lenth] = ((i+28)<<1)+1;
	 			  if(lenth<*outlength)
	 				 lenth++;
		   }
		 }

	 	else{
		       if(save4&Groupbit[i]) //有键松起
			   {
	 			    outputbuffer[lenth]= (i+28)<<1;
	 			    if(lenth<*outlength)
	 				     lenth++;
			   }
		    }
//——————————————————————————————————————————————————————————————————————
 }
  if(Joystick==1){
 	 JkeyState.key_save1[0] = JkeyState.key_state[0];
	 JkeyState.key_save1[1] = JkeyState.key_state[1];
	 JkeyState.key_save1[2] = JkeyState.key_state[2];
	 JkeyState.key_save1[3] = JkeyState.key_state[3];
	 JkeyState.key_save1[4] = JkeyState.key_state[4];
	 }
	if(Joystick==2){
		JkeyState.key_save2[0] = JkeyState.key_state[0];
	  JkeyState.key_save2[1] = JkeyState.key_state[1];
	  JkeyState.key_save2[2] = JkeyState.key_state[2];
	  JkeyState.key_save2[3] = JkeyState.key_state[3];
	  JkeyState.key_save2[4] = JkeyState.key_state[4];
	     }
	 if(lenth==0){


	  if((save5==inbuffer[0])&&(save6==inbuffer[1])) {
	      if((save5==0x7f)&&(save6==0x7f)) {

	    	   outputbuffer[0] = 40;
	    	   * outlength = 1;
	         return 1;
	                           }    //最后修改日期2006-08-08
	  }

	 	outputbuffer[0] = 40;
	 	outputbuffer[1] = 56;
	 		 		  save5=inbuffer[0];
	    		  save6=inbuffer[1];
	 	* outlength = 2;
	  return 2;
	  }
	 // jkState=0;
	 save5=inbuffer[0];
	 save6=inbuffer[1];
	 * outlength = lenth;
	 return 1;
}
void Joystick_KeyInit()
{
	byte i;
	for(i=0;i<KEY_SLENTH;i++)
	{
		JkeyState.key_save1[i]=0x00;
		JkeyState.key_save2[i]=0x00;
		JkeyState.key_state[i]=0x00;
	}
//	jkState= 0;
}


























⌨️ 快捷键说明

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