Kernel: Add support for absolute position mouse
This commit is contained in:
@@ -58,8 +58,9 @@ namespace Kernel
|
||||
virtual void start_report() = 0;
|
||||
virtual void stop_report() = 0;
|
||||
|
||||
virtual void handle_variable(uint16_t usage_page, uint16_t usage, int64_t state) = 0;
|
||||
virtual void handle_array(uint16_t usage_page, uint16_t usage) = 0;
|
||||
virtual void handle_variable(uint16_t usage_page, uint16_t usage, int64_t state) = 0;
|
||||
virtual void handle_variable_absolute(uint16_t usage_page, uint16_t usage, int64_t state, int64_t min, int64_t max) = 0;
|
||||
};
|
||||
|
||||
class USBHIDDriver final : public USBClassDriver
|
||||
|
||||
@@ -14,8 +14,9 @@ namespace Kernel
|
||||
void start_report() override;
|
||||
void stop_report() override;
|
||||
|
||||
void handle_variable(uint16_t usage_page, uint16_t usage, int64_t state) 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;
|
||||
|
||||
void update() override;
|
||||
|
||||
|
||||
@@ -14,8 +14,9 @@ namespace Kernel
|
||||
void start_report() override;
|
||||
void stop_report() override;
|
||||
|
||||
void handle_variable(uint16_t usage_page, uint16_t usage, int64_t state) 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;
|
||||
|
||||
private:
|
||||
USBMouse()
|
||||
@@ -23,13 +24,25 @@ namespace Kernel
|
||||
{}
|
||||
~USBMouse() = default;
|
||||
|
||||
private:
|
||||
struct AbsInfo
|
||||
{
|
||||
int64_t val { -1 };
|
||||
int64_t min { 0 };
|
||||
int64_t max { 0 };
|
||||
bool valid() const { return min <= val && val <= max; }
|
||||
};
|
||||
|
||||
private:
|
||||
BAN::Array<bool, 5> m_button_state { false };
|
||||
BAN::Array<bool, 5> m_button_state_temp { false };
|
||||
int64_t m_pointer_x { 0 };
|
||||
int64_t m_pointer_y { 0 };
|
||||
int64_t m_rel_x { 0 };
|
||||
int64_t m_rel_y { 0 };
|
||||
int64_t m_wheel { 0 };
|
||||
|
||||
AbsInfo m_abs_x;
|
||||
AbsInfo m_abs_y;
|
||||
|
||||
friend class BAN::RefPtr<USBMouse>;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user