On Thu, 2012-04-19 at 13:10 +1000, Peter Hutterer wrote: > Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
Reviewed-By: Bastien Nocera <had...@hadess.net> > --- > Changes since v1: > - update for new libwacom_get_matches() API > - change from FILE to fd > - squash together with same function for stylus descriptions > > libwacom/libwacom.c | 139 > ++++++++++++++++++++++++++++++++++++++++++++++++ > libwacom/libwacom.h | 17 ++++++ > libwacom/libwacomint.h | 3 +- > 3 files changed, 158 insertions(+), 1 deletion(-) > > diff --git a/libwacom/libwacom.c b/libwacom/libwacom.c > index 010cd5f..8fe2b59 100644 > --- a/libwacom/libwacom.c > +++ b/libwacom/libwacom.c > @@ -356,6 +356,118 @@ libwacom_new_from_name(WacomDeviceDatabase *db, const > char *name, WacomError *er > return NULL; > } > > +static void print_styli_for_device (int fd, WacomDevice *device) > +{ > + int nstyli, *styli; > + int i; > + > + if (!libwacom_has_stylus(device)) > + return; > + > + styli = libwacom_get_supported_styli(device, &nstyli); > + > + dprintf(fd, "Styli="); > + for (i = 0; i < nstyli; i++) > + dprintf(fd, "%#x;", styli[i]); > + dprintf(fd, "\n"); > +} > + > +static void print_button_flag_if(int fd, WacomDevice *device, const char > *label, int flag) > +{ > + int nbuttons = libwacom_get_num_buttons(device); > + char b; > + dprintf(fd, "%s=", label); > + for (b = 'A'; b < 'A' + nbuttons; b++) > + if (libwacom_get_button_flag(device, b) & flag) > + dprintf(fd, "%c;", b); > + dprintf(fd, "\n"); > +} > + > +static void print_buttons_for_device (int fd, WacomDevice *device) > +{ > + int nbuttons = libwacom_get_num_buttons(device); > + > + if (nbuttons == 0) > + return; > + > + dprintf(fd, "[Buttons]\n"); > + > + print_button_flag_if(fd, device, "Left", WACOM_BUTTON_POSITION_LEFT); > + print_button_flag_if(fd, device, "Right", WACOM_BUTTON_POSITION_RIGHT); > + print_button_flag_if(fd, device, "Top", WACOM_BUTTON_POSITION_TOP); > + print_button_flag_if(fd, device, "Bottom", > WACOM_BUTTON_POSITION_BOTTOM); > + print_button_flag_if(fd, device, "Touchstrip", > WACOM_BUTTON_TOUCHSTRIP_MODESWITCH); > + print_button_flag_if(fd, device, "Touchstrip2", > WACOM_BUTTON_TOUCHSTRIP2_MODESWITCH); > + print_button_flag_if(fd, device, "OLEDs", WACOM_BUTTON_OLED); > + print_button_flag_if(fd, device, "Ring", WACOM_BUTTON_RING_MODESWITCH); > + print_button_flag_if(fd, device, "Ring2", > WACOM_BUTTON_RING2_MODESWITCH); > + dprintf(fd, "RingNumModes=%d\n", libwacom_get_ring_num_modes(device)); > + dprintf(fd, "Ring2NumModes=%d\n", libwacom_get_ring2_num_modes(device)); > + dprintf(fd, "StripsNumModes=%d\n", > libwacom_get_strips_num_modes(device)); > + > + dprintf(fd, "\n"); > +} > + > +void > +libwacom_print_device_description(int fd, WacomDevice *device) > +{ > + const WacomMatch **match; > + WacomClass class; > + const char *bus_name, *class_name; > + > + class = libwacom_get_class(device); > + switch(class) { > + case WCLASS_UNKNOWN: class_name = "Unknown"; break; > + case WCLASS_INTUOS3: class_name = "Intuos3"; break; > + case WCLASS_INTUOS4: class_name = "Intuos4"; break; > + case WCLASS_INTUOS5: class_name = "Intuos5"; break; > + case WCLASS_CINTIQ: class_name = "Cintiq"; break; > + case WCLASS_BAMBOO: class_name = "Bamboo"; break; > + case WCLASS_GRAPHIRE: class_name = "Graphire";break; > + case WCLASS_ISDV4: class_name = "ISDV4"; break; > + default: g_assert_not_reached(); break; > + } > + > + dprintf(fd, "[Device]\n"); > + dprintf(fd, "Name=%s\n", libwacom_get_name(device)); > + dprintf(fd, "DeviceMatch="); > + for (match = libwacom_get_matches(device); *match; match++) { > + WacomBusType type = libwacom_match_get_bustype(*match); > + int vendor = libwacom_match_get_vendor_id(*match); > + int product = libwacom_match_get_product_id(*match); > + > + switch(type) { > + case WBUSTYPE_BLUETOOTH: bus_name = "bluetooth"; > break; > + case WBUSTYPE_USB: bus_name = "usb"; > break; > + case WBUSTYPE_SERIAL: bus_name = "serial"; > break; > + case WBUSTYPE_UNKNOWN: bus_name = "unknown"; > break; > + default: g_assert_not_reached(); > break; > + } > + dprintf(fd, "%s:%04x:%04x;", bus_name, vendor, product); > + } > + dprintf(fd, "\n"); > + > + dprintf(fd, "Class=%s\n", class_name); > + dprintf(fd, "Width=%d\n", libwacom_get_width(device)); > + dprintf(fd, "Height=%d\n", libwacom_get_height(device)); > + print_styli_for_device(fd, device); > + dprintf(fd, "\n"); > + > + dprintf(fd, "[Features]\n"); > + dprintf(fd, "Reversible=%s\n", libwacom_is_reversible(device) ? > "true" : "false"); > + dprintf(fd, "Stylus=%s\n", libwacom_has_stylus(device) ? > "true" : "false"); > + dprintf(fd, "Ring=%s\n", libwacom_has_ring(device) ? > "true" : "false"); > + dprintf(fd, "Ring2=%s\n", libwacom_has_ring2(device) ? > "true" : "false"); > + dprintf(fd, "BuiltIn=%s\n", libwacom_is_builtin(device) ? > "true" : "false"); > + dprintf(fd, "Touch=%s\n", libwacom_has_touch(device) ? > "true" : "false"); > + > + dprintf(fd, "NumStrips=%d\n", libwacom_get_num_strips(device)); > + dprintf(fd, "Buttons=%d\n", > libwacom_get_num_buttons(device)); > + > + print_buttons_for_device(fd, device); > +} > + > + > void > libwacom_destroy(WacomDevice *device) > { > @@ -579,6 +691,33 @@ WacomStylusType libwacom_stylus_get_type (const > WacomStylus *stylus) > return stylus->type; > } > > +void > +libwacom_print_stylus_description (int fd, const WacomStylus *stylus) > +{ > + const char *type; > + > + dprintf(fd, "[%#x]\n", libwacom_stylus_get_id(stylus)); > + dprintf(fd, "Name=%s\n", libwacom_stylus_get_name(stylus)); > + dprintf(fd, "Buttons=%d\n", > libwacom_stylus_get_num_buttons(stylus)); > + dprintf(fd, "HasEraser=%s\n", libwacom_stylus_has_eraser(stylus) ? > "true" : "false"); > + dprintf(fd, "IsEraser=%s\n", libwacom_stylus_is_eraser(stylus) ? > "true" : "false"); > + dprintf(fd, "HasLens=%s\n", libwacom_stylus_has_lens(stylus) ? > "true" : "false"); > + > + switch(libwacom_stylus_get_type(stylus)) { > + case WSTYLUS_UNKNOWN: type = "Unknown"; break; > + case WSTYLUS_GENERAL: type = "General"; break; > + case WSTYLUS_INKING: type = "Inking"; break; > + case WSTYLUS_AIRBRUSH: type = "Airbrush"; break; > + case WSTYLUS_CLASSIC: type = "Classic"; break; > + case WSTYLUS_MARKER: type = "Marker"; break; > + case WSTYLUS_STROKE: type = "Stroke"; break; > + case WSTYLUS_PUCK: type = "Puck"; break; > + default: g_assert_not_reached(); break; > + } > + > + dprintf(fd, "Type=%s\n", type); > +} > + > void libwacom_stylus_destroy(WacomStylus *stylus) > { > g_free (stylus->name); > diff --git a/libwacom/libwacom.h b/libwacom/libwacom.h > index de0e0ae..4bd7940 100644 > --- a/libwacom/libwacom.h > +++ b/libwacom/libwacom.h > @@ -35,6 +35,7 @@ > /** @endcond */ > > #include <stdint.h> > +#include <stdio.h> > /** > @mainpage > > @@ -273,6 +274,15 @@ WacomDevice* libwacom_new_from_name(WacomDeviceDatabase > *db, const char *name, W > WacomDevice** libwacom_list_devices_from_database(WacomDeviceDatabase *db, > WacomError *error); > > /** > + * Print the description of this device to the given file. > + * > + * @param fd The file descriptor to print to > + * @param device The device to print the description for. > + */ > +void libwacom_print_device_description (int fd, WacomDevice *device); > + > + > +/** > * Remove the device and free all memory and references to it. > * > * @param device The device to delete > @@ -480,6 +490,13 @@ int libwacom_stylus_has_lens (const WacomStylus > *stylus); > */ > WacomStylusType libwacom_stylus_get_type (const WacomStylus *stylus); > > +/** > + * Print the description of this stylus to the given file. > + * > + * @param fd The file descriptor > + * @param stylus The stylus to print the description for. > + */ > +void libwacom_print_stylus_description (int fd, const WacomStylus *stylus); > > WacomBusType libwacom_match_get_bustype(const WacomMatch *match); > uint32_t libwacom_match_get_product_id(const WacomMatch *match); > diff --git a/libwacom/libwacomint.h b/libwacom/libwacomint.h > index 1ec0a39..6d07e16 100644 > --- a/libwacom/libwacomint.h > +++ b/libwacom/libwacomint.h > @@ -65,7 +65,8 @@ struct _WacomMatch { > }; > > /* WARNING: When adding new members to this struct > - * make sure to update libwacom_copy() ! */ > + * make sure to update libwacom_copy() and > + * libwacom_print_device_description() ! */ > struct _WacomDevice { > char *name; > int width; ------------------------------------------------------------------------------ For Developers, A Lot Can Happen In A Second. Boundary is the first to Know...and Tell You. Monitor Your Applications in Ultra-Fine Resolution. Try it FREE! http://p.sf.net/sfu/Boundary-d2dvs2 _______________________________________________ Linuxwacom-devel mailing list Linuxwacom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel