#!/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 " 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"