Files
2026-08-31 18:44:20 +02:00

69 lines
1.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
PYTHON="python3"
ENCODER="$SCRIPT_DIR/encoder.py"
DUCK2SPARK="$SCRIPT_DIR/duck2spark.py"
INPUT_DIR="$SCRIPT_DIR/ducky-payloads"
OUTPUT_DIR="$SCRIPT_DIR/payloads"
RESOURCE_DIR="$SCRIPT_DIR/resources"
usage() {
echo "Usage: $0 <payload> <layout>"
echo
echo "Example:"
echo " $0 open-website fr"
}
if [[ $# -ne 2 ]]; then
usage
exit 1
fi
PAYLOAD="$1"
LAYOUT="$2"
INPUT="$INPUT_DIR/$PAYLOAD.duck"
OUTPUT="$OUTPUT_DIR/$PAYLOAD.ino"
TMP_BIN="$OUTPUT_DIR/$PAYLOAD.bin"
LANG_FILE="$RESOURCE_DIR/$LAYOUT.properties"
if [[ ! -f "$INPUT" ]]; then
echo "Error: payload not found: $INPUT" >&2
exit 1
fi
if [[ ! -f "$LANG_FILE" ]]; then
echo "Error: keyboard layout not found: $LANG_FILE" >&2
exit 1
fi
mkdir -p "$OUTPUT_DIR"
echo "Payload : $PAYLOAD"
echo "Layout : $LAYOUT"
echo "Input : $INPUT"
echo "Output : $OUTPUT"
# DuckyScript to binary payload.
"$PYTHON" "$ENCODER" \
-i "$INPUT" \
-o "$TMP_BIN" \
-l "$LAYOUT"
# Binary payload to Arduino sketch.
"$PYTHON" "$DUCK2SPARK" \
-i "$TMP_BIN" \
-l 1 \
-f 1000 \
-o "$OUTPUT"
# Remove intermediate file.
rm -f "$TMP_BIN"
echo "Generated $OUTPUT"