2020-01-18 11:38:21 +03:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
|
|
|
*
|
2021-04-22 11:24:48 +03:00
|
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
2020-01-18 11:38:21 +03:00
|
|
|
*/
|
|
|
|
|
2019-01-11 04:28:53 +03:00
|
|
|
#pragma once
|
|
|
|
|
2019-05-28 12:53:16 +03:00
|
|
|
#include <AK/CircularQueue.h>
|
2021-04-02 23:21:35 +03:00
|
|
|
#include <AK/DoublyLinkedList.h>
|
|
|
|
#include <AK/Types.h>
|
|
|
|
#include <Kernel/API/KeyCode.h>
|
|
|
|
#include <Kernel/Devices/HID/I8042Controller.h>
|
|
|
|
#include <Kernel/Devices/HID/KeyboardDevice.h>
|
2020-02-22 20:53:03 +03:00
|
|
|
#include <Kernel/Interrupts/IRQHandler.h>
|
2020-06-24 23:07:28 +03:00
|
|
|
#include <Kernel/Random.h>
|
2019-01-11 04:28:53 +03:00
|
|
|
|
2020-02-16 03:27:42 +03:00
|
|
|
namespace Kernel {
|
|
|
|
|
2021-04-02 23:21:35 +03:00
|
|
|
class PS2KeyboardDevice final : public IRQHandler
|
|
|
|
, public KeyboardDevice
|
2020-11-07 22:09:28 +03:00
|
|
|
, public I8042Device {
|
2021-09-11 09:19:20 +03:00
|
|
|
friend class DeviceManagement;
|
|
|
|
|
2019-01-11 04:28:53 +03:00
|
|
|
public:
|
2022-08-19 21:53:40 +03:00
|
|
|
static ErrorOr<NonnullLockRefPtr<PS2KeyboardDevice>> try_to_initialize(I8042Controller const&);
|
2021-04-02 23:21:35 +03:00
|
|
|
virtual ~PS2KeyboardDevice() override;
|
2022-02-24 00:09:39 +03:00
|
|
|
ErrorOr<void> initialize();
|
2020-11-07 22:09:28 +03:00
|
|
|
|
2021-07-11 02:46:09 +03:00
|
|
|
virtual StringView purpose() const override { return class_name(); }
|
2020-03-05 20:13:55 +03:00
|
|
|
|
2020-11-07 22:09:28 +03:00
|
|
|
// ^I8042Device
|
|
|
|
virtual void irq_handle_byte_read(u8 byte) override;
|
|
|
|
virtual void enable_interrupts() override
|
|
|
|
{
|
|
|
|
enable_irq();
|
|
|
|
}
|
|
|
|
|
2021-09-11 09:19:20 +03:00
|
|
|
private:
|
2022-04-01 20:58:27 +03:00
|
|
|
explicit PS2KeyboardDevice(I8042Controller const&);
|
2021-04-02 23:21:35 +03:00
|
|
|
|
2019-01-12 07:20:56 +03:00
|
|
|
// ^IRQHandler
|
2022-04-01 20:58:27 +03:00
|
|
|
virtual bool handle_irq(RegisterState const&) override;
|
2019-01-11 04:28:53 +03:00
|
|
|
|
2019-01-21 04:33:01 +03:00
|
|
|
// ^CharacterDevice
|
2021-10-03 01:24:00 +03:00
|
|
|
virtual StringView class_name() const override { return "KeyboardDevice"sv; }
|
2019-01-11 04:28:53 +03:00
|
|
|
};
|
2020-02-16 03:27:42 +03:00
|
|
|
|
|
|
|
}
|