447 lines
17 KiB
Diff
447 lines
17 KiB
Diff
---
|
|
Xi/chgdctl.c | 55 +++++++++++++++++++------
|
|
Xi/getdctl.c | 87 +++++++++++++++++++++++++++++++----------
|
|
Xi/getdctl.h | 11 +++--
|
|
Xi/stubs.c | 2
|
|
configure.ac | 2
|
|
dix/devices.c | 31 +++++++++-----
|
|
hw/kdrive/linux/tslib.c | 8 +--
|
|
hw/kdrive/src/kinput.c | 6 +-
|
|
hw/xfree86/common/xf86Xinput.c | 3 -
|
|
include/input.h | 2
|
|
include/inputstr.h | 18 +++++++-
|
|
11 files changed, 162 insertions(+), 63 deletions(-)
|
|
|
|
Index: xorg-server-1.1.99.3/Xi/chgdctl.c
|
|
===================================================================
|
|
--- xorg-server-1.1.99.3.orig/Xi/chgdctl.c 2007-01-29 22:58:18.000000000 +0000
|
|
+++ xorg-server-1.1.99.3/Xi/chgdctl.c 2007-01-29 22:59:27.000000000 +0000
|
|
@@ -104,8 +104,10 @@ ProcXChangeDeviceControl(ClientPtr clien
|
|
xChangeDeviceControlReply rep;
|
|
AxisInfoPtr a;
|
|
CARD32 *resolution;
|
|
- xDeviceTSCtl *ts;
|
|
+ xDeviceAbsCalibCtl *calib;
|
|
+ xDeviceAbsAreaCtl *area;
|
|
xDeviceCoreCtl *c;
|
|
+ xDeviceEnableCtl *e;
|
|
|
|
REQUEST(xChangeDeviceControlReq);
|
|
REQUEST_AT_LEAST_SIZE(xChangeDeviceControlReq);
|
|
@@ -170,25 +172,28 @@ ProcXChangeDeviceControl(ClientPtr clien
|
|
return Success;
|
|
}
|
|
break;
|
|
- case DEVICE_TOUCHSCREEN:
|
|
- ts = (xDeviceTSCtl *)&stuff[1];
|
|
-
|
|
- if (ts->button_threshold < 0 || ts->button_threshold > 255) {
|
|
+ case DEVICE_ABS_CALIB:
|
|
+ calib = (xDeviceAbsCalibCtl *)&stuff[1];
|
|
+
|
|
+ if (calib->button_threshold < 0 || calib->button_threshold > 255) {
|
|
SendErrorToClient(client, IReqCode, X_ChangeDeviceControl, 0,
|
|
BadValue);
|
|
return Success;
|
|
}
|
|
|
|
- status = ChangeDeviceControl(client, dev, (xDeviceCtl *) ts);
|
|
+ status = ChangeDeviceControl(client, dev, (xDeviceCtl *) calib);
|
|
|
|
if (status == Success) {
|
|
- dev->touchscreen->min_x = ts->min_x;
|
|
- dev->touchscreen->max_x = ts->max_x;
|
|
- dev->touchscreen->min_y = ts->min_y;
|
|
- dev->touchscreen->max_y = ts->max_y;
|
|
- dev->touchscreen->button_threshold = ts->button_threshold;
|
|
- } else if (status == DeviceBusy) {
|
|
- rep.status = DeviceBusy;
|
|
+ dev->absolute->min_x = calib->min_x;
|
|
+ dev->absolute->max_x = calib->max_x;
|
|
+ dev->absolute->min_y = calib->min_y;
|
|
+ dev->absolute->max_y = calib->max_y;
|
|
+ dev->absolute->flip_x = calib->flip_x;
|
|
+ dev->absolute->flip_y = calib->flip_y;
|
|
+ dev->absolute->rotation = calib->rotation;
|
|
+ dev->absolute->button_threshold = calib->button_threshold;
|
|
+ } else if (status == DeviceBusy || status == BadValue) {
|
|
+ rep.status = status;
|
|
WriteReplyToClient(client, sizeof(xChangeDeviceControlReply),
|
|
&rep);
|
|
return Success;
|
|
@@ -199,6 +204,30 @@ ProcXChangeDeviceControl(ClientPtr clien
|
|
}
|
|
|
|
break;
|
|
+ case DEVICE_ABS_AREA:
|
|
+ area = (xDeviceAbsAreaCtl *)&stuff[1];
|
|
+
|
|
+ status = ChangeDeviceControl(client, dev, (xDeviceCtl *) area);
|
|
+
|
|
+ if (status == Success) {
|
|
+ dev->absolute->offset_x = area->offset_x;
|
|
+ dev->absolute->offset_y = area->offset_y;
|
|
+ dev->absolute->width = area->width;
|
|
+ dev->absolute->height = area->height;
|
|
+ dev->absolute->screen = area->screen;
|
|
+ dev->absolute->following = area->following;
|
|
+ } else if (status == DeviceBusy || status == BadValue) {
|
|
+ rep.status = status;
|
|
+ WriteReplyToClient(client, sizeof(xChangeDeviceControlReply),
|
|
+ &rep);
|
|
+ return Success;
|
|
+ } else {
|
|
+ SendErrorToClient(client, IReqCode, X_ChangeDeviceControl, 0,
|
|
+ BadMatch);
|
|
+ return Success;
|
|
+ }
|
|
+
|
|
+ break;
|
|
case DEVICE_CORE:
|
|
c = (xDeviceCoreCtl *)&stuff[1];
|
|
|
|
Index: xorg-server-1.1.99.3/Xi/getdctl.c
|
|
===================================================================
|
|
--- xorg-server-1.1.99.3.orig/Xi/getdctl.c 2007-01-29 22:58:18.000000000 +0000
|
|
+++ xorg-server-1.1.99.3/Xi/getdctl.c 2007-01-29 22:59:27.000000000 +0000
|
|
@@ -124,14 +124,23 @@ ProcXGetDeviceControl(ClientPtr client)
|
|
total_length = sizeof(xDeviceResolutionState) +
|
|
(3 * sizeof(int) * dev->valuator->numAxes);
|
|
break;
|
|
- case DEVICE_TOUCHSCREEN:
|
|
- if (!dev->touchscreen) {
|
|
+ case DEVICE_ABS_CALIB:
|
|
+ if (!dev->absolute) {
|
|
SendErrorToClient(client, IReqCode, X_GetDeviceControl, 0,
|
|
BadMatch);
|
|
return Success;
|
|
}
|
|
|
|
- total_length = sizeof(xDeviceTSCtl);
|
|
+ total_length = sizeof(xDeviceAbsCalibCtl);
|
|
+ break;
|
|
+ case DEVICE_ABS_AREA:
|
|
+ if (!dev->absolute) {
|
|
+ SendErrorToClient(client, IReqCode, X_GetDeviceControl, 0,
|
|
+ BadMatch);
|
|
+ return Success;
|
|
+ }
|
|
+
|
|
+ total_length = sizeof(xDeviceAbsAreaCtl);
|
|
break;
|
|
case DEVICE_CORE:
|
|
total_length = sizeof(xDeviceCoreCtl);
|
|
@@ -152,8 +161,11 @@ ProcXGetDeviceControl(ClientPtr client)
|
|
case DEVICE_RESOLUTION:
|
|
CopySwapDeviceResolution(client, dev->valuator, buf, total_length);
|
|
break;
|
|
- case DEVICE_TOUCHSCREEN:
|
|
- CopySwapDeviceTouchscreen(client, dev->touchscreen, buf);
|
|
+ case DEVICE_ABS_CALIB:
|
|
+ CopySwapDeviceAbsCalib(client, dev->absolute, buf);
|
|
+ break;
|
|
+ case DEVICE_ABS_AREA:
|
|
+ CopySwapDeviceAbsArea(client, dev->absolute, buf);
|
|
break;
|
|
case DEVICE_CORE:
|
|
CopySwapDeviceCore(client, dev, buf);
|
|
@@ -206,28 +218,61 @@ CopySwapDeviceResolution(ClientPtr clien
|
|
}
|
|
}
|
|
|
|
-void CopySwapDeviceTouchscreen (ClientPtr client, TouchscreenClassPtr dts,
|
|
+void CopySwapDeviceAbsCalib (ClientPtr client, AbsoluteClassPtr dts,
|
|
char *buf)
|
|
{
|
|
register char n;
|
|
- xDeviceTSState *ts = (xDeviceTSState *) buf;
|
|
+ xDeviceAbsCalibState *calib = (xDeviceAbsCalibState *) buf;
|
|
|
|
- ts->control = DEVICE_TOUCHSCREEN;
|
|
- ts->length = sizeof(ts);
|
|
- ts->min_x = dts->min_x;
|
|
- ts->max_x = dts->max_x;
|
|
- ts->min_y = dts->min_y;
|
|
- ts->max_y = dts->max_y;
|
|
- ts->button_threshold = dts->button_threshold;
|
|
+ calib->control = DEVICE_ABS_CALIB;
|
|
+ calib->length = sizeof(calib);
|
|
+ calib->min_x = dts->min_x;
|
|
+ calib->max_x = dts->max_x;
|
|
+ calib->min_y = dts->min_y;
|
|
+ calib->max_y = dts->max_y;
|
|
+ calib->flip_x = dts->flip_x;
|
|
+ calib->flip_y = dts->flip_y;
|
|
+ calib->rotation = dts->rotation;
|
|
+ calib->button_threshold = dts->button_threshold;
|
|
|
|
if (client->swapped) {
|
|
- swaps(&ts->control, n);
|
|
- swaps(&ts->length, n);
|
|
- swapl(&ts->min_x, n);
|
|
- swapl(&ts->max_x, n);
|
|
- swapl(&ts->min_y, n);
|
|
- swapl(&ts->max_y, n);
|
|
- swapl(&ts->button_threshold, n);
|
|
+ swaps(&calib->control, n);
|
|
+ swaps(&calib->length, n);
|
|
+ swapl(&calib->min_x, n);
|
|
+ swapl(&calib->max_x, n);
|
|
+ swapl(&calib->min_y, n);
|
|
+ swapl(&calib->max_y, n);
|
|
+ swapl(&calib->flip_x, n);
|
|
+ swapl(&calib->flip_y, n);
|
|
+ swapl(&calib->rotation, n);
|
|
+ swapl(&calib->button_threshold, n);
|
|
+ }
|
|
+}
|
|
+
|
|
+void CopySwapDeviceAbsArea (ClientPtr client, AbsoluteClassPtr dts,
|
|
+ char *buf)
|
|
+{
|
|
+ register char n;
|
|
+ xDeviceAbsAreaState *area = (xDeviceAbsAreaState *) buf;
|
|
+
|
|
+ area->control = DEVICE_ABS_AREA;
|
|
+ area->length = sizeof(area);
|
|
+ area->offset_x = dts->offset_x;
|
|
+ area->offset_y = dts->offset_y;
|
|
+ area->width = dts->width;
|
|
+ area->height = dts->height;
|
|
+ area->screen = dts->screen;
|
|
+ area->following = dts->following;
|
|
+
|
|
+ if (client->swapped) {
|
|
+ swaps(&area->control, n);
|
|
+ swaps(&area->length, n);
|
|
+ swapl(&area->offset_x, n);
|
|
+ swapl(&area->offset_y, n);
|
|
+ swapl(&area->width, n);
|
|
+ swapl(&area->height, n);
|
|
+ swapl(&area->screen, n);
|
|
+ swapl(&area->following, n);
|
|
}
|
|
}
|
|
|
|
Index: xorg-server-1.1.99.3/Xi/getdctl.h
|
|
===================================================================
|
|
--- xorg-server-1.1.99.3.orig/Xi/getdctl.h 2007-01-29 22:58:18.000000000 +0000
|
|
+++ xorg-server-1.1.99.3/Xi/getdctl.h 2007-01-29 22:59:27.000000000 +0000
|
|
@@ -42,10 +42,13 @@ void CopySwapDeviceResolution(ClientPtr
|
|
int /* length */
|
|
);
|
|
|
|
-void CopySwapDeviceTouchscreen(ClientPtr /* client */ ,
|
|
- TouchscreenClassPtr /* ts */ ,
|
|
- char * /* buf */
|
|
- );
|
|
+void CopySwapDeviceAbsCalib (ClientPtr client,
|
|
+ AbsoluteClassPtr dts,
|
|
+ char *buf);
|
|
+
|
|
+void CopySwapDeviceAbsArea (ClientPtr client,
|
|
+ AbsoluteClassPtr dts,
|
|
+ char *buf);
|
|
|
|
void CopySwapDeviceCore(ClientPtr /* client */ ,
|
|
DeviceIntPtr /* dev */ ,
|
|
Index: xorg-server-1.1.99.3/Xi/stubs.c
|
|
===================================================================
|
|
--- xorg-server-1.1.99.3.orig/Xi/stubs.c 2007-01-29 22:58:18.000000000 +0000
|
|
+++ xorg-server-1.1.99.3/Xi/stubs.c 2007-01-29 22:59:27.000000000 +0000
|
|
@@ -287,7 +287,7 @@ ChangeDeviceControl(register ClientPtr c
|
|
switch (control->control) {
|
|
case DEVICE_RESOLUTION:
|
|
return (BadMatch);
|
|
- case DEVICE_TOUCHSCREEN:
|
|
+ case DEVICE_ABS_CALIB:
|
|
return (BadMatch);
|
|
case DEVICE_CORE:
|
|
return (BadMatch);
|
|
Index: xorg-server-1.1.99.3/dix/devices.c
|
|
===================================================================
|
|
--- xorg-server-1.1.99.3.orig/dix/devices.c 2007-01-29 22:58:18.000000000 +0000
|
|
+++ xorg-server-1.1.99.3/dix/devices.c 2007-01-29 22:59:27.000000000 +0000
|
|
@@ -117,7 +117,7 @@ AddInputDevice(DeviceProc deviceProc, Bo
|
|
dev->button = (ButtonClassPtr)NULL;
|
|
dev->focus = (FocusClassPtr)NULL;
|
|
dev->proximity = (ProximityClassPtr)NULL;
|
|
- dev->touchscreen = (TouchscreenClassPtr)NULL;
|
|
+ dev->absolute = (AbsoluteClassPtr)NULL;
|
|
dev->kbdfeed = (KbdFeedbackPtr)NULL;
|
|
dev->ptrfeed = (PtrFeedbackPtr)NULL;
|
|
dev->intfeed = (IntegerFeedbackPtr)NULL;
|
|
@@ -821,22 +821,31 @@ InitValuatorClassDeviceStruct(DeviceIntP
|
|
}
|
|
|
|
_X_EXPORT Bool
|
|
-InitTouchscreenClassDeviceStruct(DeviceIntPtr dev)
|
|
+InitAbsoluteClassDeviceStruct(DeviceIntPtr dev)
|
|
{
|
|
- register TouchscreenClassPtr tsc;
|
|
+ register AbsoluteClassPtr abs;
|
|
|
|
- tsc = (TouchscreenClassPtr)xalloc(sizeof(TouchscreenClassRec));
|
|
- if (!tsc)
|
|
+ abs = (AbsoluteClassPtr)xalloc(sizeof(AbsoluteClassRec));
|
|
+ if (!abs)
|
|
return FALSE;
|
|
|
|
/* we don't do anything sensible with these, but should */
|
|
- tsc->min_x = -1;
|
|
- tsc->min_y = -1;
|
|
- tsc->max_x = -1;
|
|
- tsc->max_y = -1;
|
|
+ abs->min_x = -1;
|
|
+ abs->min_y = -1;
|
|
+ abs->max_x = -1;
|
|
+ abs->max_y = -1;
|
|
+ abs->flip_x = 0;
|
|
+ abs->flip_y = 0;
|
|
+ abs->rotation = 0;
|
|
+ abs->button_threshold = 0;
|
|
|
|
- tsc->button_threshold = 0;
|
|
- dev->touchscreen = tsc;
|
|
+ abs->offset_x = 0;
|
|
+ abs->offset_y = 0;
|
|
+ abs->width = -1;
|
|
+ abs->height = -1;
|
|
+ abs->following = 0;
|
|
+
|
|
+ dev->absolute = abs;
|
|
|
|
return TRUE;
|
|
}
|
|
Index: xorg-server-1.1.99.3/hw/xfree86/common/xf86Xinput.c
|
|
===================================================================
|
|
--- xorg-server-1.1.99.3.orig/hw/xfree86/common/xf86Xinput.c 2007-01-29 22:58:18.000000000 +0000
|
|
+++ xorg-server-1.1.99.3/hw/xfree86/common/xf86Xinput.c 2007-01-29 22:59:27.000000000 +0000
|
|
@@ -538,7 +538,8 @@ ChangeDeviceControl (ClientPtr client, D
|
|
switch (control->control) {
|
|
case DEVICE_CORE:
|
|
case DEVICE_RESOLUTION:
|
|
- case DEVICE_TOUCHSCREEN:
|
|
+ case DEVICE_ABS_CALIB:
|
|
+ case DEVICE_ABS_AREA:
|
|
return Success;
|
|
default:
|
|
return BadMatch;
|
|
Index: xorg-server-1.1.99.3/include/input.h
|
|
===================================================================
|
|
--- xorg-server-1.1.99.3.orig/include/input.h 2007-01-29 22:58:18.000000000 +0000
|
|
+++ xorg-server-1.1.99.3/include/input.h 2007-01-29 22:59:27.000000000 +0000
|
|
@@ -238,7 +238,7 @@ extern Bool InitValuatorClassDeviceStruc
|
|
int /*numMotionEvents*/,
|
|
int /*mode*/);
|
|
|
|
-extern Bool InitTouchscreenClassDeviceStruct(
|
|
+extern Bool InitAbsoluteClassDeviceStruct(
|
|
DeviceIntPtr /*device*/);
|
|
|
|
extern Bool InitFocusClassDeviceStruct(
|
|
Index: xorg-server-1.1.99.3/include/inputstr.h
|
|
===================================================================
|
|
--- xorg-server-1.1.99.3.orig/include/inputstr.h 2007-01-29 22:58:18.000000000 +0000
|
|
+++ xorg-server-1.1.99.3/include/inputstr.h 2007-01-29 22:59:27.000000000 +0000
|
|
@@ -185,13 +185,25 @@ typedef struct _ProximityClassRec {
|
|
char pad;
|
|
} ProximityClassRec, *ProximityClassPtr;
|
|
|
|
-typedef struct _TouchscreenClassRec {
|
|
+typedef struct _AbsoluteClassRec {
|
|
+ /* Calibration. */
|
|
int min_x;
|
|
int max_x;
|
|
int min_y;
|
|
int max_y;
|
|
+ int flip_x;
|
|
+ int flip_y;
|
|
+ int rotation;
|
|
int button_threshold;
|
|
-} TouchscreenClassRec, *TouchscreenClassPtr;
|
|
+
|
|
+ /* Area. */
|
|
+ int offset_x;
|
|
+ int offset_y;
|
|
+ int width;
|
|
+ int height;
|
|
+ int screen;
|
|
+ XID following;
|
|
+} AbsoluteClassRec, *AbsoluteClassPtr;
|
|
|
|
typedef struct _KbdFeedbackClassRec *KbdFeedbackPtr;
|
|
typedef struct _PtrFeedbackClassRec *PtrFeedbackPtr;
|
|
@@ -293,7 +305,7 @@ typedef struct _DeviceIntRec {
|
|
ButtonClassPtr button;
|
|
FocusClassPtr focus;
|
|
ProximityClassPtr proximity;
|
|
- TouchscreenClassPtr touchscreen;
|
|
+ AbsoluteClassPtr absolute;
|
|
KbdFeedbackPtr kbdfeed;
|
|
PtrFeedbackPtr ptrfeed;
|
|
IntegerFeedbackPtr intfeed;
|
|
Index: xorg-server-1.1.99.3/configure.ac
|
|
===================================================================
|
|
--- xorg-server-1.1.99.3.orig/configure.ac 2007-01-29 22:58:18.000000000 +0000
|
|
+++ xorg-server-1.1.99.3/configure.ac 2007-01-29 22:59:27.000000000 +0000
|
|
@@ -1586,7 +1586,7 @@ if test "$KDRIVE" = yes; then
|
|
#KDRIVE_PURE_LIBS="$DIX_LIB $OS_LIB $FB_LIB $XEXT_LIB $MIEXT_DAMAGE_LIB \
|
|
# $MIEXT_SHADOW_LIB $XPSTUBS_LIB"
|
|
KDRIVE_XKB_DDX_LIB='$(top_builddir)/hw/kdrive/src/libkdrivexkb.a'
|
|
- KDRIVE_PURE_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $KDRIVE_XKB_DDX_LIB $XKB_LIB $KDRIVE_XKB_DDX_LIB$COMPOSITE_LIB $XPSTUBS_LIB $OS_LIB $CONFIG_LIB"
|
|
+ KDRIVE_PURE_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $KDRIVE_XKB_DDX_LIB $XKB_LIB $KDRIVE_XKB_DDX_LIB $COMPOSITE_LIB $XPSTUBS_LIB $OS_LIB $CONFIG_LIB"
|
|
KDRIVE_LIB='$(top_builddir)/hw/kdrive/src/libkdrive.a'
|
|
KDRIVE_OS_LIB='$(top_builddir)/hw/kdrive/linux/liblinux.a'
|
|
KDRIVE_STUB_LIB='$(top_builddir)/hw/kdrive/src/libkdrivestubs.a'
|
|
Index: xorg-server-1.1.99.3/hw/kdrive/linux/tslib.c
|
|
===================================================================
|
|
--- xorg-server-1.1.99.3.orig/hw/kdrive/linux/tslib.c 2007-01-29 22:58:18.000000000 +0000
|
|
+++ xorg-server-1.1.99.3/hw/kdrive/linux/tslib.c 2007-01-29 22:59:27.000000000 +0000
|
|
@@ -94,7 +94,7 @@ TsRead (int fd, void *closure)
|
|
event.pressure);
|
|
discard = 0;
|
|
if (event.pressure) {
|
|
- if (event.pressure > pi->dixdev->touchscreen->button_threshold)
|
|
+ if (event.pressure > pi->dixdev->absolute->button_threshold)
|
|
flags = KD_BUTTON_8;
|
|
else
|
|
flags = KD_BUTTON_1;
|
|
@@ -356,9 +356,9 @@ TslibEnable (KdPointerInfo *pi)
|
|
close(private->fd);
|
|
return BadAlloc;
|
|
}
|
|
- if (pi->dixdev && pi->dixdev->touchscreen &&
|
|
- pi->dixdev->touchscreen->button_threshold == 0)
|
|
- pi->dixdev->touchscreen->button_threshold = 115;
|
|
+ if (pi->dixdev && pi->dixdev->absolute &&
|
|
+ pi->dixdev->absolute->button_threshold == 0)
|
|
+ pi->dixdev->absolute->button_threshold = 115;
|
|
|
|
DebugF("[tslib/TslibEnable] successfully enabled %s\n", pi->path);
|
|
KdRegisterFd(private->fd, TsRead, pi);
|
|
Index: xorg-server-1.1.99.3/hw/kdrive/src/kinput.c
|
|
===================================================================
|
|
--- xorg-server-1.1.99.3.orig/hw/kdrive/src/kinput.c 2007-01-29 22:58:18.000000000 +0000
|
|
+++ xorg-server-1.1.99.3/hw/kdrive/src/kinput.c 2007-01-29 22:59:27.000000000 +0000
|
|
@@ -444,7 +444,7 @@ KdPointerProc(DeviceIntPtr pDevice, int
|
|
|
|
#ifdef XINPUT
|
|
if (pi->inputClass == KD_TOUCHSCREEN) {
|
|
- InitTouchscreenClassDeviceStruct(pDevice);
|
|
+ InitAbsoluteClassDeviceStruct(pDevice);
|
|
xiclass = AtomFromName(XI_TOUCHSCREEN);
|
|
}
|
|
else {
|
|
@@ -2323,8 +2323,8 @@ ChangeDeviceControl(register ClientPtr c
|
|
/* FIXME do something more intelligent here */
|
|
return BadMatch;
|
|
|
|
- case DEVICE_TOUCHSCREEN:
|
|
- if (!pDev->touchscreen)
|
|
+ case DEVICE_ABS_CALIB:
|
|
+ if (!pDev->absolute)
|
|
return BadDevice;
|
|
else
|
|
return Success;
|