Skip to content

Commit

Permalink
Implement basic features for linux
Browse files Browse the repository at this point in the history
  • Loading branch information
kairyu committed May 28, 2015
1 parent 934ed8d commit e14d5f4
Show file tree
Hide file tree
Showing 5 changed files with 459 additions and 0 deletions.
26 changes: 26 additions & 0 deletions linux/TODO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
TODO
====
- [ ] setup
- [x] Welcome
- [x] Select keyboard
- [x] Select firmware
- [x] Select bootloader
- [ ] Setup arduino bootloader
- [x] Save config
- [x] reflash
- [x] Welcome
- [x] Load config
- [x] Select manipulation
- [x] Reflash
- [ ] util
- [ ] reflash-dfu
- [x] Check dfu-programmer
- [x] Wait bootloader
- [x] Parse arguments
- [x] Reflash
- [ ] Replace original hex
- [ ] reflash-arduino
- [ ] dump_eeprom-dfu
- [ ] dump_eeprom-arduino
- [ ] find_serial_port
- [ ] wait_serial_port
Binary file added linux/bin/jq
Binary file not shown.
169 changes: 169 additions & 0 deletions linux/reflash.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
### _ _ _ _ _ _ _
###| |_| | ____ _ | |_ ___ ___ | | | _(_) |_
###| __| |/ / _` |__| __/ _ \ / _ \| | |/ / | __|
###| |_| < (_| |__| || (_) | (_) | | <| | |_
### \__|_|\_\__, | \__\___/ \___/|_|_|\_\_|\__|
### |___/
### REFLASH

#!/bin/bash
CURPATH=$(dirname "$0")
CONFPATH=$CURPATH/conf
BINPATH=$CURPATH/bin
SCRIPTPATH=$CURPATH/script
FWPATH=$CURPATH/../common/firmware

function welcome {
clear
cat "$0" | grep -e "^###" | sed "s/^###//g"
echo ""
}

function end {
echo ""
read -rsp "Press any key to continue . . . " -n 1 key
echo ""
exit
}

function check_config_file {
if [ ! -f "$1" ]
then
echo ""
echo "Config file does not exist, please run SETUP first"
echo ""
end
fi
}

function load_config_file {
check_config_file "$1"
while read line
do
declare -g "$line"
done < "$1"
}

function show_config {
echo ""
echo "Keyboard to reflash:"
echo ""
echo " Name: $KBDNAME"
echo " MCU: $KBDMCU"
echo " Bootloader: $KBDBL"
echo " Firmware: $KBDFW"
if [ -n "$KBDCOM" ]
then
echo " SerialPort: $KBDCOM"
fi
}

function select_manipulation {
echo ""
echo "Manipulation:"
echo ""
ARG="$@"
if [ -z "$ARG" ]
then
EXITCODE=1
echo " Reflash default firmware: ../common/firmware/$KBDFW"
elif [ -f "$ARG" ]
then
ARG_NAME=$(basename "$ARG")
ARG_EXT=${ARG_NAME##*.}
if [ "$ARG_EXT" == "hex" ]
then
EXITCODE=2
echo " Reflash firmware: \"$ARG\""
elif [ "$ARG_EXT" == "eep" ]
then
EXITCODE=3
echo " Reflash eeprom: \"$ARG\""
else
echo " Wrong argument: \"$ARG\""
end
fi
else
echo " Wrong argument: \"$ARG\""
end
fi
echo ""
read -p "Do you want to continue? [Y/n] " INPUT
[ "$INPUT" == "q" -o "$INPUT" == "n" ] && exit
return $EXITCODE
}

function reflash {
echo ""
case "$KBDBL" in
"atmel_dfu")
TARGET=$KBDMCU
if [ -z "$ARG2" ]
then
"$SCRIPTPATH/reflash-dfu.sh" "$ARG1"
else
"$SCRIPTPATH/reflash-dfu.sh" "$ARG1" "$ARG2"
fi
;;
"lufa_dfu")
TARGET=$KBDMCU
"$SCRIPTPATH/reflash-dfu.sh" "$ARG1"
;;
"arduino")
PARTNO=$KBDMCU
COM=$KBDCOM
"$SCRIPTPATH/reflash-arduino.sh" "$ARG1"
;;
*)
echo "Unsupported bootloader"
end
esac
}

welcome

CONFFILE=$CONFPATH/default.ini
load_config_file "$CONFFILE"
KBDNAME=$Name
KBDMCU=$MCU
KBDBL=$Bootloader
KBDFW=$Firmware
if [ -n "$SerialPort" ]
then
KBDCOM=$SerialPort
else
KBDCOM=
fi

show_config

ARG="$@"
select_manipulation "$ARG"
MANIP=$?

ARG1=
ARG2=
case $MANIP in
1)
ARG1="$FWPATH/$KBDFW"
;;
2)
ARG1="$ARG"
;;
3)
if [ "$KBDBL" == "atmel_dfu" ]
then
ARG1="$FWPATH/$KBDFW"
ARG2="$ARG"
else
ARG1="$ARG"
fi
;;
*)
exit
;;
esac

reflash

end
123 changes: 123 additions & 0 deletions linux/script/reflash-dfu.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
#!/bin/bash
SCRIPT=$(basename "$0")
CURPATH=$(dirname "$0")
BINPATH=$CURPATH/../bin
SCRIPTPATH=$CURPATH/../script
EXEC=dfu-programmer
[ -z "$TARGET" ] && TARGET=atmega32u4
VER=
HEX=
HEX_ORIG=
EEP=

function usage {
echo "Usage: $SCRIPT (eep | hex [hex | eep])"
exit 1
}

function get_version {
VERINFO=$("$EXEC" --version 2>&1)
if [ $(echo $VERINFO | grep -c "0.6") -gt 0 ]
then
VER=0.6
elif [ $(echo $VERINFO | grep -c "0.7") -gt 0 ]
then
VER=0.7
else
echo "dfu-programmer >= 0.6 not installed, please install first."
exit 1
fi
}

function wait_bootloader {
echo "Waiting for Bootloader..."
STARTTIME=$(date +"%s")
REMIND=0
while true
do
"$EXEC" $TARGET get > /dev/null 2>&1
[ $? -eq 0 ] && break
ENDTIME=$(date +"%s")
DURATION=$(($ENDTIME-$STARTTIME))
if [ $REMIND -eq 0 -a $DURATION -gt 30 ]
then
echo "Did you forget to press the reset button?"
REMIND=1
fi
done
}

[ -z "$1" ] && usage
[ ! -f "$1" ] && usage
ARG1=$1
ARG1_NAME=$(basename "$ARG1")
ARG1_EXT=${ARG1_NAME##*.}
case "$ARG1_EXT" in
"hex")
if [ "$#" -gt 1 ]
then
[ ! -f "$2" ] && usage
ARG2=$2
ARG2_NAME=$(basename "$ARG2")
ARG2_EXT=${ARG2_NAME##*.}
case "$ARG2_EXT" in
"hex")
HEX_ORIG=$ARG1
HEX=$ARG2
;;
"eep")
HEX=$ARG1
EEP=$ARG2
;;
esac
else
HEX=$ARG1
fi
;;
"eep")
EEP=$ARG1
;;
*)
usage
;;
esac

get_version
wait_bootloader

if [ -n "$HEX" ]
then
echo "Erasing..."
if [ "$VER" == "0.7" ]
then
"$EXEC" $TARGET erase --force
else
"$EXEC" $TARGET erase
fi
echo Reflashing HEX file...
"$EXEC" $TARGET flash "$HEX"
fi

if [ -n "$EEP" ]
then
echo "Reflashing EEP file..."
if [ "$VER" == "0.7" ]
then
"$EXEC" $TARGET flash-eeprom --force "$EEP"
else
"$EXEC" $TARGET flash-eeprom "$EEP"
fi

fi

EXITCODE=$?
if [ $EXITCODE -eq 0 ]
then
echo "Success!"
else
echo "Fail!"
fi

"$EXEC" $TARGET reset

exit $EXITCODE
Loading

0 comments on commit e14d5f4

Please sign in to comment.