]> git.donarmstrong.com Git - kiibohd-controller.git/blobdiff - LoadFile/load.dfu
Major USB update, fixes most (if not all) known issues
[kiibohd-controller.git] / LoadFile / load.dfu
index 5c7719c2c12c7f7c0fcd16c169229c578d3b7349..8f2c7e323ebe641aae957112c5e70a752f07b41a 100755 (executable)
@@ -2,8 +2,9 @@
 # Convenience script for loading firmware onto a dfu type device
 # By default, initiates dfu-util
 
-SERIAL_PORT=""
-AUTO_SCREEN_SESSION=""
+SERIAL_PORT="/dev/kiibohd"
+AUTO_SCREEN_SESSION="/dev/kiibohd"
+NOSCREEN=0
 PROG_NAME=$(basename $0)
 
 # Parse all the command line arguments
@@ -19,6 +20,10 @@ while (( "$#" >= "1" )); do
                SERIAL_PORT="$2"
                shift
                ;;
+       -n|--noscreen)
+               NOSCREEN=1
+               shift
+               ;;
        -h|--help)
                echo "Usage: $PROG_NAME [options...]"
                echo ""
@@ -49,12 +54,19 @@ done
 if [[ "$SERIAL_PORT" != "" ]] && [[ -e "$SERIAL_PORT" ]]; then
        echo "NOTE: This may fail if the uC is in a bad state or does not support remote flashing"
        printf "reload\r" > $SERIAL_PORT
-       sleep 2
 fi
 
 # Load via dfu-util
 # Used for McHCK based uCs
 if type dfu-util &>/dev/null; then
+       # Wait for device to appear
+       while true; do
+               dfu-util -l | grep -q "Kiibohd DFU"
+               if [ $? -eq 0 ]; then
+                       break
+               fi
+               sleep 0.1
+       done
        dfu-util -D @TARGET_BIN@
        EXIT_STATUS=$?
 else
@@ -63,9 +75,12 @@ else
 fi
 
 # Load Screen Session if specified
-if (( "$EXIT_STATUS" == "0" )) && [[ "$AUTO_SCREEN_SESSION" != "" ]]; then
+if (( "$EXIT_STATUS" == "0" )) && [[ "$AUTO_SCREEN_SESSION" != "" ]] && [[ $NOSCREEN -ne 1 ]]; then
        if type screen &>/dev/null; then
-               sleep 0.1
+               # Wait for interface
+               while [ ! -e $AUTO_SCREEN_SESSION ]; do
+                       sleep 0.1
+               done
                screen $AUTO_SCREEN_SESSION
        else
                echo "screen is not installed"