diff --git a/.gitea/build.sh b/.gitea/build.sh deleted file mode 100755 index 35786a8..0000000 --- a/.gitea/build.sh +++ /dev/null @@ -1,46 +0,0 @@ -#! /bin/sh - -set -e - -log () { - echo "=== $*" -} - -# Make sure we're in the project directory -cd $(dirname $0)/.. - -mkdir -p out/ - -while read variant vid pid flags; do - log - log "Building $variant ($vid:$pid)" - log - - # We can overload build.extra_flags from boards.txt, - # so just specify the -D flags to gcc - flags="$flags -DUSB_VID=$vid -DUSB_PID=$pid" - flags="$flags -DUSB_MANUFACTURER=\"woozle.org\"" - flags="$flags \"-DUSB_PRODUCT=\"Mockband $variant\"\"" # wtf quoting - flags="$flags -DCDC_DISABLED" - - # Arduino gets cranky when it tries to use its own cache - rm -rf build/ - mkdir -p build/cache/ - - arduino-builder \ - -build-path $(pwd)/build/ \ - -build-cache $(pwd)/build/cache/ \ - -fqbn arduino:avr:leonardo \ - -hardware /usr/share/arduino/hardware \ - -tools /usr/share/arduino/tools \ - -prefs="build.extra_flags=$flags" \ - -compile MockBand.ino - - mv build/MockBand.ino.hex out/MockBand.$variant.hex -done << EOD -guitar 0x1bad 0x0004 -guitar-wammy 0x1bad 0x0004 -DWAMMY -drums 0x1bad 0x3110 -EOD - -ls -l out/ diff --git a/.gitea/publish.sh b/.gitea/publish.sh index efcbbc3..836d821 100755 --- a/.gitea/publish.sh +++ b/.gitea/publish.sh @@ -7,9 +7,15 @@ VERSION=$GITHUB_REF_NAME BASE=$GITHUB_SERVER_URL/api/packages/$GITHUB_ACTOR/generic/$PACKAGE/$VERSION +curl \ + --user "$GITHUB_ACTOR:$PACKAGE_API_TOKEN" \ + --request DELETE \ + $BASE + for path in "$@"; do fn=$(basename "$path") echo "=== Upload $VERSION/$fn" + curl \ --user "$GITHUB_ACTOR:$PACKAGE_API_TOKEN" \ --request DELETE \ diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml index 7774179..3d8958d 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build.yaml @@ -9,9 +9,11 @@ jobs: steps: - name: check out repository run: git clone -b $GITHUB_REF_NAME $GITHUB_SERVER_URL/$GITHUB_REPOSITORY . - - name: build - run: .gitea/build.sh + - name: build firmwares + run: make + - name: build zip file + run: make dist - name: publish env: PACKAGE_API_TOKEN: ${{ secrets.PACKAGE_API_TOKEN }} - run: .gitea/publish.sh out/* + run: .gitea/publish.sh build/*.zip build/*.hex diff --git a/.gitignore b/.gitignore index 7ebfec5..a97d760 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.zip *.hex +build/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6129671 --- /dev/null +++ b/Makefile @@ -0,0 +1,49 @@ +DEVICE=/dev/ttyACM0 + +all: firmwares + +firmwares: build/MockBand.guitar-wammy.hex +build/MockBand.guitar-wammy.hex: VID=0x1bad +build/MockBand.guitar-wammy.hex: PID=0x0004 +build/MockBand.guitar-wammy.hex: FLAGS=-DWAMMY + +firmwares: build/MockBand.guitar.hex +build/MockBand.guitar.hex: VID=0x1bad +build/MockBand.guitar.hex: PID=0x0004 + +firmwares: build/MockBand.drums.hex +build/MockBand.drums.hex: VID=0x1bad +build/MockBand.drums.hex: PID=0x3110 + +firmwares: build/MockBand.drums1.hex +build/MockBand.drums1.hex: VID=0x1bad +build/MockBand.drums1.hex: PID=00005 + + +build/MockBand.%.hex: MockBand.ino + mkdir -p build/cache + rm -f build/build.options.json + arduino-builder \ + -build-path $(abspath build/) \ + -build-cache $(abspath build/cache/) \ + -fqbn arduino:avr:leonardo \ + -hardware /usr/share/arduino/hardware/ \ + -tools /usr/share/arduino/tools/ \ + -prefs="build.extra_flags=-DUSB_VID=$(VID) -DUSB_PID=$(PID) '-DUSB_PRODUCT=\"Mockband $*\"' -DUSB_MANUFACTURER=\"woozle.org\" -DCDC_DISABLED $(FLAGS)" \ + -compile $< + mv build/MockBand.ino.hex $@ + + +flash-%: build/MockBand.%.hex + echo -n "Waiting for $(DEVICE)..."; while [ ! -e $(DEVICE) ]; do echo -n .; sleep 1; done + avrdude -v -patmega32u4 -cavr109 -P$(DEVICE) -b57600 -D -Uflash:w:$<:i + +dist: build/MockBand.zip + +build/MockBand.zip: firmwares + rm -f $@ + zip -r $@ README.md build/*.hex docs/ + +clean: + rm -rf build + diff --git a/MockBand.ino b/MockBand.ino index 8373f36..8794bd6 100644 --- a/MockBand.ino +++ b/MockBand.ino @@ -142,8 +142,8 @@ void loop() { } #else // DRUMS buttonState.buttons |= (buttons >> 10) & 0b01011; // Cymbals - bitWrite(buttonState.buttons, 10, buttons & (0b01111 << 0)); // Drum pad modifier - bitWrite(buttonState.buttons, 11, buttons & (0b01011 << 10)); // Cymbals modifier + bitWrite(buttonState.buttons, 10, (buttons >> 0) & 0b01111); // Drum pad modifier + bitWrite(buttonState.buttons, 11, (buttons >> 10) & 0b01011); // Cymbals modifier buttonState.axis[3] = bitRead(buttons, 12)?255:0; // High hat // rbdrum2midi wants these set @@ -151,6 +151,9 @@ void loop() { buttonState.velocity[1] = bitRead(buttonState.buttons, 2)?127:0; // R buttonState.velocity[2] = bitRead(buttonState.buttons, 1)?127:0; // G buttonState.velocity[3] = bitRead(buttonState.buttons, 0)?127:0; // B + + // Say the D-pad is centered + buttonState.hatAndConstant = 8; #endif #ifdef DPAD diff --git a/docs/tech-notes.md b/docs/tech-notes.md index fb48ec5..27a7d43 100644 --- a/docs/tech-notes.md +++ b/docs/tech-notes.md @@ -70,13 +70,19 @@ Here's what each bit means: hatAndConstant -------------- -Here's what the values mean: +The HAT switch reports its position like a clock. -* 2: right -* 6: left -* 0: up -* 4: down -* 8: nothing + 7 0 1 + + 6 8 2 + + 5 4 3 + +0 is up, +2 is right, +4 is down, +6 is left, +and 8 is centered. velocity