usb_hid now uses our kernel ring_buffer implementation even on BeOS
fixes bug #722 git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18392 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -3,14 +3,22 @@ SubDir HAIKU_TOP src add-ons kernel drivers input usb_hid ;
|
||||
SetSubDirSupportedPlatformsBeOSCompatible ;
|
||||
|
||||
SubDirSysHdrs $(HAIKU_TOP) headers os drivers ;
|
||||
UsePrivateHeaders input ;
|
||||
UsePrivateHeaders [ FDirName kernel util ] input ;
|
||||
|
||||
local buffer_impl = ;
|
||||
if $(TARGET_PLATFORM) != haiku {
|
||||
buffer_impl = ring_buffer.cpp ;
|
||||
}
|
||||
|
||||
KernelAddon usb_hid : kernel drivers bin :
|
||||
hid.c
|
||||
hidparse.c
|
||||
devlist.c
|
||||
$(buffer_impl)
|
||||
;
|
||||
|
||||
SEARCH on [ FGristFiles ring_buffer.cpp ] = [ FDirName $(HAIKU_TOP) src system kernel util ] ;
|
||||
|
||||
ObjectHdrs [ FGristFiles hid$(SUFOBJ) ]
|
||||
: [ FDirName $(TARGET_COMMON_DEBUG_OBJECT_DIR) preferences devices ] ;
|
||||
|
||||
|
||||
@@ -342,7 +342,7 @@ create_device(const usb_device *dev, const usb_interface_info *ii,
|
||||
device->insns = NULL;
|
||||
device->num_insns = 0;
|
||||
device->flags = 0;
|
||||
device->cbuf = cbuf_init(384);
|
||||
device->rbuf = create_ring_buffer(384);
|
||||
device->is_keyboard = isKeyboard;
|
||||
|
||||
// default values taken from the PS/2 driver
|
||||
@@ -360,9 +360,9 @@ remove_device(hid_device_info *device)
|
||||
assert(device != NULL);
|
||||
cancel_timer(&device->repeat_timer.timer);
|
||||
|
||||
if (device->cbuf != NULL) {
|
||||
cbuf_delete(device->cbuf);
|
||||
device->cbuf = NULL;
|
||||
if (device->rbuf != NULL) {
|
||||
delete_ring_buffer(device->rbuf);
|
||||
device->rbuf = NULL;
|
||||
}
|
||||
|
||||
delete_area(device->buffer_area);
|
||||
@@ -380,7 +380,7 @@ write_key(hid_device_info *device, uint32 key, bool down)
|
||||
raw.is_keydown = down;
|
||||
raw.timestamp = system_time();
|
||||
|
||||
cbuf_putn(device->cbuf, &raw, sizeof(raw_key_info));
|
||||
ring_buffer_write(device->rbuf, (const uint8*)&raw, sizeof(raw_key_info));
|
||||
release_sem_etc(device->sem_cb, 1, B_DO_NOT_RESCHEDULE);
|
||||
}
|
||||
|
||||
@@ -571,7 +571,7 @@ interpret_mouse_buffer(hid_device_info *device)
|
||||
info.modifiers = 0;
|
||||
info.timestamp = device->timestamp;
|
||||
|
||||
cbuf_putn(device->cbuf, &info, sizeof(info));
|
||||
ring_buffer_write(device->rbuf, (const uint8*)&info, sizeof(info));
|
||||
release_sem_etc(device->sem_cb, 1, B_DO_NOT_RESCHEDULE);
|
||||
}
|
||||
|
||||
@@ -920,7 +920,7 @@ hid_device_control(driver_cookie *cookie, uint32 op,
|
||||
err = acquire_sem_etc(device->sem_cb, 1, B_CAN_INTERRUPT, 0LL);
|
||||
if (err != B_OK)
|
||||
return err;
|
||||
cbuf_getn(device->cbuf, arg, sizeof(raw_key_info));
|
||||
ring_buffer_user_read(device->rbuf, arg, sizeof(raw_key_info));
|
||||
return err;
|
||||
break;
|
||||
|
||||
@@ -934,7 +934,7 @@ hid_device_control(driver_cookie *cookie, uint32 op,
|
||||
err = acquire_sem_etc(device->sem_cb, 1, B_CAN_INTERRUPT, 0LL);
|
||||
if (err != B_OK)
|
||||
return err;
|
||||
cbuf_getn(device->cbuf, arg, sizeof(mouse_movement));
|
||||
ring_buffer_user_read(device->rbuf, arg, sizeof(mouse_movement));
|
||||
return err;
|
||||
break;
|
||||
case MS_NUM_EVENTS:
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#define _HID_H_
|
||||
|
||||
#include "hidparse.h"
|
||||
#include "ring_buffer.h"
|
||||
|
||||
#include <Drivers.h>
|
||||
#include <USB.h>
|
||||
@@ -26,29 +27,6 @@
|
||||
#define DPRINTF_ERR(x) dprintf x
|
||||
#endif
|
||||
|
||||
|
||||
/* Undocumented kernel cbuf_* functions */
|
||||
struct cbuffer_t;
|
||||
typedef struct cbuffer_t cbuffer;
|
||||
|
||||
size_t cbuf_getn_no_lock(cbuffer *, char *, size_t);
|
||||
size_t cbuf_putn_no_lock(cbuffer *, char *, size_t);
|
||||
cbuffer *cbuf_init(size_t size);
|
||||
void cbuf_delete(cbuffer *buffer);
|
||||
char cbuf_get(cbuffer *);
|
||||
bool cbuf_mt(cbuffer *);
|
||||
bool cbuf_full(cbuffer *);
|
||||
status_t cbuf_put(cbuffer *, char);
|
||||
status_t cbuf_unput(cbuffer *);
|
||||
void cbuf_flush(cbuffer *);
|
||||
size_t cbuf_size(cbuffer *);
|
||||
size_t cbuf_avail(cbuffer *);
|
||||
size_t cbuf_free(cbuffer *);
|
||||
size_t cbuf_putn(cbuffer *, void *, size_t num_bytes);
|
||||
size_t cbuf_getn(cbuffer *, void *, size_t num_bytes);
|
||||
cpu_status cbuf_lock(cbuffer *);
|
||||
void cbuf_unlock(cbuffer *, cpu_status);
|
||||
|
||||
/* driver specific definitions */
|
||||
|
||||
#define DRIVER_NAME "usb_hid"
|
||||
@@ -87,7 +65,7 @@ typedef struct hid_device_info {
|
||||
uint16 ifno;
|
||||
char name[30];
|
||||
|
||||
cbuffer *cbuf;
|
||||
struct ring_buffer *rbuf;
|
||||
|
||||
bool active;
|
||||
int open;
|
||||
|
||||
Reference in New Issue
Block a user