[PATCH v4 6/6] libusbg: Update examples to new API functionality.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Removing gadget/config/function/binding functionality
has been added to API so add example of how to use it.

Signed-off-by: Krzysztof Opasiak <k.opasiak@xxxxxxxxxxx>
---
 examples/Makefile.am             |    3 +-
 examples/gadget-vid-pid-remove.c |  114 ++++++++++++++++++++++++++++++++++++++
 include/usbg/usbg.h              |    1 -
 3 files changed, 116 insertions(+), 2 deletions(-)
 create mode 100644 examples/gadget-vid-pid-remove.c

diff --git a/examples/Makefile.am b/examples/Makefile.am
index f9f9407..9fc235a 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -1,5 +1,6 @@
-bin_PROGRAMS = show-gadgets gadget-acm-ecm 
+bin_PROGRAMS = show-gadgets gadget-acm-ecm gadget-vid-pid-remove
 gadget_acm_ecm_SOURCES = gadget-acm-ecm.c
 show_gadgets_SOURCES = show-gadgets.c
+gadget_vid_pid_remove_SOURCES = gadget-vid-pid-remove.c
 AM_CPPFLAGS=-I../include/
 AM_LDFLAGS=-L../src/ -lusbg
diff --git a/examples/gadget-vid-pid-remove.c b/examples/gadget-vid-pid-remove.c
new file mode 100644
index 0000000..25e763f
--- /dev/null
+++ b/examples/gadget-vid-pid-remove.c
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2014 Samsung Electronics
+ *
+ * Krzysztof Opasiak <k.opasiak@xxxxxxxxxxx>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+/**
+ * @file gadget-vid-pid-remove.c
+ * @example gadget-vid-pid-remove.c
+ * This is an example of how to find and remove an gadget device with given
+ * Vendor ID and product ID.
+ */
+
+#include <errno.h>
+#include <stdio.h>
+#include <usbg/usbg.h>
+
+#define VENDOR		0x1d6b
+#define PRODUCT		0x0104
+
+int remove_gadget(usbg_gadget *g)
+{
+	int usbg_ret;
+	char udc[USBG_MAX_STR_LENGTH];
+
+	/* Check if gadget is enabled */
+	usbg_ret = usbg_get_gadget_udc(g, udc, USBG_MAX_STR_LENGTH);
+	if (usbg_ret != USBG_SUCCESS) {
+		fprintf(stderr, "Error on USB get gadget udc\n");
+		fprintf(stderr, "Error: %s : %s\n", usbg_error_name(usbg_ret),
+				usbg_strerror(usbg_ret));
+		goto out;
+	}
+
+	/* If gadget is enable we have to disable it first */
+	if (udc[0] != '\0') {
+		usbg_ret = usbg_disable_gadget(g);
+		if (usbg_ret != USBG_SUCCESS) {
+			fprintf(stderr, "Error on USB disable gadget udc\n");
+			fprintf(stderr, "Error: %s : %s\n", usbg_error_name(usbg_ret),
+					usbg_strerror(usbg_ret));
+			goto out;
+		}
+	}
+
+	/* Remove gadget with USBG_RM_RECURSE flag to remove
+	 * also its configurations, functions and strings */
+	usbg_ret = usbg_rm_gadget(g, USBG_RM_RECURSE);
+	if (usbg_ret != USBG_SUCCESS) {
+		fprintf(stderr, "Error on USB gadget remove\n");
+		fprintf(stderr, "Error: %s : %s\n", usbg_error_name(usbg_ret),
+				usbg_strerror(usbg_ret));
+	}
+
+out:
+	return usbg_ret;
+}
+
+int main(void)
+{
+	int usbg_ret;
+	int ret = -EINVAL;
+	usbg_state *s;
+	usbg_gadget *g;
+	usbg_gadget_attrs g_attrs;
+
+	usbg_ret = usbg_init("/sys/kernel/config", &s);
+	if (usbg_ret != USBG_SUCCESS) {
+		fprintf(stderr, "Error on USB state init\n");
+		fprintf(stderr, "Error: %s : %s\n", usbg_error_name(usbg_ret),
+				usbg_strerror(usbg_ret));
+		goto out1;
+	}
+
+	g = usbg_get_first_gadget(s);
+	while (g != NULL) {
+		/* Get current gadget attrs to be compared */
+		usbg_ret = usbg_get_gadget_attrs(g, &g_attrs);
+		if (usbg_ret != USBG_SUCCESS) {
+			fprintf(stderr, "Error on USB get gadget attrs\n");
+			fprintf(stderr, "Error: %s : %s\n", usbg_error_name(usbg_ret),
+					usbg_strerror(usbg_ret));
+			goto out2;
+		}
+
+		/* Compare attrs with given values and remove if suitable */
+		if (g_attrs.idVendor == VENDOR && g_attrs.idProduct == PRODUCT) {
+			usbg_gadget *g_next = usbg_get_next_gadget(g);
+
+			usbg_ret = remove_gadget(g);
+			if (usbg_ret != USBG_SUCCESS)
+				goto out2;
+
+			g = g_next;
+		} else {
+			g = usbg_get_next_gadget(g);
+		}
+	}
+
+out2:
+	usbg_cleanup(s);
+out1:
+	return ret;
+}
diff --git a/include/usbg/usbg.h b/include/usbg/usbg.h
index 282485b..cb1cdcb 100644
--- a/include/usbg/usbg.h
+++ b/include/usbg/usbg.h
@@ -25,7 +25,6 @@
 
 /**
  * @file include/usbg/usbg.h
- * @todo Add usbg_remove_[gadget|config|function|binding] APIs
  * @todo Clean up static buffers in structures
  */
 
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux