Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes #33 #43 : Create ps4-controller role #39

Merged
merged 19 commits into from
Apr 19, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions ansible/donkeycar.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@
become: yes # This role need root privileges
- role: donkeycar # Donkeycar installation
become: no # This role doesn't need root privileges
- role: openCV
become: yes
- role: openCV # Install openCV (optional)
become: yes # This role need root privileges
- role: shutdown-btn # shutdown button service
become: yes # This role need root privileges
- role: mycar # shutdown button service
become: no # This role need root privileges
- role: mycar # create car with configurations
become: no # This role no need root privileges
- role: ps4-controller # install and configure ds4drv
become: no # This role no need root privileges
- role: hostname
become: yes
5 changes: 4 additions & 1 deletion ansible/group_vars/all
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,7 @@ steering_left_pwm: 622
steering_right_pwm: 520
throttle_forward_pwm: 515
throttle_stopped_pwm: 470
throttle_reverse_pwm: 445
throttle_reverse_pwm: 445

# PS4 controller config
ps4_contoller_led_color: 00CED1 # hexadecimal color ( don't forget, remove the `#` before )
1 change: 1 addition & 0 deletions ansible/roles/ps4-controller/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ps4_contoller_led_color: 00CED1 # hexadecimal color ( don't forget, remove the `#` before )
9 changes: 9 additions & 0 deletions ansible/roles/ps4-controller/handlers/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
# ps4 controller handlers

- name: Start ds4drv service
systemd:
name: ds4drv
daemon-reload: yes
state: started
enabled: yes
59 changes: 59 additions & 0 deletions ansible/roles/ps4-controller/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
---

- name: Install git
become: true
apt:
name: git
state: latest

- name: Put rules in /etc/udev/rules.d/
become: yes
get_url:
url: https://raw.githubusercontent.com/chrippa/ds4drv/master/udev/50-ds4drv.rules
dest: /etc/udev/rules.d/50-ds4drv.rules

- name: reload ds4drv rules
become: yes
command: udevadm control --reload-rules

- name: activate rules
become: yes
command: udevadm trigger

- name: Install ds4drv (version with controller limit)
become: no
pip:
name: git+https://github.com/Benvii/ds4drv.git@193_limit_simultaneous_controllers
virtualenv: /home/pi/venv/
virtualenv_command: /usr/bin/python3 -m venv

- name: Create the /etc/donkeycar directory
file:
path: /etc/donkeycar
state: directory

- name: Configure ds4drv.conf file
become: yes
template:
src: ds4drv.conf.j2
dest: /etc/donkeycar/ds4drv.conf
owner: root
group: root

- name: Create the environment file for ds4drv
become: yes
template:
src: ds4drv.env.j2
dest: /etc/donkeycar/ds4drv.env
owner: root
group: root

- name: Copy systemd service file to server
become: yes
template:
src: ds4drv.service.j2
dest: /etc/systemd/system/ds4drv.service
owner: root
group: root
notify:
- Start ds4drv service
yannis-mlgrn marked this conversation as resolved.
Show resolved Hide resolved
182 changes: 182 additions & 0 deletions ansible/roles/ps4-controller/templates/ds4drv.conf.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
# Many of the settings used here are directly connected to their command line
# counterparts, see "ds4drv --help" for more information about available options.

##
# Global options
##
[ds4drv]
# Run ds4drv in background as a daemon
#daemon = true

# Location of the log file in daemon mode
#daemon-log = ~/.cache/ds4drv.log

# Location of the PID file in daemon mode
#daemon-pid = /tmp/ds4drv.pid

# Enable hidraw mode
#hidraw = true


##
# Controller settings
#
# This is the default profile for each controller.
# Multiple controllers slots are defined by increasing the number.
#
# Controller sections contain:
# Key: A option, these are the same options that can used on the command line
# but without the "--" prefix.
# Value: The option's value, should be "true" if no value is needed.
#
# See "ds4drv --help" for a complete list of available options.
##
[controller:1]
# Enables LED flash on low battery
#battery-flash = true

# Sets LED color
#led = 0000ff

# Enables profile switching
#profile-toggle = PS

# Profiles to cycle through
#profiles = xpad,kbmouse


##
# Profiles
#
# Profiles allows switching controller settings during runtime.
#
# Profile sections always require a name and are then enabled on a controller
# with "profiles = <profile1>[,<profile2>]".
#
# The same settings available for controllers are used here.
##
[profile:xpad]
led = ff0000
# Emulate the same button mapping as wired Xbox 360 controllers
emulate-xpad = true

[profile:kbmouse]
led = 00ff00
# Enable trackpad mouse
trackpad-mouse = true
# Custom button mapping
mapping = keyboard
# Custom action bindings
bindings = exec_stuff


##
# Mappings
#
# Mappings let you map buttons and sticks to mouse, key and joystick events.
#
# Mapping sections always require a name and are then enabled in a profile
# with "mapping = <name>".
#
# Mapping sections contain:
# Key: A Linux input event, see /usr/include/linux/input-event-codes.h for a complete list
# Value: Button on the DS4, use --dump-reports to see all the available buttons
##

[mapping:keyboard]
# General button to key mapping
KEY_UP = dpad_up
KEY_LEFT = dpad_left
KEY_DOWN = dpad_down
KEY_RIGHT = dpad_right
KEY_Z = button_cross
KEY_X = button_circle

# Turn analog stick directions into buttons
KEY_W = -left_analog_y
KEY_A = -left_analog_x
KEY_S = +left_analog_y
KEY_D = +left_analog_x

# Map relative mouse movement to a analog stick
REL_X = right_analog_x
REL_Y = right_analog_y

# Map mouse buttons
BTN_LEFT = button_r2
BTN_RIGHT = button_l2

# Emulate mouse wheel on r1 and l1
REL_WHEELUP = button_l1
REL_WHEELDOWN = button_r1

# Mouse settings
#mouse_sensitivity = 0.6
#mouse_deadzone = 5

# Scroll wheel emulation settings (values are in seconds)
#mouse_scroll_repeat_delay = 0.25 # How long to wait before continual scrolling
#mouse_scroll_delay = 0.05 # Lower this to scroll faster; raise to scroll slower


##
# Bindings
#
# Bindings let you bind button combos to special built-in actions.
#
# Binding sections can be defined with a name and are then enabled in a profile
# with "bindings = <name>".
#
# It's also possible to define a global bindings section that is enabled
# on all profiles.
#
# Sections contains:
# Key: A button combo
# Value: An action, see next section for valid actions.
#
#
# Valid actions:
# next-profile Loads the next profile
# prev-profile Loads the previous profile
# load-profile <profile> Loads the specified profile
# exec <command> [arg1] [arg2] ... Executes the command with
# specified arguments
# exec-background <command> [arg1] [arg2] ... Same as exec but launches in
# the background
#
#
# Actions will be pre-processed and replace variables with real values.
#
# Valid variables:
# $profile The current profile
# $name Pretty name of the current device
# $device_addr Bluetooth address of the device
# $report.<attribute> Replace <attribute> with a valid attribute,
# use --dump-reports to see which are available
##

[bindings]
# Cycle profiles
#PS+Right = next-profile
#PS+Left = prev-profile

# Go directly to specified profile
#PS+Up = load-profile kbmouse
#PS+Down = load-profile default


[bindings:exec_stuff]
# Execute a command in the foreground, blocking until it has finished
PS+Cross = exec echo '$name'

# Execute a command in the background
PS+Triangle = exec-background sh -c 'echo "disconnect $device_addr" | bluetoothctl'

[bindings:test]
# Round = exec echo round
L2 = exec echo L2
Ps+Cross = exec echo sus
PS+Triangle+L2+Circle = exec echo shutdown

[bindings:donkeycar]
PS+Triangle+L2+Circle = exec sudo shutdown -h now
1 change: 1 addition & 0 deletions ansible/roles/ps4-controller/templates/ds4drv.env.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
CONTROLLER_LED_COLOR={{ ps4_contoller_led_color }}
13 changes: 13 additions & 0 deletions ansible/roles/ps4-controller/templates/ds4drv.service.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[Unit]
Description=ds4drv daemon
Requires=bluetooth.service
After=bluetooth.service

[Service]
EnvironmentFile=/etc/donkeycar/ds4drv.env
ExecStartPre=/bin/sleep 5
ExecStart=/home/pi/venv/bin/ds4drv --controller-limit 1 --led ${CONTROLLER_LED_COLOR} --config /etc/donkeycar/ds4drv.conf --bindings donkeycar
Restart=on-abort

[Install]
WantedBy=bluetooth.target
14 changes: 12 additions & 2 deletions ansible/roles/raspi-config/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
name: ssh
enabled: yes

- name: Put the wpa configuration in /boot # first boot on the
- name: Put the wpa configuration in /boot
template:
src: wpa-suplicant-conf.j2
dest: /boot/wpa_supplicant.conf
Expand Down Expand Up @@ -33,4 +33,14 @@
command: raspi-config nonint do_i2c 1

- name: Enable camera
command: raspi-config nonint do_camera 1
command: raspi-config nonint do_camera 1

- name: modifie the dhcpd5 service
template:
src: dhcpd.service.j2
dest: /lib/systemd/system/dhcpcd.service
owner: root
group: root
# We won't notify to restart DHCP service because it could cause Ansible deconnexion
# Change will be taken into account at restart, it's not an issue as our fixe covers
# timeout issue at the first boot of the raspberry pi.
16 changes: 16 additions & 0 deletions ansible/roles/raspi-config/templates/dhcpd.service.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[Unit]
Description=dhcpcd on all interfaces
Wants=network.target
Before=network.target
Restart=always

[Service]
Type=forking
PIDFile=/run/dhcpcd.pid
ExecStart=/usr/lib/dhcpcd5/dhcpcd -q -b
ExecStop=/sbin/dhcpcd -x
TimeoutStartSec=180

[Install]
WantedBy=multi-user.target
Alias=dhcpcd5.service