On Wed, 2012-04-18 at 15:00 +1000, Peter Hutterer wrote: > Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
Signed-off-by: Bastien Nocera <had...@hadess.net> > --- > libwacom/libwacom.c | 112 > ++++++++++++++++++++++++++++++++++++++++++++++++ > libwacom/libwacom.h | 10 +++++ > libwacom/libwacomint.h | 3 +- > 3 files changed, 124 insertions(+), 1 deletion(-) > > diff --git a/libwacom/libwacom.c b/libwacom/libwacom.c > index 29ce625..eaf5e2c 100644 > --- a/libwacom/libwacom.c > +++ b/libwacom/libwacom.c > @@ -351,6 +351,118 @@ libwacom_new_from_name(WacomDeviceDatabase *db, const > char *name, WacomError *er > return NULL; > } > > +static void print_styli_for_device (FILE *file, WacomDevice *device) > +{ > + int nstyli, *styli; > + int i; > + > + if (!libwacom_has_stylus(device)) > + return; > + > + styli = libwacom_get_supported_styli(device, &nstyli); > + > + fprintf(file, "Styli="); > + for (i = 0; i < nstyli; i++) > + fprintf(file, "%#x;", styli[i]); > + fprintf(file, "\n"); > +} > + > +static void print_button_flag_if(FILE *file, WacomDevice *device, const char > *label, int flag) > +{ > + int nbuttons = libwacom_get_num_buttons(device); > + char b; > + fprintf(file, "%s=", label); > + for (b = 'A'; b < 'A' + nbuttons; b++) > + if (libwacom_get_button_flag(device, b) & flag) > + fprintf(file, "%c;", b); > + fprintf(file, "\n"); > +} > + > +static void print_buttons_for_device (FILE *file, WacomDevice *device) > +{ > + int nbuttons = libwacom_get_num_buttons(device); > + > + if (nbuttons == 0) > + return; > + > + fprintf(file, "[Buttons]\n"); > + > + print_button_flag_if(file, device, "Left", WACOM_BUTTON_POSITION_LEFT); > + print_button_flag_if(file, device, "Right", > WACOM_BUTTON_POSITION_RIGHT); > + print_button_flag_if(file, device, "Top", WACOM_BUTTON_POSITION_TOP); > + print_button_flag_if(file, device, "Bottom", > WACOM_BUTTON_POSITION_BOTTOM); > + print_button_flag_if(file, device, "Touchstrip", > WACOM_BUTTON_TOUCHSTRIP_MODESWITCH); > + print_button_flag_if(file, device, "Touchstrip2", > WACOM_BUTTON_TOUCHSTRIP2_MODESWITCH); > + print_button_flag_if(file, device, "OLEDs", WACOM_BUTTON_OLED); > + print_button_flag_if(file, device, "Ring", > WACOM_BUTTON_RING_MODESWITCH); > + print_button_flag_if(file, device, "Ring2", > WACOM_BUTTON_RING2_MODESWITCH); > + fprintf(file, "RingNumModes=%d\n", libwacom_get_ring_num_modes(device)); > + fprintf(file, "Ring2NumModes=%d\n", > libwacom_get_ring2_num_modes(device)); > + fprintf(file, "StripsNumModes=%d\n", > libwacom_get_strips_num_modes(device)); > + > + fprintf(file, "\n"); > +} > + > +void > +libwacom_print_device_description(FILE *file, WacomDevice *device) Do we really want FILE* in the public API? An fd would be nicer IMO. > +{ > + int nmatches; > + WacomClass class = libwacom_get_class(device); > + WacomMatch **matches = libwacom_get_matches(device, &nmatches); > + const char *bus_name, *class_name; > + > + 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: BUG_WARN(class); break; > + } > + > + fprintf(file, "[Device]\n"); > + fprintf(file, "Name=%s\n", libwacom_get_name(device)); > + fprintf(file, "DeviceMatch="); > + while (nmatches--) { > + WacomBusType type = > libwacom_match_get_bustype(matches[nmatches]); > + int vendor = > libwacom_match_get_vendor_id(matches[nmatches]); > + int product = > libwacom_match_get_product_id(matches[nmatches]); > + > + 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: BUG_WARN(type); break; > + } > + fprintf(file, "%s:%04x:%04x;", bus_name, vendor, product); > + } > + fprintf(file, "\n"); > + > + fprintf(file, "Class=%s\n", class_name); > + fprintf(file, "Width=%d\n", libwacom_get_width(device)); > + fprintf(file, "Height=%d\n", libwacom_get_height(device)); > + print_styli_for_device(file, device); > + fprintf(file, "\n"); > + > + fprintf(file, "[Features]\n"); > + fprintf(file, "Reversible=%s\n", libwacom_is_reversible(device) ? > "true" : "false"); > + fprintf(file, "Stylus=%s\n", libwacom_has_stylus(device) ? > "true" : "false"); > + fprintf(file, "Ring=%s\n", libwacom_has_ring(device) ? > "true" : "false"); > + fprintf(file, "Ring2=%s\n", libwacom_has_ring2(device) ? > "true" : "false"); > + fprintf(file, "BuiltIn=%s\n", libwacom_is_builtin(device) ? > "true" : "false"); > + fprintf(file, "Touch=%s\n", libwacom_has_touch(device) ? > "true" : "false"); > + > + fprintf(file, "NumStrips=%d\n", libwacom_get_num_strips(device)); > + fprintf(file, "Buttons=%d\n", > libwacom_get_num_buttons(device)); > + > + print_buttons_for_device(file, device); > +} > + > + > void > libwacom_destroy(WacomDevice *device) > { > diff --git a/libwacom/libwacom.h b/libwacom/libwacom.h > index d44eb89..11192a4 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 file The stream to print to > + * @param device The device to print the description for. > + */ > +void libwacom_print_device_description (FILE *file, WacomDevice *device); > + > + > +/** > * Remove the device and free all memory and references to it. > * > * @param device The device to delete > diff --git a/libwacom/libwacomint.h b/libwacom/libwacomint.h > index 6be561b..387bf6f 100644 > --- a/libwacom/libwacomint.h > +++ b/libwacom/libwacomint.h > @@ -78,7 +78,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; ------------------------------------------------------------------------------ Better than sec? Nothing is better than sec when it comes to monitoring Big Data applications. Try Boundary one-second resolution app monitoring today. Free. http://p.sf.net/sfu/Boundary-dev2dev _______________________________________________ Linuxwacom-devel mailing list Linuxwacom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel