summaryrefslogtreecommitdiff
path: root/include/usbg
diff options
context:
space:
mode:
authortaeyoung <ty317.kim@samsung.com>2016-09-23 20:23:57 +0900
committertaeyoung <ty317.kim@samsung.com>2016-09-23 20:24:32 +0900
commit9ddeb24a02bff238a8c34688bd3e31e2a391c6f4 (patch)
tree6bce16ed577e3c1d432fa8aa154375fdc4753176 /include/usbg
parentaf80c789ed18bffe59ff815f0fddabbda56b9442 (diff)
downloadlibusbg-9ddeb24a02bff238a8c34688bd3e31e2a391c6f4.tar.gz
libusbg-9ddeb24a02bff238a8c34688bd3e31e2a391c6f4.tar.bz2
libusbg-9ddeb24a02bff238a8c34688bd3e31e2a391c6f4.zip
Revert "Imported Upstream version 0.0.1"
This reverts commit af80c789ed18bffe59ff815f0fddabbda56b9442. Change-Id: I21d25ee142e12b9111664bd7ce3b2b190a56bb88
Diffstat (limited to 'include/usbg')
-rw-r--r--include/usbg/usbg.h612
-rw-r--r--include/usbg/usbg_internal.h174
2 files changed, 60 insertions, 726 deletions
diff --git a/include/usbg/usbg.h b/include/usbg/usbg.h
index bcf221d..1407f10 100644
--- a/include/usbg/usbg.h
+++ b/include/usbg/usbg.h
@@ -22,20 +22,15 @@
#include <netinet/ether.h>
#include <stdint.h>
#include <limits.h>
-#include <stdbool.h>
-#include <stdio.h> /* For FILE * */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
/**
* @file include/usbg/usbg.h
+ * @todo Add usbg_remove_[gadget|config|function|binding] APIs
* @todo Clean up static buffers in structures
*/
/**
- * @addtogroup libusbgx
+ * @addtogroup libusbg
* Public API for USB gadget-configfs library
* @{
*/
@@ -44,21 +39,9 @@ extern "C" {
#define LANG_US_ENG 0x0409
#define DEFAULT_CONFIG_LABEL "config"
-/* This one has to be at least 18 bytes to hold network address */
#define USBG_MAX_STR_LENGTH 256
#define USBG_MAX_PATH_LENGTH PATH_MAX
#define USBG_MAX_NAME_LENGTH 40
-/* Dev name for ffs is a part of function name, we subtract 4 char for "ffs." */
-#define USBG_MAX_DEV_LENGTH (USBG_MAX_NAME_LENGTH - 4)
-/* ConfigFS just like SysFS uses page size as max size of file content */
-#define USBG_MAX_FILE_SIZE 4096
-
-/**
- * @brief Additional option for usbg_rm_* functions.
- * @details This option allows to remove all content
- * of gadget/config/function recursively.
- */
-#define USBG_RM_RECURSE 1
/*
* Internal structures
@@ -68,7 +51,6 @@ struct usbg_gadget;
struct usbg_config;
struct usbg_function;
struct usbg_binding;
-struct usbg_udc;
/**
* @brief State of the gadget devices in the system
@@ -96,29 +78,6 @@ typedef struct usbg_function usbg_function;
typedef struct usbg_binding usbg_binding;
/**
- * @brief USB device controller
- */
-typedef struct usbg_udc usbg_udc;
-
-/**
- * @typedef usbg_gadget_attr
- * @brief Gadget attributes which can be set using
- * usbg_set_gadget_attr() function.
- */
-typedef enum {
- USBG_GADGET_ATTR_MIN = 0,
- BCD_USB = USBG_GADGET_ATTR_MIN,
- B_DEVICE_CLASS,
- B_DEVICE_SUB_CLASS,
- B_DEVICE_PROTOCOL,
- B_MAX_PACKET_SIZE_0,
- ID_VENDOR,
- ID_PRODUCT,
- BCD_DEVICE,
- USBG_GADGET_ATTR_MAX,
-} usbg_gadget_attr;
-
-/**
* @typedef usbg_gadget_attrs
* @brief USB gadget device attributes
*/
@@ -134,14 +93,6 @@ typedef struct
uint16_t bcdDevice;
} usbg_gadget_attrs;
-typedef enum {
- USBG_GADGET_STR_MIN = 0,
- STR_PRODUCT = USBG_GADGET_STR_MIN,
- STR_MANUFACTURER,
- STR_SERIAL_NUMBER,
- USBG_GADGET_STR_MAX,
-} usbg_gadget_str;
-
/**
* @typedef usbg_gadget_strs
* @brief USB gadget device strings
@@ -178,8 +129,7 @@ typedef struct
*/
typedef enum
{
- USBG_FUNCTION_TYPE_MIN = 0,
- F_SERIAL = USBG_FUNCTION_TYPE_MIN,
+ F_SERIAL,
F_ACM,
F_OBEX,
F_ECM,
@@ -188,11 +138,6 @@ typedef enum
F_EEM,
F_RNDIS,
F_PHONET,
- F_FFS,
- F_MASS_STORAGE,
- F_MIDI,
- F_LOOPBACK,
- USBG_FUNCTION_TYPE_MAX,
} usbg_function_type;
/**
@@ -210,7 +155,7 @@ typedef struct {
typedef struct {
struct ether_addr dev_addr;
struct ether_addr host_addr;
- const char *ifname;
+ char ifname[USBG_MAX_STR_LENGTH];
int qmult;
} usbg_f_net_attrs;
@@ -219,66 +164,10 @@ typedef struct {
* @brief Attributes for the phonet USB function
*/
typedef struct {
- const char *ifname;
+ char ifname[USBG_MAX_STR_LENGTH];
} usbg_f_phonet_attrs;
/**
- * @typedef usbg_f_ffs_attrs
- * @brief Attributes for function fs based functions
- * @details This is read only and a virtual attribute, it is non present
- * on config fs.
- */
-typedef struct {
- const char *dev_name;
-} usbg_f_ffs_attrs;
-
-/**
- * @typedef usbg_f_ms_attrs
- * @brief Attributes for mass storage functions
- */
-typedef struct usbg_f_ms_lun_attrs {
- int id;
- bool cdrom;
- bool ro;
- bool nofua;
- bool removable;
- const char *filename;
-} usbg_f_ms_lun_attrs;
-
-/**
- * @typedef usbg_f_ms_attrs
- * @brief Attributes for mass storage functions
- */
-typedef struct {
- bool stall;
- int nluns;
- usbg_f_ms_lun_attrs **luns;
-} usbg_f_ms_attrs;
-
-/**
- * @typedef usbg_f_midi_attrs
- * @brief Attributes for the MIDI function
- */
-typedef struct {
- int index;
- const char *id;
- unsigned int in_ports;
- unsigned int out_ports;
- unsigned int buflen;
- unsigned int qlen;
-} usbg_f_midi_attrs;
-
-
-/**
- * @typedef usbg_f_loopback_attrs
- * @brief Attributes for Loopback function
- */
-typedef struct {
- unsigned int buflen;
- unsigned int qlen;
-} usbg_f_loopback_attrs;
-
-/**
* @typedef attrs
* @brief Attributes for a given function type
*/
@@ -286,29 +175,6 @@ typedef union {
usbg_f_serial_attrs serial;
usbg_f_net_attrs net;
usbg_f_phonet_attrs phonet;
- usbg_f_ffs_attrs ffs;
- usbg_f_ms_attrs ms;
- usbg_f_midi_attrs midi;
- usbg_f_loopback_attrs loopback;
-} usbg_f_attrs;
-
-typedef enum {
- USBG_F_ATTRS_SERIAL = 1,
- USBG_F_ATTRS_NET,
- USBG_F_ATTRS_PHONET,
- USBG_F_ATTRS_FFS,
- USBG_F_ATTRS_MS,
- USBG_F_ATTRS_MIDI,
- USBG_F_ATTRS_LOOPBACK,
-} usbg_f_attrs_type;
-
-typedef struct {
- int attrs_type;
-} usbg_f_attrs_header;
-
-typedef struct {
- usbg_f_attrs_header header;
- usbg_f_attrs attrs;
} usbg_function_attrs;
/* Error codes */
@@ -329,22 +195,17 @@ typedef enum {
USBG_ERROR_BUSY = -8,
USBG_ERROR_NOT_SUPPORTED = -9,
USBG_ERROR_PATH_TOO_LONG = -10,
- USBG_ERROR_INVALID_FORMAT = -11,
- USBG_ERROR_MISSING_TAG = -12,
- USBG_ERROR_INVALID_TYPE = -13,
- USBG_ERROR_INVALID_VALUE = -14,
- USBG_ERROR_NOT_EMPTY = -15,
USBG_ERROR_OTHER_ERROR = -99
} usbg_error;
-/**
+/*
* @brief Get the error name as a constant string
* @param e error code
* @return Constant string with error name
*/
extern const char *usbg_error_name(usbg_error e);
-/**
+/*
* @brief Get the short description of error
* @param e error code
* @return Constant string with error description
@@ -354,30 +215,20 @@ extern const char *usbg_strerror(usbg_error e);
/* Library init and cleanup */
/**
- * @brief Initialize the libusbgx library state
+ * @brief Initialize the libusbg library state
* @param configfs_path Path to the mounted configfs filesystem
- * @param state Pointer to be filled with pointer to usbg_state
+ * @param Pointer to be filled with pointer to usbg_state
* @return 0 on success, usbg_error on error
*/
-extern int usbg_init(const char *configfs_path, usbg_state **state);
+extern int usbg_init(char *configfs_path, usbg_state **state);
/**
- * @brief Clean up the libusbgx library state
+ * @brief Clean up the libusbg library state
* @param s Pointer to state
*/
extern void usbg_cleanup(usbg_state *s);
/**
- * @brief Get ConfigFS path
- * @param s Pointer to state
- * @return Path to configfs or NULL if error occurred
- * @warning Returned buffer should not be edited!
- * Returned string is valid as long as passed usbg_state is valid.
- * For example path is valid until usbg_cleanup() call.
- */
-extern const char *usbg_get_configfs_path(usbg_state *s);
-
-/**
* @brief Get ConfigFS path length
* @param s Pointer to state
* @return Length of path or usbg_error if error occurred.
@@ -385,13 +236,13 @@ extern const char *usbg_get_configfs_path(usbg_state *s);
extern size_t usbg_get_configfs_path_len(usbg_state *s);
/**
- * @brief Copy ConfigFS path to buffer
+ * @brieg Get ConfigFS path
* @param s Pointer to state
* @param buf Buffer where path should be copied
* @param len Length of given buffer
* @return 0 on success or usbg_error if error occurred.
*/
-extern int usbg_cpy_configfs_path(usbg_state *s, char *buf, size_t len);
+extern int usbg_get_configfs_path(usbg_state *s, char *buf, size_t len);
/* USB gadget queries */
@@ -425,67 +276,6 @@ extern usbg_function *usbg_get_function(usbg_gadget *g,
*/
extern usbg_config *usbg_get_config(usbg_gadget *g, int id, const char *label);
-/**
- * @brief Get a udc by name
- * @param s Pointer to state
- * @param name Name of the udc
- * @return Pointer to udc or NULL if a matching udc isn't found
- */
-extern usbg_udc *usbg_get_udc(usbg_state *s, const char *name);
-
-/* USB gadget/config/function/binding removal */
-
-/**
- * @brief Remove binding between configuration and function
- * @details This function frees also the memory allocated for binding
- * @param b Binding to be removed
- * @return 0 on success, usbg_error if error occurred
- */
-extern int usbg_rm_binding(usbg_binding *b);
-
-/**
- * @brief Remove configuration
- * @details This function frees also the memory allocated for configuration
- * @param c Configuration to be removed
- * @param opts Additional options for configuration removal.
- * @return 0 on success, usbg_error if error occurred
- */
-extern int usbg_rm_config(usbg_config *c, int opts);
-
-/**
- * @brief Remove existing USB function
- * @details This function frees also the memory allocated for function
- * @param f Function to be removed
- * @param opts Additional options for configuration removal.
- * @return 0 on success, usbg_error if error occurred
- */
-extern int usbg_rm_function(usbg_function *f, int opts);
-
-/**
- * @brief Remove existing USB gadget
- * @details This function frees also the memory allocated for gadget
- * @param g Gadget to be removed
- * @param opts Additional options for configuration removal.
- * @return 0 on success, usbg_error if error occurred
- */
-extern int usbg_rm_gadget(usbg_gadget *g, int opts);
-
-/**
- * @brief Remove configuration strings for given language
- * @param c Pointer to configuration
- * @param lang Language of strings which should be deleted
- * @return 0 on success, usbg_error if error occurred
- */
-extern int usbg_rm_config_strs(usbg_config *c, int lang);
-
-/**
- * @brief Remove gadget strings for given language
- * @param g Pointer to gadget
- * @param lang Language of strings which should be deleted
- * @return 0 on success, usbg_error if error occurred
- */
-extern int usbg_rm_gadget_strs(usbg_gadget *g, int lang);
-
/* USB gadget allocation and configuration */
/**
@@ -497,7 +287,7 @@ extern int usbg_rm_gadget_strs(usbg_gadget *g, int lang);
* @param g Pointer to be filled with pointer to gadget
* @return 0 on success usbg_error if error occurred
*/
-extern int usbg_create_gadget_vid_pid(usbg_state *s, const char *name,
+extern int usbg_create_gadget_vid_pid(usbg_state *s, char *name,
uint16_t idVendor, uint16_t idProduct, usbg_gadget **g);
/**
@@ -511,60 +301,8 @@ extern int usbg_create_gadget_vid_pid(usbg_state *s, const char *name,
* @note Given strings are assumed to be in US English
* @return 0 on success usbg_error if error occurred
*/
-extern int usbg_create_gadget(usbg_state *s, const char *name,
- const usbg_gadget_attrs *g_attrs, const usbg_gadget_strs *g_strs,
- usbg_gadget **g);
-
-/**
- * @brief Get string representing selected gadget attribute
- * @param attr code of selected attribute
- * @return String suitable for given attribute or NULL if such
- * string has not been found
- */
-extern const char *usbg_get_gadget_attr_str(usbg_gadget_attr attr);
-
-/**
- * @brief Lookup attr code based on its name
- * @param name of attribute
- * @return code of suitable attribute or usbg_error
- */
-extern int usbg_lookup_gadget_attr(const char *name);
-
-/**
- * @brief Lookup str code based on its name
- * @param name of string
- * @return code of suitable string or usbg_error
- */
-extern int usbg_lookup_gadget_str(const char *name);
-
-/**
- * @brief Get name of selected gadget string
- * @param str Gadget string code
- * @return Name of string associated with this code
- */
-extern const char *usbg_get_gadget_str_name(usbg_gadget_str str);
-
-/**
- * @brief Set selected attribute to value
- * @param g Pointer to gadget
- * @param attr Code of selected attribute
- * @param val value to be set
- * @return 0 on success, usbg_error otherwise
- * @note val is of type int but value provided to this function should
- * be suitable to place it in type dedicated for selected attr (uint16 or uint8)
- */
-extern int usbg_set_gadget_attr(usbg_gadget *g, usbg_gadget_attr attr, int val);
-
-/**
- * @brief Get value of selected attribute
- * @param g Pointer to gadget
- * @param attr Code of selected attribute
- * @return Value of selected attribute (always above zero) or
- * usbg_error if error occurred.
- * @note User should use only lowest one or two bytes as attribute value
- * depending on attribute size (see usbg_gadget_attrs for details).
- */
-extern int usbg_get_gadget_attr(usbg_gadget *g, usbg_gadget_attr attr);
+extern int usbg_create_gadget(usbg_state *s, char *name,
+ usbg_gadget_attrs *g_attrs, usbg_gadget_strs *g_strs, usbg_gadget **g);
/**
* @brief Set the USB gadget attributes
@@ -573,7 +311,7 @@ extern int usbg_get_gadget_attr(usbg_gadget *g, usbg_gadget_attr attr);
* @return 0 on success usbg_error if error occurred
*/
extern int usbg_set_gadget_attrs(usbg_gadget *g,
- const usbg_gadget_attrs *g_attrs);
+ usbg_gadget_attrs *g_attrs);
/**
* @brief Get the USB gadget strings
@@ -584,16 +322,6 @@ extern int usbg_set_gadget_attrs(usbg_gadget *g,
extern int usbg_get_gadget_attrs(usbg_gadget *g, usbg_gadget_attrs *g_attrs);
/**
- * @brief Get gadget name
- * @param g Pointer to gadget
- * @return Gadget name or NULL if error occurred.
- * @warning Returned buffer should not be edited!
- * Returned string is valid as long as passed usbg_gadget is valid.
- * For example gadget name is valid until someone remove gadget.
- */
-extern const char *usbg_get_gadget_name(usbg_gadget *g);
-
-/**
* @brief Get gadget name length
* @param g Gadget which name length should be returned
* @return Length of name string or usbg_error if error occurred.
@@ -601,13 +329,13 @@ extern const char *usbg_get_gadget_name(usbg_gadget *g);
extern size_t usbg_get_gadget_name_len(usbg_gadget *g);
/**
- * @brief Copy gadget name
- * @param g Pointer to gadget
+ * @brieg Get gadget name
+ * @param b Pointer to gadget
* @param buf Buffer where name should be copied
* @param len Length of given buffer
* @return 0 on success or usbg_error if error occurred.
*/
-extern int usbg_cpy_gadget_name(usbg_gadget *g, char *buf, size_t len);
+extern int usbg_get_gadget_name(usbg_gadget *g, char *buf, size_t len);
/**
* @brief Set the USB gadget vendor id
@@ -682,31 +410,21 @@ extern int usbg_set_gadget_device_bcd_usb(usbg_gadget *g, uint16_t bcdUSB);
* @brief Get the USB gadget strings
* @param g Pointer to gadget
* @param lang Language of strings
- * @param g_strs Structure to be filled
+ * @param g_sttrs Structure to be filled
* @return 0 on success usbg_error if error occurred
*/
extern int usbg_get_gadget_strs(usbg_gadget *g, int lang,
usbg_gadget_strs *g_strs);
/**
- * @brief Set selected string
- * @param g Pointer to gadget
- * @param str Code of selected string
- * @param val value to be set
- * @return 0 on success, usbg_error otherwise
- */
-extern int usbg_set_gadget_str(usbg_gadget *g, usbg_gadget_str str, int lang,
- const char *val);
-
-/**
* @brief Set the USB gadget strings
* @param g Pointer to gadget
* @param lang USB language ID
- * @param g_strs Gadget attributes
+ * @param g_sttrs Gadget attributes
* @return 0 on success usbg_error if error occurred
*/
extern int usbg_set_gadget_strs(usbg_gadget *g, int lang,
- const usbg_gadget_strs *g_strs);
+ usbg_gadget_strs *g_strs);
/**
* @brief Set the serial number for a gadget
@@ -715,8 +433,7 @@ extern int usbg_set_gadget_strs(usbg_gadget *g, int lang,
* @param ser Serial number
* @return 0 on success usbg_error if error occurred
*/
-extern int usbg_set_gadget_serial_number(usbg_gadget *g, int lang,
- const char *ser);
+extern int usbg_set_gadget_serial_number(usbg_gadget *g, int lang, char *ser);
/**
* @brief Set the manufacturer name for a gadget
@@ -725,8 +442,7 @@ extern int usbg_set_gadget_serial_number(usbg_gadget *g, int lang,
* @param mnf Manufacturer
* @return 0 on success usbg_error if error occurred
*/
-extern int usbg_set_gadget_manufacturer(usbg_gadget *g, int lang,
- const char *mnf);
+extern int usbg_set_gadget_manufacturer(usbg_gadget *g, int lang, char *mnf);
/**
* @brief Set the product name for a gadget
@@ -735,8 +451,7 @@ extern int usbg_set_gadget_manufacturer(usbg_gadget *g, int lang,
* @param prd Product
* @return 0 on success usbg_error if error occurred
*/
-extern int usbg_set_gadget_product(usbg_gadget *g, int lang,
- const char *prd);
+extern int usbg_set_gadget_product(usbg_gadget *g, int lang, char *prd);
/* USB function allocation and configuration */
@@ -751,18 +466,7 @@ extern int usbg_set_gadget_product(usbg_gadget *g, int lang,
* @return 0 on success usbg_error if error occurred
*/
extern int usbg_create_function(usbg_gadget *g, usbg_function_type type,
- const char *instance, const usbg_function_attrs *f_attrs,
- usbg_function **f);
-
-/**
- * @brief Get function instance name
- * @param f Pointer to function
- * @return instance name or NULL if error occurred.
- * @warning Returned buffer should not be edited!
- * Returned string is valid as long as passed usbg_function is valid.
- * For example instance name is valid until someone remove this function.
- */
-extern const char *usbg_get_function_instance(usbg_function *f);
+ char *instance, usbg_function_attrs *f_attrs, usbg_function **f);
/**
* @brief Get function instance name length
@@ -772,13 +476,13 @@ extern const char *usbg_get_function_instance(usbg_function *f);
extern size_t usbg_get_function_instance_len(usbg_function *f);
/**
- * @brief Copy function instance name
+ * @brief Get function instance name
* @param f Pointer to function
* @param buf Buffer where instance name should be copied
* @param len Length of given buffer
* @return 0 on success or usbg_error if error occurred.
*/
-extern int usbg_cpy_function_instance(usbg_function *f, char *buf, size_t len);
+extern int usbg_get_function_instance(usbg_function *f, char *buf, size_t len);
/**
* @brief Get function type as a string
@@ -787,30 +491,6 @@ extern int usbg_cpy_function_instance(usbg_function *f, char *buf, size_t len);
*/
extern const char *usbg_get_function_type_str(usbg_function_type type);
-/**
- * @brief Lookup function type suitable for given name
- * @param name Name of function
- * @return Function type enum or negative error code
- */
-extern int usbg_lookup_function_type(const char *name);
-
-/**
- * @brief Lookup attrs type for given type of function
- * @param f_type type of functions
- * @return Attributes type for this type of function
- */
-extern int usbg_lookup_function_attrs_type(int f_type);
-
-/**
- * @brief Cleanup content of function attributes
- * @param f_attrs function attributes which should be cleaned up.
- * @note This function should be called to free
- * additional memory allocated by usbg_get_function_attrs().
- * @warning None of attributes in passed structure should be
- * accessed after returning from this function.
- */
-extern void usbg_cleanup_function_attrs(usbg_function_attrs *f_attrs);
-
/* USB configurations allocation and configuration */
/**
@@ -825,18 +505,7 @@ extern void usbg_cleanup_function_attrs(usbg_function_attrs *f_attrs);
* @return 0 on success usbg_error if error occurred
*/
extern int usbg_create_config(usbg_gadget *g, int id, const char *label,
- const usbg_config_attrs *c_attrs, const usbg_config_strs *c_strs,
- usbg_config **c);
-
-/**
- * @brief Get config label
- * @param c Pointer to config
- * @return config label or NULL if error occurred.
- * @warning Returned buffer should not be edited!
- * Returned string is valid as long as passed usbg_config is valid.
- * For example config label is valid until someone remove this function.
- */
-extern const char *usbg_get_config_label(usbg_config *c);
+ usbg_config_attrs *c_attrs, usbg_config_strs *c_strs, usbg_config **c);
/**
* @brief Get config label length
@@ -846,16 +515,16 @@ extern const char *usbg_get_config_label(usbg_config *c);
extern size_t usbg_get_config_label_len(usbg_config *c);
/**
- * @brief Copy config label
+ * @brieg Get config label
* @param c Pointer to config
* @param buf Buffer where label should be copied
* @param len Length of given buffer
* @return 0 on success or usbg_error if error occurred.
*/
-extern int usbg_cpy_config_label(usbg_config *c, char *buf, size_t len);
+extern int usbg_get_config_label(usbg_config *c, char *buf, size_t len);
/**
- * @brief Get config id
+ * @brieg Get config id
* @param c Pointer to config
* @return Configuration id or usbg_error if error occurred.
*/
@@ -868,7 +537,7 @@ extern int usbg_get_config_id(usbg_config *c);
* @return 0 on success or usbg_error if error occurred.
*/
extern int usbg_set_config_attrs(usbg_config *c,
- const usbg_config_attrs *c_attrs);
+ usbg_config_attrs *c_attrs);
/**
* @brief Get the USB configuration strings
@@ -898,7 +567,7 @@ extern int usbg_set_config_bm_attrs(usbg_config *c, int bmAttributes);
* @brief Get the USB configuration strings
* @param c Pointer to configuration
* @param lang Language of strings
- * @param c_strs Structure to be filled
+ * @param c_sttrs Structure to be filled
* @return 0 on success or usbg_error if error occurred.
*/
extern int usbg_get_config_strs(usbg_config *c, int lang,
@@ -908,11 +577,11 @@ extern int usbg_get_config_strs(usbg_config *c, int lang,
* @brief Set the USB configuration strings
* @param c Pointer to configuration
* @param lang USB language ID
- * @param c_strs Configuration strings
+ * @param c_sttrs Configuration strings
* @return 0 on success, usbg_error on failure.
*/
extern int usbg_set_config_strs(usbg_config *c, int lang,
- const usbg_config_strs *c_strs);
+ usbg_config_strs *c_strs);
/**
* @brief Set the configuration string
@@ -921,7 +590,7 @@ extern int usbg_set_config_strs(usbg_config *c, int lang,
* @param string Configuration description
* @return 0 on success, usbg_error on failure.
*/
-extern int usbg_set_config_string(usbg_config *c, int lang, const char *string);
+extern int usbg_set_config_string(usbg_config *c, int lang, char *string);
/**
* @brief Add a function to a configuration
@@ -930,8 +599,7 @@ extern int usbg_set_config_string(usbg_config *c, int lang, const char *string);
* @param f Pointer to function
* @return 0 on success, usbg_error on failure.
*/
-extern int usbg_add_config_function(usbg_config *c, const char *name,
- usbg_function *f);
+extern int usbg_add_config_function(usbg_config *c, char *name, usbg_function *f);
/**
* @brief Get target function of given binding
@@ -941,16 +609,6 @@ extern int usbg_add_config_function(usbg_config *c, const char *name,
extern usbg_function *usbg_get_binding_target(usbg_binding *b);
/**
- * @brief Get binding name
- * @param b Pointer to binding
- * @return Binding name or NULL if error occurred.
- * @warning Returned buffer should not be edited!
- * Returned string is valid as long as passed usbg_binding is valid.
- * For example binding name is valid until someone remove this binding.
- */
-extern const char *usbg_get_binding_name(usbg_binding *b);
-
-/**
* @brief Get binding name length
* @param b Binding which name length should be returned
* @return Length of name string or usbg_error if error occurred.
@@ -958,24 +616,30 @@ extern const char *usbg_get_binding_name(usbg_binding *b);
extern size_t usbg_get_binding_name_len(usbg_binding *b);
/**
- * @brief Copy binding name
+ * @brief Get binding name
* @param b Pointer to binding
* @param buf Buffer where name should be copied
* @param len Length of given buffer
* @return 0 on success or usbg_error if error occurred.
*/
-extern int usbg_cpy_binding_name(usbg_binding *b, char *buf, size_t len);
+extern int usbg_get_binding_name(usbg_binding *b, char *buf, size_t len);
/* USB gadget setup and teardown */
/**
+ * @brief Get a list of UDC devices on the system
+ * @param udc_list Pointer to pointer to dirent pointer
+ * @return Number of UDC devices on success, usbg_error on failure
+ */
+extern int usbg_get_udcs(struct dirent ***udc_list);
+
+/**
* @brief Enable a USB gadget device
* @param g Pointer to gadget
- * @param udc where gadget should be assigned.
- * If NULL, default one (first) is used.
+ * @param udc Name of UDC to enable gadget
* @return 0 on success or usbg_error if error occurred.
*/
-extern int usbg_enable_gadget(usbg_gadget *g, usbg_udc *udc);
+extern int usbg_enable_gadget(usbg_gadget *g, char *udc);
/**
* @brief Disable a USB gadget device
@@ -985,16 +649,6 @@ extern int usbg_enable_gadget(usbg_gadget *g, usbg_udc *udc);
extern int usbg_disable_gadget(usbg_gadget *g);
/**
- * @brief Get name of udc
- * @param u Pointer to udc
- * @return UDC name or NULL if error occurred.
- * @warning Returned buffer should not be edited!
- * Returned string is valid as long as passed usbg_state is valid.
- * For example UDC name is valid until usbg_cleanup().
- */
-extern const char *usbg_get_udc_name(usbg_udc *u);
-
-/**
* @brief Get gadget name length
* @param g Gadget which name length should be returned
* @return Length of name string or usbg_error if error occurred.
@@ -1003,27 +657,14 @@ extern const char *usbg_get_udc_name(usbg_udc *u);
extern size_t usbg_get_gadget_udc_len(usbg_gadget *g);
/**
- * @brief Copy name of udc
- * @param u Pointer to udc
+ * @brieg Get name of udc to which gadget is binded
+ * @param b Pointer to gadget
* @param buf Buffer where udc name should be copied
* @param len Length of given buffer
* @return 0 on success or usbg_error if error occurred.
+ * @note If gadget isn't enabled on any udc returned string is empty.
*/
-extern int usbg_cpy_udc_name(usbg_udc *u, char *buf, size_t len);
-
-/**
- * @brief Get udc to which gadget is bound
- * @param g Pointer to gadget
- * @return Pointer to UDC or NULL if gadget is not enabled
- */
-extern usbg_udc *usbg_get_gadget_udc(usbg_gadget *g);
-
-/**
- * @brief Get gadget which is attached to this UDC
- * @param u Pointer to udc
- * @return Pointer to gadget or NULL if UDC is free
- */
-extern usbg_gadget *usbg_get_udc_gadget(usbg_udc *u);
+extern int usbg_get_gadget_udc(usbg_gadget *g, char *buf, size_t len);
/*
* USB function-specific attribute configuration
@@ -1052,8 +693,7 @@ extern int usbg_get_function_attrs(usbg_function *f,
* @param f_attrs Attributes to be set
* @return 0 on success, usbg_error if error occurred
*/
-extern int usbg_set_function_attrs(usbg_function *f,
- const usbg_function_attrs *f_attrs);
+extern int usbg_set_function_attrs(usbg_function *f, usbg_function_attrs *f_attrs);
/**
* @brief Set USB function network device address
@@ -1116,15 +756,6 @@ extern int usbg_set_net_qmult(usbg_function *f, int qmult);
b = usbg_get_next_binding(b))
/**
- * @def usbg_for_each_udc(b, c)
- * Iterates over each udc
- */
-#define usbg_for_each_udc(u, s) \
- for (u = usbg_get_first_udc(s); \
- u != NULL; \
- u = usbg_get_next_udc(u))
-
-/**
* @brief Get first gadget in gadget list
* @param s State of library
* @return Pointer to gadget or NULL if list is empty.
@@ -1150,164 +781,41 @@ extern usbg_config *usbg_get_first_config(usbg_gadget *g);
/**
* @brief Get first binding in binding list
- * @param c Pointer to configuration
+ * @param C Pointer to configuration
* @return Pointer to binding or NULL if list is empty.
* @note Bindings are sorted in strings (name) order
*/
extern usbg_binding *usbg_get_first_binding(usbg_config *c);
/**
- * @brief Get first udc in udc list
- * @param s State of library
- * @return Pointer to udc or NULL if list is empty.
- * @note UDCs are sorted in strings (name) order
- */
-extern usbg_udc *usbg_get_first_udc(usbg_state *s);
-
-/**
* @brief Get the next gadget on a list.
- * @param g Pointer to current gadget
+ * @pram g Pointer to current gadget
* @return Next gadget or NULL if end of list.
*/
extern usbg_gadget *usbg_get_next_gadget(usbg_gadget *g);
/**
* @brief Get the next function on a list.
- * @param f Pointer to current function
+ * @pram g Pointer to current function
* @return Next function or NULL if end of list.
*/
extern usbg_function *usbg_get_next_function(usbg_function *f);
/**
* @brief Get the next config on a list.
- * @param c Pointer to current config
+ * @pram g Pointer to current config
* @return Next config or NULL if end of list.
*/
extern usbg_config *usbg_get_next_config(usbg_config *c);
/**
* @brief Get the next binding on a list.
- * @param b Pointer to current binding
+ * @pram g Pointer to current binding
* @return Next binding or NULL if end of list.
*/
extern usbg_binding *usbg_get_next_binding(usbg_binding *b);
/**
- * @brief Get the next udc on a list.
- * @param u Pointer to current udc
- * @return Next udc or NULL if end of list.
- */
-extern usbg_udc *usbg_get_next_udc(usbg_udc *u);
-
-/* Import / Export API */
-
-/**
- * @brief Exports usb function to file
- * @param f Pointer to function to be exported
- * @param stream where function should be saved
- * @return 0 on success, usbg_error otherwise
- */
-extern int usbg_export_function(usbg_function *f, FILE *stream);
-
-/**
- * @brief Exports configuration to file
- * @param c Pointer to configuration to be exported
- * @param stream where configuration should be saved
- * @return 0 on success, usbg_error otherwise
- */
-extern int usbg_export_config(usbg_config *c, FILE *stream);
-
-/**
- * @brief Exports whole gadget to file
- * @param g Pointer to gadget to be exported
- * @param stream where gadget should be saved
- * @return 0 on success, usbg_error otherwise
- */
-extern int usbg_export_gadget(usbg_gadget *g, FILE *stream);
-
-/**
- * @brief Imports usb function from file and adds it to given gadget
- * @param g Gadget where function should be placed
- * @param stream from which function should be imported
- * @param instance name which should be used for new function
- * @param f place for pointer to imported function
- * if NULL this param will be ignored.
- * @return 0 on success, usbg_error otherwise
- */
-extern int usbg_import_function(usbg_gadget *g, FILE *stream,
- const char *instance, usbg_function **f);
-
-/**
- * @brief Imports usb configuration from file and adds it to given gadget
- * @param g Gadget where configuration should be placed
- * @param stream from which configuration should be imported
- * @param id which should be used for new configuration
- * @param c place for pointer to imported configuration
- * if NULL this param will be ignored.
- * @return 0 on success, usbg_error otherwise
- */
-extern int usbg_import_config(usbg_gadget *g, FILE *stream, int id,
- usbg_config **c);
-/**
- * @brief Imports usb gadget from file
- * @param s current state of library
- * @param stream from which gadget should be imported
- * @param name which should be used for new gadget
- * @param g place for pointer to imported gadget
- * if NULL this param will be ignored.
- * @return 0 on success, usbg_error otherwise
- */
-extern int usbg_import_gadget(usbg_state *s, FILE *stream,
- const char *name, usbg_gadget **g);
-
-/**
- * @brief Get text of error which occurred during last function import
- * @param g gadget where function import error occurred
- * @return Text of error or NULL if no error data
- */
-extern const char *usbg_get_func_import_error_text(usbg_gadget *g);
-
-/**
- * @brief Get line number where function import error occurred
- * @param g gadget where function import error occurred
- * @return line number or value below 0 if no error data
- */
-extern int usbg_get_func_import_error_line(usbg_gadget *g);
-
-/**
- * @brief Get text of error which occurred during last config import
- * @param g gadget where config import error occurred
- * @return Text of error or NULL if no error data
- */
-extern const char *usbg_get_config_import_error_text(usbg_gadget *g);
-
-/**
- * @brief Get line number where config import error occurred
- * @param g gadget where config import error occurred
- * @return line number or value below 0 if no error data
- */
-extern int usbg_get_config_import_error_line(usbg_gadget *g);
-
-/**
- * @brief Get text of error which occurred during last gadget import
- * @param s where gadget import error occurred
- * @return Text of error or NULL if no error data
- */
-extern const char *usbg_get_gadget_import_error_text(usbg_state *s);
-
-/**
- * @brief Get line number where gadget import error occurred
- * @param s where gadget import error occurred
- * @return line number or value below 0 if no error data
- */
-extern int usbg_get_gadget_import_error_line(usbg_state *s);
-
-/**
* @}
*/
-
-#ifdef __cplusplus
-}
-#endif
-
#endif /* __USBG_H__ */
diff --git a/include/usbg/usbg_internal.h b/include/usbg/usbg_internal.h
deleted file mode 100644
index 30d3fcf..0000000
--- a/include/usbg/usbg_internal.h
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- */
-
-#ifndef USBG_INTERNAL_H
-#define USBG_INTERNAL_H
-
-#include <sys/queue.h>
-#include <string.h>
-#include <usbg/usbg.h>
-
-#ifdef HAS_LIBCONFIG
-#include <libconfig.h>
-#else
- typedef struct _should_not_be_used config_t;
- void config_destroy(config_t *config);
-#endif
-
-/**
- * @file include/usbg/usbg_internal.h
- */
-
-#ifndef offsetof
-#define offsetof(type, member) __builtin_offsetof (type, member)
-#endif /* offsetof */
-
-#ifndef container_of
-#define container_of(ptr, type, field) ({ \
- const typeof(((type *)0)->field) *member = (ptr); \
- (type *)( (char *)member - offsetof(type, field) ); \
- })
-#endif /* container_of */
-
-struct usbg_state
-{
- char *path;
- char *configfs_path;
-
- TAILQ_HEAD(ghead, usbg_gadget) gadgets;
- TAILQ_HEAD(uhead, usbg_udc) udcs;
- config_t *last_failed_import;
-};
-
-struct usbg_gadget
-{
- char *name;
- char *path;
-
- TAILQ_ENTRY(usbg_gadget) gnode;
- TAILQ_HEAD(chead, usbg_config) configs;
- TAILQ_HEAD(fhead, usbg_function) functions;
- usbg_state *parent;
- config_t *last_failed_import;
- usbg_udc *udc;
-};
-
-struct usbg_config
-{
- TAILQ_ENTRY(usbg_config) cnode;
- TAILQ_HEAD(bhead, usbg_binding) bindings;
- usbg_gadget *parent;
-
- char *name;
- char *path;
- char *label;
- int id;
-};
-
-typedef int (*usbg_rm_function_callback)(usbg_function *, int);
-
-struct usbg_function
-{
- TAILQ_ENTRY(usbg_function) fnode;
- usbg_gadget *parent;
-
- char *name;
- char *path;
- char *instance;
- /* Only for internal library usage */
- char *label;
- usbg_function_type type;
- usbg_rm_function_callback rm_callback;
-};
-
-struct usbg_binding
-{
- TAILQ_ENTRY(usbg_binding) bnode;
- usbg_config *parent;
- usbg_function *target;
-
- char *name;
- char *path;
-};
-
-struct usbg_udc
-{
- TAILQ_ENTRY(usbg_udc) unode;
- usbg_state *parent;
- usbg_gadget *gadget;
-
- char *name;
-};
-
-#define ARRAY_SIZE(array) (sizeof(array)/sizeof(*array))
-
-#define ARRAY_SIZE_SENTINEL(array, size) \
- static void __attribute__ ((unused)) array##_size_sentinel() \
- { \
- char array##_smaller_than_expected[ \
- (int)(ARRAY_SIZE(array) - size)] \
- __attribute__ ((unused)); \
- \
- char array##_larger_than_expected[ \
- (int)(size - ARRAY_SIZE(array))] \
- __attribute__ ((unused)); \
- }
-
-#define ERROR(msg, ...) do {\
- fprintf(stderr, "%s() "msg" \n", \
- __func__, ##__VA_ARGS__);\
- fflush(stderr);\
- } while (0)
-
-#define ERRORNO(msg, ...) do {\
- fprintf(stderr, "%s() %s: "msg" \n", \
- __func__, strerror(errno), ##__VA_ARGS__);\
- fflush(stderr);\
- } while (0)
-
-/* Insert in string order */
-#define INSERT_TAILQ_STRING_ORDER(HeadPtr, HeadType, NameField, ToInsert, NodeField) \
- do { \
- if (TAILQ_EMPTY((HeadPtr)) || \
- (strcmp((ToInsert)->NameField, TAILQ_FIRST((HeadPtr))->NameField) < 0)) \
- TAILQ_INSERT_HEAD((HeadPtr), (ToInsert), NodeField); \
- else if (strcmp((ToInsert)->NameField, TAILQ_LAST((HeadPtr), HeadType)->NameField) > 0) \
- TAILQ_INSERT_TAIL((HeadPtr), (ToInsert), NodeField); \
- else { \
- typeof(ToInsert) _cur; \
- TAILQ_FOREACH(_cur, (HeadPtr), NodeField) { \
- if (strcmp((ToInsert)->NameField, _cur->NameField) > 0) \
- continue; \
- TAILQ_INSERT_BEFORE(_cur, (ToInsert), NodeField); \
- } \
- } \
- } while (0)
-
-#define STRINGS_DIR "strings"
-#define CONFIGS_DIR "configs"
-#define FUNCTIONS_DIR "functions"
-#define GADGETS_DIR "usb_gadget"
-
-static inline int file_select(const struct dirent *dent)
-{
- if ((strcmp(dent->d_name, ".") == 0) || (strcmp(dent->d_name, "..") == 0))
- return 0;
- else
- return 1;
-}
-
-int usbg_translate_error(int error);
-
-char *usbg_ether_ntoa_r(const struct ether_addr *addr, char *buf);
-
-#endif /* USBG_INTERNAL_H */
-