Kernel: Add support for DualShock 3 controllers
This driver accepts any HID joystick devices but button and axis mappings will only work on a PS3 controller
This commit is contained in:
@@ -16,6 +16,7 @@ namespace Kernel
|
||||
Debug,
|
||||
Keyboard,
|
||||
Mouse,
|
||||
Joystick,
|
||||
SCSI,
|
||||
NVMeController,
|
||||
NVMeNamespace,
|
||||
|
||||
@@ -15,6 +15,7 @@ namespace Kernel
|
||||
{
|
||||
Mouse,
|
||||
Keyboard,
|
||||
Joystick,
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
@@ -55,6 +55,8 @@ namespace Kernel
|
||||
{}
|
||||
virtual ~USBHIDDevice() = default;
|
||||
|
||||
virtual BAN::ErrorOr<void> initialize() { return {}; }
|
||||
|
||||
virtual void start_report() = 0;
|
||||
virtual void stop_report() = 0;
|
||||
|
||||
|
||||
43
kernel/include/kernel/USB/HID/Joystick.h
Normal file
43
kernel/include/kernel/USB/HID/Joystick.h
Normal file
@@ -0,0 +1,43 @@
|
||||
#pragma once
|
||||
|
||||
#include <kernel/USB/HID/HIDDriver.h>
|
||||
|
||||
#include <LibInput/Joystick.h>
|
||||
|
||||
namespace Kernel
|
||||
{
|
||||
|
||||
class USBJoystick final : public USBHIDDevice
|
||||
{
|
||||
BAN_NON_COPYABLE(USBJoystick);
|
||||
BAN_NON_MOVABLE(USBJoystick);
|
||||
|
||||
public:
|
||||
BAN::ErrorOr<void> initialize() override;
|
||||
|
||||
void start_report() override;
|
||||
void stop_report() override;
|
||||
|
||||
void handle_array(uint16_t usage_page, uint16_t usage) override;
|
||||
void handle_variable(uint16_t usage_page, uint16_t usage, int64_t state) override;
|
||||
void handle_variable_absolute(uint16_t usage_page, uint16_t usage, int64_t state, int64_t min, int64_t max) override;
|
||||
|
||||
protected:
|
||||
BAN::ErrorOr<size_t> read_impl(off_t, BAN::ByteSpan) override;
|
||||
bool can_read_impl() const override { return true; }
|
||||
|
||||
private:
|
||||
USBJoystick(USBHIDDriver&);
|
||||
~USBJoystick() = default;
|
||||
|
||||
private:
|
||||
USBHIDDriver& m_driver;
|
||||
|
||||
SpinLock m_state_lock;
|
||||
InterruptState m_interrupt_state;
|
||||
LibInput::JoystickState m_state {};
|
||||
|
||||
friend class BAN::RefPtr<USBJoystick>;
|
||||
};
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user