* Removed the at_kbd_io and AT keyboard stuff; this is now done within the PS/2

driver, and that driver is using the raw_key_info structure as well.
* Renamed kb_mouse_driver.h to keyboard_mouse_driver.h.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36267 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2010-04-14 19:19:14 +00:00
parent 19049c8bd3
commit 2c49465329
17 changed files with 192 additions and 213 deletions
@@ -1,18 +1,15 @@
// /*
// kb_mouse_driver.h * Copyright 2002-2010, Haiku. All rights reserved.
// * Distributed under the terms of the MIT License.
#ifndef _KB_MOUSE_DRIVER_H */
#define _KB_MOUSE_DRIVER_H #ifndef _KEYBOARD_MOUSE_DRIVER_H
#define _KEYBOARD_MOUSE_DRIVER_H
#include <SupportDefs.h> #include <SupportDefs.h>
#include <Drivers.h> #include <Drivers.h>
#ifdef __cplusplus
extern "C" {
#endif
#define KEY_Scroll 0x0f #define KEY_Scroll 0x0f
#define KEY_Pause 0x10 #define KEY_Pause 0x10
#define KEY_Num 0x22 #define KEY_Num 0x22
@@ -75,60 +72,55 @@ enum {
typedef struct { typedef struct {
bigtime_t timestamp; bigtime_t timestamp;
uint32 be_keycode; uint32 keycode;
bool is_keydown; bool is_keydown;
} raw_key_info; } raw_key_info;
typedef struct { typedef struct {
bigtime_t timestamp; bool num_lock;
uint8 scancode; bool caps_lock;
bool is_keydown; bool scroll_lock;
} at_kbd_io;
typedef struct {
bool num_lock;
bool caps_lock;
bool scroll_lock;
} led_info; } led_info;
typedef struct { typedef struct {
int32 cookie; int32 cookie;
uint32 buttons; uint32 buttons;
int32 xdelta; int32 xdelta;
int32 ydelta; int32 ydelta;
int32 clicks; int32 clicks;
int32 modifiers; int32 modifiers;
bigtime_t timestamp; bigtime_t timestamp;
int32 wheel_ydelta; int32 wheel_ydelta;
int32 wheel_xdelta; int32 wheel_xdelta;
} mouse_movement; } mouse_movement;
typedef struct { typedef struct {
uint32 buttons; uint32 buttons;
float xpos; float xpos;
float ypos; float ypos;
bool has_contact; bool has_contact;
float pressure; float pressure;
int32 clicks; int32 clicks;
bool eraser; bool eraser;
bigtime_t timestamp; bigtime_t timestamp;
int32 wheel_ydelta; int32 wheel_ydelta;
int32 wheel_xdelta; int32 wheel_xdelta;
float tilt_x; float tilt_x;
float tilt_y; float tilt_y;
} tablet_movement; } tablet_movement;
#define B_ONE_FINGER 0x01 #define B_ONE_FINGER 0x01
#define B_TWO_FINGER 0x02 #define B_TWO_FINGER 0x02
#define B_MULTI_FINGER 0x04 #define B_MULTI_FINGER 0x04
#define B_PEN 0x08 #define B_PEN 0x08
typedef struct
{ typedef struct {
uint8 buttons; uint8 buttons;
uint32 xPosition; uint32 xPosition;
uint32 yPosition; uint32 yPosition;
@@ -141,9 +133,5 @@ typedef struct
// 12 maximum reportable width; extrem wide contact // 12 maximum reportable width; extrem wide contact
} touchpad_movement; } touchpad_movement;
#ifdef __cplusplus
}
#endif
#endif
#endif // _KB_MOUSE_DRIVER_H
@@ -23,8 +23,7 @@
#include <Path.h> #include <Path.h>
#include <String.h> #include <String.h>
#include "ATKeymap.h" #include <keyboard_mouse_driver.h>
#include "kb_mouse_driver.h"
#undef TRACE #undef TRACE
@@ -143,8 +142,6 @@ KeyboardDevice::KeyboardDevice(KeyboardInputDevice* owner, const char* path)
fDeviceRef.type = B_KEYBOARD_DEVICE; fDeviceRef.type = B_KEYBOARD_DEVICE;
fDeviceRef.cookie = this; fDeviceRef.cookie = this;
fIsAT = strstr(path, "keyboard/at") != NULL;
if (be_app->Lock()) { if (be_app->Lock()) {
be_app->AddHandler(this); be_app->AddHandler(this);
be_app->Unlock(); be_app->Unlock();
@@ -274,7 +271,7 @@ KeyboardDevice::_ControlThread()
_UpdateSettings(0); _UpdateSettings(0);
uint8 buffer[16]; raw_key_info keyInfo;
uint8 activeDeadKey = 0; uint8 activeDeadKey = 0;
uint32 lastKeyCode = 0; uint32 lastKeyCode = 0;
uint32 repeatCount = 1; uint32 repeatCount = 1;
@@ -284,7 +281,7 @@ KeyboardDevice::_ControlThread()
memset(states, 0, sizeof(states)); memset(states, 0, sizeof(states));
while (fActive) { while (fActive) {
if (ioctl(fFD, KB_READ, &buffer) != B_OK) { if (ioctl(fFD, KB_READ, &keyInfo) != B_OK) {
_ControlThreadCleanup(); _ControlThreadCleanup();
// TOAST! // TOAST!
return 0; return 0;
@@ -296,31 +293,15 @@ KeyboardDevice::_ControlThread()
fUpdateSettings = false; fUpdateSettings = false;
} }
uint32 keycode = 0; uint32 keycode = keyInfo.keycode;
bool isKeyDown = false; bool isKeyDown = keyInfo.is_keydown;
bigtime_t timestamp = 0;
LOG_EVENT("KB_READ :"); LOG_EVENT("KB_READ: %Ld, %02x, %02lx\n", keyInfo.timestamp, isKeyDown,
keycode);
if (fIsAT) {
at_kbd_io* atKeyboard = (at_kbd_io*)buffer;
if (atKeyboard->scancode > 0)
keycode = kATKeycodeMap[atKeyboard->scancode - 1];
isKeyDown = atKeyboard->is_keydown;
timestamp = atKeyboard->timestamp;
LOG_EVENT(" %02x", atKeyboard->scancode);
} else {
raw_key_info* rawKeyInfo= (raw_key_info*)buffer;
isKeyDown = rawKeyInfo->is_keydown;
timestamp = rawKeyInfo->timestamp;
keycode = rawKeyInfo->be_keycode;
}
if (keycode == 0) if (keycode == 0)
continue; continue;
LOG_EVENT(" %Ld, %02x, %02lx\n", timestamp, isKeyDown, keycode);
if (isKeyDown && keycode == 0x68) { if (isKeyDown && keycode == 0x68) {
// MENU KEY for Tracker // MENU KEY for Tracker
bool noOtherKeyPressed = true; bool noOtherKeyPressed = true;
@@ -402,7 +383,7 @@ KeyboardDevice::_ControlThread()
if (message == NULL) if (message == NULL)
continue; continue;
message->AddInt64("when", timestamp); message->AddInt64("when", keyInfo.timestamp);
message->AddInt32("be:old_modifiers", oldModifiers); message->AddInt32("be:old_modifiers", oldModifiers);
message->AddInt32("modifiers", fModifiers); message->AddInt32("modifiers", fModifiers);
message->AddData("states", B_UINT8_TYPE, states, 16); message->AddData("states", B_UINT8_TYPE, states, 16);
@@ -440,7 +421,7 @@ KeyboardDevice::_ControlThread()
else else
msg->what = isKeyDown ? B_UNMAPPED_KEY_DOWN : B_UNMAPPED_KEY_UP; msg->what = isKeyDown ? B_UNMAPPED_KEY_DOWN : B_UNMAPPED_KEY_UP;
msg->AddInt64("when", timestamp); msg->AddInt64("when", keyInfo.timestamp);
msg->AddInt32("key", keycode); msg->AddInt32("key", keycode);
msg->AddInt32("modifiers", fModifiers); msg->AddInt32("modifiers", fModifiers);
msg->AddData("states", B_UINT8_TYPE, states, 16); msg->AddData("states", B_UINT8_TYPE, states, 16);
@@ -1,6 +1,8 @@
/* /*
* Copyright 2004-2008, Jérôme Duval. All rights reserved. * Copyright 2004-2008, Jérôme Duval. All rights reserved.
* Copyright 2005-2010, Axel Dörfler, [email protected].
* Copyright 2008, Stephan Aßmus, [email protected]. * Copyright 2008, Stephan Aßmus, [email protected].
*
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
*/ */
#ifndef KEYBOARD_INPUT_DEVICE_H #ifndef KEYBOARD_INPUT_DEVICE_H
@@ -55,7 +57,6 @@ private:
thread_id fThread; thread_id fThread;
kb_settings fSettings; kb_settings fSettings;
volatile bool fActive; volatile bool fActive;
bool fIsAT;
volatile bool fInputMethodStarted; volatile bool fInputMethodStarted;
uint32 fModifiers; uint32 fModifiers;
uint32 fCommandKey; uint32 fCommandKey;
@@ -1,5 +1,5 @@
/* /*
* Copyright 2004-2009, Haiku. * Copyright 2004-2010, Haiku.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
* *
* Authors: * Authors:
@@ -30,9 +30,9 @@
#include <String.h> #include <String.h>
#include <View.h> #include <View.h>
#include "kb_mouse_settings.h" #include <kb_mouse_settings.h>
#include "kb_mouse_driver.h" #include <keyboard_mouse_driver.h>
#include "touchpad_settings.h" #include <touchpad_settings.h>
#undef TRACE #undef TRACE
@@ -21,8 +21,9 @@
#include <lock.h> #include <lock.h>
#include <util/AutoLock.h> #include <util/AutoLock.h>
#include "ATKeymap.h"
#include "ps2_service.h" #include "ps2_service.h"
#include "kb_mouse_driver.h" #include "keyboard_mouse_driver.h"
#include "packet_buffer.h" #include "packet_buffer.h"
@@ -123,7 +124,7 @@ keyboard_handle_int(ps2_dev *dev)
EMERGENCY_SYS_REQ = 0x04, EMERGENCY_SYS_REQ = 0x04,
}; };
static int emergencyKeyStatus = 0; static int emergencyKeyStatus = 0;
at_kbd_io keyInfo; raw_key_info keyInfo;
uint8 scancode = dev->history[0].data; uint8 scancode = dev->history[0].data;
if (atomic_get(&sKeyboardOpenCount) == 0) if (atomic_get(&sKeyboardOpenCount) == 0)
@@ -176,7 +177,7 @@ keyboard_handle_int(ps2_dev *dev)
keyInfo.timestamp = system_time(); keyInfo.timestamp = system_time();
keyInfo.is_keydown = false; keyInfo.is_keydown = false;
for (size_t i = 0; i < sizeof(kKeys) / sizeof(kKeys[0]); i++) { for (size_t i = 0; i < sizeof(kKeys) / sizeof(kKeys[0]); i++) {
keyInfo.scancode = kKeys[i]; keyInfo.keycode = kATKeycodeMap[kKeys[i] - 1];
if (packet_buffer_write(sKeyBuffer, (uint8 *)&keyInfo, if (packet_buffer_write(sKeyBuffer, (uint8 *)&keyInfo,
sizeof(keyInfo)) != 0) sizeof(keyInfo)) != 0)
release_sem_etc(sKeyboardSem, 1, B_DO_NOT_RESCHEDULE); release_sem_etc(sKeyboardSem, 1, B_DO_NOT_RESCHEDULE);
@@ -186,7 +187,7 @@ keyboard_handle_int(ps2_dev *dev)
} }
keyInfo.timestamp = dev->history[0].time; keyInfo.timestamp = dev->history[0].time;
keyInfo.scancode = scancode; keyInfo.keycode = kATKeycodeMap[scancode - 1];
if (packet_buffer_write(sKeyBuffer, (uint8 *)&keyInfo, if (packet_buffer_write(sKeyBuffer, (uint8 *)&keyInfo,
sizeof(keyInfo)) == 0) { sizeof(keyInfo)) == 0) {
@@ -203,7 +204,7 @@ keyboard_handle_int(ps2_dev *dev)
static status_t static status_t
read_keyboard_packet(at_kbd_io *packet, bool isDebugger) read_keyboard_packet(raw_key_info *packet, bool isDebugger)
{ {
status_t status; status_t status;
@@ -326,7 +327,8 @@ keyboard_open(const char *name, uint32 flags, void **_cookie)
return sKeyboardSem; return sKeyboardSem;
} }
sKeyBuffer = create_packet_buffer(KEY_BUFFER_SIZE * sizeof(at_kbd_io)); sKeyBuffer
= create_packet_buffer(KEY_BUFFER_SIZE * sizeof(raw_key_info));
if (sKeyBuffer == NULL) { if (sKeyBuffer == NULL) {
delete_sem(sKeyboardSem); delete_sem(sKeyboardSem);
delete cookie; delete cookie;
@@ -411,7 +413,7 @@ keyboard_ioctl(void *_cookie, uint32 op, void *buffer, size_t length)
} else if (!cookie->is_debugger && !cookie->is_reader) } else if (!cookie->is_debugger && !cookie->is_reader)
return B_BUSY; return B_BUSY;
at_kbd_io packet; raw_key_info packet;
status_t status = read_keyboard_packet(&packet, status_t status = read_keyboard_packet(&packet,
cookie->is_debugger); cookie->is_debugger);
TRACE("ps2: ioctl KB_READ: %s\n", strerror(status)); TRACE("ps2: ioctl KB_READ: %s\n", strerror(status));
@@ -1,9 +1,7 @@
/* /*
* Copyright 2001-2008 Haiku, Inc. * Copyright 2001-2010 Haiku, Inc.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
* *
* PS/2 mouse device driver
*
* Authors (in chronological order): * Authors (in chronological order):
* Elad Lahav ([email protected]) * Elad Lahav ([email protected])
* Stefano Ceccherini ([email protected]) * Stefano Ceccherini ([email protected])
@@ -12,51 +10,54 @@
* Clemens Zeidler <[email protected]> * Clemens Zeidler <[email protected]>
*/ */
/* /*! PS/2 mouse device driver
* A PS/2 mouse is connected to the IBM 8042 controller, and gets its
* name from the IBM PS/2 personal computer, which was the first to
* use this device. All resources are shared between the keyboard, and
* the mouse, referred to as the "Auxiliary Device".
*
* I/O:
* ~~~
* The controller has 3 I/O registers:
* 1. Status (input), mapped to port 64h
* 2. Control (output), mapped to port 64h
* 3. Data (input/output), mapped to port 60h
*
* Data:
* ~~~~
* A packet read from the mouse data port is composed of
* three bytes:
* byte 0: status byte, where
* - bit 7: Y overflow (1 = true)
* - bit 6: X overflow (1 = true)
* - bit 5: MSB of Y offset
* - bit 4: MSB of X offset
* - bit 3: Syncronization bit (always 1)
* - bit 2: Middle button (1 = down)
* - bit 1: Right button (1 = down)
* - bit 0: Left button (1 = down)
* byte 1: X position change, since last probed (-127 to +127)
* byte 2: Y position change, since last probed (-127 to +127)
*
* Intellimouse mice send a four byte packet, where the first three
* bytes are the same as standard mice, and the last one reports the
* Z position, which is, usually, the wheel movement.
*
* Interrupts:
* ~~~~~~~~~~
* The PS/2 mouse device is connected to interrupt 12.
* The controller uses 3 consecutive interrupts to inform the computer
* that it has new data. On the first the data register holds the status
* byte, on the second the X offset, and on the 3rd the Y offset.
*/
A PS/2 mouse is connected to the IBM 8042 controller, and gets its
name from the IBM PS/2 personal computer, which was the first to
use this device. All resources are shared between the keyboard, and
the mouse, referred to as the "Auxiliary Device".
I/O:
~~~
The controller has 3 I/O registers:
1. Status (input), mapped to port 64h
2. Control (output), mapped to port 64h
3. Data (input/output), mapped to port 60h
Data:
~~~~
A packet read from the mouse data port is composed of
three bytes:
byte 0: status byte, where
- bit 7: Y overflow (1 = true)
- bit 6: X overflow (1 = true)
- bit 5: MSB of Y offset
- bit 4: MSB of X offset
- bit 3: Syncronization bit (always 1)
- bit 2: Middle button (1 = down)
- bit 1: Right button (1 = down)
- bit 0: Left button (1 = down)
byte 1: X position change, since last probed (-127 to +127)
byte 2: Y position change, since last probed (-127 to +127)
Intellimouse mice send a four byte packet, where the first three
bytes are the same as standard mice, and the last one reports the
Z position, which is, usually, the wheel movement.
Interrupts:
~~~~~~~~~~
The PS/2 mouse device is connected to interrupt 12.
The controller uses 3 consecutive interrupts to inform the computer
that it has new data. On the first the data register holds the status
byte, on the second the X offset, and on the 3rd the Y offset.
*/
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <malloc.h>
#include "kb_mouse_driver.h" #include <keyboard_mouse_driver.h>
#include "ps2_service.h" #include "ps2_service.h"
#include "ps2_standard_mouse.h" #include "ps2_standard_mouse.h"
@@ -74,8 +75,9 @@ const char* kIntelliMousePath[4] = {
"input/mouse/ps2/intelli_3" "input/mouse/ps2/intelli_3"
}; };
/** Set sampling rate of the ps2 port.
*/ /*! Set sampling rate of the ps2 port.
*/
static inline status_t static inline status_t
ps2_set_sample_rate(ps2_dev *dev, uint8 rate) ps2_set_sample_rate(ps2_dev *dev, uint8 rate)
{ {
@@ -83,8 +85,8 @@ ps2_set_sample_rate(ps2_dev *dev, uint8 rate)
} }
/** Converts a packet received by the mouse to a "movement". /*! Converts a packet received by the mouse to a "movement".
*/ */
static void static void
ps2_packet_to_movement(standard_mouse_cookie *cookie, uint8 packet[], ps2_packet_to_movement(standard_mouse_cookie *cookie, uint8 packet[],
mouse_movement *pos) mouse_movement *pos)
@@ -145,8 +147,8 @@ ps2_packet_to_movement(standard_mouse_cookie *cookie, uint8 packet[],
} }
/** Read a mouse event from the mouse events chain buffer. /*! Read a mouse event from the mouse events chain buffer.
*/ */
static status_t static status_t
standard_mouse_read_event(standard_mouse_cookie *cookie, standard_mouse_read_event(standard_mouse_cookie *cookie,
mouse_movement *movement) mouse_movement *movement)
@@ -181,6 +183,9 @@ standard_mouse_read_event(standard_mouse_cookie *cookie,
} }
// #pragma mark -
void void
standard_mouse_disconnect(ps2_dev *dev) standard_mouse_disconnect(ps2_dev *dev)
{ {
@@ -191,12 +196,12 @@ standard_mouse_disconnect(ps2_dev *dev)
} }
/** Interrupt handler for the mouse device. Called whenever the I/O /*! Interrupt handler for the mouse device. Called whenever the I/O
* controller generates an interrupt for the PS/2 mouse. Reads mouse controller generates an interrupt for the PS/2 mouse. Reads mouse
* information from the data port, and stores it, so it can be accessed information from the data port, and stores it, so it can be accessed
* by read() operations. The full data is obtained using 3 consecutive by read() operations. The full data is obtained using 3 consecutive
* calls to the handler, each holds a different byte on the data port. calls to the handler, each holds a different byte on the data port.
*/ */
int32 int32
standard_mouse_handle_int(ps2_dev *dev) standard_mouse_handle_int(ps2_dev *dev)
{ {
@@ -1,5 +1,5 @@
/* /*
* Copyright 2001-2008 Haiku, Inc. * Copyright 2001-2010 Haiku, Inc.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
* *
* PS/2 mouse device driver * PS/2 mouse device driver
@@ -11,26 +11,26 @@
* Marcus Overhagen <[email protected]> * Marcus Overhagen <[email protected]>
* Clemens Zeidler <[email protected]> * Clemens Zeidler <[email protected]>
*/ */
#ifndef __PS2_STANDARD_MOUSE_H #ifndef __PS2_STANDARD_MOUSE_H
#define __PS2_STANDARD_MOUSE_H #define __PS2_STANDARD_MOUSE_H
#include <Drivers.h> #include <Drivers.h>
#include "packet_buffer.h" #include "packet_buffer.h"
#define MOUSE_HISTORY_SIZE 256 #define MOUSE_HISTORY_SIZE 256
// we record that many mouse packets before we start to drop them // we record that many mouse packets before we start to drop them
#define F_MOUSE_TYPE_STANDARD 0x1 #define F_MOUSE_TYPE_STANDARD 0x1
#define F_MOUSE_TYPE_INTELLIMOUSE 0x2 #define F_MOUSE_TYPE_INTELLIMOUSE 0x2
typedef struct typedef struct {
{ ps2_dev* dev;
ps2_dev * dev;
sem_id standard_mouse_sem; sem_id standard_mouse_sem;
packet_buffer * standard_mouse_buffer; packet_buffer* standard_mouse_buffer;
bigtime_t click_last_time; bigtime_t click_last_time;
bigtime_t click_speed; bigtime_t click_speed;
int click_count; int click_count;
@@ -38,23 +38,29 @@ typedef struct
int flags; int flags;
size_t packet_index; size_t packet_index;
uint8 packet_buffer[PS2_MAX_PACKET_SIZE]; uint8 packet_buffer[PS2_MAX_PACKET_SIZE];
} standard_mouse_cookie; } standard_mouse_cookie;
status_t probe_standard_mouse(ps2_dev *dev); #ifdef __cplusplus
extern "C" {
#endif
status_t standard_mouse_open(const char *name, uint32 flags, void **_cookie); status_t probe_standard_mouse(ps2_dev* dev);
status_t standard_mouse_close(void *_cookie);
status_t standard_mouse_freecookie(void *_cookie); status_t standard_mouse_open(const char* name, uint32 flags, void** _cookie);
status_t standard_mouse_ioctl(void *_cookie, uint32 op, void *buffer, status_t standard_mouse_close(void* _cookie);
status_t standard_mouse_freecookie(void* _cookie);
status_t standard_mouse_ioctl(void* _cookie, uint32 op, void* buffer,
size_t length); size_t length);
int32 standard_mouse_handle_int(ps2_dev *dev); int32 standard_mouse_handle_int(ps2_dev* dev);
void standard_mouse_disconnect(ps2_dev *dev); void standard_mouse_disconnect(ps2_dev* dev);
device_hooks gStandardMouseDeviceHooks; device_hooks gStandardMouseDeviceHooks;
#ifdef __cplusplus
}
#endif
#endif /* __PS2_STANDARD_MOUSE_H */
#endif /* __PS2_STANDARD_MOUSE_H */
@@ -1,5 +1,5 @@
/* /*
* Copyright 2008-2009, Haiku, Inc. * Copyright 2008-2010, Haiku, Inc.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
* *
* Authors (in chronological order): * Authors (in chronological order):
@@ -17,8 +17,9 @@
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
#include <keyboard_mouse_driver.h>
#include "ps2_service.h" #include "ps2_service.h"
#include "kb_mouse_driver.h"
const char* kSynapticsPath[4] = { const char* kSynapticsPath[4] = {
@@ -1,8 +1,8 @@
/* /*
* Copyright 2008-2009, Haiku, Inc. * Copyright 2008-2010, Haiku, Inc.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
* *
* Authors (in chronological order): * Authors:
* Clemens Zeidler ([email protected]) * Clemens Zeidler ([email protected])
*/ */
#ifndef PS2_SYNAPTICS_H #ifndef PS2_SYNAPTICS_H
@@ -11,11 +11,12 @@
#include <KernelExport.h> #include <KernelExport.h>
#include "kb_mouse_driver.h" #include <keyboard_mouse_driver.h>
#include <touchpad_settings.h>
#include "movement_maker.h" #include "movement_maker.h"
#include "packet_buffer.h" #include "packet_buffer.h"
#include "ps2_service.h" #include "ps2_service.h"
#include "touchpad_settings.h"
#define SYN_TOUCHPAD 0x47 #define SYN_TOUCHPAD 0x47
@@ -1,9 +1,20 @@
/*
* Copyright 2009-2010, Haiku, Inc.
* Distributed under the terms of the MIT License.
*
* Authors:
* Clemens Zeidler ([email protected])
*/
#include <malloc.h> #include <malloc.h>
#include <string.h> #include <string.h>
#include "kb_mouse_driver.h" #include <keyboard_mouse_driver.h>
#include "ps2_trackpoint.h" #include "ps2_trackpoint.h"
const char* kTrackpointPath[4] = { const char* kTrackpointPath[4] = {
"input/mouse/ps2/ibm_trackpoint_0", "input/mouse/ps2/ibm_trackpoint_0",
"input/mouse/ps2/ibm_trackpoint_1", "input/mouse/ps2/ibm_trackpoint_1",
@@ -3,6 +3,7 @@
* Distributed under the terms of the MIT license. * Distributed under the terms of the MIT license.
*/ */
#include <new> #include <new>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@@ -18,14 +19,14 @@
#include "HIDReport.h" #include "HIDReport.h"
#include "HIDReportItem.h" #include "HIDReportItem.h"
// input server private for raw_key_info, KB_READ, etc... #include <keyboard_mouse_driver.h>
#include "kb_mouse_driver.h"
#define LEFT_ALT_KEY 0x04 #define LEFT_ALT_KEY 0x04
#define RIGHT_ALT_KEY 0x40 #define RIGHT_ALT_KEY 0x40
#define ALT_KEYS (LEFT_ALT_KEY | RIGHT_ALT_KEY) #define ALT_KEYS (LEFT_ALT_KEY | RIGHT_ALT_KEY)
static usb_id sDebugKeyboardPipe = 0; static usb_id sDebugKeyboardPipe = 0;
static size_t sDebugKeyboardReportSize = 0; static size_t sDebugKeyboardReportSize = 0;
static int32 sDebuggerCommandAdded = 0; static int32 sDebuggerCommandAdded = 0;
@@ -296,7 +297,7 @@ void
KeyboardDevice::_WriteKey(uint32 key, bool down) KeyboardDevice::_WriteKey(uint32 key, bool down)
{ {
raw_key_info info; raw_key_info info;
info.be_keycode = key; info.keycode = key;
info.is_keydown = down; info.is_keydown = down;
info.timestamp = system_time(); info.timestamp = system_time();
RingBufferWrite(&info, sizeof(raw_key_info)); RingBufferWrite(&info, sizeof(raw_key_info));
@@ -1,8 +1,11 @@
/* /*
Driver for USB Human Interface Devices. * Copyright 2008-2009 Michael Lotz <[email protected]>
Copyright (C) 2008-2009 Michael Lotz <[email protected]> * Distributed under the terms of the MIT license.
Distributed under the terms of the MIT license. */
*/
//! Driver for USB Human Interface Devices.
#include "Driver.h" #include "Driver.h"
#include "MouseDevice.h" #include "MouseDevice.h"
@@ -15,8 +18,7 @@
#include <string.h> #include <string.h>
#include <usb/USB_hid.h> #include <usb/USB_hid.h>
// input server private for mouse_movement, MS_READ, etc... #include <keyboard_mouse_driver.h>
#include "kb_mouse_driver.h"
MouseDevice::MouseDevice(HIDReport *report, HIDReportItem *xAxis, MouseDevice::MouseDevice(HIDReport *report, HIDReportItem *xAxis,
+2 -2
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright 2008-2009, Haiku, Inc. * Copyright 2008-2010, Haiku, Inc.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
* *
* Authors: * Authors:
@@ -14,7 +14,7 @@
#include <File.h> #include <File.h>
#include <String.h> #include <String.h>
#include "kb_mouse_driver.h" #include <keyboard_mouse_driver.h>
TouchpadPref::TouchpadPref() TouchpadPref::TouchpadPref()
@@ -1,5 +1,5 @@
/* /*
* Copyright 2008-2009, Haiku, Inc. * Copyright 2008-2010, Haiku, Inc.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
* *
* Authors: * Authors:
@@ -27,7 +27,7 @@
#include <SpaceLayoutItem.h> #include <SpaceLayoutItem.h>
#include <Window.h> #include <Window.h>
#include "kb_mouse_driver.h" #include <keyboard_mouse_driver.h>
const uint32 SCROLL_X_DRAG = 'sxdr'; const uint32 SCROLL_X_DRAG = 'sxdr';
+1 -2
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2009, Haiku, Inc. All Rights Reserved. * Copyright 2002-2010, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
*/ */
@@ -7,7 +7,6 @@
#include "InputServer.h" #include "InputServer.h"
#include "InputServerTypes.h" #include "InputServerTypes.h"
#include "BottomlineWindow.h" #include "BottomlineWindow.h"
#include "kb_mouse_driver.h"
#include "MethodReplicant.h" #include "MethodReplicant.h"
#include <safemode_defs.h> #include <safemode_defs.h>
+10 -29
View File
@@ -20,9 +20,8 @@
#include <InterfaceDefs.h> #include <InterfaceDefs.h>
#include <OS.h> #include <OS.h>
#include <kb_mouse_driver.h> #include <keyboard_mouse_driver.h>
#include "ATKeymap.h"
#include "SystemKeymap.h" #include "SystemKeymap.h"
#include "Keymap.h" #include "Keymap.h"
@@ -30,7 +29,6 @@
struct console { struct console {
int console_fd; int console_fd;
int keyboard_fd; int keyboard_fd;
bool is_at;
int tty_master_fd; int tty_master_fd;
int tty_slave_fd; int tty_slave_fd;
@@ -89,26 +87,12 @@ keyboard_reader(void* arg)
keymap.LoadCurrent(); keymap.LoadCurrent();
for (;;) { for (;;) {
char buffer[16]; raw_key_info rawKeyInfo;
if (ioctl(con->keyboard_fd, KB_READ, &buffer) != 0) if (ioctl(con->keyboard_fd, KB_READ, &rawKeyInfo) != 0)
break; break;
uint32 keycode = 0; uint32 keycode = rawKeyInfo.keycode;
bool isKeyDown = false; bool isKeyDown = rawKeyInfo.is_keydown;
bigtime_t timestamp = 0;
if (con->is_at) {
at_kbd_io* atKeyboard = (at_kbd_io*)buffer;
if (atKeyboard->scancode > 0)
keycode = kATKeycodeMap[atKeyboard->scancode - 1];
isKeyDown = atKeyboard->is_keydown;
timestamp = atKeyboard->timestamp;
} else {
raw_key_info* rawKeyInfo= (raw_key_info*)buffer;
isKeyDown = rawKeyInfo->is_keydown;
timestamp = rawKeyInfo->timestamp;
keycode = rawKeyInfo->be_keycode;
}
if (keycode == 0) if (keycode == 0)
continue; continue;
@@ -197,11 +181,9 @@ console_writer(void* arg)
/*! Opens the first keyboard driver it finds starting from the given /*! Opens the first keyboard driver it finds starting from the given
location \a start that supports the debugger extension. location \a start that supports the debugger extension.
\a isAT determines whether this is an AT keyboard (that returns
different keycodes) or not.
*/ */
static int static int
open_keyboard(const char* start, bool& isAT) open_keyboard(const char* start)
{ {
DIR* dir = opendir(start); DIR* dir = opendir(start);
if (dir == NULL) if (dir == NULL)
@@ -226,16 +208,15 @@ open_keyboard(const char* start, bool& isAT)
continue; continue;
if (S_ISDIR(stat.st_mode)) if (S_ISDIR(stat.st_mode))
return open_keyboard(path, isAT); return open_keyboard(path);
// Try to open it as a device // Try to open it as a device
fd = open(path, O_RDONLY); fd = open(path, O_RDONLY);
if (fd >= 0) { if (fd >= 0) {
// Turn on debugger mode // Turn on debugger mode
if (ioctl(fd, KB_SET_DEBUG_READER, NULL, 0) == 0) { if (ioctl(fd, KB_SET_DEBUG_READER, NULL, 0) == 0)
isAT = strstr(path, "keyboard/at") != NULL;
break; break;
}
close(fd); close(fd);
fd = -1; fd = -1;
} }
@@ -261,7 +242,7 @@ start_console(struct console* con)
if (con->console_fd < 0) if (con->console_fd < 0)
return -2; return -2;
con->keyboard_fd = open_keyboard("/dev/input/keyboard", con->is_at); con->keyboard_fd = open_keyboard("/dev/input/keyboard");
if (con->keyboard_fd < 0) if (con->keyboard_fd < 0)
return -3; return -3;