Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
ARG ALPINE_BASE=3.21.2
ARG ALPINE_BASE=3.23.3

FROM alpine:${ALPINE_BASE} as builder

Check warning on line 3 in Dockerfile

View workflow job for this annotation

GitHub Actions / Build docker image

The 'as' keyword should match the case of the 'from' keyword

FromAsCasing: 'as' and 'FROM' keywords' casing do not match More info: https://docs.docker.com/go/dockerfile/rule/from-as-casing/

RUN apk add gcc libc-dev libusb-dev linux-headers

Expand Down
13 changes: 7 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,24 @@ Tested on Raspberry Pi 3, 4
docker run -v /dev/bus/usb/001/013:/dev/bus/usb/001/013 --privileged rugarci/usbreset /dev/bus/usb/001/013
```

Also works with device names (/dev/ttyUSB0) or symbolic links (/dev/XBee)
Also works with device names (/dev/ttyUSB0, /dev/ttyACM0) or symbolic links (/dev/XBee)

```bash
docker run -v /dev:/dev --privileged rugarci/usbreset /dev/XBee
docker run -v /dev:/dev -v /sys:/sys:ro --privileged rugarci/usbreset /dev/XBee
```
And multiple ports
```bash
docker run -v /dev:/dev --privileged rugarci/usbreset /dev/XBee /dev/ttyUSB4
docker run -v /dev:/dev -v /sys:/sys:ro --privileged rugarci/usbreset /dev/XBee /dev/ttyUSB4

For Docker compose

```yaml
usbreset-xbee:
image: rugarci/usbreset
command: /dev/XBee
volumes:
- "/dev:/dev"
command: /dev/XBee /dev/ttyUSB0 /dev/ttyACM0 /dev/bus/usb/001/013
volumes:
- /sys:/sys:ro
- /dev/bus/usb:/dev/bus/usb
privileged: true
```

Expand Down
51 changes: 32 additions & 19 deletions reset.sh
Original file line number Diff line number Diff line change
@@ -1,31 +1,44 @@
#!/bin/bash

if [[ -z "$1" ]]; then
echo "Device to reset not passed"
exit 1
echo "Device to reset not passed"
exit 1
fi

if [ $(dirname $1) == "/dev" ]; then
if [ "$(dirname "$1")" == "/dev" ]; then

LINK_DEV=$(readlink -f "$1")

if [ "$(dirname "$LINK_DEV")" == "/dev" ]; then
REAL_DEV=$(basename "$LINK_DEV")

export LINK_DEV=$(readlink -f $1)
SYS_PATH=$(readlink -f /sys/class/tty/$REAL_DEV)

if [ $(dirname $LINK_DEV) == "/dev" ]; then
export REAL_DEV=$(basename $LINK_DEV)
export DEV_FOLDER=$(find /sys/devices -lname *$REAL_DEV)/../..
echo $DEV_FOLDER
export BUS_NUM=$(echo `printf "%03d" $(cat $DEV_FOLDER/busnum)`)
export DEV_NUM=$(echo `printf "%03d" $(cat $DEV_FOLDER/devnum)`)
while [ "$SYS_PATH" != "/" ]; do
if [ -f "$SYS_PATH/busnum" ] && [ -f "$SYS_PATH/devnum" ]; then
BUS_NUM=$(printf "%03d" "$(cat $SYS_PATH/busnum)")
DEV_NUM=$(printf "%03d" "$(cat $SYS_PATH/devnum)")
break
fi
SYS_PATH=$(dirname "$SYS_PATH")
done

echo $1 resolved to $BUS_NUM:$DEV_NUM
if [ -z "$BUS_NUM" ] || [ -z "$DEV_NUM" ]; then
echo "Unable to resolve USB bus/device for $1"
exit 1
fi

export DEV_BUS_FOLDER=/dev/bus/usb/$BUS_NUM/$DEV_NUM
else
export DEV_BUS_FOLDER=$LINK_DEV
echo $1 points to $LINK_DEV
fi
echo "$1 resolved to $BUS_NUM:$DEV_NUM"

DEV_BUS=/dev/bus/usb/$BUS_NUM/$DEV_NUM

else
DEV_BUS=$LINK_DEV
echo "$1 points to $LINK_DEV"
fi
else
export DEV_BUS_FOLDER=$1
DEV_BUS=$1
fi

echo Resetting $DEV_BUS_FOLDER
./usbreset $DEV_BUS_FOLDER
echo "Resetting $DEV_BUS"
./usbreset $DEV_BUS
Loading