#pragma once #include #include #include #include "stdafx.h" #include "Utilities/Config.h" #include "Utilities/types.h" #include "Emu/System.h" #include "Emu/GameInfo.h" // TODO: HLE info (constants, structs, etc.) should not be available here enum SystemInfo { CELL_PAD_INFO_INTERCEPTED = 0x00000001 }; enum PortStatus { CELL_PAD_STATUS_DISCONNECTED = 0x00000000, CELL_PAD_STATUS_CONNECTED = 0x00000001, CELL_PAD_STATUS_ASSIGN_CHANGES = 0x00000002, }; enum PortSettings { CELL_PAD_SETTING_PRESS_ON = 0x00000002, CELL_PAD_SETTING_SENSOR_ON = 0x00000004, CELL_PAD_SETTING_PRESS_OFF = 0x00000000, CELL_PAD_SETTING_SENSOR_OFF = 0x00000000, }; enum Digital1Flags { CELL_PAD_CTRL_LEFT = 0x00000080, CELL_PAD_CTRL_DOWN = 0x00000040, CELL_PAD_CTRL_RIGHT = 0x00000020, CELL_PAD_CTRL_UP = 0x00000010, CELL_PAD_CTRL_START = 0x00000008, CELL_PAD_CTRL_R3 = 0x00000004, CELL_PAD_CTRL_L3 = 0x00000002, CELL_PAD_CTRL_SELECT = 0x00000001, }; enum Digital2Flags { CELL_PAD_CTRL_SQUARE = 0x00000080, CELL_PAD_CTRL_CROSS = 0x00000040, CELL_PAD_CTRL_CIRCLE = 0x00000020, CELL_PAD_CTRL_TRIANGLE = 0x00000010, CELL_PAD_CTRL_R1 = 0x00000008, CELL_PAD_CTRL_L1 = 0x00000004, CELL_PAD_CTRL_R2 = 0x00000002, CELL_PAD_CTRL_L2 = 0x00000001, }; enum DeviceCapability { CELL_PAD_CAPABILITY_PS3_CONFORMITY = 0x00000001, //PS3 Conformity Controller CELL_PAD_CAPABILITY_PRESS_MODE = 0x00000002, //Press mode supported CELL_PAD_CAPABILITY_SENSOR_MODE = 0x00000004, //Sensor mode supported CELL_PAD_CAPABILITY_HP_ANALOG_STICK = 0x00000008, //High Precision analog stick CELL_PAD_CAPABILITY_ACTUATOR = 0x00000010, //Motor supported }; enum DeviceType { CELL_PAD_DEV_TYPE_STANDARD = 0, CELL_PAD_DEV_TYPE_BD_REMOCON = 4, CELL_PAD_DEV_TYPE_LDD = 5, }; enum ButtonDataOffset { CELL_PAD_BTN_OFFSET_DIGITAL1 = 2, CELL_PAD_BTN_OFFSET_DIGITAL2 = 3, CELL_PAD_BTN_OFFSET_ANALOG_RIGHT_X = 4, CELL_PAD_BTN_OFFSET_ANALOG_RIGHT_Y = 5, CELL_PAD_BTN_OFFSET_ANALOG_LEFT_X = 6, CELL_PAD_BTN_OFFSET_ANALOG_LEFT_Y = 7, CELL_PAD_BTN_OFFSET_PRESS_RIGHT = 8, CELL_PAD_BTN_OFFSET_PRESS_LEFT = 9, CELL_PAD_BTN_OFFSET_PRESS_UP = 10, CELL_PAD_BTN_OFFSET_PRESS_DOWN = 11, CELL_PAD_BTN_OFFSET_PRESS_TRIANGLE = 12, CELL_PAD_BTN_OFFSET_PRESS_CIRCLE = 13, CELL_PAD_BTN_OFFSET_PRESS_CROSS = 14, CELL_PAD_BTN_OFFSET_PRESS_SQUARE = 15, CELL_PAD_BTN_OFFSET_PRESS_L1 = 16, CELL_PAD_BTN_OFFSET_PRESS_R1 = 17, CELL_PAD_BTN_OFFSET_PRESS_L2 = 18, CELL_PAD_BTN_OFFSET_PRESS_R2 = 19, CELL_PAD_BTN_OFFSET_SENSOR_X = 20, CELL_PAD_BTN_OFFSET_SENSOR_Y = 21, CELL_PAD_BTN_OFFSET_SENSOR_Z = 22, CELL_PAD_BTN_OFFSET_SENSOR_G = 23, }; enum { CELL_PAD_ACTUATOR_MAX = 2, CELL_PAD_MAX_PORT_NUM = 7, CELL_PAD_MAX_CAPABILITY_INFO = 32, CELL_PAD_MAX_CODES = 64, CELL_MAX_PADS = 127, }; struct Button { u32 m_offset; u32 m_keyCode; u32 m_outKeyCode; u16 m_value; bool m_pressed; bool m_flush; Button(u32 offset, u32 keyCode, u32 outKeyCode) : m_pressed(false) , m_flush(false) , m_offset(offset) , m_keyCode(keyCode) , m_outKeyCode(outKeyCode) , m_value(0) { } }; struct AnalogStick { u32 m_offset; u32 m_keyCodeMin; u32 m_keyCodeMax; u16 m_value; AnalogStick(u32 offset, u32 keyCodeMin, u32 keyCodeMax) : m_offset(offset) , m_keyCodeMin(keyCodeMin) , m_keyCodeMax(keyCodeMax) , m_value(128) { } }; struct AnalogSensor { u32 m_offset; u16 m_value; AnalogSensor(u32 offset, u16 value) : m_offset(offset) , m_value(value) {} }; struct VibrateMotor { bool m_isLargeMotor; u16 m_value; VibrateMotor(bool largeMotor, u16 value) : m_isLargeMotor(largeMotor) , m_value(value) {} }; struct Pad { bool m_buffer_cleared; u32 m_port_status; u32 m_device_capability; u32 m_device_type; u32 m_class_type; // Cable State: 0 - 1 plugged in ? u8 m_cable_state; // DS4: 0 - 9 while unplugged, 0 - 10 while plugged in, 11 charge complete // XInput: 0 = Empty, 1 = Low, 2 = Medium, 3 = Full u8 m_battery_level; std::vector