だから私はジョイスティックを制御しようとしており、APIを使用してコードを書いています。関数 a を使用してジョイスティックの軸の数を読み取った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 方向に移動したことを示す のようなものを出力するはずです。
ただし、関数 b で呼び出しaxes
ていますが、関数 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);
}