1
0
Fork 0
mirror of https://github.com/linux-usb-gadgets/libusbgx.git synced 2025-07-25 15:25:11 +03:00
Commit graph

347 commits

Author SHA1 Message Date
Krzysztof Opasiak
f02d36d163 libusbgx: tests: Remove redefinition of _GNU_SOURCE
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2018-02-22 17:27:22 +01:00
Krzysztof Opasiak
b1d0b906f8 libusbgx: Fix access when memory allocation failed
Don't access the memory when allocation failed.
Reported by SVACE.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2018-02-21 18:03:36 +01:00
John Keeping
7c51fe5c2d libusbgx: add USBG_VERSION preprocessor symbol
The libusbgx API has changed over time (for example struct
usbg_gadget_strs as changed from fixed-size fields to pointers to char)
which requires that client programs also change.

Sometimes it is not possible to keep applications and libusbgx versions
in lock step and it is desirable to support multiple libusbgx API
versions from a single client code base.

Add a version number which can be used for conditional code in client
applications by doing:

	#if USBG_VERSION < USBG_MAKE_VERSION(0, 2, 0)

Signed-off-by: John Keeping <john@metanate.com>
[Add macro for generating API version]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2018-02-06 16:52:56 +01:00
Krzysztof Opasiak
9e71df567e libusbgx: packaging: Add missing uac2 header to devel package
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2018-01-24 13:55:33 +01:00
Krzysztof Opasiak
0ab9f2f128 libusbgx: examples: Make show-gadgets aware of uac2 function
Allow user to show values of uac2 attributes instead of dummy
"UNKNOWN" string.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2018-01-17 16:13:58 +01:00
John Keeping
88cff3cbf7 libusbgx: examples: Add UAC2 function example
Show how to create a USB Audio Class 2 gadget.

Signed-off-by: John Keeping <john@metanate.com>
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2018-01-17 16:12:56 +01:00
John Keeping
5740ca8a5e libusbgx: Add support for UAC2 function
This is the USB Audio Class 2 function that creates an ALSA audio device
exposed as a USB gadget function.

Signed-off-by: John Keeping <john@metanate.com>
[Set import/export callbacks to correct values,
 adjust convention of set_attr(),
 fix union cast in c++]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com
2018-01-17 14:38:58 +00:00
Krzysztof Opasiak
1c3f1b4660 libusbgx: fix: Disallow creating function with empty instance name
USB function should have both type and instance name.
Mistakenly it was possible to create function with empty instance
name. This may lead to situations like FunctionFS device name
identified by "" or some misleading debug messages from TCM like:

tcm: Activating

Additionaly trying to execute usbg_init() after creating such
a function fails with -3 USBG_ERROR_INVALID_PARAM because it checks
if instance name is not empty.

To avoid this let's add a check in usbg_create_function() that
instance name should have at least one character.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-12-12 14:52:50 +01:00
Krzysztof Opasiak
904b04c4b4 libusbgx: tests: fix: Make our tests os_desc aware
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-12-12 14:52:50 +01:00
Krzysztof Opasiak
bfa2c29daa libusbgx: examples: Add rndis with OS descriptors support example
Add a program which shows how to use OS descriptors support
based on RNDIS example.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-12-12 14:06:36 +01:00
Krzysztof Opasiak
1809b5ae60 libusbgx: fix: Correct typo in usbg_rm_file() funciton name
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-12-12 14:06:36 +01:00
Krzysztof Opasiak
e4d9cbf6cc libusbgx: Make usbg_rm_config() aware of OS descriptors
Since we added support for OS descriptors we allowed user
to create a link in gadget's os_desc directory to choose
one of available configurations. This link prevents config
from being removed. This makes our rm funcitons stop working
with the recursive option. To fix this, let's make them
OS desc aware and remove this link before trying to remove
configuration if recurse option is set.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-12-12 14:06:36 +01:00
Stefan Agner
952f19c7ce libusbgx: Add support for OS Descriptor configuration bindings
OS Descriptors require an association to a single configuration. This
allows to use a specific configuration for hosts supporting  OS
Descriptors.

Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
[Allow to also remove os desc binding]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-12-12 14:06:36 +01:00
Stefan Agner
db490f1ca5 libusbgx: Add config support for function OS Descriptors
This adds support for OS Descriptors available on function level,
called "Feature Descriptors".

Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
[Use a little bit different convention]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-12-12 14:06:36 +01:00
Stefan Agner
0bc519f2f2 libusbgx: Add function level OS Descriptor support
This adds support for OS Descriptors available on function level,
called "Feature Descriptors".

Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
[Fix mem leak in error path, allow multiple ifaces per funciton]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-12-12 14:06:36 +01:00
Stefan Agner
abf422bffc libusbgx: Add interface name for Feature Descriptors
This adds interface name required for "Feature Descriptors". If
specified, we can assume that a Feature Descriptor with the
interface name of the specified string is understood by the
kernel (e.g. interface.rndis).

Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
[Allow multiple os_desc ifaces per funciton]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-12-12 14:06:36 +01:00
Stefan Agner
47526ac2a6 libusbgx: Add libconfig support for OS Descriptors
Add configuration support for OS Descriptors.

Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
[Move import to the right place, don't strdup() during import]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-12-12 14:06:36 +01:00
Stefan Agner
996c322af1 libusbgx: Add OS Descriptors support
This adds OS Descriptors support on Gadget level. It allows to
enable OS Descriptors support as well as to define the OS String
proper.

Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
[Remove unused variable]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-12-12 14:06:36 +01:00
Stefan Agner
ad44340734 libusbgx: Do not write null terminator when using usbg_write_string()
The helper usbg_write_string() adds one to the length of the provided
string. This leads to usbg_write_buf() writting also a null terminator
to the kernel which is not necessary/wrong. Provide usbg_write_buf
the real string length.

Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
[Add missing () to function names in commit msg]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-12-11 22:40:26 +01:00
Stefan Agner
4c6124d68f libusbgx: fix usbg_free_gadget_strs when passing NULL
Do not dereference g_strs if we pass NULL to usbg_free_gadget_strs.

Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-11-24 10:22:46 +01:00
Krzysztof Opasiak
9498bfe5e5 libusbgx: fix: Install mising hid function header
Reported-by: Matthias Wieloch vel Saiberion (guthub.com)
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-11-20 19:16:36 +01:00
Krzysztof Opasiak
5837aedfcc libusbgx: fix: Check fclose() return code
According to man fclose:

"The fclose() function may also fail and set errno for any of the
 errors specified for the routines close(2), write(2) or fflush(3)."

So if libc decides to cache our write till closing fd we may
miss the error if we ignore value returned from fclose().

This fixes issue #12 (github).

Reported-by: Noralf Trønnes <noralf@tronnes.org>
Suggested-by: Noralf Trønnes <noralf@tronnes.org>
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-11-20 12:52:55 +01:00
Krzysztof Opasiak
b8941d1cf5 libusbgx: fix: remove unused variable
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-04-19 18:10:16 +02:00
Krzysztof Opasiak
5d0962ed41 libusbgx: Fix meaning of HAS_LIBCONFIG and HAS_GADGET_SCHEMES
We have two configure options related to libconfig:
1) --disable-gadget-schemes
2) --without-libconfig

Option #1 means that libusbgx itself should be compiled without gadget
schemes support. Option #2 means that everything what requires
libconfig should be turned off. So option #2 is wider than #1 as
libconfig us used also in our testing program.

To fix this meaning let's use HAS_GADGET_SCHEMES inside library source
code to determine if we should use libconfig or not and HAS_LIBCONFIG
inside our tests source code.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-03-03 17:48:44 +01:00
Krzysztof Opasiak
651177558b libusbgx: Fix compilation without libconfig
After refactorization we lost ability to build libusbgx
without libconfig. Let's restore this.

Basic concept is that the whole code related to libconfig usage
should be under #ifdef or compiled only if libconfig support
is enabled.

To prevent future problems of that kind, let's create a header
which is included when compiling without libconfig. Inside it we
like:
	struct s {
	       .import = usbg_get_config_node_int,
	       .export = usbg_set_config_node_int,
	};

are still valid, but all tries to call this functions directly end up
in compilation error. This helps us identify all pieces of code
which should be placed under suitable #ifdef.

Based on initial pull request "Compilation fixes. #4" by:
Bent Bisballe Nyeng (github: aasimon) <deva@aasimon.org>

Reported-by: Bent Bisballe Nyeng (github: aasimon) <deva@aasimon.org>
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-03-03 17:48:44 +01:00
Krzysztof Opasiak
a91dd9d037 libusbgx: examples: Add example how to create gadget with HID function
Let's add some simple example how to create a gadget which includes
HID function.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-03-03 14:05:37 +01:00
Krzysztof Opasiak
e323f6c0f9 libusbgx: examples: Allow show-gadgets to print HID function attrs
As libusbgx now supports also HID function so we may print its
attributes in our show-gadgets example. This may also be used
as example of getting HID attributes using generic functions.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-03-03 14:04:08 +01:00
Krzysztof Opasiak
b656ce0845 libusbgx: Add support for HID function
HID function has been ported to ConfigFS interface quite long
time ago so let's add support for it also in libusbgx.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-03-03 14:02:27 +01:00
Krzysztof Opasiak
784e693fe5 libusbgx: common: Allow to export int attribute in hex format
Add a helper to export int attributes in hex format.
Now each function may decide which format should be used
(decimal or hex).

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-03-03 14:02:27 +01:00
Krzysztof Opasiak
71f93716df libsubgx: common: Allow to export dev_t attribute using libconfig
Add a helper to export dev_t attributes to gadget schemes using
libconfig syntax.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-03-03 14:02:27 +01:00
Krzysztof Opasiak
7b0ef8b934 libusbgx: common: Add function for reading dev_t from ConfigFS
As some of kernel functions expose details about device node
which is assigned to this instance in form:
      <major>:<minor>
Let's add a convenient helper which will read those values
form file and convert them to dev_t.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-03-03 14:02:27 +01:00
Krzysztof Opasiak
6bdf0a3b93 libusbgx: common: Use fread() instead of fgets()
Reading binary data using fgets() may not be a good idea due
to \0 byte in the middle of data. Let's fix this by using fread()
instead of fgets().

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-03-03 14:02:27 +01:00
Krzysztof Opasiak
b42b7b0c2f libusbgx: common: Use fwrite() instead of fputs()
Using fputs() for writing binary data is not a good idea as \0
byte can be in the middle of our data. Let's just use fwrite()
instead.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-03-03 14:02:27 +01:00
Krzysztof Opasiak
e8e16af025 libusbgx: examples: Print strings in all available languages
Instead of printing strings only in US_EN let's make a use of
our new function and print all available strings.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-03-03 14:02:27 +01:00
Krzysztof Opasiak
a996f168f7 libusbgx: Simplify strings handling in libconfig schemes
Make use of usbg_get_gadget_strs_langs() and
usbg_get_config_strs_langs() in libconfig schemes instead of
direct listing content of directory using scandir().

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-03-03 14:02:27 +01:00
Krzysztof Opasiak
49879b8fc0 libusbgx: Add usbg_get_config_str_langs()
Add a function which allows to get the list of languages
in which config strings are currently available.

Thanks to this function now we may iterate through all strings
languages available in particular config and print their values.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-03-03 14:02:26 +01:00
Krzysztof Opasiak
4247abdab1 libusbgx: Add usbg_get_gadget_strs_langs()
Add a function which allows to get the list of languages
in which gadget strings are currently available.

Thanks to this function now we may iterate through all strings
languages available in particular gadget and print their values
for each language.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-03-03 14:02:26 +01:00
Krzysztof Opasiak
576d384c39 libusbgx: Get rid of static buffers from usbg_config_strs
Remove static buffers which limits strings length from
usbg_config_strs.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-03-03 14:02:10 +01:00
Krzysztof Opasiak
56355fb34d libusbgx: Add usbg_free_config_strs()
This is a first step to get rid of static buffers from usbg_config_strs.

This function should be called to release memory allocated for
configuration string.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-03-02 16:56:27 +01:00
Krzysztof Opasiak
78c45fa80f libusbgx: Get rid of static buffers from usbg_gadget_strs
Remove static buffers which limits strings length from usbg_gadget_strs.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-03-02 16:56:27 +01:00
Krzysztof Opasiak
751a88f764 libusbgx: common: Fix usbg_read_string_alloc() to read long strings correctly
Use usbg_read_string_limited() directly to avoid length limit
hidden in usbg_read_string().

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-03-02 16:56:27 +01:00
Krzysztof Opasiak
e0e525fc58 libusbgx: Add usbg_free_gadget_strs()
This is a first step to get rid of static buffers in usbg_gadget_strs.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2017-03-02 16:54:37 +01:00
Krzysztof Opasiak
c02dbe391f libusbgx: Keep gadget strs in the same order as in device desc
Let's keep gadget strings in the same order as they appear
in USB device descriptor to avoid mistakes during structure
initialization.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2016-12-14 15:23:48 +01:00
Krzysztof Opasiak
67aaf8ea7e libusbgx: Use string name similar to USB spec
str_ser, str_prd and str_mnf are a little bit weird names
so let's replace them with names defined by USB spec.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2016-12-14 13:23:12 +01:00
Krzysztof Opasiak
4fe38766f7 libusbgx: tests: Fix indent and line length
Let's keep our lines not longer than 80 characters
and fix also indentation for function params.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2016-12-14 13:09:26 +01:00
Krzysztof Opasiak
3749ccec3d libusbgx: Remove typedefs for public structures
Let's remove typedefs from public structures to clearly
indicate users which structures can be accessed and which
should be used only as handles.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2016-12-14 13:03:26 +01:00
Krzysztof Opasiak
a23dee0c86 libusbgx: Use suitable prefix for usbg_function_type enum
Let's use USBG_ prefix for usbg_function_type enum values
to avoid users confusion.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2016-12-13 22:45:06 +01:00
Krzysztof Opasiak
d9c5a1bc49 libusbgx: Use suitable prefix for usbg_gadget_str enum
Let's use USBG_ prefix for usbg_gadget_str enum values
to avoid users confusion.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2016-12-13 22:00:26 +01:00
Krzysztof Opasiak
9be0405ed1 libusbgx: Use suitable prefix for usbg_gadget_attr enum
Let's use USBG_ prefix for usbg_gadget_attr enum values
to avoid users confusion

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2016-12-13 21:53:41 +01:00
Krzysztof Opasiak
4fa972dc2d libusbgx: Move internal defines to a suitable heder
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2016-12-06 14:20:57 +01:00