- 1#!/bin/bash
- 2stty -F /dev/ttyUSB0 115200 cs8 -cstopb -parenb -icanon min 1 time 1
- 3
- 4# This script depends on the program xdotool to be installed.
- 5# On Debian and probably ubuntu, it can be installed with:
- 6# sudo apt install xdotool
- 7
- 8USB_DEV="/dev/ttyUSB0"
- 9JOY_BUTTON=1
- 10JOY_UP=1
- 11JOY_DOWN=1
- 12JOY_LEFT=1
- 13JOY_RIGHT=1
- 14
- 15PREV_BUTTON=1
- 16PREV_UP=1
- 17PREV_DOWN=1
- 18PREV_LEFT=1
- 19PREV_RIGHT=1
- 20
- 21KEY_BUTTON=q
- 22KEY_UP=w
- 23KEY_DOWN=s
- 24KEY_LEFT=a
- 25KEY_RIGHT=d
- 26
- 27# All input in this script is read from $USB_DEV (defined above)
- 28(
- 29while :; do
- 30 read LINE
- 31 # If we have received 5 chars in a line, it is assumed correct
- 32 if [ ${#LINE} = 5 ]; then
- 33 # Split the line up into the different directions and button
- 34 JOY_BUTTON=${LINE:0:1}
- 35 JOY_UP=${LINE:4:1}
- 36 JOY_DOWN=${LINE:3:1}
- 37 JOY_LEFT=${LINE:2:1}
- 38 JOY_RIGHT=${LINE:1:1}
- 39
- 40 # Only change keypress if read value is different than last time
- 41 if [ $JOY_BUTTON -ne $PREV_BUTTON ]; then
- 42 PREV_BUTTON=$JOY_BUTTON
- 43 if [ $JOY_BUTTON = 0 ]; then
- 44 xdotool keydown $KEY_BUTTON
- 45 else
- 46 xdotool keyup $KEY_BUTTON
- 47 fi
- 48 fi
- 49
- 50 if [ $JOY_UP -ne $PREV_UP ]; then
- 51 PREV_UP=$JOY_UP
- 52 if [ $JOY_UP = 0 ]; then
- 53 xdotool keydown $KEY_UP
- 54 else
- 55 xdotool keyup $KEY_UP
- 56 fi
- 57 fi
- 58
- 59 if [ $JOY_DOWN -ne $PREV_DOWN ]; then
- 60 PREV_DOWN=$JOY_DOWN
- 61 if [ $JOY_DOWN = 0 ]; then
- 62 xdotool keydown $KEY_DOWN
- 63 else
- 64 xdotool keyup $KEY_DOWN
- 65 fi
- 66 fi
- 67
- 68 if [ $JOY_LEFT -ne $PREV_LEFT ]; then
- 69 PREV_LEFT=$JOY_LEFT
- 70 if [ $JOY_LEFT = 0 ]; then
- 71 xdotool keydown $KEY_LEFT
- 72 else
- 73 xdotool keyup $KEY_LEFT
- 74 fi
- 75 fi
- 76
- 77 if [ $JOY_RIGHT -ne $PREV_RIGHT ]; then
- 78 PREV_RIGHT=$JOY_RIGHT
- 79 if [ $JOY_RIGHT = 0 ]; then
- 80 xdotool keydown $KEY_RIGHT
- 81 else
- 82 xdotool keyup $KEY_RIGHT
- 83 fi
- 84 fi
- 85 fi
- 86done
- 87) < $USB_DEV
Raw Paste