Logitech Dual Action Pro game controller

This is a common game controller that was hanging around the house, waiting for something to do.

game controller image

Logitech Dual Action Pro game controller

game controller image, front buttons

front buttons of Logitech Dual Action Pro game controller

Button Map

The substitutions file describes the mapping of the buttons to EPICS actions:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
file "$(USB)/usbApp/Db/AnalogAxis.template"
{
pattern
{P     R               PARAM               PORT          FLNK}
{xxx:  DUAL:Vertical     LSTICK_UD_STATE     LOGITECH_DUAL      xxx:DUAL:shoulder}
{xxx:  DUAL:Rotation     LSTICK_LR_STATE     LOGITECH_DUAL      xxx:DUAL:base}
}

file "$(USB)/usbApp/Db/DigitalButton.template"
{
pattern
{P     R               PARAM               PORT          FLNK}
{xxx:  DUAL:Button1      BUTTON1_PRESSED     LOGITECH_DUAL      xxx:DUAL:led}
{xxx:  DUAL:Button2      BUTTON2_PRESSED     LOGITECH_DUAL      xxx:DUAL:move_lock}
{xxx:  DUAL:Button3      BUTTON3_PRESSED     LOGITECH_DUAL      xxx:DUAL:grip}
{xxx:  DUAL:Button4      BUTTON4_PRESSED     LOGITECH_DUAL      xxx:DUAL:grip}
{xxx:  DUAL:Button5      BUTTON5_PRESSED     LOGITECH_DUAL      xxx:DUAL:elbow}
{xxx:  DUAL:Button7      BUTTON7_PRESSED     LOGITECH_DUAL      xxx:DUAL:elbow}
{xxx:  DUAL:Button6      BUTTON6_PRESSED     LOGITECH_DUAL      xxx:DUAL:wrist}
{xxx:  DUAL:Button8      BUTTON8_PRESSED     LOGITECH_DUAL      xxx:DUAL:wrist}
}

file "$(TOP)/iocBoot/$(IOC)/substitutions/AxisMove.template"
{
pattern
{P     R               LOCK               AXIS             DEAD_LOW   DEAD_HIGH   OUT}
{xxx:  DUAL:move_lock    0                  xxx:DUAL:Button2   1          1           ""}  
{xxx:  DUAL:base         xxx:DUAL:move_lock   xxx:DUAL:Rotation  100        150         xxx:A1:base_move}
{xxx:  DUAL:shoulder     xxx:DUAL:move_lock   xxx:DUAL:Vertical  100        150         xxx:A1:shoulder_move}
}

file "$(TOP)/iocBoot/$(IOC)/substitutions/ButtonMove.template"
{
pattern
{P     R                LOCK              BUTTONA            BUTTONB           OUT}
{xxx:  DUAL:led           0                 0                  xxx:DUAL:Button1    xxx:A1:led_onoff}      
{xxx:  DUAL:elbow         xxx:DUAL:move_lock  xxx:DUAL:Button7     xxx:DUAL:Button5    xxx:A1:elbow_move}
{xxx:  DUAL:grip          0                 xxx:DUAL:Button3     xxx:DUAL:Button4    xxx:A1:grip_move}
{xxx:  DUAL:wrist         xxx:DUAL:move_lock  xxx:DUAL:Button8     xxx:DUAL:Button6    xxx:A1:wrist_move}
}