?? jkdevice.c
字號:
#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 + -