Discussion:
[Linuxwacom-devel] [PATCH linuxwacom 1/5] Mark DTU-2231 as a display tablet in wacomcpl
Jason Gerecke
2017-04-11 20:20:31 UTC
Permalink
Signed-off-by: Jason Gerecke <***@wacom.com>
---
src/wacomxi/wacomcpl-exec | 3 +++
1 file changed, 3 insertions(+)

diff --git a/src/wacomxi/wacomcpl-exec b/src/wacomxi/wacomcpl-exec
index b5fc6f6..5d8bbd0 100755
--- a/src/wacomxi/wacomcpl-exec
+++ b/src/wacomxi/wacomcpl-exec
@@ -2088,6 +2088,9 @@ proc updateModelInfo { } {
set numPadButtons(197) 10
set numPadStrips(197) 2

+ # DTU-2231
+ set isLCD(206) 1
+
# Hummingbird (Cintiq 12WX)
set numPadButtons(198) 10
set numPadStrips(198) 2
--
2.12.0
Jason Gerecke
2017-04-11 20:20:35 UTC
Permalink
This apears to be a classic case of the 'sleep()' function being mistaken
for taking milliseconds as an argument. Since the argument is actually
seconds, the X server appears to freeze if the first EVIOCGID ioctl
fails. Reduce the retry interval from over 15 minutes to just 1 second.

Signed-off-by: Jason Gerecke <***@wacom.com>
---
src/xdrv/wcmValidateDevice.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xdrv/wcmValidateDevice.c b/src/xdrv/wcmValidateDevice.c
index 9049108..11c5dd5 100755
--- a/src/xdrv/wcmValidateDevice.c
+++ b/src/xdrv/wcmValidateDevice.c
@@ -256,7 +256,7 @@ int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys, size_t nkeys, i

if (ioctl(fd, EVIOCGID, &wacom_id) < 0)
{
- sleep(1000);
+ sleep(1);
if (ioctl(fd, EVIOCGID, &wacom_id) < 0)
{
xf86Msg(X_ERROR, "%s: wcmDeviceTypeKeys unable to "
--
2.12.0
Jason Gerecke
2017-04-11 20:20:32 UTC
Permalink
Commit 476e562 introduced kernel support for the pen interface of the
DTH-2242 (in addition to the Cintiq 13HD and DTK-2241), but missed
editing several files needed for the X driver to support the device.
This commit finishes that work.

Signed-off-by: Jason Gerecke <***@wacom.com>
---
src/util/60-wacom.rules | 1 +
src/util/wacusb.c | 1 +
src/wacomxi/wacomcpl-exec | 6 ++++--
src/xdrv/wcmUSB.c | 1 +
4 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/util/60-wacom.rules b/src/util/60-wacom.rules
index e37c6dd..da16de9 100644
--- a/src/util/60-wacom.rules
+++ b/src/util/60-wacom.rules
@@ -97,6 +97,7 @@ ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0317", ENV{WACOM_TYPE}!="touch", SYM
ATTRS{idVendor}=="056a", ATTRS{idProduct}=="00c0", SYMLINK+="input/tablet-dtf521"
ATTRS{idVendor}=="056a", ATTRS{idProduct}=="00c4", SYMLINK+="input/tablet-dtf720"
ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0057", SYMLINK+="input/tablet-dtk2241"
+ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0059", SYMLINK+="input/tablet-dth2242"
ATTRS{idVendor}=="056a", ATTRS{idProduct}=="005b", ENV{WACOM_TYPE}!="touch", SYMLINK+="input/tablet-cintiq22hdt"
ATTRS{idVendor}=="056a", ATTRS{idProduct}=="00c5", SYMLINK+="input/tablet-cintiq20wsx"
ATTRS{idVendor}=="056a", ATTRS{idProduct}=="00c6", SYMLINK+="input/tablet-cintiq12wx"
diff --git a/src/util/wacusb.c b/src/util/wacusb.c
index 38ac31d..06217d7 100755
--- a/src/util/wacusb.c
+++ b/src/util/wacusb.c
@@ -295,6 +295,7 @@ static int USBIdentifyModel(USBTABLET* pUSB);
{ "DTK-22hd", "Wacom Cintiq 22HD", 5, 0xFA },
{ "DTK-2241", "Wacom DTK 2241", 6, 0x57 },
{ "DTK-13HD", "Wacom Cintiq 13HD", 7, 0x304 },
+ { "DTH-2242", "Wacom DTH 2242", 8, 0x59 },
{ NULL }
};

diff --git a/src/wacomxi/wacomcpl-exec b/src/wacomxi/wacomcpl-exec
index 5d8bbd0..e0b495e 100755
--- a/src/wacomxi/wacomcpl-exec
+++ b/src/wacomxi/wacomcpl-exec
@@ -2018,8 +2018,9 @@ proc updateModelInfo { } {
set isLCD($i) 1
}

- #DTK2241
+ #DTK2241 / DTH2242
set isLCD(87) 1
+ set isLCD(89) 1

#TabletPC
for { set i 144 } { $i <= 159 } { incr i 1 } {
@@ -2055,8 +2056,9 @@ proc updateModelInfo { } {
#Cintiq 21UX
set numPadButtons(63) 8
set numPadStrips(63) 2
- #DTK2241
+ #DTK2241 / DTH2242
set numPadButtons(87) 6
+ set numPadButtons(89) 6
#Cintiq 22HDT
set numPadButtons(91) 18
set numPadStrips(91) 2
diff --git a/src/xdrv/wcmUSB.c b/src/xdrv/wcmUSB.c
index 6c8e8f0..092d370 100755
--- a/src/xdrv/wcmUSB.c
+++ b/src/xdrv/wcmUSB.c
@@ -542,6 +542,7 @@ static struct
{ 0x5B, 5080, 5080, &usbCintiqV5 }, /* Cintiq 22HDT */
{ 0xFA, 5080, 5080, &usbCintiqV5 }, /* Cintiq 22HD */
{ 0x57, 5080, 5080, &usbCintiqV5 }, /* DTK 2241 */
+ { 0x59, 5080, 5080, &usbCintiqV5 }, /* DTH 2242 */
{ 0x304,5080, 5080, &usbCintiqV5 }, /* Cintiq 13HD */

{ 0x90, 2540, 2540, &usbTabletPC }, /* TabletPC 0x90 */
--
2.12.0
Jason Gerecke
2017-04-11 20:20:34 UTC
Permalink
Use of 'sizeof(id)' in usbWcmInit is incorrect since we don't really care
about the size of the pointer, but rather of the array that it points to.
Update function definitions to pass around a length parameter as needed.

Signed-off-by: Jason Gerecke <***@wacom.com>
---
src/xdrv/wcmISDV4.c | 8 ++++----
src/xdrv/wcmMapping.c | 4 ++--
src/xdrv/wcmSerial.c | 36 ++++++++++++++++++------------------
src/xdrv/wcmUSB.c | 14 +++++++-------
src/xdrv/xf86Wacom.c | 4 ++--
src/xdrv/xf86Wacom.h | 2 +-
src/xdrv/xf86WacomDefs.h | 4 ++--
7 files changed, 36 insertions(+), 36 deletions(-)

diff --git a/src/xdrv/wcmISDV4.c b/src/xdrv/wcmISDV4.c
index 5003f57..ca78f8e 100755
--- a/src/xdrv/wcmISDV4.c
+++ b/src/xdrv/wcmISDV4.c
@@ -22,8 +22,8 @@
#include "wcmFilter.h"

static Bool isdv4Detect(LocalDevicePtr);
-static Bool isdv4Init(LocalDevicePtr, char* id, float *version);
-static void isdv4InitISDV4(WacomCommonPtr common, const char* id, float version);
+static Bool isdv4Init(LocalDevicePtr, char* id, size_t id_len, float *version);
+static void isdv4InitISDV4(WacomCommonPtr common, const char* id, size_t id_len, float version);
static int isdv4GetRanges(LocalDevicePtr);
static int isdv4StartTablet(LocalDevicePtr);
static int isdv4Parse(LocalDevicePtr, const unsigned char* data);
@@ -64,7 +64,7 @@ static Bool isdv4Detect(LocalDevicePtr local)
* isdv4Init --
****************************************************************************/

-static Bool isdv4Init(LocalDevicePtr local, char* id, float *version)
+static Bool isdv4Init(LocalDevicePtr local, char* id, size_t id_len, float *version)
{
WacomDevicePtr priv = (WacomDevicePtr)local->private;
WacomCommonPtr common = priv->common;
@@ -169,7 +169,7 @@ static int isdv4Query(LocalDevicePtr local, const char* query, char* data)
* isdv4InitISDV4 -- Setup the device
****************************************************************************/

-static void isdv4InitISDV4(WacomCommonPtr common, const char* id, float version)
+static void isdv4InitISDV4(WacomCommonPtr common, const char* id, size_t id_len, float version)
{
/* set parameters */
common->wcmProtocolLevel = 4;
diff --git a/src/xdrv/wcmMapping.c b/src/xdrv/wcmMapping.c
index bbca6c2..bcfd93f 100755
--- a/src/xdrv/wcmMapping.c
+++ b/src/xdrv/wcmMapping.c
@@ -464,14 +464,14 @@ void xf86WcmSetScreen(LocalDevicePtr local, int v0, int v1)
* xf86WcmInitTablet -- common initialization for all tablets
****************************************************************************/

-int xf86WcmInitTablet(LocalDevicePtr local, const char* id, float version)
+int xf86WcmInitTablet(LocalDevicePtr local, const char* id, size_t id_len, float version)
{
WacomDevicePtr priv = (WacomDevicePtr)local->private;
WacomCommonPtr common = priv->common;
WacomModelPtr model = common->wcmModel;

/* Initialize the tablet */
- model->Initialize(common,id,version);
+ model->Initialize(common,id,id_len,version);

/* Get tablet resolution */
if (model->GetResolution)
diff --git a/src/xdrv/wcmSerial.c b/src/xdrv/wcmSerial.c
index db1f108..4b41552 100755
--- a/src/xdrv/wcmSerial.c
+++ b/src/xdrv/wcmSerial.c
@@ -23,15 +23,15 @@

/* Serial Support */
static Bool serialDetect(LocalDevicePtr pDev);
-static Bool serialInit(LocalDevicePtr pDev, char* id, float *version);
-
-static int serialInitTablet(LocalDevicePtr pDev, char* id, float *version);
-static void serialInitIntuos(WacomCommonPtr common, const char* id, float version);
-static void serialInitIntuos2(WacomCommonPtr common, const char* id, float version);
-static void serialInitCintiq(WacomCommonPtr common, const char* id, float version);
-static void serialInitPenPartner(WacomCommonPtr common, const char* id, float version);
-static void serialInitGraphire(WacomCommonPtr common, const char* id, float version);
-static void serialInitProtocol4(WacomCommonPtr common, const char* id, float version);
+static Bool serialInit(LocalDevicePtr pDev, char* id, size_t id_len, float *version);
+
+static int serialInitTablet(LocalDevicePtr pDev, char* id, size_t id_len, float *version);
+static void serialInitIntuos(WacomCommonPtr common, const char* id, size_t id_len, float version);
+static void serialInitIntuos2(WacomCommonPtr common, const char* id, size_t id_len, float version);
+static void serialInitCintiq(WacomCommonPtr common, const char* id, size_t id_len, float version);
+static void serialInitPenPartner(WacomCommonPtr common, const char* id, size_t id_len, float version);
+static void serialInitGraphire(WacomCommonPtr common, const char* id, size_t id_len, float version);
+static void serialInitProtocol4(WacomCommonPtr common, const char* id, size_t id_len, float version);
static void serialGetResolution(LocalDevicePtr local);
static int serialGetRanges(LocalDevicePtr local);
static int serialResetIntuos(LocalDevicePtr local);
@@ -397,7 +397,7 @@ static Bool serialDetect(LocalDevicePtr pDev)
return 1;
}

-static Bool serialInit(LocalDevicePtr local, char* id, float *version)
+static Bool serialInit(LocalDevicePtr local, char* id, size_t id_len, float *version)
{
int err;
WacomDevicePtr priv = (WacomDevicePtr)local->private;
@@ -493,7 +493,7 @@ static Bool serialInit(LocalDevicePtr local, char* id, float *version)

xf86WcmFlushTablet(local->fd);

- return serialInitTablet(local, id, version);
+ return serialInitTablet(local, id, id_len, version);
}

/*****************************************************************************
@@ -501,7 +501,7 @@ static Bool serialInit(LocalDevicePtr local, char* id, float *version)
* Initialize the tablet
****************************************************************************/

-static int serialInitTablet(LocalDevicePtr local, char* id, float *version)
+static int serialInitTablet(LocalDevicePtr local, char* id, size_t id_len, float *version)
{
int loop, idx;
char getID[BUFFER_SIZE];
@@ -857,7 +857,7 @@ static int serialParseProtocol5(LocalDevicePtr local, const unsigned char* data)
* Model-specific functions
****************************************************************************/

-static void serialInitIntuos(WacomCommonPtr common, const char* id, float version)
+static void serialInitIntuos(WacomCommonPtr common, const char* id, size_t id_len, float version)
{
common->wcmProtocolLevel = 5;
common->wcmVersion = version;
@@ -869,7 +869,7 @@ static void serialInitIntuos(WacomCommonPtr common, const char* id, float versio
common->wcmFlags |= TILT_ENABLED_FLAG;
}

-static void serialInitIntuos2(WacomCommonPtr common, const char* id, float version)
+static void serialInitIntuos2(WacomCommonPtr common, const char* id, size_t id_len, float version)
{
common->wcmProtocolLevel = 5;
common->wcmVersion = version;
@@ -881,7 +881,7 @@ static void serialInitIntuos2(WacomCommonPtr common, const char* id, float versi
common->wcmFlags |= TILT_ENABLED_FLAG;
}

-static void serialInitCintiq(WacomCommonPtr common, const char* id, float version)
+static void serialInitCintiq(WacomCommonPtr common, const char* id, size_t id_len, float version)
{
common->wcmProtocolLevel = 4;
common->wcmPktLength = 7;
@@ -955,7 +955,7 @@ static void serialInitCintiq(WacomCommonPtr common, const char* id, float versio
common->wcmFlags &= ~TILT_ENABLED_FLAG;
}

-static void serialInitPenPartner(WacomCommonPtr common, const char* id, float version)
+static void serialInitPenPartner(WacomCommonPtr common, const char* id, size_t id_len, float version)
{
common->wcmProtocolLevel = 4;
common->wcmPktLength = 7;
@@ -969,7 +969,7 @@ static void serialInitPenPartner(WacomCommonPtr common, const char* id, float ve
common->wcmFlags &= ~TILT_ENABLED_FLAG;
}

-static void serialInitGraphire(WacomCommonPtr common, const char* id, float version)
+static void serialInitGraphire(WacomCommonPtr common, const char* id, size_t id_len, float version)
{
common->wcmProtocolLevel = 4;
common->wcmPktLength = 7;
@@ -986,7 +986,7 @@ static void serialInitGraphire(WacomCommonPtr common, const char* id, float vers
common->wcmFlags &= ~TILT_ENABLED_FLAG;
}

-static void serialInitProtocol4(WacomCommonPtr common, const char* id, float version)
+static void serialInitProtocol4(WacomCommonPtr common, const char* id, size_t id_len, float version)
{
common->wcmProtocolLevel = 4;
common->wcmPktLength = 7;
diff --git a/src/xdrv/wcmUSB.c b/src/xdrv/wcmUSB.c
index ce82539..cb2ca88 100755
--- a/src/xdrv/wcmUSB.c
+++ b/src/xdrv/wcmUSB.c
@@ -40,12 +40,12 @@ static int lastToolSerial = 0;
extern int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys, size_t nkeys, int* tablet_id);
extern void wcmIsDisplay(WacomCommonPtr common);
static Bool usbDetect(LocalDevicePtr);
-Bool usbWcmInit(LocalDevicePtr pDev, char* id, float *version);
+Bool usbWcmInit(LocalDevicePtr pDev, char* id, size_t id_len, float *version);

static void usbInitProtocol5(WacomCommonPtr common, const char* id,
- float version);
+ size_t id_len, float version);
static void usbInitProtocol4(WacomCommonPtr common, const char* id,
- float version);
+ size_t id_len, float version);
int usbWcmGetRanges(LocalDevicePtr local);
static int usbParse(LocalDevicePtr local, const unsigned char* data);
static int usbDetectConfig(LocalDevicePtr local);
@@ -580,7 +580,7 @@ static void usbRetrieveKeys(WacomCommonPtr common)
common->nbuttons = 5;
}

-Bool usbWcmInit(LocalDevicePtr local, char* id, float *version)
+Bool usbWcmInit(LocalDevicePtr local, char* id, size_t id_len, float *version)
{
int i;
WacomDevicePtr priv = (WacomDevicePtr)local->private;
@@ -590,7 +590,7 @@ Bool usbWcmInit(LocalDevicePtr local, char* id, float *version)
*version = 0.0;

/* fetch model name */
- ioctl(local->fd, EVIOCGNAME(sizeof(id)), id);
+ ioctl(local->fd, EVIOCGNAME(id_len), id);


#ifndef WCM_XORG_XSERVER_1_4
@@ -640,7 +640,7 @@ Bool usbWcmInit(LocalDevicePtr local, char* id, float *version)
}

static void usbInitProtocol5(WacomCommonPtr common, const char* id,
- float version)
+ size_t id_len, float version)
{
common->wcmProtocolLevel = 5;
common->wcmPktLength = sizeof(struct input_event);
@@ -656,7 +656,7 @@ static void usbInitProtocol5(WacomCommonPtr common, const char* id,
}

static void usbInitProtocol4(WacomCommonPtr common, const char* id,
- float version)
+ size_t id_len, float version)
{
common->wcmProtocolLevel = 4;
common->wcmPktLength = sizeof(struct input_event);
diff --git a/src/xdrv/xf86Wacom.c b/src/xdrv/xf86Wacom.c
index c18fd64..c214fc9 100755
--- a/src/xdrv/xf86Wacom.c
+++ b/src/xdrv/xf86Wacom.c
@@ -687,8 +687,8 @@ Bool xf86WcmOpen(LocalDevicePtr local)
}

/* Initialize the tablet */
- if(common->wcmDevCls->Init(local, id, &version) != Success ||
- xf86WcmInitTablet(local, id, version) != Success)
+ if(common->wcmDevCls->Init(local, id, sizeof(id), &version) != Success ||
+ xf86WcmInitTablet(local, id, sizeof(id), version) != Success)
{
xf86CloseSerial(local->fd);
local->fd = -1;
diff --git a/src/xdrv/xf86Wacom.h b/src/xdrv/xf86Wacom.h
index 3e5e9cd..e3cd49d 100755
--- a/src/xdrv/xf86Wacom.h
+++ b/src/xdrv/xf86Wacom.h
@@ -247,7 +247,7 @@ int xf86WcmWriteWait(int fd, const char* request);
int xf86WcmWaitForTablet(int fd, char * data, int size);

/* common tablet initialization regime */
-int xf86WcmInitTablet(LocalDevicePtr local, const char* id, float version);
+int xf86WcmInitTablet(LocalDevicePtr local, const char* id, size_t id_len, float version);

/* standard packet handler */
void xf86WcmReadPacket(LocalDevicePtr local);
diff --git a/src/xdrv/xf86WacomDefs.h b/src/xdrv/xf86WacomDefs.h
index 45b88ae..2b6c291 100755
--- a/src/xdrv/xf86WacomDefs.h
+++ b/src/xdrv/xf86WacomDefs.h
@@ -89,7 +89,7 @@ struct _WacomModel
{
const char* name;

- void (*Initialize)(WacomCommonPtr common, const char* id, float version);
+ void (*Initialize)(WacomCommonPtr common, const char* id, size_t id_len, float version);
void (*GetResolution)(LocalDevicePtr local);
int (*GetRanges)(LocalDevicePtr local);
int (*Reset)(LocalDevicePtr local);
@@ -338,7 +338,7 @@ struct _WacomChannel
struct _WacomDeviceClass
{
Bool (*Detect)(LocalDevicePtr local); /* detect device */
- Bool (*Init)(LocalDevicePtr local, char* id, float *version); /* initialize device */
+ Bool (*Init)(LocalDevicePtr local, char* id, size_t id_len, float *version); /* initialize device */
void (*Read)(LocalDevicePtr local); /* reads device */
};
--
2.12.0
Jason Gerecke
2017-04-11 20:20:33 UTC
Permalink
Use of 'sizeof(keys)' is incorrect here since we don't care about the
length of the pointer itself, but rather of the array it points to.
Update function definitions to pass around a length parameter as needed.

Signed-off-by: Jason Gerecke <***@wacom.com>
---
src/xdrv/wcmConfig.c | 4 ++--
src/xdrv/wcmUSB.c | 4 ++--
src/xdrv/wcmValidateDevice.c | 6 +++---
3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/xdrv/wcmConfig.c b/src/xdrv/wcmConfig.c
index 2b89224..117e403 100755
--- a/src/xdrv/wcmConfig.c
+++ b/src/xdrv/wcmConfig.c
@@ -21,7 +21,7 @@
#include "wcmFilter.h"
#include <fcntl.h>

-extern int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys, int* tablet_id);
+extern int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys, size_t nkeys, int* tablet_id);
extern void wcmIsDisplay(WacomCommonPtr common);
#ifdef WCM_XORG_XSERVER_1_4
extern Bool wcmIsAValidType(LocalDevicePtr local, const char *type, unsigned long* keys);
@@ -658,7 +658,7 @@ static LocalDevicePtr xf86WcmInit(InputDriverPtr drv, IDevPtr dev, int flags)
if(device)
{
/* initialize supported keys for Xorg server 1.4 or later */
- wcmDeviceTypeKeys(fakeLocal, keys, &tablet_id);
+ wcmDeviceTypeKeys(fakeLocal, keys, sizeof(keys), &tablet_id);

/* check if the type is valid for the device
* that is not defined in xorg.conf
diff --git a/src/xdrv/wcmUSB.c b/src/xdrv/wcmUSB.c
index 092d370..ce82539 100755
--- a/src/xdrv/wcmUSB.c
+++ b/src/xdrv/wcmUSB.c
@@ -37,7 +37,7 @@
static int lastToolSerial = 0;
#endif

-extern int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys, int* tablet_id);
+extern int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys, size_t nkeys, int* tablet_id);
extern void wcmIsDisplay(WacomCommonPtr common);
static Bool usbDetect(LocalDevicePtr);
Bool usbWcmInit(LocalDevicePtr pDev, char* id, float *version);
@@ -595,7 +595,7 @@ Bool usbWcmInit(LocalDevicePtr local, char* id, float *version)

#ifndef WCM_XORG_XSERVER_1_4
/* older servers/kernels normally fail the first time */
- wcmDeviceTypeKeys(local, common->wcmKeys, &common->tablet_id);
+ wcmDeviceTypeKeys(local, common->wcmKeys, sizeof(common->wcmKeys), &common->tablet_id);
wcmIsDisplay(common);
#endif /* WCM_XORG_XSERVER_1_4 */

diff --git a/src/xdrv/wcmValidateDevice.c b/src/xdrv/wcmValidateDevice.c
index bdaa5e1..9049108 100755
--- a/src/xdrv/wcmValidateDevice.c
+++ b/src/xdrv/wcmValidateDevice.c
@@ -156,7 +156,7 @@ Bool wcmIsAValidType(LocalDevicePtr local, const char* type, unsigned long* keys
#endif /* WCM_XORG_XSERVER_1_4 */

/* Choose valid types according to device ID */
-int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys, int* tablet_id)
+int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys, size_t nkeys, int* tablet_id)
{
int ret = 1, fd = -1;
unsigned int id = 0;
@@ -172,7 +172,7 @@ int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys, int* tablet_id)
return 0;
}

- memset(keys, 0, sizeof(keys));
+ memset(keys, 0, nkeys);
*tablet_id = 0;

/* serial ISDV4 devices */
@@ -247,7 +247,7 @@ int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys, int* tablet_id)
struct input_id wacom_id;

/* test if the tool is defined in the kernel */
- if (ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keys)), keys) < 0)
+ if (ioctl(fd, EVIOCGBIT(EV_KEY, nkeys), keys) < 0)
{
xf86Msg(X_ERROR, "%s: wcmDeviceTypeKeys unable to "
"ioctl USB key bits.\n", local->name);
--
2.12.0
Peter Hutterer
2017-04-18 02:53:11 UTC
Permalink
Post by Jason Gerecke
Use of 'sizeof(keys)' is incorrect here since we don't care about the
length of the pointer itself, but rather of the array it points to.
Update function definitions to pass around a length parameter as needed.
---
src/xdrv/wcmConfig.c | 4 ++--
src/xdrv/wcmUSB.c | 4 ++--
src/xdrv/wcmValidateDevice.c | 6 +++---
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/src/xdrv/wcmConfig.c b/src/xdrv/wcmConfig.c
index 2b89224..117e403 100755
--- a/src/xdrv/wcmConfig.c
+++ b/src/xdrv/wcmConfig.c
@@ -21,7 +21,7 @@
#include "wcmFilter.h"
#include <fcntl.h>
-extern int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys, int* tablet_id);
+extern int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys, size_t nkeys, int* tablet_id);
don't name this nkeys, that suggests *number* of keys rather than bytes.
you're using it as bytes everywhere though. Just rename it to keys_sz or sz,
or something.

Cheers,
Peter
Post by Jason Gerecke
extern void wcmIsDisplay(WacomCommonPtr common);
#ifdef WCM_XORG_XSERVER_1_4
extern Bool wcmIsAValidType(LocalDevicePtr local, const char *type, unsigned long* keys);
@@ -658,7 +658,7 @@ static LocalDevicePtr xf86WcmInit(InputDriverPtr drv, IDevPtr dev, int flags)
if(device)
{
/* initialize supported keys for Xorg server 1.4 or later */
- wcmDeviceTypeKeys(fakeLocal, keys, &tablet_id);
+ wcmDeviceTypeKeys(fakeLocal, keys, sizeof(keys), &tablet_id);
/* check if the type is valid for the device
* that is not defined in xorg.conf
diff --git a/src/xdrv/wcmUSB.c b/src/xdrv/wcmUSB.c
index 092d370..ce82539 100755
--- a/src/xdrv/wcmUSB.c
+++ b/src/xdrv/wcmUSB.c
@@ -37,7 +37,7 @@
static int lastToolSerial = 0;
#endif
-extern int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys, int* tablet_id);
+extern int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys, size_t nkeys, int* tablet_id);
extern void wcmIsDisplay(WacomCommonPtr common);
static Bool usbDetect(LocalDevicePtr);
Bool usbWcmInit(LocalDevicePtr pDev, char* id, float *version);
@@ -595,7 +595,7 @@ Bool usbWcmInit(LocalDevicePtr local, char* id, float *version)
#ifndef WCM_XORG_XSERVER_1_4
/* older servers/kernels normally fail the first time */
- wcmDeviceTypeKeys(local, common->wcmKeys, &common->tablet_id);
+ wcmDeviceTypeKeys(local, common->wcmKeys, sizeof(common->wcmKeys), &common->tablet_id);
wcmIsDisplay(common);
#endif /* WCM_XORG_XSERVER_1_4 */
diff --git a/src/xdrv/wcmValidateDevice.c b/src/xdrv/wcmValidateDevice.c
index bdaa5e1..9049108 100755
--- a/src/xdrv/wcmValidateDevice.c
+++ b/src/xdrv/wcmValidateDevice.c
@@ -156,7 +156,7 @@ Bool wcmIsAValidType(LocalDevicePtr local, const char* type, unsigned long* keys
#endif /* WCM_XORG_XSERVER_1_4 */
/* Choose valid types according to device ID */
-int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys, int* tablet_id)
+int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys, size_t nkeys, int* tablet_id)
{
int ret = 1, fd = -1;
unsigned int id = 0;
@@ -172,7 +172,7 @@ int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys, int* tablet_id)
return 0;
}
- memset(keys, 0, sizeof(keys));
+ memset(keys, 0, nkeys);
*tablet_id = 0;
/* serial ISDV4 devices */
@@ -247,7 +247,7 @@ int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys, int* tablet_id)
struct input_id wacom_id;
/* test if the tool is defined in the kernel */
- if (ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keys)), keys) < 0)
+ if (ioctl(fd, EVIOCGBIT(EV_KEY, nkeys), keys) < 0)
{
xf86Msg(X_ERROR, "%s: wcmDeviceTypeKeys unable to "
"ioctl USB key bits.\n", local->name);
--
2.12.0
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linuxwacom-devel mailing list
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel
Ping Cheng
2017-04-14 18:36:16 UTC
Permalink
Reviewed-by: Ping Cheng <***@wacom.com> for the while set.

Thanks,
Ping
Post by Jason Gerecke
---
src/wacomxi/wacomcpl-exec | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/wacomxi/wacomcpl-exec b/src/wacomxi/wacomcpl-exec
index b5fc6f6..5d8bbd0 100755
--- a/src/wacomxi/wacomcpl-exec
+++ b/src/wacomxi/wacomcpl-exec
@@ -2088,6 +2088,9 @@ proc updateModelInfo { } {
set numPadButtons(197) 10
set numPadStrips(197) 2
+ # DTU-2231
+ set isLCD(206) 1
+
# Hummingbird (Cintiq 12WX)
set numPadButtons(198) 10
set numPadStrips(198) 2
--
2.12.0
Loading...