This tweaks the prior ToolSerials patch to use the existing infrastructure where appropriate. For instance, using the 'WacomTool' struct instead of the custom 'WacomToolSerial' struct.
This should actually be integrated as a "fixup", but is included here to more easily see the changes from the original. Signed-off-by: Jason Gerecke <killert...@gmail.com> --- src/wcmCommon.c | 13 +++++--- src/wcmValidateDevice.c | 69 +++++++++++++++++++++++------------------------ src/xf86WacomDefs.h | 22 +------------- 3 files changed, 44 insertions(+), 60 deletions(-) diff --git a/src/wcmCommon.c b/src/wcmCommon.c index 822306c..3905b07 100644 --- a/src/wcmCommon.c +++ b/src/wcmCommon.c @@ -1390,12 +1390,15 @@ void wcmFreeCommon(WacomCommonPtr *ptr) if (--common->refcnt == 0) { free(common->private); - while (--common->nserials >= 0) + while (common->serials) { - DBG(10, common, "Free common serial %d: %d %s\n", common->nserials, - common->serials[common->nserials]->serial, - common->serials[common->nserials]->name); - free(common->serials[common->nserials]); + DBG(10, common, "Free common serial: %d %s\n", + common->serials->serial, + common->serials->name); + + WacomToolPtr next = common->serials->next; + free(common->serials); + common->serials = next; } free(common); } diff --git a/src/wcmValidateDevice.c b/src/wcmValidateDevice.c index 1a67994..8e4f4cd 100644 --- a/src/wcmValidateDevice.c +++ b/src/wcmValidateDevice.c @@ -311,7 +311,7 @@ static InputOption *wcmOptionDupConvert(InputInfoPtr pInfo, const char* basename WacomDevicePtr priv = pInfo->private; WacomCommonPtr common = priv->common; pointer original = pInfo->options; - WacomToolSerialPtr ser = common->serials[iserial]; + WacomToolPtr ser = common->serials; InputOption *iopts = NULL, *new; char *name; pointer options; @@ -330,6 +330,8 @@ static InputOption *wcmOptionDupConvert(InputInfoPtr pInfo, const char* basename #endif if (iserial > -1) { + while (ser->serial && ser->serial != iserial) + ser = ser->next; if (strlen(ser->name) > 0) rc = asprintf(&name, "%s %s %s", basename, ser->name, type); @@ -474,29 +476,26 @@ void wcmHotplugSerials(InputInfoPtr pInfo, const char *basename) { WacomDevicePtr priv = (WacomDevicePtr)pInfo->private; WacomCommonPtr common = priv->common; - int i; + WacomToolPtr ser = common->serials; - if (common->nserials > 0) + while (ser) { - for (i = 0; i < common->nserials; i++) - { - WacomToolSerialPtr ser = common->serials[i]; - xf86Msg(X_INFO, "%s: hotplugging serial %d.\n", pInfo->name, ser->serial); + xf86Msg(X_INFO, "%s: hotplugging serial %d.\n", pInfo->name, ser->serial); - if (wcmIsAValidType(pInfo, "stylus") && - (ser->types & SERIAL_HAS_STYLUS)) - wcmQueueHotplug(pInfo, basename, "stylus", i); + if (wcmIsAValidType(pInfo, "stylus") && + (ser->typeid & STYLUS_ID)) + wcmQueueHotplug(pInfo, basename, "stylus", ser->serial); - if (wcmIsAValidType(pInfo, "eraser") && - (ser->types & SERIAL_HAS_ERASER)) - wcmQueueHotplug(pInfo, basename, "eraser", i); + if (wcmIsAValidType(pInfo, "eraser") && + (ser->typeid & ERASER_ID)) + wcmQueueHotplug(pInfo, basename, "eraser", ser->serial); - if (wcmIsAValidType(pInfo, "cursor") && - (ser->types & SERIAL_HAS_CURSOR)) - wcmQueueHotplug(pInfo, basename, "cursor", i); - } - } + if (wcmIsAValidType(pInfo, "cursor") && + (ser->typeid & CURSOR_ID)) + wcmQueueHotplug(pInfo, basename, "cursor", ser->serial); + ser = ser->next; + } } void wcmHotplugOthers(InputInfoPtr pInfo, const char *basename) @@ -574,22 +573,21 @@ int wcmParseSerials (InputInfoPtr pInfo) WacomCommonPtr common = priv->common; char *s; - if (common->nserials > 0) + if (common->serials) { - return 0; /*Parsing has been already done*/ + return 0; /*Parse has been already done*/ } s = xf86SetStrOption(pInfo->options, "ToolSerials", NULL); if (s) /*Dont parse again, if the commons have values already*/ { - int nserials = 0; char* tok = strtok(s, ";"); - while ((tok != NULL) && (nserials < WCM_MAX_SERIALS)) + while (tok != NULL) { int serial, nmatch; char type[strlen(tok) + 1]; char name[strlen(tok) + 1]; - WacomToolSerialPtr ser = calloc(1, sizeof(WacomToolSerial)); + WacomToolPtr ser = calloc(1, sizeof(WacomTool)); if (ser == NULL) return 1; @@ -610,7 +608,7 @@ int wcmParseSerials (InputInfoPtr pInfo) ser->serial = serial; - ser->types = SERIAL_HAS_STYLUS | SERIAL_HAS_ERASER; /*Default to both tools*/ + ser->typeid = STYLUS_ID | ERASER_ID; /*Default to both tools*/ } if (nmatch >= 2) @@ -618,11 +616,11 @@ int wcmParseSerials (InputInfoPtr pInfo) xf86Msg(X_CONFIG, "%s: Tool %d has type %s.\n", pInfo->name, serial, type); if ((strcmp(type, "pen") == 0) || (strcmp(type, "airbrush") == 0)) - ser->types = SERIAL_HAS_STYLUS | SERIAL_HAS_ERASER; + ser->typeid = STYLUS_ID | ERASER_ID; else if (strcmp(type, "artpen") == 0) - ser->types = SERIAL_HAS_STYLUS; + ser->typeid = STYLUS_ID; else if (strcmp(type, "cursor") == 0) - ser->types = SERIAL_HAS_CURSOR; + ser->typeid = CURSOR_ID; else xf86Msg(X_CONFIG, "%s: Invalid type %s, defaulting to pen.\n", pInfo->name, type); } @@ -635,17 +633,18 @@ int wcmParseSerials (InputInfoPtr pInfo) } else ser->name = ""; /*no name yet*/ - common->serials[nserials] = ser; + if (common->serials == NULL) + common->serials = ser; + else + { + WacomToolPtr tool = common->serials; + while (tool->next) + tool = tool->next; + tool->next = ser; + } tok = strtok(NULL,";"); - nserials++; } - common->nserials = nserials; - - if ((nserials == WCM_MAX_SERIALS) && (tok != NULL)) - xf86Msg(X_CONFIG, "%s: Only %d tool serials supported, ignored the rest.\n", - pInfo->name, WCM_MAX_SERIALS); - } return 0; } diff --git a/src/xf86WacomDefs.h b/src/xf86WacomDefs.h index f045762..8bc3ab2 100644 --- a/src/xf86WacomDefs.h +++ b/src/xf86WacomDefs.h @@ -117,8 +117,6 @@ typedef struct _WacomFilterState WacomFilterState, *WacomFilterStatePtr; typedef struct _WacomDeviceClass WacomDeviceClass, *WacomDeviceClassPtr; typedef struct _WacomTool WacomTool, *WacomToolPtr; typedef struct _WacomToolArea WacomToolArea, *WacomToolAreaPtr; -typedef struct _WacomToolSerial WacomToolSerial, *WacomToolSerialPtr; - /****************************************************************************** * WacomModel - model-specific device capabilities @@ -199,7 +197,6 @@ struct _WacomModel * For backword compability support, * tablet buttons besides the strips are * treated as buttons */ -#define WCM_MAX_SERIALS 32 /* maximum number of tool serials to be hotplugged */ /* get/set/property */ typedef struct _PROPINFO PROPINFO; @@ -413,10 +410,6 @@ enum WacomProtocol { WCM_PROTOCOL_5 }; -#define SERIAL_HAS_ERASER 1 -#define SERIAL_HAS_STYLUS 2 -#define SERIAL_HAS_CURSOR 4 - struct _WacomCommonRec { /* Do not move device_path, same offset as priv->name. Used by DBG macro */ @@ -490,8 +483,7 @@ struct _WacomCommonRec void *private; /* backend-specific information */ WacomToolPtr wcmTool; /* List of unique tools */ - WacomToolSerialPtr serials[WCM_MAX_SERIALS];/* Serial numbers provided at startup*/ - int nserials; /*Number of serials configured*/ + WacomToolPtr serials; /* Serial numbers provided at startup*/ /* DO NOT TOUCH THIS. use wcmRefCommon() instead */ int refcnt; /* number of devices sharing this struct */ @@ -509,21 +501,11 @@ struct _WacomTool int typeid; /* Tool type */ int serial; /* Serial id, 0 == no serial id */ Bool enabled; + char *name; InputInfoPtr device; /* The InputDevice connected to this tool */ }; -/****************************************************************************** - * WacomToolSerial - *****************************************************************************/ -struct _WacomToolSerial -{ - - uint serial; /* Serial id */ - uint types; /* Tool types this serial has */ - char *name; /* Label for the tool*/ -}; - #endif /*__XF86_XF86WACOMDEFS_H */ /* vim: set noexpandtab tabstop=8 shiftwidth=8: */ -- 1.7.4.1 ------------------------------------------------------------------------------ Benefiting from Server Virtualization: Beyond Initial Workload Consolidation -- Increasing the use of server virtualization is a top priority.Virtualization can reduce costs, simplify management, and improve application availability and disaster protection. Learn more about boosting the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev _______________________________________________ Linuxwacom-devel mailing list Linuxwacom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel