Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kopera/erlang-usb
Erlang USB library
https://github.com/kopera/erlang-usb
embedded erlang linux usb
Last synced: about 1 month ago
JSON representation
Erlang USB library
- Host: GitHub
- URL: https://github.com/kopera/erlang-usb
- Owner: kopera
- License: apache-2.0
- Created: 2020-06-22T11:57:34.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-04-18T15:28:46.000Z (8 months ago)
- Last Synced: 2024-09-20T00:49:24.567Z (3 months ago)
- Topics: embedded, erlang, linux, usb
- Language: Erlang
- Size: 43 KB
- Stars: 7
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# usb
An Erlang application for interfacing with USB peripherals using libusb.
This application allows for discovering and communicating with USB peripherals by making use of libusb through a NIF interface.
# Dependencies
This Erlang application library depends on:
* `pkg-config` (build only)
* `libusb` ≥ 1.0.16# Setup
You need to add `usb` as a dependency to your project. If you are using `rebar3`, you can add the following to your `rebar.config`:
```erlang
{deps, [
{usb, "0.2.0"}
]}.
```Also ensure that `usb` is added as a dependency to your application, by
updating your `.app.src` file:```erlang
{application, my_app, [{applications, [
kernel,
stdlib,usb % <- You need this in your applications list
]}
]}.
```# Usage
## Listing and querying devices
You can list currently connected USB devices, you can use:
```erlang
> {ok, [Device|_]} = usb:get_device_list().
{ok,[#Ref<0.1223016592.607256583.114769>]}.
```You can then query the device:
```erlang
> usb:get_device_speed(Device).
{ok, high}
> usb:get_device_descriptor(Device).
{ok, #{
class_code => 0,
device_version => 532,
manufacturer_string_index => 1,
max_packet_size0 => 64,
num_configurations => 1,
product_id => 33028,
product_string_index => 0,
protocol_code => 0,
serial_number_string_index => 2,
sub_class_code => 0,
usb_version => 512,
vendor_id => 1452
}}
> usb:get_config_descriptor(Device, 0).
{ok, #{
attributes => 224,
configuration_number => 1,
description_string_index => 0,
extra => <<>>,
interfaces => [
#{alt_settings => [
#{
class_code => 3,
description_string_index => 4,
endpoints => [
#{
address => 129,
attributes => 3,
extra => <<>>,
interval => 1,
max_packet_size => 8,
refresh => 0,
synch_address => 0
}
],
extra => <<9,33,1,1,0,1,34,179,0>>,
interface_number => 0,
protocol_code => 0,
setting_number => 0,
sub_class_code => 0
}
]}
],
max_power => 500
}}
```## Monitoring USB device hotplug
The following will start monotoring for USB device arrival and departure:
```erlang
> {ok, Monitor} = usb:monitor_hotplug([enumerate]).
{ok, #Ref<0.731181930.70909953.42752>}
```The `enumerate` option will create hotplug notifications about already plugged
in devices. Without the option, only newly connected devices will be reported.From this point on, the process monitoring USB hotplug will received one of the following messages:
* `{usb, device_arrived, Device}`
* `{usb, device_left, Device}`where `Device` is an opaque reference representing a specific device. these references can be used to interact with the device.