Using auxiliary joystick buttons with IFI controller.

Does the FIRST controller recognize the auxiallry buttons on the joysticks provided in the kit; and, if so, what are they referred to in the code?

Are you talking about the trigger and top buttons?

If so, they’re recognized by the port of the joystick which they’re on. For example if you wanted to use the trigger button on the joystick plugged into port 1, you use p1_sw_trig , likewise the top button would be p1_sw_top .

Let me know if this helps.


EDIT: Whoops, I misread your post, you said auxiliary. Use p1_sw_aux or p1_sw_aux2 [just change the number of the port to the one you need].

This is very helpful. Thank you.

Also, the various positions of the hat switch (the big round clicky thing) manifest themselves as different analog values on either the p1_aux or p1_wheel variables (can’t remember which).

Does anyone have more details on what the values are for the hat switch?

From ifi_aliases.h

 *---------- Aliases for each OI analog input ---------------------------------------------------------
 *  Below are aliases for the analog inputs located on the Operator Interface.
#define p1_y        rxdata.oi_analog01
#define p2_y        rxdata.oi_analog02
#define p3_y        rxdata.oi_analog03
#define p4_y        rxdata.oi_analog04
#define p1_x        rxdata.oi_analog05
#define p2_x        rxdata.oi_analog06
#define p3_x        rxdata.oi_analog07
#define p4_x        rxdata.oi_analog08
#define p1_wheel    rxdata.oi_analog09
#define p2_wheel    rxdata.oi_analog10
#define p3_wheel    rxdata.oi_analog11
#define p4_wheel    rxdata.oi_analog12
#define p1_aux      rxdata.oi_analog13
#define p2_aux      rxdata.oi_analog14
#define p3_aux      rxdata.oi_analog15
#define p4_aux      rxdata.oi_analog16

 *---------- Aliases for each OI switch input ---------------------------------------------------------
 *  Below are aliases for the digital inputs located on the Operator Interface.
 *  Ports 1 & 3 have their inputs duplicated in ports 4 & 2 respectively.  The 
 *  inputs from ports 1 & 3 may be disabled via the 'Disable' dip switch 
 *  located on the Operator Interface.  See Users Manual for details.
#define p1_sw_trig  rxdata.oi_swA_byte.bitselect.bit0 /* Joystick Trigger Button, same as Port4 pin5 */
#define p1_sw_top   rxdata.oi_swA_byte.bitselect.bit1 /* Joystick Top Button,     same as Port4 pin8 */
#define p1_sw_aux1  rxdata.oi_swA_byte.bitselect.bit2 /* Aux input,               same as Port4 pin9 */
#define p1_sw_aux2  rxdata.oi_swA_byte.bitselect.bit3 /* Aux input,               same as Port4 pin15*/

#define p3_sw_trig  rxdata.oi_swA_byte.bitselect.bit4 /* Joystick Trigger Button, same as Port2 pin5 */
#define p3_sw_top   rxdata.oi_swA_byte.bitselect.bit5 /* Joystick Top Button,     same as Port2 pin8 */
#define p3_sw_aux1  rxdata.oi_swA_byte.bitselect.bit6 /* Aux input,               same as Port2 pin9 */
#define p3_sw_aux2  rxdata.oi_swA_byte.bitselect.bit7 /* Aux input,               same as Port2 pin15*/

#define p2_sw_trig  rxdata.oi_swB_byte.bitselect.bit0 /* Joystick Trigger Button*/
#define p2_sw_top   rxdata.oi_swB_byte.bitselect.bit1 /* Joystick Top Button*/
#define p2_sw_aux1  rxdata.oi_swB_byte.bitselect.bit2 /* Aux input*/
#define p2_sw_aux2  rxdata.oi_swB_byte.bitselect.bit3 /* Aux input*/

#define p4_sw_trig  rxdata.oi_swB_byte.bitselect.bit4 /* Joystick Trigger Button*/
#define p4_sw_top   rxdata.oi_swB_byte.bitselect.bit5 /* Joystick Top Button*/
#define p4_sw_aux1  rxdata.oi_swB_byte.bitselect.bit6 /* Aux input*/
#define p4_sw_aux2  rxdata.oi_swB_byte.bitselect.bit7 /* Aux input*/

“_wheel” makes sense but have it output all the values with a simple printf and use the joystick (press buttons to change values, etc) so you can determine which variable it is.

[strike]This is not correct. “_wheel” is for the large wheel on the left hand side of the CH Flightstick (ie: not the trim wheels). I am not certain what the hat corresponds to, but my best guess would be the aux’s, or the second joystick.[/strike]

[edit]I just realized that you are talking about new sticks and I am talking about old sticks. See Astronouth’s post below me for information about the new joysticks.[/edit]

You see, back in the day, two joysticks could be hooked to each gameport port. Some hardware manufacturers, rather than building an entire second joystick, just put in some circuitry to send “full up/down/left/right” instead of the analog values. This let you map the second joystick to a D-pad, for instance.

However, on the IFI implementation of the Gameport, the “_wheel” variable uses one of the analog axes of the second joystick, and the “_aux” variable the other analog axis. This still leaves the two remaining digital variables of “_aux1” and “_aux2”. It is possible that the up/down or left/right gets mapped “full up/down” to “_aux” and the other is mapped to “_aux1” and “_aux2”.

Sorry if my explanation now doesn’t make a tremendous amount of sense. I am going to be writing all of this up much more clearly before build season.

Ok, I won’t chew you out for not searching, since I had to dig deep to find them, and I knew what I was looking for.


Just be warned that that was back in 2004, when they first came out. There’s a good chance they’ve changed, knowing how good of joysticks they are. :rolleyes:

Download the Dash board from ifi and use that to check the buttons.

Also remember that the even ports have pins to use for the switches of the odd port on the opposite side, so if you put in custom switches makes sure you aren’t using them for more than one thing. Programmers should know the OI reference guide and the RC reference guide and the victor reference guide and every thing about the cmu-cam

Those documents will save you hours during build season, and are extremely important for trouble shooting electronics and programming.



I just recently too just found out the values for the p1_wheel. If you are still interested send me a private message. That link you sent seems helpful if you noe Base 2 (binary). But i noe them in Base10 (normal decimal). let me noe. :rolleyes: