|
|
|
@ -26,13 +26,19 @@ constexpr std::array<u8, 8> DefaultVibrationBuffer{0x0, 0x1, 0x40, 0x40, 0x0, 0x
|
|
|
|
|
using MacAddress = std::array<u8, 6>;
|
|
|
|
|
using SerialNumber = std::array<u8, 15>;
|
|
|
|
|
|
|
|
|
|
enum class ControllerType {
|
|
|
|
|
None,
|
|
|
|
|
Left,
|
|
|
|
|
Right,
|
|
|
|
|
Pro,
|
|
|
|
|
Grip,
|
|
|
|
|
Dual,
|
|
|
|
|
enum class ControllerType : u8 {
|
|
|
|
|
None = 0x00,
|
|
|
|
|
Left = 0x01,
|
|
|
|
|
Right = 0x02,
|
|
|
|
|
Pro = 0x03,
|
|
|
|
|
Dual = 0x05, // TODO: Verify this id
|
|
|
|
|
LarkHvc1 = 0x07,
|
|
|
|
|
LarkHvc2 = 0x08,
|
|
|
|
|
LarkNesLeft = 0x09,
|
|
|
|
|
LarkNesRight = 0x0A,
|
|
|
|
|
Lucia = 0x0B,
|
|
|
|
|
Lagon = 0x0C,
|
|
|
|
|
Lager = 0x0D,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum class PadAxes {
|
|
|
|
@ -143,9 +149,10 @@ enum class SubCommand : u8 {
|
|
|
|
|
ENABLE_VIBRATION = 0x48,
|
|
|
|
|
GET_REGULATED_VOLTAGE = 0x50,
|
|
|
|
|
SET_EXTERNAL_CONFIG = 0x58,
|
|
|
|
|
UNKNOWN_RINGCON = 0x59,
|
|
|
|
|
UNKNOWN_RINGCON2 = 0x5A,
|
|
|
|
|
UNKNOWN_RINGCON3 = 0x5C,
|
|
|
|
|
GET_EXTERNAL_DEVICE_INFO = 0x59,
|
|
|
|
|
ENABLE_EXTERNAL_POLLING = 0x5A,
|
|
|
|
|
DISABLE_EXTERNAL_POLLING = 0x5B,
|
|
|
|
|
SET_EXTERNAL_FORMAT_CONFIG = 0x5C,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum class UsbSubCommand : u8 {
|
|
|
|
@ -165,19 +172,25 @@ enum class CalibrationMagic : u8 {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum class SpiAddress {
|
|
|
|
|
SERIAL_NUMBER = 0X6000,
|
|
|
|
|
DEVICE_TYPE = 0X6012,
|
|
|
|
|
COLOR_EXIST = 0X601B,
|
|
|
|
|
FACT_LEFT_DATA = 0X603d,
|
|
|
|
|
FACT_RIGHT_DATA = 0X6046,
|
|
|
|
|
COLOR_DATA = 0X6050,
|
|
|
|
|
FACT_IMU_DATA = 0X6020,
|
|
|
|
|
USER_LEFT_MAGIC = 0X8010,
|
|
|
|
|
USER_LEFT_DATA = 0X8012,
|
|
|
|
|
USER_RIGHT_MAGIC = 0X801B,
|
|
|
|
|
USER_RIGHT_DATA = 0X801D,
|
|
|
|
|
USER_IMU_MAGIC = 0X8026,
|
|
|
|
|
USER_IMU_DATA = 0X8028,
|
|
|
|
|
MAGIC = 0x0000,
|
|
|
|
|
MAC_ADDRESS = 0x0015,
|
|
|
|
|
PAIRING_INFO = 0x2000,
|
|
|
|
|
SHIPMENT = 0x5000,
|
|
|
|
|
SERIAL_NUMBER = 0x6000,
|
|
|
|
|
DEVICE_TYPE = 0x6012,
|
|
|
|
|
FORMAT_VERSION = 0x601B,
|
|
|
|
|
FACT_IMU_DATA = 0x6020,
|
|
|
|
|
FACT_LEFT_DATA = 0x603d,
|
|
|
|
|
FACT_RIGHT_DATA = 0x6046,
|
|
|
|
|
COLOR_DATA = 0x6050,
|
|
|
|
|
DESIGN_VARIATION = 0x605C,
|
|
|
|
|
SENSOR_DATA = 0x6080,
|
|
|
|
|
USER_LEFT_MAGIC = 0x8010,
|
|
|
|
|
USER_LEFT_DATA = 0x8012,
|
|
|
|
|
USER_RIGHT_MAGIC = 0x801B,
|
|
|
|
|
USER_RIGHT_DATA = 0x801D,
|
|
|
|
|
USER_IMU_MAGIC = 0x8026,
|
|
|
|
|
USER_IMU_DATA = 0x8028,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum class ReportMode : u8 {
|
|
|
|
@ -359,6 +372,11 @@ enum class IrRegistersAddress : u16 {
|
|
|
|
|
DenoiseColor = 0x6901,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum class ExternalDeviceId : u8 {
|
|
|
|
|
RingController = 0x20,
|
|
|
|
|
Starlink = 0x28,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum class DriverResult {
|
|
|
|
|
Success,
|
|
|
|
|
WrongReply,
|
|
|
|
@ -605,9 +623,11 @@ static_assert(sizeof(FirmwareVersion) == 0x2, "FirmwareVersion is an invalid siz
|
|
|
|
|
|
|
|
|
|
struct DeviceInfo {
|
|
|
|
|
FirmwareVersion firmware;
|
|
|
|
|
std::array<u8, 2> unknown_1;
|
|
|
|
|
MacAddress mac_address;
|
|
|
|
|
std::array<u8, 2> unknown_2;
|
|
|
|
|
};
|
|
|
|
|
static_assert(sizeof(DeviceInfo) == 0x8, "DeviceInfo is an invalid size");
|
|
|
|
|
static_assert(sizeof(DeviceInfo) == 0xC, "DeviceInfo is an invalid size");
|
|
|
|
|
|
|
|
|
|
struct MotionStatus {
|
|
|
|
|
bool is_enabled;
|
|
|
|
|