mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-07-10 23:09:18 +00:00
Update kernel
This commit is contained in:
@ -273,7 +273,7 @@ namespace AdvancedHostControllerInterface
|
||||
Ports[i]->Configure();
|
||||
break;
|
||||
}
|
||||
case FetchReason:
|
||||
case QueryReason:
|
||||
{
|
||||
Data->DiskCallback.Fetch.Ports = PortCount;
|
||||
Data->DiskCallback.Fetch.BytesPerSector = 512;
|
||||
|
@ -52,7 +52,7 @@ namespace AdvancedTechnologyAttachment
|
||||
debug("Driver received configuration data.");
|
||||
break;
|
||||
}
|
||||
case FetchReason:
|
||||
case QueryReason:
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
@ -82,7 +82,7 @@ namespace PCNET
|
||||
return DEVICE_NOT_SUPPORTED;
|
||||
break;
|
||||
}
|
||||
case FetchReason:
|
||||
case QueryReason:
|
||||
{
|
||||
memcpy(Data->NetworkCallback.Fetch.Name, (void *)"AMD PCNET", 10);
|
||||
Data->NetworkCallback.Fetch.MAC = MAC.ToHex();
|
||||
|
@ -212,7 +212,7 @@ namespace AudioCodec97
|
||||
}
|
||||
break;
|
||||
}
|
||||
case FetchReason:
|
||||
case QueryReason:
|
||||
{
|
||||
Data->AudioCallback.Fetch.Volume = (unsigned char)((inw(BAR.MixerAddress + NAM_MasterVolume) & 0x3F) * 100 / 0x3F);
|
||||
Data->AudioCallback.Fetch.Encoding = Encoding; /* FIXME */
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include "AHCI/ahci.hpp"
|
||||
#include "VMware/mouse.hpp"
|
||||
#include "PersonalSystem2/mouse.hpp"
|
||||
#include "PersonalSystem2/keyboard.hpp"
|
||||
#include "ATA/ata.hpp"
|
||||
#include "AudioCodec97/ac97.hpp"
|
||||
#include "Realtek/rtl8139.hpp"
|
||||
@ -80,6 +81,19 @@ FexExtended PS2MouseExtendedHeader = {
|
||||
.Vector = {12}, // IRQ12
|
||||
}}}};
|
||||
|
||||
FexExtended PS2KeyboardExtendedHeader = {
|
||||
.Driver = {
|
||||
.Name = "PS/2 Keyboard",
|
||||
.Type = FexDriverType_Input,
|
||||
.TypeFlags = FexDriverInputTypes_Keyboard,
|
||||
.Callback = PS2Keyboard::CallbackHandler,
|
||||
.InterruptCallback = PS2Keyboard::InterruptCallback,
|
||||
.Bind = {
|
||||
.Type = BIND_INTERRUPT,
|
||||
.Interrupt = {
|
||||
.Vector = {1}, // IRQ1
|
||||
}}}};
|
||||
|
||||
FexExtended ATAExtendedHeader = {
|
||||
.Driver = {
|
||||
.Name = "Advanced Technology Attachment",
|
||||
@ -217,6 +231,18 @@ bool StartPS2Mouse()
|
||||
return false;
|
||||
}
|
||||
|
||||
bool StartPS2Keyboard()
|
||||
{
|
||||
Driver::BuiltInDriverInfo BIDI = {
|
||||
.EntryPoint = PS2Keyboard::DriverEntry,
|
||||
.ExtendedHeader = &PS2KeyboardExtendedHeader};
|
||||
|
||||
if (DriverManager->DriverLoadBindInterrupt((uintptr_t)&BIDI, 0, true) == Driver::DriverCode::OK)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool StartATA()
|
||||
{
|
||||
Driver::BuiltInDriverInfo BIDI = {
|
@ -203,7 +203,9 @@ namespace Gigabit
|
||||
if (!GetMAC().Valid())
|
||||
return NOT_AVAILABLE;
|
||||
else
|
||||
{
|
||||
debug("MAC address found.");
|
||||
}
|
||||
MAC = GetMAC();
|
||||
|
||||
// Start link
|
||||
@ -244,7 +246,9 @@ namespace Gigabit
|
||||
if (!GetMAC().Valid())
|
||||
return NOT_AVAILABLE;
|
||||
else
|
||||
{
|
||||
debug("MAC address found.");
|
||||
}
|
||||
MAC = GetMAC();
|
||||
|
||||
return NOT_IMPLEMENTED;
|
||||
@ -273,7 +277,9 @@ namespace Gigabit
|
||||
if (!GetMAC().Valid())
|
||||
return NOT_AVAILABLE;
|
||||
else
|
||||
{
|
||||
debug("MAC address found.");
|
||||
}
|
||||
MAC = GetMAC();
|
||||
|
||||
return NOT_IMPLEMENTED;
|
||||
@ -296,7 +302,7 @@ namespace Gigabit
|
||||
}
|
||||
return ERROR;
|
||||
}
|
||||
case FetchReason:
|
||||
case QueryReason:
|
||||
{
|
||||
memcpy(Data->NetworkCallback.Fetch.Name, (void *)"Intel Gigabit Ethernet Controller", 34);
|
||||
Data->NetworkCallback.Fetch.MAC = MAC.ToHex();
|
||||
|
107
Modules/PersonalSystem2/Keyboard.cpp
Normal file
107
Modules/PersonalSystem2/Keyboard.cpp
Normal file
@ -0,0 +1,107 @@
|
||||
/*
|
||||
This file is part of Fennix Kernel.
|
||||
|
||||
Fennix Kernel is free software: you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation, either version 3 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
Fennix Kernel is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Fennix Kernel. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "keyboard.hpp"
|
||||
|
||||
#include <limits.h>
|
||||
#include <debug.h>
|
||||
#include <io.h>
|
||||
|
||||
#include "../../DAPI.hpp"
|
||||
#include "../drv.hpp"
|
||||
#include "../../kernel.h"
|
||||
|
||||
namespace PS2Keyboard
|
||||
{
|
||||
KernelAPI KAPI;
|
||||
|
||||
uint8_t ScanCode = 0;
|
||||
bool InputReceived = false;
|
||||
|
||||
int DriverEntry(void *Data)
|
||||
{
|
||||
if (!Data)
|
||||
return INVALID_KERNEL_API;
|
||||
KAPI = *(KernelAPI *)Data;
|
||||
if (KAPI.Version.Major < 0 || KAPI.Version.Minor < 0 || KAPI.Version.Patch < 0)
|
||||
return KERNEL_API_VERSION_NOT_SUPPORTED;
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
int CallbackHandler(KernelCallback *Data)
|
||||
{
|
||||
switch (Data->Reason)
|
||||
{
|
||||
case AcknowledgeReason:
|
||||
{
|
||||
debug("Kernel acknowledged the driver.");
|
||||
break;
|
||||
}
|
||||
case ConfigurationReason:
|
||||
{
|
||||
while (inb(0x64) & 0x1)
|
||||
inb(0x60);
|
||||
|
||||
outb(0x64, 0xAE);
|
||||
outb(0x64, 0x20);
|
||||
uint8_t ret = (inb(0x60) | 1) & ~0x10;
|
||||
outb(0x64, 0x60);
|
||||
outb(0x60, ret);
|
||||
outb(0x60, 0xF4);
|
||||
|
||||
outb(0x21, 0xFD);
|
||||
outb(0xA1, 0xFF);
|
||||
|
||||
trace("PS/2 keyboard configured.");
|
||||
break;
|
||||
}
|
||||
case QueryReason:
|
||||
{
|
||||
Data->InputCallback.Keyboard.Key = ScanCode;
|
||||
break;
|
||||
}
|
||||
case PollWaitReason:
|
||||
{
|
||||
while (!InputReceived)
|
||||
TaskManager->Yield();
|
||||
InputReceived = false;
|
||||
|
||||
Data->InputCallback.Keyboard.Key = ScanCode;
|
||||
break;
|
||||
}
|
||||
case StopReason:
|
||||
{
|
||||
fixme("Driver stopped.");
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
warn("Unknown reason.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
||||
int InterruptCallback(CPURegisters *)
|
||||
{
|
||||
ScanCode = inb(0x60);
|
||||
InputReceived = true;
|
||||
return OK;
|
||||
}
|
||||
}
|
@ -1,3 +1,20 @@
|
||||
/*
|
||||
This file is part of Fennix Kernel.
|
||||
|
||||
Fennix Kernel is free software: you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation, either version 3 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
Fennix Kernel is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Fennix Kernel. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "mouse.hpp"
|
||||
|
||||
#include <debug.h>
|
||||
@ -5,6 +22,7 @@
|
||||
|
||||
#include "../../DAPI.hpp"
|
||||
#include "../drv.hpp"
|
||||
#include "../../kernel.h"
|
||||
|
||||
namespace PS2Mouse
|
||||
{
|
||||
@ -83,7 +101,7 @@ namespace PS2Mouse
|
||||
trace("PS/2 mouse configured.");
|
||||
break;
|
||||
}
|
||||
case FetchReason:
|
||||
case QueryReason:
|
||||
{
|
||||
Data->InputCallback.Mouse.X = MouseX;
|
||||
Data->InputCallback.Mouse.Y = MouseY;
|
||||
@ -93,6 +111,19 @@ namespace PS2Mouse
|
||||
Data->InputCallback.Mouse.Buttons.Middle = MouseMiddle;
|
||||
break;
|
||||
}
|
||||
case PollWaitReason:
|
||||
{
|
||||
while (!PacketReady)
|
||||
TaskManager->Yield();
|
||||
|
||||
Data->InputCallback.Mouse.X = MouseX;
|
||||
Data->InputCallback.Mouse.Y = MouseY;
|
||||
Data->InputCallback.Mouse.Z = MouseZ;
|
||||
Data->InputCallback.Mouse.Buttons.Left = MouseLeft;
|
||||
Data->InputCallback.Mouse.Buttons.Right = MouseRight;
|
||||
Data->InputCallback.Mouse.Buttons.Middle = MouseMiddle;
|
||||
break;
|
||||
}
|
||||
case StopReason:
|
||||
{
|
||||
outb(COMMAND, 0xA8);
|
||||
|
237
Modules/PersonalSystem2/keyboard.hpp
Normal file
237
Modules/PersonalSystem2/keyboard.hpp
Normal file
@ -0,0 +1,237 @@
|
||||
/*
|
||||
This file is part of Fennix Kernel.
|
||||
|
||||
Fennix Kernel is free software: you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation, either version 3 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
Fennix Kernel is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Fennix Kernel. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __FENNIX_KERNEL_PS2_KEYBOARD_H__
|
||||
#define __FENNIX_KERNEL_PS2_KEYBOARD_H__
|
||||
|
||||
#include <types.h>
|
||||
#include "../../DAPI.hpp"
|
||||
|
||||
namespace PS2Keyboard
|
||||
{
|
||||
enum DownKeys
|
||||
{
|
||||
KEY_D_ESCAPE = 0x1,
|
||||
|
||||
KEY_D_1 = 0x2,
|
||||
KEY_D_2 = 0x3,
|
||||
KEY_D_3 = 0x4,
|
||||
KEY_D_4 = 0x5,
|
||||
KEY_D_5 = 0x6,
|
||||
KEY_D_6 = 0x7,
|
||||
KEY_D_7 = 0x8,
|
||||
KEY_D_8 = 0x9,
|
||||
KEY_D_9 = 0xa,
|
||||
KEY_D_0 = 0xb,
|
||||
|
||||
KEY_D_MINUS = 0xc,
|
||||
KEY_D_EQUALS = 0xd,
|
||||
KEY_D_BACKSPACE = 0xe,
|
||||
KEY_D_TAB = 0xf,
|
||||
|
||||
KEY_D_Q = 0x10,
|
||||
KEY_D_W = 0x11,
|
||||
KEY_D_E = 0x12,
|
||||
KEY_D_R = 0x13,
|
||||
KEY_D_T = 0x14,
|
||||
KEY_D_Y = 0x15,
|
||||
KEY_D_U = 0x16,
|
||||
KEY_D_I = 0x17,
|
||||
KEY_D_O = 0x18,
|
||||
KEY_D_P = 0x19,
|
||||
|
||||
KEY_D_LBRACKET = 0x1a,
|
||||
KEY_D_RBRACKET = 0x1b,
|
||||
KEY_D_RETURN = 0x1c,
|
||||
KEY_D_LCTRL = 0x1d,
|
||||
|
||||
KEY_D_A = 0x1e,
|
||||
KEY_D_S = 0x1f,
|
||||
KEY_D_D = 0x20,
|
||||
KEY_D_F = 0x21,
|
||||
KEY_D_G = 0x22,
|
||||
KEY_D_H = 0x23,
|
||||
KEY_D_J = 0x24,
|
||||
KEY_D_K = 0x25,
|
||||
KEY_D_L = 0x26,
|
||||
|
||||
KEY_D_SEMICOLON = 0x27,
|
||||
KEY_D_APOSTROPHE = 0x28,
|
||||
KEY_D_GRAVE = 0x29,
|
||||
KEY_D_LSHIFT = 0x2a,
|
||||
KEY_D_BACKSLASH = 0x2b,
|
||||
|
||||
KEY_D_Z = 0x2c,
|
||||
KEY_D_X = 0x2d,
|
||||
KEY_D_C = 0x2e,
|
||||
KEY_D_V = 0x2f,
|
||||
KEY_D_B = 0x30,
|
||||
KEY_D_N = 0x31,
|
||||
KEY_D_M = 0x32,
|
||||
|
||||
KEY_D_COMMA = 0x33,
|
||||
KEY_D_PERIOD = 0x34,
|
||||
KEY_D_SLASH = 0x35,
|
||||
KEY_D_RSHIFT = 0x36,
|
||||
KEY_D_PRTSC = 0x37,
|
||||
KEY_D_LALT = 0x38,
|
||||
KEY_D_SPACE = 0x39,
|
||||
KEY_D_CAPSLOCK = 0x3a,
|
||||
KEY_D_NUMLOCK = 0x45,
|
||||
KEY_D_SCROLLLOCK = 0x46,
|
||||
|
||||
KEY_D_KP_MULTIPLY = 0x37,
|
||||
KEY_D_KP_7 = 0x47,
|
||||
KEY_D_KP_8 = 0x48,
|
||||
KEY_D_KP_9 = 0x49,
|
||||
KEY_D_KP_MINUS = 0x4a,
|
||||
KEY_D_KP_4 = 0x4b,
|
||||
KEY_D_KP_5 = 0x4c,
|
||||
KEY_D_KP_6 = 0x4d,
|
||||
KEY_D_KP_PLUS = 0x4e,
|
||||
KEY_D_KP_1 = 0x4f,
|
||||
KEY_D_KP_2 = 0x50,
|
||||
KEY_D_KP_3 = 0x51,
|
||||
KEY_D_KP_0 = 0x52,
|
||||
KEY_D_KP_PERIOD = 0x53,
|
||||
|
||||
KEY_D_F1 = 0x3b,
|
||||
KEY_D_F2 = 0x3c,
|
||||
KEY_D_F3 = 0x3d,
|
||||
KEY_D_F4 = 0x3e,
|
||||
KEY_D_F5 = 0x3f,
|
||||
KEY_D_F6 = 0x40,
|
||||
KEY_D_F7 = 0x41,
|
||||
KEY_D_F8 = 0x42,
|
||||
KEY_D_F9 = 0x43,
|
||||
KEY_D_F10 = 0x44,
|
||||
KEY_D_F11 = 0x57,
|
||||
KEY_D_F12 = 0x58,
|
||||
|
||||
KEY_D_UP = 0x48,
|
||||
KEY_D_LEFT = 0x4b,
|
||||
KEY_D_RIGHT = 0x4d,
|
||||
KEY_D_DOWN = 0x50,
|
||||
};
|
||||
|
||||
enum UpKeys
|
||||
{
|
||||
KEY_U_ESCAPE = 0x81,
|
||||
|
||||
KEY_U_1 = 0x82,
|
||||
KEY_U_2 = 0x83,
|
||||
KEY_U_3 = 0x84,
|
||||
KEY_U_4 = 0x85,
|
||||
KEY_U_5 = 0x86,
|
||||
KEY_U_6 = 0x87,
|
||||
KEY_U_7 = 0x88,
|
||||
KEY_U_8 = 0x89,
|
||||
KEY_U_9 = 0x8a,
|
||||
KEY_U_0 = 0x8b,
|
||||
|
||||
KEY_U_MINUS = 0x8c,
|
||||
KEY_U_EQUALS = 0x8d,
|
||||
KEY_U_BACKSPACE = 0x8e,
|
||||
KEY_U_TAB = 0x8f,
|
||||
|
||||
KEY_U_Q = 0x90,
|
||||
KEY_U_W = 0x91,
|
||||
KEY_U_E = 0x92,
|
||||
KEY_U_R = 0x93,
|
||||
KEY_U_T = 0x94,
|
||||
KEY_U_Y = 0x95,
|
||||
KEY_U_U = 0x96,
|
||||
KEY_U_I = 0x97,
|
||||
KEY_U_O = 0x98,
|
||||
KEY_U_P = 0x99,
|
||||
|
||||
KEY_U_LBRACKET = 0x9a,
|
||||
KEY_U_RBRACKET = 0x9b,
|
||||
KEY_U_RETURN = 0x9c,
|
||||
KEY_U_LCTRL = 0x9d,
|
||||
|
||||
KEY_U_A = 0x9e,
|
||||
KEY_U_S = 0x9f,
|
||||
KEY_U_D = 0xa0,
|
||||
KEY_U_F = 0xa1,
|
||||
KEY_U_G = 0xa2,
|
||||
KEY_U_H = 0xa3,
|
||||
KEY_U_J = 0xa4,
|
||||
KEY_U_K = 0xa5,
|
||||
KEY_U_L = 0xa6,
|
||||
|
||||
KEY_U_SEMICOLON = 0xa7,
|
||||
KEY_U_APOSTROPHE = 0xa8,
|
||||
KEY_U_GRAVE = 0xa9,
|
||||
KEY_U_LSHIFT = 0xaa,
|
||||
KEY_U_BACKSLASH = 0xab,
|
||||
|
||||
KEY_U_Z = 0xac,
|
||||
KEY_U_X = 0xad,
|
||||
KEY_U_C = 0xae,
|
||||
KEY_U_V = 0xaf,
|
||||
KEY_U_B = 0xb0,
|
||||
KEY_U_N = 0xb1,
|
||||
KEY_U_M = 0xb2,
|
||||
|
||||
KEY_U_COMMA = 0xb3,
|
||||
KEY_U_PERIOD = 0xb4,
|
||||
KEY_U_SLASH = 0xb5,
|
||||
KEY_U_RSHIFT = 0xb6,
|
||||
KEY_U_KP_MULTIPLY = 0xb7,
|
||||
KEY_U_LALT = 0xb8,
|
||||
KEY_U_SPACE = 0xb9,
|
||||
KEY_U_CAPSLOCK = 0xba,
|
||||
|
||||
KEY_U_F1 = 0xbb,
|
||||
KEY_U_F2 = 0xbc,
|
||||
KEY_U_F3 = 0xbd,
|
||||
KEY_U_F4 = 0xbe,
|
||||
KEY_U_F5 = 0xbf,
|
||||
KEY_U_F6 = 0xc0,
|
||||
KEY_U_F7 = 0xc1,
|
||||
KEY_U_F8 = 0xc2,
|
||||
KEY_U_F9 = 0xc3,
|
||||
KEY_U_F10 = 0xc4,
|
||||
|
||||
KEY_U_NUMLOCK = 0xc5,
|
||||
KEY_U_SCROLLLOCK = 0xc6,
|
||||
|
||||
KEY_U_KP_7 = 0xc7,
|
||||
KEY_U_KP_8 = 0xc8,
|
||||
KEY_U_KP_9 = 0xc9,
|
||||
KEY_U_KP_MINUS = 0xca,
|
||||
KEY_U_KP_4 = 0xcb,
|
||||
KEY_U_KP_5 = 0xcc,
|
||||
KEY_U_KP_6 = 0xcd,
|
||||
KEY_U_KP_PLUS = 0xce,
|
||||
KEY_U_KP_1 = 0xcf,
|
||||
KEY_U_KP_2 = 0xd0,
|
||||
KEY_U_KP_3 = 0xd1,
|
||||
KEY_U_KP_0 = 0xd2,
|
||||
KEY_U_KP_PERIOD = 0xd3,
|
||||
|
||||
KEY_U_F11 = 0xd7,
|
||||
KEY_U_F12 = 0xd8,
|
||||
};
|
||||
|
||||
int DriverEntry(void *);
|
||||
int CallbackHandler(KernelCallback *);
|
||||
int InterruptCallback(CPURegisters *);
|
||||
}
|
||||
|
||||
#endif // !__FENNIX_KERNEL_PS2_KEYBOARD_H__
|
@ -141,7 +141,7 @@ namespace RTL8139
|
||||
return DEVICE_NOT_SUPPORTED;
|
||||
break;
|
||||
}
|
||||
case FetchReason:
|
||||
case QueryReason:
|
||||
{
|
||||
memcpy(Data->NetworkCallback.Fetch.Name, (void *)"RTL-8139", 9);
|
||||
Data->NetworkCallback.Fetch.MAC = MAC.ToHex();
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
#include "../../DAPI.hpp"
|
||||
#include "../drv.hpp"
|
||||
#include "../../kernel.h"
|
||||
|
||||
/* https://wiki.osdev.org/VMware_tools */
|
||||
|
||||
@ -129,6 +130,8 @@ namespace VMwareMouse
|
||||
int MouseX = 0, MouseY = 0, MouseZ = 0;
|
||||
int MouseButton = 0;
|
||||
|
||||
bool InputReceived = false;
|
||||
|
||||
int CallbackHandler(KernelCallback *Data)
|
||||
{
|
||||
switch (Data->Reason)
|
||||
@ -156,7 +159,7 @@ namespace VMwareMouse
|
||||
trace("VMware mouse configured.");
|
||||
break;
|
||||
}
|
||||
case FetchReason:
|
||||
case QueryReason:
|
||||
{
|
||||
Data->InputCallback.Mouse.X = (MouseX * KAPI.Display.GetWidth()) / 0xFFFF;
|
||||
Data->InputCallback.Mouse.Y = (MouseY * KAPI.Display.GetHeight()) / 0xFFFF;
|
||||
@ -166,6 +169,20 @@ namespace VMwareMouse
|
||||
Data->InputCallback.Mouse.Buttons.Middle = MouseButton & 0x08;
|
||||
break;
|
||||
}
|
||||
case PollWaitReason:
|
||||
{
|
||||
while (!InputReceived)
|
||||
TaskManager->Yield();
|
||||
InputReceived = false;
|
||||
|
||||
Data->InputCallback.Mouse.X = (MouseX * KAPI.Display.GetWidth()) / 0xFFFF;
|
||||
Data->InputCallback.Mouse.Y = (MouseY * KAPI.Display.GetHeight()) / 0xFFFF;
|
||||
Data->InputCallback.Mouse.Z = MouseZ;
|
||||
Data->InputCallback.Mouse.Buttons.Left = MouseButton & 0x20;
|
||||
Data->InputCallback.Mouse.Buttons.Right = MouseButton & 0x10;
|
||||
Data->InputCallback.Mouse.Buttons.Middle = MouseButton & 0x08;
|
||||
break;
|
||||
}
|
||||
case StopReason:
|
||||
{
|
||||
Relative();
|
||||
@ -220,6 +237,7 @@ namespace VMwareMouse
|
||||
MouseX = cmd.bx; /* Both X and Y are scaled from 0 to 0xFFFF */
|
||||
MouseY = cmd.cx; /* You should map these somewhere to the actual resolution. */
|
||||
MouseZ = (int8_t)cmd.dx; /* Z is a single signed byte indicating scroll direction. */
|
||||
InputReceived = true;
|
||||
return OK;
|
||||
}
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
bool StartAHCI();
|
||||
bool StartVMwareMouse();
|
||||
bool StartPS2Mouse();
|
||||
bool StartPS2Keyboard();
|
||||
bool StartATA();
|
||||
bool StartAC97();
|
||||
bool StartRTL8139();
|
||||
|
Reference in New Issue
Block a user