2013-11-05 20 views
0

所以我試圖控制一個遊戲杆,使用API​​編寫一些代碼來這樣做。 我讀過的軸數使用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); 
} 
+1

請張貼一些細節(函數定義和函數b)。 – doptimusprime

+1

在'printf(「%c%c |%8hd \ n」,whichjs,whichaxis,jse.value);''whichaxis'應該是'whichaxis [jse.number]'。 'whichaxis'是一個指針。 – doptimusprime

+0

好點 - 在代碼中更改 – theoB610

回答

1

axes是在函數內聲明的局部變量。局部變量只能用於聲明它的函數中。全局變量是在所有函數之外聲明的變量。因此,使axes是一個全局變量,可用於所有功能。

int axes; // Global declaration makes axes which as scope in all below functions 

void print_device_info(int fd) { 
    ... 
    ioctl(fd, JSIOCGAXES, &axes); 
    ... 

void process_event(struct js_event jse) { 
    char whichaxis[axes] = {'X','Y','Y','X'}; 
    ... 
+0

怎麼樣?從邏輯上講,在函數print_device_info()中的設備信息函數 – theoB610

+0

@ theoB610'int axes'中定義它是有意義的,它使得變量有效並且可以在該函數中使用。如果這被聲明爲全局的,它可以在多個範圍內訪問。 –

2

要麼,可以使用全局變量axes或傳遞軸在兩個或功能中的一個的參數。

如果無法將其作爲參數傳遞(因爲它是回調函數),則可以使諸如GetAxes()之類的函數爲當前軸或使用全局變量。

+0

我想說使用一個全局或非常量指針軸,所以你可以修改它。 –

+0

^我該怎麼做(使用指針方法)? – theoB610

+0

另外,如何將軸作爲參數傳遞? – theoB610

相關問題