# Copyright (C) 2018 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#
# Sony Playstation(R) DualShock 4 Controller
# - Version 0x8000 and 0x8100 are for Linux hid-sony driver >=4.10
#   and when connected over Bluetooth
#


# Mapping according to https://developer.android.com/training/game-controllers/controller-input.html

# Square
key 0x134   BUTTON_X
# Cross
key 0x130   BUTTON_A
# Circle
key 0x131   BUTTON_B
# Triangle
key 0x133   BUTTON_Y

key 0x136   BUTTON_L1
key 0x137   BUTTON_R1
key 0x138   BUTTON_L2
key 0x139   BUTTON_R2

# L2 axis
axis 0x02   LTRIGGER
# R2 axis
axis 0x05   RTRIGGER

# Left Analog Stick
axis 0x00   X
axis 0x01   Y
# Right Analog Stick
axis 0x03   Z
axis 0x04   RZ

# Left stick click
key 0x13d   BUTTON_THUMBL
# Right stick click
key 0x13e   BUTTON_THUMBR

# Hat
axis 0x10   HAT_X
axis 0x11   HAT_Y

# Mapping according to https://www.kernel.org/doc/Documentation/input/gamepad.txt
# Share
key 0x13a   BUTTON_SELECT
# Options
key 0x13b   BUTTON_START
# PS key
key 0x13c   BUTTON_MODE

# In kernel versions >= 4.10, the touchpad is a separate input device,
# so the touchpad button click will not be covered by this layout.
