Kernel: PS/2 device automatically sends commands when appended
This commit is contained in:
		
							parent
							
								
									891ced4da2
								
							
						
					
					
						commit
						c2957d8761
					
				|  | @ -21,7 +21,7 @@ namespace Kernel::Input | ||||||
| 		virtual BAN::StringView name() const final override { return m_name; } | 		virtual BAN::StringView name() const final override { return m_name; } | ||||||
| 		virtual dev_t rdev() const final override { return m_rdev; } | 		virtual dev_t rdev() const final override { return m_rdev; } | ||||||
| 
 | 
 | ||||||
| 	protected: | 	private: | ||||||
| 		void update(); | 		void update(); | ||||||
| 
 | 
 | ||||||
| 	private: | 	private: | ||||||
|  |  | ||||||
|  | @ -18,17 +18,25 @@ namespace Kernel::Input | ||||||
| 	bool PS2Device::append_command_queue(uint8_t command) | 	bool PS2Device::append_command_queue(uint8_t command) | ||||||
| 	{ | 	{ | ||||||
| 		if (m_command_queue.size() + 1 >= m_command_queue.capacity()) | 		if (m_command_queue.size() + 1 >= m_command_queue.capacity()) | ||||||
|  | 		{ | ||||||
|  | 			dprintln("PS/2 command queue full"); | ||||||
| 			return false; | 			return false; | ||||||
|  | 		} | ||||||
| 		m_command_queue.push(command); | 		m_command_queue.push(command); | ||||||
|  | 		update(); | ||||||
| 		return true; | 		return true; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	bool PS2Device::append_command_queue(uint8_t command, uint8_t data) | 	bool PS2Device::append_command_queue(uint8_t command, uint8_t data) | ||||||
| 	{ | 	{ | ||||||
| 		if (m_command_queue.size() + 2 >= m_command_queue.capacity()) | 		if (m_command_queue.size() + 2 >= m_command_queue.capacity()) | ||||||
|  | 		{ | ||||||
|  | 			dprintln("PS/2 command queue full"); | ||||||
| 			return false; | 			return false; | ||||||
|  | 		} | ||||||
| 		m_command_queue.push(command); | 		m_command_queue.push(command); | ||||||
| 		m_command_queue.push(data); | 		m_command_queue.push(data); | ||||||
|  | 		update(); | ||||||
| 		return true; | 		return true; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,7 +3,6 @@ | ||||||
| #include <kernel/FS/DevFS/FileSystem.h> | #include <kernel/FS/DevFS/FileSystem.h> | ||||||
| #include <kernel/Input/PS2Config.h> | #include <kernel/Input/PS2Config.h> | ||||||
| #include <kernel/Input/PS2Keyboard.h> | #include <kernel/Input/PS2Keyboard.h> | ||||||
| #include <kernel/Timer/Timer.h> |  | ||||||
| 
 | 
 | ||||||
| #define SET_MASK(byte, mask, on_off) ((on_off) ? ((byte) | (mask)) : ((byte) & ~(mask))) | #define SET_MASK(byte, mask, on_off) ((on_off) ? ((byte) | (mask)) : ((byte) & ~(mask))) | ||||||
| #define TOGGLE_MASK(byte, mask) ((byte) ^ (mask)) | #define TOGGLE_MASK(byte, mask) ((byte) ^ (mask)) | ||||||
|  | @ -28,7 +27,6 @@ namespace Kernel::Input | ||||||
| 		append_command_queue(Command::SET_LEDS, 0x00); | 		append_command_queue(Command::SET_LEDS, 0x00); | ||||||
| 		append_command_queue(Command::SCANCODE, PS2::KBScancode::SET_SCANCODE_SET2); | 		append_command_queue(Command::SCANCODE, PS2::KBScancode::SET_SCANCODE_SET2); | ||||||
| 		append_command_queue(Command::ENABLE_SCANNING); | 		append_command_queue(Command::ENABLE_SCANNING); | ||||||
| 		update(); |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	void PS2Keyboard::handle_device_command_response(uint8_t byte) | 	void PS2Keyboard::handle_device_command_response(uint8_t byte) | ||||||
|  | @ -130,12 +128,6 @@ namespace Kernel::Input | ||||||
| 		event.modifier = m_modifiers | (released ? (uint8_t)Input::KeyEvent::Modifier::Released : 0); | 		event.modifier = m_modifiers | (released ? (uint8_t)Input::KeyEvent::Modifier::Released : 0); | ||||||
| 		event.key = key; | 		event.key = key; | ||||||
| 
 | 
 | ||||||
| 		if (event.pressed() && event.key == Input::Key::F11) |  | ||||||
| 		{ |  | ||||||
| 			auto time = SystemTimer::get().time_since_boot(); |  | ||||||
| 			dprintln("{}.{9} s", time.tv_sec, time.tv_nsec); |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		if (m_event_queue.full()) | 		if (m_event_queue.full()) | ||||||
| 		{ | 		{ | ||||||
| 			dwarnln("PS/2 event queue full"); | 			dwarnln("PS/2 event queue full"); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue