c++手柄驱动
·
#include <linux/joystick.h>
#include<fstream>
#include<iostream>
#include <thread>
enum class xbox_map{
UP,
DOWN,
LEFT,
RIGHT,
X,
Y,
A,
B,
RESET,
START,
NONE
};
void judge_key(js_event& js,xbox_map& data_,int last_value);
using namespace std;
int main()
{
xbox_map data_;
int last_value;
last_value=10;
const char* file="/dev/input/js0";
ifstream fin;
fin.open(file,ios_base::binary | ios_base::in);
struct js_event js;
fstream data;
data.open("data.txt",ios::out|ios::binary);
while (1)
{
fin.read((char *) &js,sizeof(js));
cout<<"time:"<<(int)js.time<<endl<<"number:"<<(int)js.number<<endl<<"type:"<<(int)js.type<<endl<<"value:"<<(int)js.value<<endl;
judge_key(js,data_,last_value);
last_value=js.value;
cout<<"last_value:"<<last_value<<endl;
cout<<endl;
// data<<(int)js.number<<endl;
}
return -1;
}
void judge_key(js_event& js,xbox_map& data_,int last_value)
{
if(js.type==1)
{
switch (js.number)
{
case 0:
{
if(last_value==0&&js.value==1)
data_=xbox_map::A;
else data_=xbox_map::NONE;
break;
}
case 1:
{
if(last_value==0&&js.value==1)
data_=xbox_map::B;
else
data_=xbox_map::NONE;
break;
}
case 2:
{
if(last_value==0&&js.value==1)
data_=xbox_map::X;
else
data_=xbox_map::NONE;
break;
}
case 3:
{
if(last_value==0&&js.value==1)
data_=xbox_map::Y;
else
data_=xbox_map::NONE;
break;
}
case 6:
{
if(last_value==0&&js.value==1)
data_=xbox_map::START;
else
data_=xbox_map::NONE;
break;
}
default:
{
data_=xbox_map::NONE;
break;
}
}
}
else if(js.type==2)
{
switch(js.number)
{
case 6:{
if(last_value==0&&js.value==32767)
data_=xbox_map::DOWN;
else if(last_value==0&&js.value==-32767)
data_=xbox_map::UP;
else
data_=xbox_map::NONE;
break;
}
case 7:{
if(last_value==-0&&js.value==-32767)
{
data_=xbox_map::LEFT;
}
else if(last_value==0&&js.value==32767)
data_=xbox_map::RIGHT;
else
data_=xbox_map::NONE;
break;
}
default:
{
data_=xbox_map::NONE;
break;
}
}
}
else{
data_=xbox_map::NONE;
}
cout<<"(int)data_:"<<(int)data_<<endl;
}
更多推荐


所有评论(0)