# 8BitDo M30 Bluetooth controller
# https://www.8bitdo.com/m30/
# https://support.8bitdo.com/
# Firmware v1.15
#
# This configuration is for when the controller is connected by Bluetooth, and there's a corresponding one for when it is connected by USB.
#
# It's best to use this controller in DirectInput mode (which the manual calls "Android (D - input)") rather than XInput mode because in XInput mode it identifies itself using a generic product ID and a generic name that is shared with other 8BitDo controllers. That means that it's impossible to change the RetroArch configuration for it without also affecting the configuration of other 8BitDo controllers that have different layouts. In DirectInput mode the controller uses a unique product ID so we can recognize and configure it distinctly.

input_device_display_name = "8BitDo M30"

input_driver = "dinput"
input_device = "Bluetooth Wireless Controller   "
input_vendor_id = "11720"
input_product_id = "1617"

# Buttons:

# The RetroPad layout has four face buttons, whereas the M30 has six. We map the M30's L and R buttons to the RetroPad's triggers, and map the M30's Z and C buttons to the RetroPad's left and right shoulder buttons respectively. That may seem somewhat counterintuitive but it follows the convention that is used in many cores for systems that have six face buttons in this layout. That allows the controller to be autoconfigured and work in the natural way in the Beetle Saturn core, and in 6-button fighting games in the FinalBurn Neo and MAME cores.

input_a_btn = "1"
input_b_btn = "0"
input_x_btn = "4"
input_y_btn = "3"
input_l_btn = "6"
input_r_btn = "7"
input_l2_btn = "8"
input_r2_btn = "9"
input_select_btn = "10"
input_start_btn = "11"
input_menu_toggle_btn = "2"

input_a_btn_label = "B"
input_b_btn_label = "A"
input_x_btn_label = "Y"
input_y_btn_label = "X"
input_l_btn_label = "Z"
input_r_btn_label = "C"
input_l2_btn_label = "L"
input_r2_btn_label = "R"
input_select_btn_label = "Minus (-)"
input_start_btn_label = "Start"
input_menu_toggle_btn_label = "Heart"

# D-Pad:

input_up_btn = "h0up"
input_down_btn = "h0down"
input_left_btn = "h0left"
input_right_btn = "h0right"

input_up_btn_label = "D-Pad Up"
input_down_btn_label = "D-Pad Down"
input_left_btn_label = "D-Pad Left"
input_right_btn_label = "D-Pad Right"

# The controller can be configured to have the D-Pad report inputs as either a left or right analog stick instead of as a digital D-Pad:

input_l_x_plus_axis = "+0"
input_l_x_minus_axis = "-0"
input_l_y_plus_axis = "+1"
input_l_y_minus_axis = "-1"

input_l_x_plus_axis_label = "D-Pad Right (Analog Stick Mode)"
input_l_x_minus_axis_label = "D-Pad Left (Analog Stick Mode)"
input_l_y_plus_axis_label = "D-Pad Down (Analog Stick Mode)"
input_l_y_minus_axis_label = "D-Pad Up (Analog Stick Mode)"

input_r_x_plus_axis = "+2"
input_r_x_minus_axis = "-2"
input_r_y_plus_axis = "+5"
input_r_y_minus_axis = "-5"

input_r_x_plus_axis_label = "D-Pad Right (Analog Stick Mode)"
input_r_x_minus_axis_label = "D-Pad Left (Analog Stick Mode)"
input_r_y_plus_axis_label = "D-Pad Down (Analog Stick Mode)"
input_r_y_minus_axis_label = "D-Pad Up (Analog Stick Mode)"
