📄 jkdevice.c
字号:
}
//-------------------------------
smouse =y-0x7f;
if(smouse<0)
{
mose_buffer[4]=0xff;
}
else
{
mose_buffer[4]=0x00;
}
if(smouse>JKDVS||smouse<-JKDVS)
{
smouse >>=(JKGRADE+1);
}
else
{
smouse >>=(JKGRADE+2);
}
// smouse >>=JKGRADE;
mose_buffer[3] =smouse;
//-------------------------------
smouse =x-0x7f;
if(smouse<0)
{
mose_buffer[2]=0xff;
}
else
{
mose_buffer[2]=0x00;
}
if(smouse>JKDVS||smouse<-JKDVS)
{
smouse >>=(JKGRADE+1);
}
else
{
smouse >>=(JKGRADE+2);
}
// smouse >>=JKGRADE;
mose_buffer[1] =smouse;
}
/*********************************************************************
********************************************************************/
void Joystick_hat(unsigned char hat_dir,unsigned char *inBuffer1)
{
unsigned char hat_data,a,b;
hat_data = inBuffer1[4]&0x0f;
if(hat_data==0){
a =0x7f; //0x7f;
b = 0x00;//0xff;}
}
if(hat_data==1){
if(hat_dir==8)
{a = 0xff;
b = 0x00;}//
if(hat_dir==4) {
a =0x7f; //0x7f;
b = 0x00;//0xff;} ///0
}
}
if(hat_data==2){
a = 0xff;
b = 0x7f;}
if(hat_data==3){
if(hat_dir==8)
{a = 0xff;
b = 0xff;}//
if(hat_dir==4) {
a = 0xff;
b = 0x7f; ///2
}
}
if(hat_data==4){
a = 0x7f;
b = 0xff;//0x00;}
}
if(hat_data==5){
if(hat_dir==8)
{a = 0x00;
b = 0xff;}
if(hat_dir==4) {
a = 0x7f;
b = 0xff; ///4
}
}
if(hat_data==6){
a = 0x00;
b = 0x7f;}
if(hat_data==7){
if(hat_dir==8)
{a = 0x00;
b = 0x00;
}///6
if(hat_dir==4) {
a = 0x00;
b = 0x7f;}
}
if(hat_data==0x0f) {
a = 0x7f;
b = 0x7f;
}
if(Joystick==1){
joystick_buffer1[2]=a;
joystick_buffer1[3]=b;}
if(Joystick==2){
joystick_buffer2[2]=a;
joystick_buffer2[3]=b;}
}
void Clear_MsBuffer()
{
byte i;
for(i=0;i<KbLength;i++)
{
mose_buffer[i]=0x00;
}
}
/*********************************************************************
* Function: void DeviceData_output(unsigned char mode,unsigned char key,bit keyflag,unsigned char *outbuffer,unsigned char *length)
*
* Input: mode:joystick key map mode.0:摇杆,1:键帽2:mouse,3,keyboard,4:4方向,5:8方向
key :joystick key.如果是键盘模式,key为键盘数据扫描码.其它为摇杆键号.if mouse:key:left or right key
keyflag:bounce or press flag
inBuffer: joystick data buffer.inlength:joystick data buffer length
* Output: if have data output,1:有摇杆数据,2:鼠标数据3:键盘数据.
0:没有数据.
* Note: joystick analog data should be indepensive
********************************************************************/
byte DeviceData_output(unsigned char mode,unsigned char key,unsigned char keyflag,unsigned char *inBuffer,unsigned char inlength)
{
if(inlength!=JK_LENGTH)
return 0;
switch(mode)
{
case Joystick_mode :
if(key==LJK)
{ if(Joystick==1){
joystick_buffer1[0]=inBuffer[2];
joystick_buffer1[1]=inBuffer[3];}
if(Joystick==2){
joystick_buffer2[0]=inBuffer[2];
joystick_buffer2[1]=inBuffer[3];}
}
else if(key==RJK)
{ if(Joystick==1){
//if(inBuffer[0]!=0&&inBuffer[1]!=0x7f){
joystick_buffer1[2]=inBuffer[0];
joystick_buffer1[3]=inBuffer[1];//}
}
if(Joystick==2){
// if(inBuffer[0]!=0&&inBuffer[1]!=0x7f){
joystick_buffer2[2]=inBuffer[0];
joystick_buffer2[3]=inBuffer[1];//}
}
}
//joystick_buffer[4]=inBuffer[4];
else if(key<13) //才是游戏手柄有用的键
{
key--;
if(key<4)
{
if(keyflag){
if(Joystick==1)
joystick_buffer1[4]|=Groupbit[(key%8)+4];
if(Joystick==2)
joystick_buffer2[4]|=Groupbit[(key%8)+4];
}
else {
if(Joystick==1)
joystick_buffer1[4]&=~Groupbit[(key%8)+4];
if(Joystick==2)
joystick_buffer2[4]&=~Groupbit[(key%8)+4];
}
}
else
{
if(keyflag){
if(Joystick==1)
joystick_buffer1[5]|=Groupbit[(key-4)%8];
if(Joystick==2)
joystick_buffer2[5]|=Groupbit[(key-4)%8];
}
else {
if(Joystick==1)
joystick_buffer1[5]&=~Groupbit[(key-4)%8];
if(Joystick==2)
joystick_buffer2[5]&=~Groupbit[(key-4)%8];
}
}
}
return(JOYSTICK_MAP);
break;
case Key_mode :
if(key==0)
return 0;
FoundKey(key,keyflag); //键盘模式,适合所有的数字键(包括)。//结果放在EP1_FIFO[6]中
return(KEYBOARD_MAP);break;
case Mouse_mode : if(key==mouse_right_key)
{
if(keyflag)
mose_buffer[0] |= 0x02;
else mose_buffer[0]&=0xFD;
}
else if(key==mouse_left_key)
{
if(keyflag)
mose_buffer[0] |= 0x01;
else mose_buffer[0]&=0xFE;
}
else
mouse_tr(key,inBuffer); //鼠标模式,仍然有左键等 //结果放在mose_buffer[4]中
return(MOUSE_MAP); break;
case Dir4_mode :diect(key,inBuffer); //四方向模式(分左右遥感) //结果放在output_x,output_y中
return(JOYSTICK_MAP); break;
case Dir8_mode :diect(key,inBuffer); //八方向模式(分左右遥感) //结果放在output_x,output_y中
return(JOYSTICK_MAP); break;
case Hat4_mode :Joystick_hat(4,inBuffer); //键帽 四方向模式 //结果放在output_x,output_y中
return(JOYSTICK_MAP); break;
case Hat8_mode :Joystick_hat(8,inBuffer); //键帽 八方向模式 //结果放在output_x,output_y中
return(JOYSTICK_MAP); break;
case Hat_mode : if(Joystick==1){
joystick_buffer1[4]&=0xf0;
joystick_buffer1[4]|=inBuffer[4]&0x0f;}
if(Joystick==2){
joystick_buffer2[4]&=0xf0;
joystick_buffer2[4]|=inBuffer[4]&0x0f;}
return(JOYSTICK_MAP);break;
default : return(0);break;
}
} //Joystick_buffer就是指遥感的原始数据buffer
/*
(7f,ff);(0)AU
|
|
(0,ff);(7) | (ff,ff);(1)
|
|
AL |(7f,7f);(f)
(0,7f);(6)------------.-------------(ff,7f);(2)AR
|
|
(0,0);(5) | (ff,0);(3)
|
|
(7f,0);(4) AD
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -