所以我试图控制一个操纵杆,使用 API 编写了一些代码来做到这一点。我已经在函数 a using 中读取了操纵杆上的轴数,ioctl(fd, JSIOCGAXES, &axes);
然后想打印在事件处理函数(函数 b)中移动的轴:
char whichaxis[axes] = {'X','Y','Y','X'};
printf("%c%c |%8hd\n",whichjs,whichaxis[jse.number],jse.value);
此代码应打印类似LX| -32768
的内容,表示左操纵杆已沿 x 方向移动。
但是,这会返回一个错误,因为我axes
在函数 b 中调用但它没有在函数 b 中定义。axes
所以我的问题是,尽管它没有在函数 b 中定义,我怎么能使用它?
这是代码
// Returns info about the joystick device
void print_device_info(int fd) {
int axes=0, buttons=0;
char name[128];
ioctl(fd, JSIOCGAXES, &axes);
ioctl(fd, JSIOCGBUTTONS, &buttons);
ioctl(fd, JSIOCGNAME(sizeof(name)), &name);
printf("%s\n %d Axes %d Buttons\n", name, axes, buttons);
}
// Event handler
void process_event(struct js_event jse) {
// Define which axis is which
// Axis number {0,1,2,3} */
char whichaxis[axes] = {'X','Y','Y','X'};
//Define which joystick is moved
char whichjs = '*';
switch(jse.number) {
case 0: case 1:
whichjs = 'L';
break;
case 2: case 3:
whichjs = 'R';
break;
default:
whichjs = '*';
break;
}
// Print which joystick, axis and value of the joystick position
printf("%c%c |%8hd\n",whichjs,whichaxis[jse.number],jse.value);
}