From e65227c272a91f62ab385a51af0e0bc13e53e725 Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Wed, 23 Sep 2009 05:30:04 +0000 Subject: [PATCH] * Error out on the num events ioctl in case the device was removed, otherwise the original BeOS input_server will fail to detect the error and never close the device. * Remove the empty kernel_cpp header and use the one from kernel util instead. * Add some missing headers for completeness. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33242 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/drivers/input/usb_hid/DeviceList.cpp | 2 +- src/add-ons/kernel/drivers/input/usb_hid/Driver.h | 2 +- src/add-ons/kernel/drivers/input/usb_hid/HIDDevice.cpp | 1 + src/add-ons/kernel/drivers/input/usb_hid/HIDReport.cpp | 2 ++ .../kernel/drivers/input/usb_hid/KeyboardDevice.cpp | 2 ++ .../kernel/drivers/input/usb_hid/MouseDevice.cpp | 10 ++++++++-- src/add-ons/kernel/drivers/input/usb_hid/MouseDevice.h | 4 ++++ .../kernel/drivers/input/usb_hid/ProtocolHandler.cpp | 1 + src/add-ons/kernel/drivers/input/usb_hid/kernel_cpp.h | 0 9 files changed, 20 insertions(+), 4 deletions(-) delete mode 100644 src/add-ons/kernel/drivers/input/usb_hid/kernel_cpp.h diff --git a/src/add-ons/kernel/drivers/input/usb_hid/DeviceList.cpp b/src/add-ons/kernel/drivers/input/usb_hid/DeviceList.cpp index 1e6058473a..5444fd92c6 100644 --- a/src/add-ons/kernel/drivers/input/usb_hid/DeviceList.cpp +++ b/src/add-ons/kernel/drivers/input/usb_hid/DeviceList.cpp @@ -4,7 +4,7 @@ Distributed under the terms of the MIT license. */ #include "DeviceList.h" -#include +#include #include #include #include diff --git a/src/add-ons/kernel/drivers/input/usb_hid/Driver.h b/src/add-ons/kernel/drivers/input/usb_hid/Driver.h index a362e699db..3b7528e1de 100644 --- a/src/add-ons/kernel/drivers/input/usb_hid/Driver.h +++ b/src/add-ons/kernel/drivers/input/usb_hid/Driver.h @@ -10,9 +10,9 @@ #include #include #include +#include #include "DeviceList.h" -#include "kernel_cpp.h" #define DRIVER_NAME "usb_hid" diff --git a/src/add-ons/kernel/drivers/input/usb_hid/HIDDevice.cpp b/src/add-ons/kernel/drivers/input/usb_hid/HIDDevice.cpp index 092c886b0a..32ad323471 100644 --- a/src/add-ons/kernel/drivers/input/usb_hid/HIDDevice.cpp +++ b/src/add-ons/kernel/drivers/input/usb_hid/HIDDevice.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include diff --git a/src/add-ons/kernel/drivers/input/usb_hid/HIDReport.cpp b/src/add-ons/kernel/drivers/input/usb_hid/HIDReport.cpp index 950a70377d..cf8791f4f0 100644 --- a/src/add-ons/kernel/drivers/input/usb_hid/HIDReport.cpp +++ b/src/add-ons/kernel/drivers/input/usb_hid/HIDReport.cpp @@ -11,6 +11,7 @@ #include #include +#include HIDReport::HIDReport(HIDParser *parser, uint8 type, uint8 id) @@ -217,6 +218,7 @@ HIDReport::WaitForReport(bigtime_t timeout) fConditionVariable.Add(&conditionVariableEntry); status_t result = fParser->Device()->MaybeScheduleTransfer(); if (result != B_OK) { + TRACE_ALWAYS("scheduling transfer failed\n"); conditionVariableEntry.Wait(B_RELATIVE_TIMEOUT, 0); return result; } diff --git a/src/add-ons/kernel/drivers/input/usb_hid/KeyboardDevice.cpp b/src/add-ons/kernel/drivers/input/usb_hid/KeyboardDevice.cpp index f7971e637f..69dc3a227c 100644 --- a/src/add-ons/kernel/drivers/input/usb_hid/KeyboardDevice.cpp +++ b/src/add-ons/kernel/drivers/input/usb_hid/KeyboardDevice.cpp @@ -3,6 +3,8 @@ * Distributed under the terms of the MIT license. */ +#include +#include #include #include diff --git a/src/add-ons/kernel/drivers/input/usb_hid/MouseDevice.cpp b/src/add-ons/kernel/drivers/input/usb_hid/MouseDevice.cpp index 0efbff3f35..2f12407309 100644 --- a/src/add-ons/kernel/drivers/input/usb_hid/MouseDevice.cpp +++ b/src/add-ons/kernel/drivers/input/usb_hid/MouseDevice.cpp @@ -11,6 +11,7 @@ #include "HIDReport.h" #include "HIDReportItem.h" +#include #include #include @@ -91,7 +92,12 @@ MouseDevice::Control(uint32 op, void *buffer, size_t length) return RingBufferRead(buffer, sizeof(mouse_movement)); case MS_NUM_EVENTS: - return RingBufferReadable() / sizeof(mouse_movement); + { + int32 count = RingBufferReadable() / sizeof(mouse_movement); + if (count == 0 && fReport->Device()->IsRemoved()) + return B_DEV_NOT_READY; + return count; + } case MS_SET_CLICKSPEED: #ifdef __HAIKU__ @@ -113,7 +119,7 @@ MouseDevice::_ReadReport() if (result != B_OK) { if (fReport->Device()->IsRemoved()) { TRACE("device has been removed\n"); - return B_ERROR; + return B_DEV_NOT_READY; } if (result != B_INTERRUPTED) { diff --git a/src/add-ons/kernel/drivers/input/usb_hid/MouseDevice.h b/src/add-ons/kernel/drivers/input/usb_hid/MouseDevice.h index 740b0458a0..f66c10025d 100644 --- a/src/add-ons/kernel/drivers/input/usb_hid/MouseDevice.h +++ b/src/add-ons/kernel/drivers/input/usb_hid/MouseDevice.h @@ -7,6 +7,10 @@ #include +#ifndef B_MAX_MOUSE_BUTTONS +#define B_MAX_MOUSE_BUTTONS 8 +#endif + #include "ProtocolHandler.h" class HIDReportItem; diff --git a/src/add-ons/kernel/drivers/input/usb_hid/ProtocolHandler.cpp b/src/add-ons/kernel/drivers/input/usb_hid/ProtocolHandler.cpp index 96303f2aa5..ce7382b6f4 100644 --- a/src/add-ons/kernel/drivers/input/usb_hid/ProtocolHandler.cpp +++ b/src/add-ons/kernel/drivers/input/usb_hid/ProtocolHandler.cpp @@ -3,6 +3,7 @@ * Distributed under the terms of the MIT License. */ +#include #include #include "Driver.h" diff --git a/src/add-ons/kernel/drivers/input/usb_hid/kernel_cpp.h b/src/add-ons/kernel/drivers/input/usb_hid/kernel_cpp.h deleted file mode 100644 index e69de29bb2..0000000000