1
0
Fork 0
mirror of https://github.com/linux-usb-gadgets/libusbgx.git synced 2025-07-26 02:45:06 +03:00

libusbg: rename gadget_*() -> usbg_*(), libusbg, and usbg.h

Rename library to libusbg. Moves the API include to usbg.h and
accordingly changes all API prefixes to usbg_*().

Signed-off-by: Matt Porter <mporter@linaro.org>
This commit is contained in:
Matt Porter 2014-01-04 15:23:14 -05:00
parent 8b074b73d1
commit a371518d64
12 changed files with 190 additions and 190 deletions

View file

@ -1,4 +1,4 @@
Installing libgadget:
Installing libusbg:
$ autoreconf -i
$ ./configure

View file

@ -2,7 +2,7 @@ include $(top_srcdir)/aminclude.am
SUBDIRS = src examples
ACLOCAL_AMFLAGS = -I m4
EXTRA_DIST = doxygen.cfg
library_includedir=$(includedir)/gadget
library_include_HEADERS = include/gadget/gadget.h
library_includedir=$(includedir)/usbg
library_include_HEADERS = include/usbg/usbg.h
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libgadget.pc
pkgconfig_DATA = libusbg.pc

6
README
View file

@ -1,7 +1,7 @@
libgadget
---------
libusbg
-------
libgadget is a C library encapsulating the kernel USB gadget-configfs
libusbg is a C library encapsulating the kernel USB gadget-configfs
userspace API functionality.
It provides routines for creating and parsing USB gadget devices using

View file

@ -1,9 +1,9 @@
AC_INIT([libgadget], [0.0.1], [matt.porter@linaro.org])
AC_INIT([libusbg], [0.0.1], [matt.porter@linaro.org])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AM_PROG_AR
AC_CONFIG_MACRO_DIR([m4])
LT_INIT
AC_CONFIG_FILES([Makefile src/Makefile examples/Makefile libgadget.pc])
AC_CONFIG_FILES([Makefile src/Makefile examples/Makefile libusbg.pc])
DX_INIT_DOXYGEN([$PACKAGE_NAME],[doxygen.cfg])
AC_OUTPUT

View file

@ -648,7 +648,7 @@ WARN_LOGFILE =
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
INPUT = $(SRCDIR)/include/gadget/ $(SRCDIR)/src $(SRCDIR)/examples/
INPUT = $(SRCDIR)/include/usbg/ $(SRCDIR)/src $(SRCDIR)/examples/
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is

View file

@ -2,4 +2,4 @@ bin_PROGRAMS = show-gadgets gadget-acm-ecm
gadget_acm_ecm_SOURCES = gadget-acm-ecm.c
show_gadgets_SOURCES = show-gadgets.c
AM_CPPFLAGS=-I../include/
AM_LDFLAGS=-L../src/ -lgadget
AM_LDFLAGS=-L../src/ -lusbg

View file

@ -16,7 +16,7 @@
#include <errno.h>
#include <stdio.h>
#include <gadget/gadget.h>
#include <usbg/usbg.h>
/**
* @file gadget-acm-ecm.c
@ -36,55 +36,55 @@ int main(void)
struct function *f_acm0, *f_acm1, *f_ecm;
int ret = -EINVAL;
s = gadget_init("/config");
s = usbg_init("/config");
if (!s) {
fprintf(stderr, "Error on USB gadget init\n");
goto error1;
}
g = gadget_create_gadget(s, "g1", VENDOR, PRODUCT);
g = usbg_create_gadget(s, "g1", VENDOR, PRODUCT);
if (!g) {
fprintf(stderr, "Error on create gadget\n");
goto error2;
}
gadget_set_gadget_serial_number(g, LANG_US_ENG, "0123456789");
gadget_set_gadget_manufacturer(g, LANG_US_ENG, "Foo Inc.");
gadget_set_gadget_product(g, LANG_US_ENG, "Bar Gadget");
usbg_set_gadget_serial_number(g, LANG_US_ENG, "0123456789");
usbg_set_gadget_manufacturer(g, LANG_US_ENG, "Foo Inc.");
usbg_set_gadget_product(g, LANG_US_ENG, "Bar Gadget");
f_acm0 = gadget_create_function(g, F_ACM, "usb0");
f_acm0 = usbg_create_function(g, F_ACM, "usb0");
if (!f_acm0) {
fprintf(stderr, "Error creating acm0 function\n");
goto error2;
}
f_acm1 = gadget_create_function(g, F_ACM, "usb1");
f_acm1 = usbg_create_function(g, F_ACM, "usb1");
if (!f_acm1) {
fprintf(stderr, "Error creating acm1 function\n");
goto error2;
}
f_ecm = gadget_create_function(g, F_ECM, "usb0");
f_ecm = usbg_create_function(g, F_ECM, "usb0");
if (!f_ecm) {
fprintf(stderr, "Error creating ecm function\n");
goto error2;
}
c = gadget_create_config(g, "c.1");
c = usbg_create_config(g, "c.1");
if (!c) {
fprintf(stderr, "Error creating config\n");
goto error2;
}
gadget_set_config_string(c, LANG_US_ENG, "CDC 2xACM+ECM");
gadget_add_config_function(c, "acm.GS0", f_acm0);
gadget_add_config_function(c, "acm.GS1", f_acm1);
gadget_add_config_function(c, "ecm.usb0", f_ecm);
usbg_set_config_string(c, LANG_US_ENG, "CDC 2xACM+ECM");
usbg_add_config_function(c, "acm.GS0", f_acm0);
usbg_add_config_function(c, "acm.GS1", f_acm1);
usbg_add_config_function(c, "ecm.usb0", f_ecm);
gadget_enable_gadget(g, DEFAULT_UDC);
usbg_enable_gadget(g, DEFAULT_UDC);
return 0;
error2:
gadget_cleanup(s);
usbg_cleanup(s);
error1:
return -EINVAL;

View file

@ -17,8 +17,8 @@
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <gadget/gadget.h>
#include <netinet/ether.h>
#include <usbg/usbg.h>
/**
* @file show-gadgets.c
@ -83,7 +83,7 @@ void show_config(struct config *c)
fprintf(stdout, " MaxPower\t\t%d\n", c->maxpower);
fprintf(stdout, " bmAttributes\t0x%02x\n", c->bmattrs);
fprintf(stdout, " configuration\t%s\n", c->str_cfg);
gadget_for_each_binding(b, c)
usbg_for_each_binding(b, c)
fprintf(stdout, " %s -> %s\n", b->name,b->target->name);
}
@ -96,21 +96,21 @@ int main(void)
struct binding *b;
struct function *f_acm0, *f_acm1, *f_ecm;
s = gadget_init("/config");
s = usbg_init("/config");
if (!s) {
fprintf(stderr, "Error on USB gadget init\n");
return -EINVAL;
}
gadget_for_each_gadget(g, s) {
usbg_for_each_gadget(g, s) {
show_gadget(g);
gadget_for_each_function(f, g)
usbg_for_each_function(f, g)
show_function(f);
gadget_for_each_config(c, g)
usbg_for_each_config(c, g)
show_config(c);
}
gadget_cleanup(s);
usbg_cleanup(s);
return 0;
}

View file

@ -19,13 +19,13 @@
#include <netinet/ether.h>
/**
* @file include/gadget/gadget.h
* @todo Add gadget_remove_[gadget|config|function|binding] APIs
* @file include/usbg/usbg.h
* @todo Add usbg_remove_[gadget|config|function|binding] APIs
* @todo Clean up static buffers in structures
*/
/**
* @addtogroup libgadget
* @addtogroup libusbg
* Public API for USB gadget-configfs library
* @{
*/
@ -193,17 +193,17 @@ struct binding
/* Library init and cleanup */
/**
* @brief Initialize the libgadget library state
* @brief Initialize the libusbg library state
* @param configfs_path Path to the mounted configfs filesystem
* @return Pointer to a state structure
*/
extern struct state *gadget_init(char *configfs_path);
extern struct state *usbg_init(char *configfs_path);
/**
* @brief Clean up the libgadget library state
* @brief Clean up the libusbg library state
* @param s Pointer to state
*/
extern void gadget_cleanup(struct state *s);
extern void usbg_cleanup(struct state *s);
/* USB gadget queries */
@ -213,7 +213,7 @@ extern void gadget_cleanup(struct state *s);
* @param name Name of the gadget device
* @return Pointer to gadget or NULL if a matching gadget isn't found
*/
extern struct gadget *gadget_get_gadget(struct state *s, const char *name);
extern struct gadget *usbg_get_gadget(struct state *s, const char *name);
/**
* @brief Get a function by name
@ -221,7 +221,7 @@ extern struct gadget *gadget_get_gadget(struct state *s, const char *name);
* @param name Name of the function
* @return Pointer to function or NULL if a matching function isn't found
*/
extern struct function *gadget_get_function(struct gadget *g, const char *name);
extern struct function *usbg_get_function(struct gadget *g, const char *name);
/**
* @brief Get a configuration by name
@ -229,7 +229,7 @@ extern struct function *gadget_get_function(struct gadget *g, const char *name);
* @param name Name of the configuration
* @return Pointer to config or NULL if a matching config isn't found
*/
extern struct config *gadget_get_config(struct gadget *g, const char *name);
extern struct config *usbg_get_config(struct gadget *g, const char *name);
/* USB gadget allocation and configuration */
@ -241,49 +241,49 @@ extern struct config *gadget_get_config(struct gadget *g, const char *name);
* @param product Gadget product ID
* @return Pointer to gadget or NULL if the gadget cannot be created
*/
extern struct gadget *gadget_create_gadget(struct state *s, char *name, int vendor, int product);
extern struct gadget *usbg_create_gadget(struct state *s, char *name, int vendor, int product);
/**
* @brief Set the USB gadget device class code
* @param g Pointer to gadget
* @param dclass USB device class code
*/
extern void gadget_set_gadget_device_class(struct gadget *g, int dclass);
extern void usbg_set_gadget_device_class(struct gadget *g, int dclass);
/**
* @brief Set the USB gadget protocol code
* @param g Pointer to gadget
* @param dprotocol USB protocol code
*/
extern void gadget_set_gadget_device_protocol(struct gadget *g, int dproto);
extern void usbg_set_gadget_device_protocol(struct gadget *g, int dproto);
/**
* @brief Set the USB gadget device subclass code
* @param g Pointer to gadget
* @param dsubclass USB device subclass code
*/
extern void gadget_set_gadget_device_subclass(struct gadget *g, int dsubclass);
extern void usbg_set_gadget_device_subclass(struct gadget *g, int dsubclass);
/**
* @brief Set the maximum packet size for a gadget
* @param g Pointer to gadget
* @param maxpacket Maximum packet size
*/
extern void gadget_set_gadget_device_max_packet(struct gadget *g, int maxpacket);
extern void usbg_set_gadget_device_max_packet(struct gadget *g, int maxpacket);
/**
* @brief Set the gadget device BCD release number
* @param g Pointer to gadget
* @param bcddevice BCD release number
*/
extern void gadget_set_gadget_device_bcd_device(struct gadget *g, int bcddevice);
extern void usbg_set_gadget_device_bcd_device(struct gadget *g, int bcddevice);
/**
* @brief Set the gadget device BCD USB version
* @param g Pointer to gadget
* @param bcdusb BCD USB version
*/
extern void gadget_set_gadget_device_bcd_usb(struct gadget *g, int bcdusb);
extern void usbg_set_gadget_device_bcd_usb(struct gadget *g, int bcdusb);
/**
* @brief Set the serial number for a gadget
@ -291,7 +291,7 @@ extern void gadget_set_gadget_device_bcd_usb(struct gadget *g, int bcdusb);
* @param lang USB language ID
* @param ser Serial number
*/
extern void gadget_set_gadget_serial_number(struct gadget *g, int lang, char *ser);
extern void usbg_set_gadget_serial_number(struct gadget *g, int lang, char *ser);
/**
* @brief Set the manufacturer name for a gadget
@ -299,7 +299,7 @@ extern void gadget_set_gadget_serial_number(struct gadget *g, int lang, char *se
* @param lang USB language ID
* @param mnf Manufacturer
*/
extern void gadget_set_gadget_manufacturer(struct gadget *g, int lang, char *mnf);
extern void usbg_set_gadget_manufacturer(struct gadget *g, int lang, char *mnf);
/**
* @brief Set the product name for a gadget
@ -307,7 +307,7 @@ extern void gadget_set_gadget_manufacturer(struct gadget *g, int lang, char *mnf
* @param lang USB language ID
* @param prd Product
*/
extern void gadget_set_gadget_product(struct gadget *g, int lang, char *prd);
extern void usbg_set_gadget_product(struct gadget *g, int lang, char *prd);
/* USB function allocation and configuration */
@ -318,7 +318,7 @@ extern void gadget_set_gadget_product(struct gadget *g, int lang, char *prd);
* @param instance Function instance name
* @return Pointer to function or NULL if it cannot be created
*/
extern struct function *gadget_create_function(struct gadget *g, enum function_type type, char *instance);
extern struct function *usbg_create_function(struct gadget *g, enum function_type type, char *instance);
/* USB configurations allocation and configuration */
@ -328,21 +328,21 @@ extern struct function *gadget_create_function(struct gadget *g, enum function_t
* @param name Name of configuration
* @return Pointer to configuration or NULL if it cannot be created
*/
extern struct config *gadget_create_config(struct gadget *g, char *name);
extern struct config *usbg_create_config(struct gadget *g, char *name);
/**
* @brief Set the configuration maximum power
* @param c Pointer to config
* @param maxpower Maximum power (in 2 mA units)
*/
extern void gadget_set_config_max_power(struct config *c, int maxpower);
extern void usbg_set_config_max_power(struct config *c, int maxpower);
/**
* @brief Set the configuration bitmap attributes
* @param c Pointer to config
* @param bmattrs Configuration characteristics
*/
extern void gadget_set_config_bm_attrs(struct config *c, int bmattrs);
extern void usbg_set_config_bm_attrs(struct config *c, int bmattrs);
/**
* @brief Set the configuration string
@ -350,7 +350,7 @@ extern void gadget_set_config_bm_attrs(struct config *c, int bmattrs);
* @param lang USB language ID
* @param string Configuration description
*/
extern void gadget_set_config_string(struct config *c, int lang, char *string);
extern void usbg_set_config_string(struct config *c, int lang, char *string);
/**
* @brief Add a function to a configuration
@ -359,7 +359,7 @@ extern void gadget_set_config_string(struct config *c, int lang, char *string);
* @param f Pointer to function
* @return 0 on success, -1 on failure.
*/
extern int gadget_add_config_function(struct config *c, char *name, struct function *f);
extern int usbg_add_config_function(struct config *c, char *name, struct function *f);
/* USB gadget setup and teardown */
@ -368,20 +368,20 @@ extern int gadget_add_config_function(struct config *c, char *name, struct funct
* @param udc_list Pointer to pointer to dirent pointer
* @return Number of UDC devices on success, -1 on failure
*/
extern int gadget_get_udcs(struct dirent ***udc_list);
extern int usbg_get_udcs(struct dirent ***udc_list);
/**
* @brief Enable a USB gadget device
* @param g Pointer to gadget
* @param udc Name of UDC to enable gadget
*/
extern void gadget_enable_gadget(struct gadget *g, char *udc);
extern void usbg_enable_gadget(struct gadget *g, char *udc);
/**
* @brief Disable a USB gadget device
* @param g Pointer to gadget
*/
extern void gadget_disable_gadget(struct gadget *g);
extern void usbg_disable_gadget(struct gadget *g);
/*
* USB function-specific attribute configuration
@ -392,45 +392,45 @@ extern void gadget_disable_gadget(struct gadget *g);
* @param f Pointer to function
* @param addr Pointer to Ethernet address
*/
extern void gadget_set_net_dev_addr(struct function *f, struct ether_addr *addr);
extern void usbg_set_net_dev_addr(struct function *f, struct ether_addr *addr);
/**
* @brief Set USB function network host address
* @param f Pointer to function
* @param addr Pointer to Ethernet address
*/
extern void gadget_set_net_host_addr(struct function *f, struct ether_addr *addr);
extern void usbg_set_net_host_addr(struct function *f, struct ether_addr *addr);
/**
* @brief Set USB function network qmult
* @param f Pointer to function
* @param qmult Queue length multiplier
*/
extern void gadget_set_net_qmult(struct function *f, int qmult);
extern void usbg_set_net_qmult(struct function *f, int qmult);
/**
* @def gadget_for_each_gadget(g, s)
* @def usbg_for_each_gadget(g, s)
* Iterates over each gadget
*/
#define gadget_for_each_gadget(g, s) TAILQ_FOREACH(g, &s->gadgets, gnode)
#define usbg_for_each_gadget(g, s) TAILQ_FOREACH(g, &s->gadgets, gnode)
/**
* @def gadget_for_each_function(f, g)
* @def usbg_for_each_function(f, g)
* Iterates over each function
*/
#define gadget_for_each_function(f, g) TAILQ_FOREACH(f, &g->functions, fnode)
#define usbg_for_each_function(f, g) TAILQ_FOREACH(f, &g->functions, fnode)
/**
* @def gadget_for_each_config(c, g)
* @def usbg_for_each_config(c, g)
* Iterates over each config
*/
#define gadget_for_each_config(c, g) TAILQ_FOREACH(c, &g->configs, cnode)
#define usbg_for_each_config(c, g) TAILQ_FOREACH(c, &g->configs, cnode)
/**
* @def gadget_for_each_binding(b, c)
* @def usbg_for_each_binding(b, c)
* Iterates over each binding
*/
#define gadget_for_each_binding(b, c) TAILQ_FOREACH(b, &c->bindings, bnode)
#define usbg_for_each_binding(b, c) TAILQ_FOREACH(b, &c->bindings, bnode)
/**
* @}

View file

@ -3,9 +3,9 @@ exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
Name: libgadget
Name: libusbg
Description: USB gadget-configfs library
Requires:
Version: @PACKAGE_VERSION@
Libs: -L${libdir} -lgadget
Libs: -L${libdir} -lusbg
Cflags: -I${includedir}

View file

@ -1,4 +1,4 @@
lib_LTLIBRARIES = libgadget.la
libgadget_la_SOURCES = gadget.c
libgadget_la_LDFLAGS = -version-info 0:1:0
lib_LTLIBRARIES = libusbg.la
libusbg_la_SOURCES = usbg.c
libusbg_la_LDFLAGS = -version-info 0:1:0
AM_CPPFLAGS=-I../include/

View file

@ -16,7 +16,7 @@
#include <dirent.h>
#include <errno.h>
#include <gadget/gadget.h>
#include <usbg/usbg.h>
#include <netinet/ether.h>
#include <stdio.h>
#include <stdlib.h>
@ -27,7 +27,7 @@
#include <unistd.h>
/**
* @file gadget.c
* @file usbg.c
* @todo Handle buffer overflows
* @todo Error checking and return code propagation
*/
@ -44,7 +44,7 @@
__func__, strerror(errno), ##__VA_ARGS__);\
} while (0)
static int gadget_lookup_function_type(char *name)
static int usbg_lookup_function_type(char *name)
{
int i = 0;
int max = sizeof(function_names)/sizeof(char *);
@ -80,7 +80,7 @@ static int file_select(const struct dirent *dent)
return 1;
}
static char *gadget_read_buf(char *path, char *name, char *file, char *buf)
static char *usbg_read_buf(char *path, char *name, char *file, char *buf)
{
char p[256];
FILE *fp;
@ -100,30 +100,30 @@ out:
return ret;
}
static int gadget_read_int(char *path, char *name, char *file, int base)
static int usbg_read_int(char *path, char *name, char *file, int base)
{
char buf[256];
if (gadget_read_buf(path, name, file, buf))
if (usbg_read_buf(path, name, file, buf))
return strtol(buf, NULL, base);
else
return 0;
}
#define gadget_read_dec(p, n, f) gadget_read_int(p, n, f, 10)
#define gadget_read_hex(p, n, f) gadget_read_int(p, n, f, 16)
#define usbg_read_dec(p, n, f) usbg_read_int(p, n, f, 10)
#define usbg_read_hex(p, n, f) usbg_read_int(p, n, f, 16)
static void gadget_read_string(char *path, char *name, char *file, char *buf)
static void usbg_read_string(char *path, char *name, char *file, char *buf)
{
char *p;
gadget_read_buf(path, name, file, buf);
usbg_read_buf(path, name, file, buf);
if ((p = strchr(buf, '\n')) != NULL)
*p = '\0';
}
static void gadget_write_buf(char *path, char *name, char *file, char *buf)
static void usbg_write_buf(char *path, char *name, char *file, char *buf)
{
char p[256];
FILE *fp;
@ -141,24 +141,24 @@ static void gadget_write_buf(char *path, char *name, char *file, char *buf)
fclose(fp);
}
static void gadget_write_int(char *path, char *name, char *file, int value, char *str)
static void usbg_write_int(char *path, char *name, char *file, int value, char *str)
{
char buf[256];
sprintf(buf, str, value);
gadget_write_buf(path, name, file, buf);
usbg_write_buf(path, name, file, buf);
}
#define gadget_write_dec(p, n, f, v) gadget_write_int(p, n, f, v, "%d\n")
#define gadget_write_hex16(p, n, f, v) gadget_write_int(p, n, f, v, "0x%04x\n")
#define gadget_write_hex8(p, n, f, v) gadget_write_int(p, n, f, v, "0x%02x\n")
#define usbg_write_dec(p, n, f, v) usbg_write_int(p, n, f, v, "%d\n")
#define usbg_write_hex16(p, n, f, v) usbg_write_int(p, n, f, v, "0x%04x\n")
#define usbg_write_hex8(p, n, f, v) usbg_write_int(p, n, f, v, "0x%02x\n")
static void gadget_write_string(char *path, char *name, char *file, char *buf)
static void usbg_write_string(char *path, char *name, char *file, char *buf)
{
gadget_write_buf(path, name, file, buf);
usbg_write_buf(path, name, file, buf);
}
static void gadget_parse_function_attrs(struct function *f)
static void usbg_parse_function_attrs(struct function *f)
{
struct ether_addr *addr;
char str_addr[40];
@ -167,31 +167,31 @@ static void gadget_parse_function_attrs(struct function *f)
case F_SERIAL:
case F_ACM:
case F_OBEX:
f->attr.serial.port_num = gadget_read_dec(f->path, f->name, "port_num");
f->attr.serial.port_num = usbg_read_dec(f->path, f->name, "port_num");
break;
case F_ECM:
case F_SUBSET:
case F_NCM:
case F_EEM:
case F_RNDIS:
gadget_read_string(f->path, f->name, "dev_addr", str_addr);
usbg_read_string(f->path, f->name, "dev_addr", str_addr);
addr = ether_aton(str_addr);
memcpy(&f->attr.net.dev_addr, addr, 6);
gadget_read_string(f->path, f->name, "host_addr", str_addr);
usbg_read_string(f->path, f->name, "host_addr", str_addr);
addr = ether_aton(str_addr);
memcpy(&f->attr.net.host_addr, addr, 6);
gadget_read_string(f->path, f->name, "ifname", f->attr.net.ifname);
f->attr.net.qmult = gadget_read_dec(f->path, f->name, "qmult");
usbg_read_string(f->path, f->name, "ifname", f->attr.net.ifname);
f->attr.net.qmult = usbg_read_dec(f->path, f->name, "qmult");
break;
case F_PHONET:
gadget_read_string(f->path, f->name, "ifname", f->attr.phonet.ifname);
usbg_read_string(f->path, f->name, "ifname", f->attr.phonet.ifname);
break;
default:
ERROR("Unsupported function type\n");
}
}
static int gadget_parse_functions(char *path, struct gadget *g)
static int usbg_parse_functions(char *path, struct gadget *g)
{
struct function *f;
int i, n;
@ -208,22 +208,22 @@ static int gadget_parse_functions(char *path, struct gadget *g)
f->parent = g;
strcpy(f->name, dent[i]->d_name);
strcpy(f->path, fpath);
f->type = gadget_lookup_function_type(strtok(dent[i]->d_name, "."));
gadget_parse_function_attrs(f);
f->type = usbg_lookup_function_type(strtok(dent[i]->d_name, "."));
usbg_parse_function_attrs(f);
TAILQ_INSERT_TAIL(&g->functions, f, fnode);
free(dent[i]);
}
free(dent);
}
static void gadget_parse_config_attrs(struct config *c)
static void usbg_parse_config_attrs(struct config *c)
{
c->maxpower = gadget_read_dec(c->path, c->name, "MaxPower");
c->bmattrs = gadget_read_hex(c->path, c->name, "bmAttributes");
gadget_read_string(c->path, c->name, "strings/0x409/configuration", c->str_cfg);
c->maxpower = usbg_read_dec(c->path, c->name, "MaxPower");
c->bmattrs = usbg_read_hex(c->path, c->name, "bmAttributes");
usbg_read_string(c->path, c->name, "strings/0x409/configuration", c->str_cfg);
}
static void gadget_parse_config_bindings(struct config *c)
static void usbg_parse_config_bindings(struct config *c)
{
int i, n;
struct dirent **dent;
@ -263,7 +263,7 @@ static void gadget_parse_config_bindings(struct config *c)
free(dent);
}
static int gadget_parse_configs(char *path, struct gadget *g)
static int usbg_parse_configs(char *path, struct gadget *g)
{
struct config *c;
int i, n;
@ -280,36 +280,36 @@ static int gadget_parse_configs(char *path, struct gadget *g)
c->parent = g;
strcpy(c->name, dent[i]->d_name);
strcpy(c->path, cpath);
gadget_parse_config_attrs(c);
gadget_parse_config_bindings(c);
usbg_parse_config_attrs(c);
usbg_parse_config_bindings(c);
TAILQ_INSERT_TAIL(&g->configs, c, cnode);
free(dent[i]);
}
free(dent);
}
static void gadget_parse_attrs(char *path, struct gadget *g)
static void usbg_parse_attrs(char *path, struct gadget *g)
{
/* UDC bound to, if any */
gadget_read_string(path, g->name, "UDC", g->udc);
usbg_read_string(path, g->name, "UDC", g->udc);
/* Actual attributes */
g->dclass = gadget_read_hex(path, g->name, "bDeviceClass");
g->dsubclass = gadget_read_hex(path, g->name, "bDeviceSubClass");
g->dproto = gadget_read_hex(path, g->name, "bDeviceProtocol");
g->maxpacket = gadget_read_hex(path, g->name, "bMaxPacketSize0");
g->bcddevice = gadget_read_hex(path, g->name, "bcdDevice");
g->bcdusb = gadget_read_hex(path, g->name, "bcdUSB");
g->vendor = gadget_read_hex(path, g->name, "idVendor");
g->product = gadget_read_hex(path, g->name, "idProduct");
g->dclass = usbg_read_hex(path, g->name, "bDeviceClass");
g->dsubclass = usbg_read_hex(path, g->name, "bDeviceSubClass");
g->dproto = usbg_read_hex(path, g->name, "bDeviceProtocol");
g->maxpacket = usbg_read_hex(path, g->name, "bMaxPacketSize0");
g->bcddevice = usbg_read_hex(path, g->name, "bcdDevice");
g->bcdusb = usbg_read_hex(path, g->name, "bcdUSB");
g->vendor = usbg_read_hex(path, g->name, "idVendor");
g->product = usbg_read_hex(path, g->name, "idProduct");
/* Strings - hardcoded to U.S. English only for now */
gadget_read_string(path, g->name, "strings/0x409/serialnumber", g->str_ser);
gadget_read_string(path, g->name, "strings/0x409/manufacturer", g->str_mnf);
gadget_read_string(path, g->name, "strings/0x409/product", g->str_prd);
usbg_read_string(path, g->name, "strings/0x409/serialnumber", g->str_ser);
usbg_read_string(path, g->name, "strings/0x409/manufacturer", g->str_mnf);
usbg_read_string(path, g->name, "strings/0x409/product", g->str_prd);
}
static int gadget_parse_gadgets(char *path, struct state *s)
static int usbg_parse_gadgets(char *path, struct state *s)
{
struct gadget *g;
int i, n;
@ -323,9 +323,9 @@ static int gadget_parse_gadgets(char *path, struct state *s)
strcpy(g->name, dent[i]->d_name);
strcpy(g->path, s->path);
g->parent = s;
gadget_parse_attrs(path, g);
gadget_parse_functions(path, g);
gadget_parse_configs(path, g);
usbg_parse_attrs(path, g);
usbg_parse_functions(path, g);
usbg_parse_configs(path, g);
TAILQ_INSERT_TAIL(&s->gadgets, g, gnode);
free(dent[i]);
}
@ -334,11 +334,11 @@ static int gadget_parse_gadgets(char *path, struct state *s)
return 0;
}
static int gadget_init_state(char *path, struct state *s)
static int usbg_init_state(char *path, struct state *s)
{
strcpy(s->path, path);
if (gadget_parse_gadgets(path, s) < 0) {
if (usbg_parse_gadgets(path, s) < 0) {
ERRORNO("unable to parse %s\n", path);
return -1;
}
@ -350,7 +350,7 @@ static int gadget_init_state(char *path, struct state *s)
* User API
*/
struct state *gadget_init(char *configfs_path)
struct state *usbg_init(char *configfs_path)
{
int ret;
struct stat sts;
@ -371,7 +371,7 @@ struct state *gadget_init(char *configfs_path)
s = malloc(sizeof(struct state));
if (s)
gadget_init_state(path, s);
usbg_init_state(path, s);
else
ERRORNO("couldn't init gadget state\n");
@ -379,7 +379,7 @@ out:
return s;
}
void gadget_cleanup(struct state *s)
void usbg_cleanup(struct state *s)
{
struct gadget *g;
struct config *c;
@ -410,7 +410,7 @@ void gadget_cleanup(struct state *s)
free(s);
}
struct gadget *gadget_get_gadget(struct state *s, const char *name)
struct gadget *usbg_get_gadget(struct state *s, const char *name)
{
struct gadget *g;
@ -421,7 +421,7 @@ struct gadget *gadget_get_gadget(struct state *s, const char *name)
return NULL;
}
struct function *gadget_get_function(struct gadget *g, const char *name)
struct function *usbg_get_function(struct gadget *g, const char *name)
{
struct function *f;
@ -432,7 +432,7 @@ struct function *gadget_get_function(struct gadget *g, const char *name)
return NULL;
}
struct config *gadget_get_config(struct gadget *g, const char *name)
struct config *usbg_get_config(struct gadget *g, const char *name)
{
struct config *c;
@ -443,7 +443,7 @@ struct config *gadget_get_config(struct gadget *g, const char *name)
return NULL;
}
struct binding *gadget_get_binding(struct config *c, const char *name)
struct binding *usbg_get_binding(struct config *c, const char *name)
{
struct binding *b;
@ -454,7 +454,7 @@ struct binding *gadget_get_binding(struct config *c, const char *name)
return NULL;
}
struct binding *gadget_get_link_binding(struct config *c, struct function *f)
struct binding *usbg_get_link_binding(struct config *c, struct function *f)
{
struct binding *b;
@ -465,7 +465,7 @@ struct binding *gadget_get_link_binding(struct config *c, struct function *f)
return NULL;
}
struct gadget *gadget_create_gadget(struct state *s, char *name,
struct gadget *usbg_create_gadget(struct state *s, char *name,
int vendor, int product)
{
char gpath[256];
@ -475,7 +475,7 @@ struct gadget *gadget_create_gadget(struct state *s, char *name,
if (!s)
return NULL;
g = gadget_get_gadget(s, name);
g = usbg_get_gadget(s, name);
if (g) {
ERROR("duplicate gadget name\n");
return NULL;
@ -503,8 +503,8 @@ struct gadget *gadget_create_gadget(struct state *s, char *name,
g->vendor = vendor;
g->product = product;
gadget_write_hex16(s->path, name, "idVendor", vendor);
gadget_write_hex16(s->path, name, "idProduct", product);
usbg_write_hex16(s->path, name, "idVendor", vendor);
usbg_write_hex16(s->path, name, "idProduct", product);
/* Insert in string order */
if (TAILQ_EMPTY(&s->gadgets) ||
@ -522,43 +522,43 @@ struct gadget *gadget_create_gadget(struct state *s, char *name,
return g;
}
void gadget_set_gadget_device_class(struct gadget *g, int dclass)
void usbg_set_gadget_device_class(struct gadget *g, int dclass)
{
g->dclass = dclass;
gadget_write_hex8(g->path, "", "bDeviceClass", dclass);
usbg_write_hex8(g->path, "", "bDeviceClass", dclass);
}
void gadget_set_gadget_device_protocol(struct gadget *g, int dproto)
void usbg_set_gadget_device_protocol(struct gadget *g, int dproto)
{
g->dproto = dproto;
gadget_write_hex8(g->path, "", "bDeviceProtocol", dproto);
usbg_write_hex8(g->path, "", "bDeviceProtocol", dproto);
}
void gadget_set_gadget_device_subclass(struct gadget *g, int dsubclass)
void usbg_set_gadget_device_subclass(struct gadget *g, int dsubclass)
{
g->dsubclass = dsubclass;
gadget_write_hex8(g->path, "", "bDeviceSubClass", dsubclass);
usbg_write_hex8(g->path, "", "bDeviceSubClass", dsubclass);
}
void gadget_set_gadget_device_max_packet(struct gadget *g, int maxpacket)
void usbg_set_gadget_device_max_packet(struct gadget *g, int maxpacket)
{
g->maxpacket = maxpacket;
gadget_write_hex8(g->path, "", "bMaxPacketSize0", maxpacket);
usbg_write_hex8(g->path, "", "bMaxPacketSize0", maxpacket);
}
void gadget_set_gadget_device_bcd_device(struct gadget *g, int bcddevice)
void usbg_set_gadget_device_bcd_device(struct gadget *g, int bcddevice)
{
g->bcddevice = bcddevice;
gadget_write_hex16(g->path, "", "bcdDevice", bcddevice);
usbg_write_hex16(g->path, "", "bcdDevice", bcddevice);
}
void gadget_set_gadget_device_bcd_usb(struct gadget *g, int bcdusb)
void usbg_set_gadget_device_bcd_usb(struct gadget *g, int bcdusb)
{
g->bcdusb = bcdusb;
gadget_write_hex16(g->path, "", "bcdUSB", bcdusb);
usbg_write_hex16(g->path, "", "bcdUSB", bcdusb);
}
void gadget_set_gadget_serial_number(struct gadget *g, int lang, char *serno)
void usbg_set_gadget_serial_number(struct gadget *g, int lang, char *serno)
{
char path[256];
@ -568,10 +568,10 @@ void gadget_set_gadget_serial_number(struct gadget *g, int lang, char *serno)
strcpy(g->str_ser, serno);
gadget_write_string(path, "", "serialnumber", serno);
usbg_write_string(path, "", "serialnumber", serno);
}
void gadget_set_gadget_manufacturer(struct gadget *g, int lang, char *mnf)
void usbg_set_gadget_manufacturer(struct gadget *g, int lang, char *mnf)
{
char path[256];
@ -581,10 +581,10 @@ void gadget_set_gadget_manufacturer(struct gadget *g, int lang, char *mnf)
strcpy(g->str_mnf, mnf);
gadget_write_string(path, "", "manufacturer", mnf);
usbg_write_string(path, "", "manufacturer", mnf);
}
void gadget_set_gadget_product(struct gadget *g, int lang, char *prd)
void usbg_set_gadget_product(struct gadget *g, int lang, char *prd)
{
char path[256];
@ -594,10 +594,10 @@ void gadget_set_gadget_product(struct gadget *g, int lang, char *prd)
strcpy(g->str_prd, prd);
gadget_write_string(path, "", "product", prd);
usbg_write_string(path, "", "product", prd);
}
struct function *gadget_create_function(struct gadget *g, enum function_type type, char *instance)
struct function *usbg_create_function(struct gadget *g, enum function_type type, char *instance)
{
char fpath[256];
char name[256];
@ -611,7 +611,7 @@ struct function *gadget_create_function(struct gadget *g, enum function_type typ
* @todo Check for legal function type
*/
sprintf(name, "%s.%s", function_names[type], instance);
f = gadget_get_function(g, name);
f = usbg_get_function(g, name);
if (f) {
ERROR("duplicate function name\n");
return NULL;
@ -635,7 +635,7 @@ struct function *gadget_create_function(struct gadget *g, enum function_type typ
sprintf(f->path, "%s/%s/%s", g->path, g->name, "functions");
f->type = type;
gadget_parse_function_attrs(f);
usbg_parse_function_attrs(f);
/* Insert in string order */
if (TAILQ_EMPTY(&g->functions) ||
@ -653,7 +653,7 @@ struct function *gadget_create_function(struct gadget *g, enum function_type typ
return f;
}
struct config *gadget_create_config(struct gadget *g, char *name)
struct config *usbg_create_config(struct gadget *g, char *name)
{
char cpath[256];
struct config *c, *cur;
@ -665,7 +665,7 @@ struct config *gadget_create_config(struct gadget *g, char *name)
/**
* @todo Check for legal configuration name
*/
c = gadget_get_config(g, name);
c = usbg_get_config(g, name);
if (c) {
ERROR("duplicate configuration name\n");
return NULL;
@ -705,19 +705,19 @@ struct config *gadget_create_config(struct gadget *g, char *name)
return c;
}
void gadget_set_config_max_power(struct config *c, int maxpower)
void usbg_set_config_max_power(struct config *c, int maxpower)
{
c->maxpower = maxpower;
gadget_write_dec(c->path, c->name, "MaxPower", maxpower);
usbg_write_dec(c->path, c->name, "MaxPower", maxpower);
}
void gadget_set_config_bm_attrs(struct config *c, int bmattrs)
void usbg_set_config_bm_attrs(struct config *c, int bmattrs)
{
c->bmattrs = bmattrs;
gadget_write_hex8(c->path, c->name, "bmAttributes", bmattrs);
usbg_write_hex8(c->path, c->name, "bmAttributes", bmattrs);
}
void gadget_set_config_string(struct config *c, int lang, char *str)
void usbg_set_config_string(struct config *c, int lang, char *str)
{
char path[256];
@ -727,10 +727,10 @@ void gadget_set_config_string(struct config *c, int lang, char *str)
strcpy(c->str_cfg, str);
gadget_write_string(path, "", "configuration", str);
usbg_write_string(path, "", "configuration", str);
}
int gadget_add_config_function(struct config *c, char *name, struct function *f)
int usbg_add_config_function(struct config *c, char *name, struct function *f)
{
char bpath[256];
char fpath[256];
@ -741,13 +741,13 @@ int gadget_add_config_function(struct config *c, char *name, struct function *f)
if (!c || !f)
return ret;
b = gadget_get_binding(c, name);
b = usbg_get_binding(c, name);
if (b) {
ERROR("duplicate binding name\n");
return ret;
}
b = gadget_get_link_binding(c, f);
b = usbg_get_link_binding(c, f);
if (b) {
ERROR("duplicate binding link\n");
return ret;
@ -788,19 +788,19 @@ int gadget_add_config_function(struct config *c, char *name, struct function *f)
return 0;
}
int gadget_get_udcs(struct dirent ***udc_list)
int usbg_get_udcs(struct dirent ***udc_list)
{
return scandir("/sys/class/udc", udc_list, file_select, alphasort);
}
void gadget_enable_gadget(struct gadget *g, char *udc)
void usbg_enable_gadget(struct gadget *g, char *udc)
{
char gudc[256];
struct dirent **udc_list;
int n;
if (!udc) {
n = gadget_get_udcs(&udc_list);
n = usbg_get_udcs(&udc_list);
if (!n)
return;
strcpy(gudc, udc_list[0]->d_name);
@ -811,41 +811,41 @@ void gadget_enable_gadget(struct gadget *g, char *udc)
strcpy (gudc, udc);
strcpy(g->udc, gudc);
gadget_write_string(g->path, g->name, "UDC", gudc);
usbg_write_string(g->path, g->name, "UDC", gudc);
}
void gadget_disable_gadget(struct gadget *g)
void usbg_disable_gadget(struct gadget *g)
{
strcpy(g->udc, "");
gadget_write_string(g->path, g->name, "UDC", "");
usbg_write_string(g->path, g->name, "UDC", "");
}
/*
* USB function-specific attribute configuration
*/
void gadget_set_net_dev_addr(struct function *f, struct ether_addr *dev_addr)
void usbg_set_net_dev_addr(struct function *f, struct ether_addr *dev_addr)
{
char *str_addr;
memcpy(&f->attr.net.dev_addr, dev_addr, 6);
str_addr = ether_ntoa(dev_addr);
gadget_write_string(f->path, f->name, "dev_addr", str_addr);
usbg_write_string(f->path, f->name, "dev_addr", str_addr);
}
void gadget_set_net_host_addr(struct function *f, struct ether_addr *host_addr)
void usbg_set_net_host_addr(struct function *f, struct ether_addr *host_addr)
{
char *str_addr;
memcpy(&f->attr.net.host_addr, host_addr, 6);
str_addr = ether_ntoa(host_addr);
gadget_write_string(f->path, f->name, "host_addr", str_addr);
usbg_write_string(f->path, f->name, "host_addr", str_addr);
}
void gadget_set_net_qmult(struct function *f, int qmult)
void usbg_set_net_qmult(struct function *f, int qmult)
{
f->attr.net.qmult = qmult;
gadget_write_dec(f->path, f->name, "qmult", qmult);
usbg_write_dec(f->path, f->name, "qmult", qmult);
}