├── .devcontainer
├── Dockerfile
└── devcontainer.json
├── .gitignore
├── LICENSE
├── PCB_with_gerber
├── Gerber_2in1.zip
├── Lite
│ ├── BOM_Project Dial Lite.csv
│ ├── Gerber_Project Dial Lite.zip
│ └── Project Dial Lite.json
├── Pro
│ ├── Project Dial MLB Gerber.zip
│ ├── Project Dial MLB LCEDA.json
│ ├── Project Dial MLB attiny.PcbDoc
│ ├── Project Dial attiny v2 github smt
│ │ ├── BOM check.xlsx
│ │ ├── BOM.csv
│ │ ├── PickAndPlace.csv
│ │ ├── PickAndPlace_BottomMirrored.csv
│ │ └── Project Dial MLB_Gerber.zip
│ └── Project Dial attiny v2 github.zip
└── README.md
├── README.md
├── bom.xlsx
├── lib
└── TrinketHidCombo
│ ├── License.txt
│ ├── TrinketHidCombo.cpp
│ ├── TrinketHidCombo.h
│ ├── TrinketHidCombo.zip
│ ├── TrinketHidComboC.c
│ ├── TrinketHidComboC.h
│ ├── cmdline_defs.h
│ ├── examples
│ ├── TrinketVolumeKnob
│ │ ├── Tinket Volume Knob Fritzing Sketch.fzz
│ │ ├── TrinketVolumeKnob.ino
│ │ └── trinket volume knob wiring.png
│ └── TrinketVolumeKnobPlus
│ │ ├── Tinket Volume Knob Plus Fritzing Sketch.fzz
│ │ ├── TrinketVolumeKnobPlus.ino
│ │ └── trinket volume knob with button wiring.png
│ ├── readme.txt
│ ├── usbconfig.h
│ ├── usbdrv
│ ├── Changelog.txt
│ ├── CommercialLicense.txt
│ ├── License.txt
│ ├── Readme.txt
│ ├── USB-ID-FAQ.txt
│ ├── USB-IDs-for-free.txt
│ ├── asmcommon.inc
│ ├── oddebug.c
│ ├── oddebug.h
│ ├── usbdrv.c
│ ├── usbdrv.h
│ ├── usbdrvasm.S
│ ├── usbdrvasm.asm
│ ├── usbdrvasm165.inc
│ └── usbportability.h
│ ├── usbdrv_includer.c
│ └── usbdrvasm_includer.S
├── src
├── Surface_Dial_attiny
│ ├── .vscode
│ │ └── arduino.json
│ ├── Surface_Dial_attiny.ino
│ ├── Surface_Dial_attiny_Lite.ino
│ └── micronucleus-1.11
│ │ ├── Contributing.txt
│ │ ├── License.txt
│ │ ├── Readme.txt
│ │ ├── Style Guide.txt
│ │ ├── commandline
│ │ ├── 49-micronucleus.rules
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── builds
│ │ │ ├── OSX
│ │ │ │ └── micronucleus
│ │ │ └── Windows
│ │ │ │ └── micronucleus.exe
│ │ ├── library
│ │ │ ├── littleWire_util.c
│ │ │ ├── littleWire_util.h
│ │ │ ├── micronucleus_lib.c
│ │ │ └── micronucleus_lib.h
│ │ └── micronucleus.c
│ │ ├── firmware
│ │ ├── Makefile
│ │ ├── bootloaderconfig.h
│ │ ├── crt1.S
│ │ ├── main.c
│ │ ├── osccalASM.S
│ │ ├── releases
│ │ │ ├── 49-micronucleus.rules
│ │ │ ├── Makefile
│ │ │ ├── Readme
│ │ │ ├── builds
│ │ │ │ ├── OSX
│ │ │ │ │ └── micronucleus
│ │ │ │ └── Windows
│ │ │ │ │ └── micronucleus.exe
│ │ │ ├── library
│ │ │ │ ├── littleWire_util.c
│ │ │ │ ├── littleWire_util.h
│ │ │ │ ├── micronucleus_lib.c
│ │ │ │ └── micronucleus_lib.h
│ │ │ ├── micronucleus-1.02.hex
│ │ │ ├── micronucleus-1.03-2secs.hex
│ │ │ ├── micronucleus-1.03-5secs.hex
│ │ │ ├── micronucleus-1.04-low-power.hex
│ │ │ ├── micronucleus-1.04.hex
│ │ │ ├── micronucleus-1.05-jumper.hex
│ │ │ ├── micronucleus-1.05.hex
│ │ │ ├── micronucleus-1.06-jumper-v2.hex
│ │ │ ├── micronucleus-1.06.hex
│ │ │ ├── micronucleus-1.10-ledpb1.hex
│ │ │ ├── micronucleus-1.10.hex
│ │ │ ├── micronucleus-1.11-entry_ext_reset.hex
│ │ │ ├── micronucleus-1.11-entry_jumper_pb0.hex
│ │ │ ├── micronucleus-1.11-ledpb1.hex
│ │ │ ├── micronucleus-1.11.hex
│ │ │ ├── micronucleus.c
│ │ │ ├── micronucleus.exe
│ │ │ └── release notes.txt
│ │ ├── usbconfig.h
│ │ └── usbdrv
│ │ │ ├── Changelog.txt
│ │ │ ├── CommercialLicense.txt
│ │ │ ├── License.txt
│ │ │ ├── Readme.txt
│ │ │ ├── USB-ID-FAQ.txt
│ │ │ ├── USB-IDs-for-free.txt
│ │ │ ├── asmcommon.inc
│ │ │ ├── oddebug.c
│ │ │ ├── oddebug.h
│ │ │ ├── usbconfig-prototype.h
│ │ │ ├── usbdrv.c
│ │ │ ├── usbdrv.h
│ │ │ ├── usbdrvasm.S
│ │ │ ├── usbdrvasm.asm
│ │ │ ├── usbdrvasm12.inc
│ │ │ ├── usbdrvasm128.inc
│ │ │ ├── usbdrvasm15.inc
│ │ │ ├── usbdrvasm16.inc
│ │ │ ├── usbdrvasm165.inc
│ │ │ ├── usbdrvasm18-crc.inc
│ │ │ ├── usbdrvasm20.inc
│ │ │ └── usbportability.h
│ │ ├── micronucleus-t85_winDriver.zip
│ │ ├── ruby
│ │ ├── dump.rb
│ │ ├── hex-to-bin.rb
│ │ ├── micronucleus.rb
│ │ └── upload.rb
│ │ └── upgrade
│ │ ├── Makefile
│ │ ├── bootloader_data.c
│ │ ├── generate-data.rb
│ │ ├── readme.txt
│ │ ├── releases
│ │ ├── micronucleus-1.03-upgrade.hex
│ │ ├── micronucleus-1.04-upgrade.hex
│ │ ├── micronucleus-1.05-jumper-upgrade.hex
│ │ ├── micronucleus-1.05-upgrade.hex
│ │ ├── micronucleus-1.06-jumper-v2-upgrade.hex
│ │ ├── micronucleus-1.06-upgrade.hex
│ │ ├── micronucleus-1.10-ledpb1-upgrade.hex
│ │ ├── micronucleus-1.10-upgrade.hex
│ │ ├── micronucleus-1.11-entry-ext-reset-upgrade.hex
│ │ ├── micronucleus-1.11-entry-jumper-pb0-upgrade.hex
│ │ ├── micronucleus-1.11-ledpb1-upgrade.hex
│ │ └── micronucleus-1.11-upgrade.hex
│ │ ├── technical details.txt
│ │ ├── upgrade-prefix.hex
│ │ ├── upgrade.c
│ │ └── utils.h
└── attiny_fuse_2
│ └── attiny_fuse_2.ino
├── stl model
├── surface dial t v2.3.STL
└── surface dial v2.3.STL
└── tools
└── avrdudess_20191012
├── Changelog.txt
├── Credits.txt
├── Languages
├── chinese-zh_CN.xml
├── english - 副本.xml
├── english.xml
├── french.xml
├── german.xml
├── polish.xml
└── russian.xml
├── License.txt
├── README.md
├── TODO.txt
├── avr-size.exe
├── avrdude.conf
├── avrdude.exe
├── avrdudess.exe
├── bits.xml
├── config.xml
├── libusb0.dll
└── presets.xml
/.devcontainer/Dockerfile:
--------------------------------------------------------------------------------
1 | #-------------------------------------------------------------------------------------------------------------
2 | # Copyright (c) Microsoft Corporation. All rights reserved.
3 | # Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information.
4 | #-------------------------------------------------------------------------------------------------------------
5 |
6 | FROM mcr.microsoft.com/vscode/devcontainers/base:debian-9
7 |
8 | # This Dockerfile's base image has a non-root user with sudo access. Use the "remoteUser"
9 | # property in devcontainer.json to use it. On Linux, the container user's GID/UIDs
10 | # will be updated to match your local UID/GID (when using the dockerFile property).
11 | # See https://aka.ms/vscode-remote/containers/non-root-user for details.
12 | ARG USERNAME=vscode
13 | ARG USER_UID=1000
14 | ARG USER_GID=$USER_UID
15 |
16 | # Configure apt and install packages
17 | RUN apt-get update \
18 | && export DEBIAN_FRONTEND=noninteractive \
19 | #
20 | # Install C++ tools
21 | && apt-get -y install build-essential cmake cppcheck valgrind \
22 | #
23 | # [Optional] Update UID/GID if needed
24 | && if [ "$USER_GID" != "1000" ] || [ "$USER_UID" != "1000" ]; then \
25 | groupmod --gid $USER_GID $USERNAME \
26 | && usermod --uid $USER_UID --gid $USER_GID $USERNAME \
27 | && chown -R $USER_UID:$USER_GID /home/$USERNAME; \
28 | fi \
29 | #
30 | # Clean up
31 | && apt-get autoremove -y \
32 | && apt-get clean -y \
33 | && rm -rf /var/lib/apt/lists/*
34 |
--------------------------------------------------------------------------------
/.devcontainer/devcontainer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "C++",
3 | "dockerFile": "Dockerfile",
4 | "runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined"],
5 |
6 | // Set *default* container specific settings.json values on container create.
7 | "settings": {
8 | "terminal.integrated.shell.linux": "/bin/bash"
9 | },
10 |
11 | // Add the IDs of extensions you want installed when the container is created.
12 | "extensions": [
13 | "ms-vscode.cpptools"
14 | ]
15 |
16 | // Use 'forwardPorts' to make a list of ports inside the container available locally.
17 | // "forwardPorts": [],
18 |
19 | // Use 'postCreateCommand' to run commands after the container is created.
20 | // "postCreateCommand": "gcc -v",
21 |
22 | // Uncomment to connect as a non-root user. See https://aka.ms/vscode-remote/containers/non-root.
23 | // "remoteUser": "vscode"
24 |
25 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Prerequisites
2 | *.d
3 |
4 | # Object files
5 | *.o
6 | *.ko
7 | *.obj
8 | *.elf
9 |
10 | # Linker output
11 | *.ilk
12 | *.map
13 | *.exp
14 |
15 | # Precompiled Headers
16 | *.gch
17 | *.pch
18 |
19 | # Libraries
20 | *.lib
21 | *.a
22 | *.la
23 | *.lo
24 |
25 | # Shared objects (inc. Windows DLLs)
26 | *.dll
27 | *.so
28 | *.so.*
29 | *.dylib
30 |
31 | # Executables
32 | *.exe
33 | *.out
34 | *.app
35 | *.i*86
36 | *.x86_64
37 | *.hex
38 |
39 | # Debug files
40 | *.dSYM/
41 | *.su
42 | *.idb
43 | *.pdb
44 |
45 | # Kernel Module Compile Results
46 | *.mod*
47 | *.cmd
48 | .tmp_versions/
49 | modules.order
50 | Module.symvers
51 | Mkfile.old
52 | dkms.conf
53 |
--------------------------------------------------------------------------------
/PCB_with_gerber/Gerber_2in1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/PCB_with_gerber/Gerber_2in1.zip
--------------------------------------------------------------------------------
/PCB_with_gerber/Lite/BOM_Project Dial Lite.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/PCB_with_gerber/Lite/BOM_Project Dial Lite.csv
--------------------------------------------------------------------------------
/PCB_with_gerber/Lite/Gerber_Project Dial Lite.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/PCB_with_gerber/Lite/Gerber_Project Dial Lite.zip
--------------------------------------------------------------------------------
/PCB_with_gerber/Pro/Project Dial MLB Gerber.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/PCB_with_gerber/Pro/Project Dial MLB Gerber.zip
--------------------------------------------------------------------------------
/PCB_with_gerber/Pro/Project Dial attiny v2 github smt/BOM check.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/PCB_with_gerber/Pro/Project Dial attiny v2 github smt/BOM check.xlsx
--------------------------------------------------------------------------------
/PCB_with_gerber/Pro/Project Dial attiny v2 github smt/BOM.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/PCB_with_gerber/Pro/Project Dial attiny v2 github smt/BOM.csv
--------------------------------------------------------------------------------
/PCB_with_gerber/Pro/Project Dial attiny v2 github smt/PickAndPlace.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/PCB_with_gerber/Pro/Project Dial attiny v2 github smt/PickAndPlace.csv
--------------------------------------------------------------------------------
/PCB_with_gerber/Pro/Project Dial attiny v2 github smt/PickAndPlace_BottomMirrored.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/PCB_with_gerber/Pro/Project Dial attiny v2 github smt/PickAndPlace_BottomMirrored.csv
--------------------------------------------------------------------------------
/PCB_with_gerber/Pro/Project Dial attiny v2 github smt/Project Dial MLB_Gerber.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/PCB_with_gerber/Pro/Project Dial attiny v2 github smt/Project Dial MLB_Gerber.zip
--------------------------------------------------------------------------------
/PCB_with_gerber/Pro/Project Dial attiny v2 github.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/PCB_with_gerber/Pro/Project Dial attiny v2 github.zip
--------------------------------------------------------------------------------
/PCB_with_gerber/README.md:
--------------------------------------------------------------------------------
1 | # 二合一版本未经本人测试
2 |
3 | # 关于版本选择和焊接 Version Choice & Soldering
4 |
5 | ## **!建议使用/PCB_with_gerber/Pro/...attiny v2 github.zip!**
6 |
7 | ## 版本选择 Version Chioce
8 |
9 | | | Pro | Lite |
10 | | ---------------------------- | ------------------------------------ | --------------------------------- |
11 | | **O&M** | @Eddddddddy | @Eddddddddy, @leostudiooo |
12 | | **Basic Functions** | Y | Y |
13 | | **Cost** | Higher | Lower |
14 | | **Vibration(Taptic Engine)** | Y | N |
15 | | **Encoder** | EC11E1834403 _(ALPS, without detent)_ | EC11*(With detent)* |
16 | | **Arduino File** | /src/Surface_Dial_attiny.ino | /src/Surface_Dial_attiny_Lite.ino |
17 | | **PCB File** _(Now All-in-One)_ | /PCB_with_gerber/Pro | /PCB_with_gerber/Lite |
18 | | **Fuse Reset** | Needed | Unnecessary |
19 |
20 | ## PCB
21 |
22 | 你可以选择原版Pro或Lite,也可以尝试新出来的二合一版本。
23 | You can choose the original Pro or Lite, or the 2 in 1 ver.
24 |
25 | ## 焊接 Soldering (for 2 in 1 ver.)
26 |
27 | 如果你选择二合一版本,那么你有升级的机会。
28 | If you choose the 2 in 1(AIO) version, you have a chance to upgrade to Pro.
29 |
30 | - 如果你选择Pro,请连接板子背面标注SW Pro的两个焊盘。
31 | If you choose Pro, plz connect the two solders with "SW Pro" on the bottom.
32 |
33 | - 如果你选择Lite,请连接板子正面标注SW Lite的两个焊盘。
34 | If you choose Lite, plz connect the two solders with "SW Lite" on the top.
35 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Surface_Dial_Arduino
2 |
3 | Use attiny85 to achieve surface dial function
4 |
5 | ## **!注意!建议使用/PCB_with_gerber/Pro/...attiny v2 github.zip!其他pcb工程(包含立创EDA的开源工程)未经本人测试,不做可靠性保证。**
6 |
7 | 将这个添加到你的Arduino IDE开发板中:http://digistump.com/package_digistump_index.json
8 |
9 | /bom.xlsx :元器件清单
10 |
11 | /lib :arduino库
12 |
13 | /src :arduino代码(包含融丝恢复器代码)
14 |
15 | /tools :编程器上位机软件
16 |
17 | /stl model :3D打印模型
18 |
19 | /PCB_with_gerber :pcb文件
20 |
21 | 立创EDA开源文件在[这里](https://oshwhub.com/Lingling0408/project-dial-pcb)
22 |
23 | 【点个Star!】谢谢!
24 |
25 | 在[这里](https://www.bilibili.com/video/BV17K411W78w/)可以查看视频介绍
26 |
27 | ------
28 |
29 | | | Pro | Lite |
30 | | ---------------------------- | ------------------------------------ | --------------------------------- |
31 | | **O&M** | @Eddddddddy | @Eddddddddy, @leostudiooo |
32 | | **Basic Functions** | Y | Y |
33 | | **Cost** | Higher | Lower |
34 | | **Vibration(Taptic Engine)** | Y | N |
35 | | **Encoder** | EC11E1834403 _(ALPS, without detent)_ | EC11*(With detent)* |
36 | | **Arduino File** | /src/Surface_Dial_attiny.ino | /src/Surface_Dial_attiny_Lite.ino |
37 | | **PCB File** _(Now All-in-One)_ | /PCB_with_gerber/Pro | /PCB_with_gerber/Lite |
38 | | **Fuse Reset** | Needed | Unnecessary |
39 |
40 | ------
41 |
42 | 你需要做什么?
43 |
44 | - 想好购买的元器件是Pro还是Lite *(虽然后期也可以升级)*
45 |
46 | - 在你信任的地方购买所需元器件
47 |
48 | - 焊接(见/PCB_with_Gerber/README.md)
49 |
50 | - 刷入程序
51 |
52 | - 开始你的Dial之旅
53 |
--------------------------------------------------------------------------------
/bom.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/bom.xlsx
--------------------------------------------------------------------------------
/lib/TrinketHidCombo/TrinketHidCombo.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/lib/TrinketHidCombo/TrinketHidCombo.zip
--------------------------------------------------------------------------------
/lib/TrinketHidCombo/TrinketHidComboC.h:
--------------------------------------------------------------------------------
1 | /*
2 | Header file for TrinketHidComboC.c
3 |
4 | Copyright (c) 2013 Adafruit Industries
5 | All rights reserved.
6 |
7 | TrinketHidCombo is free software: you can redistribute it and/or modify
8 | it under the terms of the GNU Lesser General Public License as
9 | published by the Free Software Foundation, either version 3 of
10 | the License, or (at your option) any later version.
11 |
12 | TrinketHidCombo is distributed in the hope that it will be useful,
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | GNU Lesser General Public License for more details.
16 |
17 | You should have received a copy of the GNU Lesser General Public
18 | License along with TrinketHidCombo. If not, see
19 | .
20 | */
21 |
22 | #ifndef _TRINKETHIDCOMBOC_H_
23 | #define _TRINKETHIDCOMBOC_H_
24 |
25 | #ifdef __cplusplus
26 | extern "C" {
27 | #endif
28 |
29 | #include
30 |
31 | extern char usb_hasCommed;
32 | extern uint8_t led_state;
33 | extern uint8_t report_buffer[8];
34 |
35 | void usbBegin();
36 | void usbPollWrapper();
37 | void usbReportSend(uint8_t sz);
38 |
39 | #define REPID_MOUSE 1
40 | #define REPID_KEYBOARD 2
41 | #define REPID_MMKEY 10
42 | #define REPID_SYSCTRLKEY 4
43 | #define REPSIZE_MOUSE 4
44 | #define REPSIZE_KEYBOARD 8
45 | #define REPSIZE_MMKEY 3
46 | #define REPSIZE_SYSCTRLKEY 2
47 |
48 | #ifdef __cplusplus
49 | }
50 | #endif
51 |
52 | #endif
--------------------------------------------------------------------------------
/lib/TrinketHidCombo/cmdline_defs.h:
--------------------------------------------------------------------------------
1 | /*
2 | * The purpose of this file is to provide the compiler any definitions that would usually go in the command line options, since Arduino IDE does not allow such additions
3 |
4 | Copyright (c) 2013 Adafruit Industries
5 | All rights reserved.
6 |
7 | TrinketHidCombo is free software: you can redistribute it and/or modify
8 | it under the terms of the GNU Lesser General Public License as
9 | published by the Free Software Foundation, either version 3 of
10 | the License, or (at your option) any later version.
11 |
12 | TrinketHidCombo is distributed in the hope that it will be useful,
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | GNU Lesser General Public License for more details.
16 |
17 | You should have received a copy of the GNU Lesser General Public
18 | License along with TrinketHidCombo. If not, see
19 | .
20 |
21 | */
22 |
23 | #ifndef _CMDLINE_DEFS_H_
24 | #define _CMDLINE_DEFS_H_
25 |
26 | #include
27 |
28 | #if defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny25__)
29 | // the oscillator calibration will cause the F_CPU to change
30 | #undef F_CPU
31 | #define F_CPU 16500000UL
32 |
33 | #endif
34 |
35 | #endif
--------------------------------------------------------------------------------
/lib/TrinketHidCombo/examples/TrinketVolumeKnob/Tinket Volume Knob Fritzing Sketch.fzz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/lib/TrinketHidCombo/examples/TrinketVolumeKnob/Tinket Volume Knob Fritzing Sketch.fzz
--------------------------------------------------------------------------------
/lib/TrinketHidCombo/examples/TrinketVolumeKnob/TrinketVolumeKnob.ino:
--------------------------------------------------------------------------------
1 | // see tutorial at http://learn.adafruit.com/trinket-usb-volume-knob
2 |
3 | #include "TrinketHidCombo.h"
4 |
5 | #define PIN_ENCODER_A 0
6 | #define PIN_ENCODER_B 2
7 | #define TRINKET_PINx PINB
8 |
9 | static uint8_t enc_prev_pos = 0;
10 | static uint8_t enc_flags = 0;
11 |
12 | void setup()
13 | {
14 | // set pins as input with internal pull-up resistors enabled
15 | pinMode(PIN_ENCODER_A, INPUT);
16 | pinMode(PIN_ENCODER_B, INPUT);
17 | digitalWrite(PIN_ENCODER_A, HIGH);
18 | digitalWrite(PIN_ENCODER_B, HIGH);
19 |
20 | TrinketHidCombo.begin(); // start the USB device engine and enumerate
21 |
22 | // get an initial reading on the encoder pins
23 | if (digitalRead(PIN_ENCODER_A) == LOW) {
24 | enc_prev_pos |= (1 << 0);
25 | }
26 | if (digitalRead(PIN_ENCODER_B) == LOW) {
27 | enc_prev_pos |= (1 << 1);
28 | }
29 | }
30 |
31 | void loop()
32 | {
33 | int8_t enc_action = 0; // 1 or -1 if moved, sign is direction
34 |
35 | // note: for better performance, the code will now use
36 | // direct port access techniques
37 | // http://www.arduino.cc/en/Reference/PortManipulation
38 | uint8_t enc_cur_pos = 0;
39 | // read in the encoder state first
40 | if (bit_is_clear(TRINKET_PINx, PIN_ENCODER_A)) {
41 | enc_cur_pos |= (1 << 0);
42 | }
43 | if (bit_is_clear(TRINKET_PINx, PIN_ENCODER_B)) {
44 | enc_cur_pos |= (1 << 1);
45 | }
46 |
47 | // if any rotation at all
48 | if (enc_cur_pos != enc_prev_pos)
49 | {
50 | if (enc_prev_pos == 0x00)
51 | {
52 | // this is the first edge
53 | if (enc_cur_pos == 0x01) {
54 | enc_flags |= (1 << 0);
55 | }
56 | else if (enc_cur_pos == 0x02) {
57 | enc_flags |= (1 << 1);
58 | }
59 | }
60 |
61 | if (enc_cur_pos == 0x03)
62 | {
63 | // this is when the encoder is in the middle of a "step"
64 | enc_flags |= (1 << 4);
65 | }
66 | else if (enc_cur_pos == 0x00)
67 | {
68 | // this is the final edge
69 | if (enc_prev_pos == 0x02) {
70 | enc_flags |= (1 << 2);
71 | }
72 | else if (enc_prev_pos == 0x01) {
73 | enc_flags |= (1 << 3);
74 | }
75 |
76 | // check the first and last edge
77 | // or maybe one edge is missing, if missing then require the middle state
78 | // this will reject bounces and false movements
79 | if (bit_is_set(enc_flags, 0) && (bit_is_set(enc_flags, 2) || bit_is_set(enc_flags, 4))) {
80 | enc_action = 1;
81 | }
82 | else if (bit_is_set(enc_flags, 2) && (bit_is_set(enc_flags, 0) || bit_is_set(enc_flags, 4))) {
83 | enc_action = 1;
84 | }
85 | else if (bit_is_set(enc_flags, 1) && (bit_is_set(enc_flags, 3) || bit_is_set(enc_flags, 4))) {
86 | enc_action = -1;
87 | }
88 | else if (bit_is_set(enc_flags, 3) && (bit_is_set(enc_flags, 1) || bit_is_set(enc_flags, 4))) {
89 | enc_action = -1;
90 | }
91 |
92 | enc_flags = 0; // reset for next time
93 | }
94 | }
95 |
96 | enc_prev_pos = enc_cur_pos;
97 |
98 | if (enc_action > 0) {
99 | TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_UP);
100 | }
101 | else if (enc_action < 0) {
102 | TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_DOWN);
103 | }
104 | else {
105 | TrinketHidCombo.poll(); // do nothing, check if USB needs anything done
106 | }
107 | }
108 |
--------------------------------------------------------------------------------
/lib/TrinketHidCombo/examples/TrinketVolumeKnob/trinket volume knob wiring.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/lib/TrinketHidCombo/examples/TrinketVolumeKnob/trinket volume knob wiring.png
--------------------------------------------------------------------------------
/lib/TrinketHidCombo/examples/TrinketVolumeKnobPlus/Tinket Volume Knob Plus Fritzing Sketch.fzz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/lib/TrinketHidCombo/examples/TrinketVolumeKnobPlus/Tinket Volume Knob Plus Fritzing Sketch.fzz
--------------------------------------------------------------------------------
/lib/TrinketHidCombo/examples/TrinketVolumeKnobPlus/TrinketVolumeKnobPlus.ino:
--------------------------------------------------------------------------------
1 | // see tutorial at http://learn.adafruit.com/trinket-usb-volume-knob
2 |
3 | #include "TrinketHidCombo.h"
4 |
5 | #define PIN_ENCODER_A 0
6 | #define PIN_ENCODER_B 2
7 | #define TRINKET_PINx PINB
8 | #define PIN_ENCODER_SWITCH 1
9 |
10 | static uint8_t enc_prev_pos = 0;
11 | static uint8_t enc_flags = 0;
12 | static char sw_was_pressed = 0;
13 |
14 | void setup()
15 | {
16 | // set pins as input with internal pull-up resistors enabled
17 | pinMode(PIN_ENCODER_A, INPUT);
18 | pinMode(PIN_ENCODER_B, INPUT);
19 | digitalWrite(PIN_ENCODER_A, HIGH);
20 | digitalWrite(PIN_ENCODER_B, HIGH);
21 |
22 | pinMode(PIN_ENCODER_SWITCH, INPUT);
23 | // the switch is active-high, not active-low
24 | // since it shares the pin with Trinket's built-in LED
25 | // the LED acts as a pull-down resistor
26 | digitalWrite(PIN_ENCODER_SWITCH, LOW);
27 |
28 | TrinketHidCombo.begin(); // start the USB device engine and enumerate
29 |
30 | // get an initial reading on the encoder pins
31 | if (digitalRead(PIN_ENCODER_A) == LOW) {
32 | enc_prev_pos |= (1 << 0);
33 | }
34 | if (digitalRead(PIN_ENCODER_B) == LOW) {
35 | enc_prev_pos |= (1 << 1);
36 | }
37 | }
38 |
39 | void loop()
40 | {
41 | int8_t enc_action = 0; // 1 or -1 if moved, sign is direction
42 |
43 | // note: for better performance, the code will now use
44 | // direct port access techniques
45 | // http://www.arduino.cc/en/Reference/PortManipulation
46 | uint8_t enc_cur_pos = 0;
47 | // read in the encoder state first
48 | if (bit_is_clear(TRINKET_PINx, PIN_ENCODER_A)) {
49 | enc_cur_pos |= (1 << 0);
50 | }
51 | if (bit_is_clear(TRINKET_PINx, PIN_ENCODER_B)) {
52 | enc_cur_pos |= (1 << 1);
53 | }
54 |
55 | // if any rotation at all
56 | if (enc_cur_pos != enc_prev_pos)
57 | {
58 | if (enc_prev_pos == 0x00)
59 | {
60 | // this is the first edge
61 | if (enc_cur_pos == 0x01) {
62 | enc_flags |= (1 << 0);
63 | }
64 | else if (enc_cur_pos == 0x02) {
65 | enc_flags |= (1 << 1);
66 | }
67 | }
68 |
69 | if (enc_cur_pos == 0x03)
70 | {
71 | // this is when the encoder is in the middle of a "step"
72 | enc_flags |= (1 << 4);
73 | }
74 | else if (enc_cur_pos == 0x00)
75 | {
76 | // this is the final edge
77 | if (enc_prev_pos == 0x02) {
78 | enc_flags |= (1 << 2);
79 | }
80 | else if (enc_prev_pos == 0x01) {
81 | enc_flags |= (1 << 3);
82 | }
83 |
84 | // check the first and last edge
85 | // or maybe one edge is missing, if missing then require the middle state
86 | // this will reject bounces and false movements
87 | if (bit_is_set(enc_flags, 0) && (bit_is_set(enc_flags, 2) || bit_is_set(enc_flags, 4))) {
88 | enc_action = 1;
89 | }
90 | else if (bit_is_set(enc_flags, 2) && (bit_is_set(enc_flags, 0) || bit_is_set(enc_flags, 4))) {
91 | enc_action = 1;
92 | }
93 | else if (bit_is_set(enc_flags, 1) && (bit_is_set(enc_flags, 3) || bit_is_set(enc_flags, 4))) {
94 | enc_action = -1;
95 | }
96 | else if (bit_is_set(enc_flags, 3) && (bit_is_set(enc_flags, 1) || bit_is_set(enc_flags, 4))) {
97 | enc_action = -1;
98 | }
99 |
100 | enc_flags = 0; // reset for next time
101 | }
102 | }
103 |
104 | enc_prev_pos = enc_cur_pos;
105 |
106 | if (enc_action > 0) {
107 | TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_UP);
108 | }
109 | else if (enc_action < 0) {
110 | TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_DOWN);
111 | }
112 |
113 | // remember that the switch is active-high
114 | if (bit_is_set(TRINKET_PINx, PIN_ENCODER_SWITCH))
115 | {
116 | if (sw_was_pressed == 0) // only on initial press, so the keystroke is not repeated while the button is held down
117 | {
118 | TrinketHidCombo.pressMultimediaKey(MMKEY_MUTE);
119 | delay(5); // debounce delay
120 | }
121 | sw_was_pressed = 1;
122 | }
123 | else
124 | {
125 | if (sw_was_pressed != 0) {
126 | delay(5); // debounce delay
127 | }
128 | sw_was_pressed = 0;
129 | }
130 |
131 | TrinketHidCombo.poll(); // check if USB needs anything done
132 | }
133 |
--------------------------------------------------------------------------------
/lib/TrinketHidCombo/examples/TrinketVolumeKnobPlus/trinket volume knob with button wiring.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/lib/TrinketHidCombo/examples/TrinketVolumeKnobPlus/trinket volume knob with button wiring.png
--------------------------------------------------------------------------------
/lib/TrinketHidCombo/readme.txt:
--------------------------------------------------------------------------------
1 | TrinketHidCombo is a part of Adafruit's Trinket/Gemma USB HID Arduino Library
2 |
3 | TrinketHidCombo allows the user to implement a simple USB keyboard inside the Arduino environment
4 |
5 | Please see TrinketHidCombo.h for usage documentation, an example is also included
6 |
7 | TrinketHidCombo uses V-USB (http://www.obdev.at/products/vusb/) to implement USB with a bitbang technique. See the folder "usbdrv" for V-USB files.
8 |
9 | Adafruit's Trinket and Gemma can do almost anything that V-USB can do, including USB mouse, keyboards, joysticks, gamepads, MIDI devices, and much more (including custom devices that do not fit any existing category).
10 |
11 | Copyright (c) 2013 Adafruit Industries
12 | All rights reserved.
13 |
14 | TrinketHidCombo is free software: you can redistribute it and/or modify
15 | it under the terms of the GNU Lesser General Public License as
16 | published by the Free Software Foundation, either version 3 of
17 | the License, or (at your option) any later version.
18 |
19 | TrinketHidCombo is distributed in the hope that it will be useful,
20 | but WITHOUT ANY WARRANTY; without even the implied warranty of
21 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 | GNU Lesser General Public License for more details.
23 |
24 | You should have received a copy of the GNU Lesser General Public
25 | License along with TrinketHidCombo. If not, see
26 | .
--------------------------------------------------------------------------------
/lib/TrinketHidCombo/usbdrv/USB-ID-FAQ.txt:
--------------------------------------------------------------------------------
1 | Version 2012-07-09
2 |
3 | ==========================
4 | WHY DO WE NEED THESE IDs?
5 | ==========================
6 |
7 | USB is more than a low level protocol for data transport. It also defines a
8 | common set of requests which must be understood by all devices. And as part
9 | of these common requests, the specification defines data structures, the
10 | USB Descriptors, which are used to describe the properties of the device.
11 |
12 | From the perspective of an operating system, it is therefore possible to find
13 | out basic properties of a device (such as e.g. the manufacturer and the name
14 | of the device) without a device-specific driver. This is essential because
15 | the operating system can choose a driver to load based on this information
16 | (Plug-And-Play).
17 |
18 | Among the most important properties in the Device Descriptor are the USB
19 | Vendor- and Product-ID. Both are 16 bit integers. The most simple form of
20 | driver matching is based on these IDs. The driver announces the Vendor- and
21 | Product-IDs of the devices it can handle and the operating system loads the
22 | appropriate driver when the device is connected.
23 |
24 | It is obvious that this technique only works if the pair Vendor- plus
25 | Product-ID is unique: Only devices which require the same driver can have the
26 | same pair of IDs.
27 |
28 |
29 | =====================================================
30 | HOW DOES THE USB STANDARD ENSURE THAT IDs ARE UNIQUE?
31 | =====================================================
32 |
33 | Since it is so important that USB IDs are unique, the USB Implementers Forum,
34 | Inc. (usb.org) needs a way to enforce this legally. It is not forbidden by
35 | law to build a device and assign it any random numbers as IDs. Usb.org
36 | therefore needs an agreement to regulate the use of USB IDs. The agreement
37 | binds only parties who agreed to it, of course. Everybody else is free to use
38 | any numbers for their IDs.
39 |
40 | So how can usb.org ensure that every manufacturer of USB devices enters into
41 | an agreement with them? They do it via trademark licensing. Usb.org has
42 | registered the trademark "USB", all associated logos and related terms. If
43 | you want to put an USB logo on your product or claim that it is USB
44 | compliant, you must license these trademarks from usb.org. And this is where
45 | you enter into an agreement. See the "USB-IF Trademark License Agreement and
46 | Usage Guidelines for the USB-IF Logo" at
47 | http://www.usb.org/developers/logo_license/.
48 |
49 | Licensing the USB trademarks requires that you buy a USB Vendor-ID from
50 | usb.org (one-time fee of ca. 2,000 USD), that you become a member of usb.org
51 | (yearly fee of ca. 4,000 USD) and that you meet all the technical
52 | specifications from the USB spec.
53 |
54 | This means that most hobbyists and small companies will never be able to
55 | become USB compliant, just because membership is so expensive. And you can't
56 | be compliant with a driver based on V-USB anyway, because the AVR's port pins
57 | don't meet the electrical specifications for USB. So, in principle, all
58 | hobbyists and small companies are free to choose any random numbers for their
59 | IDs. They have nothing to lose...
60 |
61 | There is one exception worth noting, though: If you use a sub-component which
62 | implements USB, the vendor of the sub-components may guarantee USB
63 | compliance. This might apply to some or all of FTDI's solutions.
64 |
65 |
66 | =======================================================================
67 | WHY SHOULD YOU OBTAIN USB IDs EVEN IF YOU DON'T LICENSE USB TRADEMARKS?
68 | =======================================================================
69 |
70 | You have learned in the previous section that you are free to choose any
71 | numbers for your IDs anyway. So why not do exactly this? There is still the
72 | technical issue. If you choose IDs which are already in use by somebody else,
73 | operating systems will load the wrong drivers and your device won't work.
74 | Even if you choose IDs which are not currently in use, they may be in use in
75 | the next version of the operating system or even after an automatic update.
76 |
77 | So what you need is a pair of Vendor- and Product-IDs for which you have the
78 | guarantee that no USB compliant product uses them. This implies that no
79 | operating system will ever ship with drivers responsible for these IDs.
80 |
81 |
82 | ==============================================
83 | HOW DOES OBJECTIVE DEVELOPMENT HANDLE USB IDs?
84 | ==============================================
85 |
86 | Objective Development gives away pairs of USB-IDs with their V-USB licenses.
87 | In order to ensure that these IDs are unique, Objective Development has an
88 | agreement with the company/person who has bought the USB Vendor-ID from
89 | usb.org. This agreement ensures that a range of USB Product-IDs is reserved
90 | for assignment by Objective Development and that the owner of the Vendor-ID
91 | won't give it to anybody else.
92 |
93 | This means that you have to trust three parties to ensure uniqueness of
94 | your IDs:
95 |
96 | - Objective Development, that they don't give the same PID to more than
97 | one person.
98 | - The owner of the Vendor-ID that they don't assign PIDs from the range
99 | assigned to Objective Development to anybody else.
100 | - Usb.org that they don't assign the same Vendor-ID a second time.
101 |
102 |
103 | ==================================
104 | WHO IS THE OWNER OF THE VENDOR-ID?
105 | ==================================
106 |
107 | Objective Development has obtained ranges of USB Product-IDs under two
108 | Vendor-IDs: Under Vendor-ID 5824 from Wouter van Ooijen (Van Ooijen
109 | Technische Informatica, www.voti.nl) and under Vendor-ID 8352 from Jason
110 | Kotzin (now flirc.tv, Inc.). Both VID owners have received their Vendor-ID
111 | directly from usb.org.
112 |
113 |
114 | =========================================================================
115 | CAN I USE USB-IDs FROM OBJECTIVE DEVELOPMENT WITH OTHER DRIVERS/HARDWARE?
116 | =========================================================================
117 |
118 | The short answer is: Yes. All you get is a guarantee that the IDs are never
119 | assigned to anybody else. What more do you need?
120 |
121 |
122 | ============================
123 | WHAT ABOUT SHARED ID PAIRS?
124 | ============================
125 |
126 | Objective Development has reserved some PID/VID pairs for shared use. You
127 | have no guarantee of uniqueness for them, except that no USB compliant device
128 | uses them. In order to avoid technical problems, we must ensure that all
129 | devices with the same pair of IDs use the same driver on kernel level. For
130 | details, see the file USB-IDs-for-free.txt.
131 |
132 |
133 | ======================================================
134 | I HAVE HEARD THAT SUB-LICENSING OF USB-IDs IS ILLEGAL?
135 | ======================================================
136 |
137 | A 16 bit integer number cannot be protected by copyright laws. It is not
138 | sufficiently complex. And since none of the parties involved entered into the
139 | USB-IF Trademark License Agreement, we are not bound by this agreement. So
140 | there is no reason why it should be illegal to sub-license USB-IDs.
141 |
142 |
143 | =============================================
144 | WHO IS LIABLE IF THERE ARE INCOMPATIBILITIES?
145 | =============================================
146 |
147 | Objective Development disclaims all liabilities which might arise from the
148 | assignment of IDs. If you guarantee product features to your customers
149 | without proper disclaimer, YOU are liable for that.
150 |
--------------------------------------------------------------------------------
/lib/TrinketHidCombo/usbdrv/oddebug.c:
--------------------------------------------------------------------------------
1 | /* Name: oddebug.c
2 | * Project: AVR library
3 | * Author: Christian Starkjohann
4 | * Creation Date: 2005-01-16
5 | * Tabsize: 4
6 | * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
7 | * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
8 | */
9 |
10 | #include "oddebug.h"
11 |
12 | #if DEBUG_LEVEL > 0
13 |
14 | #warning "Never compile production devices with debugging enabled"
15 |
16 | static void uartPutc(char c)
17 | {
18 | while(!(ODDBG_USR & (1 << ODDBG_UDRE))); /* wait for data register empty */
19 | ODDBG_UDR = c;
20 | }
21 |
22 | static uchar hexAscii(uchar h)
23 | {
24 | h &= 0xf;
25 | if(h >= 10)
26 | h += 'a' - (uchar)10 - '0';
27 | h += '0';
28 | return h;
29 | }
30 |
31 | static void printHex(uchar c)
32 | {
33 | uartPutc(hexAscii(c >> 4));
34 | uartPutc(hexAscii(c));
35 | }
36 |
37 | void odDebug(uchar prefix, uchar *data, uchar len)
38 | {
39 | printHex(prefix);
40 | uartPutc(':');
41 | while(len--){
42 | uartPutc(' ');
43 | printHex(*data++);
44 | }
45 | uartPutc('\r');
46 | uartPutc('\n');
47 | }
48 |
49 | #endif
50 |
--------------------------------------------------------------------------------
/lib/TrinketHidCombo/usbdrv/oddebug.h:
--------------------------------------------------------------------------------
1 | /* Name: oddebug.h
2 | * Project: AVR library
3 | * Author: Christian Starkjohann
4 | * Creation Date: 2005-01-16
5 | * Tabsize: 4
6 | * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
7 | * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
8 | */
9 |
10 | #ifndef __oddebug_h_included__
11 | #define __oddebug_h_included__
12 |
13 | /*
14 | General Description:
15 | This module implements a function for debug logs on the serial line of the
16 | AVR microcontroller. Debugging can be configured with the define
17 | 'DEBUG_LEVEL'. If this macro is not defined or defined to 0, all debugging
18 | calls are no-ops. If it is 1, DBG1 logs will appear, but not DBG2. If it is
19 | 2, DBG1 and DBG2 logs will be printed.
20 |
21 | A debug log consists of a label ('prefix') to indicate which debug log created
22 | the output and a memory block to dump in hex ('data' and 'len').
23 | */
24 |
25 |
26 | #ifndef F_CPU
27 | # define F_CPU 12000000 /* 12 MHz */
28 | #endif
29 |
30 | /* make sure we have the UART defines: */
31 | #include "usbportability.h"
32 |
33 | #ifndef uchar
34 | # define uchar unsigned char
35 | #endif
36 |
37 | #if DEBUG_LEVEL > 0 && !(defined TXEN || defined TXEN0) /* no UART in device */
38 | # warning "Debugging disabled because device has no UART"
39 | # undef DEBUG_LEVEL
40 | #endif
41 |
42 | #ifndef DEBUG_LEVEL
43 | # define DEBUG_LEVEL 0
44 | #endif
45 |
46 | /* ------------------------------------------------------------------------- */
47 |
48 | #if DEBUG_LEVEL > 0
49 | # define DBG1(prefix, data, len) odDebug(prefix, data, len)
50 | #else
51 | # define DBG1(prefix, data, len)
52 | #endif
53 |
54 | #if DEBUG_LEVEL > 1
55 | # define DBG2(prefix, data, len) odDebug(prefix, data, len)
56 | #else
57 | # define DBG2(prefix, data, len)
58 | #endif
59 |
60 | /* ------------------------------------------------------------------------- */
61 |
62 | #if DEBUG_LEVEL > 0
63 | extern void odDebug(uchar prefix, uchar *data, uchar len);
64 |
65 | /* Try to find our control registers; ATMEL likes to rename these */
66 |
67 | #if defined UBRR
68 | # define ODDBG_UBRR UBRR
69 | #elif defined UBRRL
70 | # define ODDBG_UBRR UBRRL
71 | #elif defined UBRR0
72 | # define ODDBG_UBRR UBRR0
73 | #elif defined UBRR0L
74 | # define ODDBG_UBRR UBRR0L
75 | #endif
76 |
77 | #if defined UCR
78 | # define ODDBG_UCR UCR
79 | #elif defined UCSRB
80 | # define ODDBG_UCR UCSRB
81 | #elif defined UCSR0B
82 | # define ODDBG_UCR UCSR0B
83 | #endif
84 |
85 | #if defined TXEN
86 | # define ODDBG_TXEN TXEN
87 | #else
88 | # define ODDBG_TXEN TXEN0
89 | #endif
90 |
91 | #if defined USR
92 | # define ODDBG_USR USR
93 | #elif defined UCSRA
94 | # define ODDBG_USR UCSRA
95 | #elif defined UCSR0A
96 | # define ODDBG_USR UCSR0A
97 | #endif
98 |
99 | #if defined UDRE
100 | # define ODDBG_UDRE UDRE
101 | #else
102 | # define ODDBG_UDRE UDRE0
103 | #endif
104 |
105 | #if defined UDR
106 | # define ODDBG_UDR UDR
107 | #elif defined UDR0
108 | # define ODDBG_UDR UDR0
109 | #endif
110 |
111 | static inline void odDebugInit(void)
112 | {
113 | ODDBG_UCR |= (1<
38 | #ifndef __IAR_SYSTEMS_ASM__
39 | # include
40 | #endif
41 |
42 | #define __attribute__(arg) /* not supported on IAR */
43 |
44 | #ifdef __IAR_SYSTEMS_ASM__
45 | # define __ASSEMBLER__ /* IAR does not define standard macro for asm */
46 | #endif
47 |
48 | #ifdef __HAS_ELPM__
49 | # define PROGMEM __farflash
50 | #else
51 | # define PROGMEM __flash
52 | #endif
53 |
54 | #define USB_READ_FLASH(addr) (*(PROGMEM char *)(addr))
55 |
56 | /* The following definitions are not needed by the driver, but may be of some
57 | * help if you port a gcc based project to IAR.
58 | */
59 | #define cli() __disable_interrupt()
60 | #define sei() __enable_interrupt()
61 | #define wdt_reset() __watchdog_reset()
62 | #define _BV(x) (1 << (x))
63 |
64 | /* assembler compatibility macros */
65 | #define nop2 rjmp $+2 /* jump to next instruction */
66 | #define XL r26
67 | #define XH r27
68 | #define YL r28
69 | #define YH r29
70 | #define ZL r30
71 | #define ZH r31
72 | #define lo8(x) LOW(x)
73 | #define hi8(x) (((x)>>8) & 0xff) /* not HIGH to allow XLINK to make a proper range check */
74 |
75 | /* Depending on the device you use, you may get problems with the way usbdrv.h
76 | * handles the differences between devices. Since IAR does not use #defines
77 | * for MCU registers, we can't check for the existence of a particular
78 | * register with an #ifdef. If the autodetection mechanism fails, include
79 | * definitions for the required USB_INTR_* macros in your usbconfig.h. See
80 | * usbconfig-prototype.h and usbdrv.h for details.
81 | */
82 |
83 | /* ------------------------------------------------------------------------- */
84 | #elif __CODEVISIONAVR__ /* check for CodeVision AVR */
85 | /* ------------------------------------------------------------------------- */
86 | /* This port is not working (yet) */
87 |
88 | /* #define F_CPU _MCU_CLOCK_FREQUENCY_ seems to be defined automatically */
89 |
90 | #include
91 | #include
92 |
93 | #define __attribute__(arg) /* not supported on IAR */
94 |
95 | #define PROGMEM __flash
96 | #define USB_READ_FLASH(addr) (*(PROGMEM char *)(addr))
97 |
98 | #ifndef __ASSEMBLER__
99 | static inline void cli(void)
100 | {
101 | #asm("cli");
102 | }
103 | static inline void sei(void)
104 | {
105 | #asm("sei");
106 | }
107 | #endif
108 | #define _delay_ms(t) delay_ms(t)
109 | #define _BV(x) (1 << (x))
110 | #define USB_CFG_USE_SWITCH_STATEMENT 1 /* macro for if() cascase fails for unknown reason */
111 |
112 | #define macro .macro
113 | #define endm .endmacro
114 | #define nop2 rjmp .+0 /* jump to next instruction */
115 |
116 | /* ------------------------------------------------------------------------- */
117 | #else /* default development environment is avr-gcc/avr-libc */
118 | /* ------------------------------------------------------------------------- */
119 |
120 | #include
121 | #ifdef __ASSEMBLER__
122 | # define _VECTOR(N) __vector_ ## N /* io.h does not define this for asm */
123 | #else
124 | # include
125 | #endif
126 |
127 | #if USB_CFG_DRIVER_FLASH_PAGE
128 | # define USB_READ_FLASH(addr) pgm_read_byte_far(((long)USB_CFG_DRIVER_FLASH_PAGE << 16) | (long)(addr))
129 | #else
130 | # define USB_READ_FLASH(addr) pgm_read_byte(addr)
131 | #endif
132 |
133 | #define macro .macro
134 | #define endm .endm
135 | #define nop2 rjmp .+0 /* jump to next instruction */
136 |
137 | #endif /* development environment */
138 |
139 | /* for conveniecne, ensure that PRG_RDB exists */
140 | #ifndef PRG_RDB
141 | # define PRG_RDB(addr) USB_READ_FLASH(addr)
142 | #endif
143 | #endif /* __usbportability_h_INCLUDED__ */
144 |
--------------------------------------------------------------------------------
/lib/TrinketHidCombo/usbdrv_includer.c:
--------------------------------------------------------------------------------
1 | /*
2 | this file's purpose is to trick the Arduino IDE into including a file for compilation
3 |
4 | Copyright (c) 2013 Adafruit Industries
5 | All rights reserved.
6 |
7 | TrinketHidCombo is free software: you can redistribute it and/or modify
8 | it under the terms of the GNU Lesser General Public License as
9 | published by the Free Software Foundation, either version 3 of
10 | the License, or (at your option) any later version.
11 |
12 | TrinketHidCombo is distributed in the hope that it will be useful,
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | GNU Lesser General Public License for more details.
16 |
17 | You should have received a copy of the GNU Lesser General Public
18 | License along with TrinketHidCombo. If not, see
19 | .
20 | */
21 |
22 | #include "cmdline_defs.h"
23 | #include "usbconfig.h"
24 | #include "usbdrv/usbdrv.c"
--------------------------------------------------------------------------------
/lib/TrinketHidCombo/usbdrvasm_includer.S:
--------------------------------------------------------------------------------
1 | /*
2 | this file's purpose is to trick the Arduino IDE into including a file for compilation
3 |
4 | Copyright (c) 2013 Adafruit Industries
5 | All rights reserved.
6 |
7 | TrinketHidCombo is free software: you can redistribute it and/or modify
8 | it under the terms of the GNU Lesser General Public License as
9 | published by the Free Software Foundation, either version 3 of
10 | the License, or (at your option) any later version.
11 |
12 | TrinketHidCombo is distributed in the hope that it will be useful,
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | GNU Lesser General Public License for more details.
16 |
17 | You should have received a copy of the GNU Lesser General Public
18 | License along with TrinketHidCombo. If not, see
19 | .
20 | */
21 |
22 | #include "cmdline_defs.h"
23 | #include "usbconfig.h"
24 | #include "usbdrv/usbdrvasm.S"
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/.vscode/arduino.json:
--------------------------------------------------------------------------------
1 | {
2 | "programmer": "AVR ISP"
3 | }
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/Surface_Dial_attiny.ino:
--------------------------------------------------------------------------------
1 | #include "TrinketHidCombo.h"
2 |
3 | #define PIN_ENCODER_A 2
4 | #define PIN_ENCODER_B 1
5 | #define TRINKET_PINx PINB
6 | #define PIN_ENCODER_SWITCH 5
7 | #define TAPTIC 0
8 |
9 | static uint8_t enc_prev_pos = 0;
10 | static uint8_t enc_flags = 0;
11 | static char sw_was_pressed = 0;
12 |
13 |
14 | int speed_r = 3;
15 | uint8_t rotate_r_R = DIAL_R;
16 | uint8_t rotate_r_L = DIAL_L;
17 | int Taptic_r = 3;
18 |
19 | volatile bool previousButtonValue = false, lastButtonValue = false;
20 |
21 | volatile int previous = 0;
22 | volatile int counter = 0;
23 |
24 | long debounceDelay = 50;
25 | long lastDebounceTime = 0;
26 |
27 | long lastDouble = 0;
28 | long nowDouble = 0;
29 | long ddlDouble=500;
30 |
31 |
32 |
33 | void setup()
34 | {
35 | // set pins as input with internal pull-up resistors enabled
36 | pinMode(PIN_ENCODER_A, INPUT);
37 | pinMode(PIN_ENCODER_B, INPUT);
38 | // digitalWrite(PIN_ENCODER_A, HIGH);
39 | // digitalWrite(PIN_ENCODER_B, HIGH);
40 |
41 | pinMode(TAPTIC, OUTPUT);
42 |
43 | pinMode(PIN_ENCODER_SWITCH, INPUT);
44 | // the switch is active-high, not active-low
45 | // since it shares the pin with Trinket's built-in LED
46 | // the LED acts as a pull-down resistor
47 | // digitalWrite(PIN_ENCODER_SWITCH, LOW);
48 |
49 | TrinketHidCombo.begin(); // start the USB device engine and enumerate
50 |
51 | // get an initial reading on the encoder pins
52 | if (digitalRead(PIN_ENCODER_A) == LOW) {
53 | enc_prev_pos |= (1 << 0);
54 | }
55 | if (digitalRead(PIN_ENCODER_B) == LOW) {
56 | enc_prev_pos |= (1 << 1);
57 | }
58 | }
59 |
60 |
61 | void doubleClick() {
62 | if (rotate_r_R == DIAL_R) {
63 | rotate_r_R = DIAL_R_F;
64 | rotate_r_L = DIAL_L_F;
65 | speed_r = 1;
66 | Taptic_r = 1;
67 | digitalWrite(TAPTIC, HIGH);
68 | delay(3);
69 | digitalWrite(TAPTIC, LOW);
70 | delay(200);
71 | digitalWrite(TAPTIC, HIGH);
72 | delay(3);
73 | digitalWrite(TAPTIC, LOW);
74 | } else if (rotate_r_R == DIAL_R_F) {
75 | rotate_r_R = DIAL_R;
76 | rotate_r_L = DIAL_L;
77 | speed_r = 3;
78 | Taptic_r = 3;
79 | digitalWrite(TAPTIC, HIGH);
80 | delay(3);
81 | digitalWrite(TAPTIC, LOW);
82 | delay(200);
83 | digitalWrite(TAPTIC, HIGH);
84 | delay(3);
85 | digitalWrite(TAPTIC, LOW);
86 | }
87 | }
88 |
89 | void loop()
90 | {
91 | int8_t enc_action = 0; // 1 or -1 if moved, sign is direction
92 |
93 | // note: for better performance, the code will now use
94 | // direct port access techniques
95 | // http://www.arduino.cc/en/Reference/PortManipulation
96 | uint8_t enc_cur_pos = 0;
97 | // read in the encoder state first
98 | if (bit_is_clear(TRINKET_PINx, PIN_ENCODER_A)) {
99 | enc_cur_pos |= (1 << 0);
100 | }
101 | if (bit_is_clear(TRINKET_PINx, PIN_ENCODER_B)) {
102 | enc_cur_pos |= (1 << 1);
103 | }
104 |
105 | // if any rotation at all
106 | if (enc_cur_pos != enc_prev_pos)
107 | {
108 | if (enc_prev_pos == 0x00)
109 | {
110 | // this is the first edge
111 | if (enc_cur_pos == 0x01) {
112 | enc_flags |= (1 << 0);
113 | }
114 | else if (enc_cur_pos == 0x02) {
115 | enc_flags |= (1 << 1);
116 | }
117 | }
118 |
119 | if (enc_cur_pos == 0x03)
120 | {
121 | // this is when the encoder is in the middle of a "step"
122 | enc_flags |= (1 << 4);
123 | }
124 | else if (enc_cur_pos == 0x00)
125 | {
126 | // this is the final edge
127 | if (enc_prev_pos == 0x02) {
128 | enc_flags |= (1 << 2);
129 | }
130 | else if (enc_prev_pos == 0x01) {
131 | enc_flags |= (1 << 3);
132 | }
133 |
134 | // check the first and last edge
135 | // or maybe one edge is missing, if missing then require the middle state
136 | // this will reject bounces and false movements
137 | if (bit_is_set(enc_flags, 0) && (bit_is_set(enc_flags, 2) || bit_is_set(enc_flags, 4))) {
138 | enc_action = 1;
139 | }
140 | else if (bit_is_set(enc_flags, 2) && (bit_is_set(enc_flags, 0) || bit_is_set(enc_flags, 4))) {
141 | enc_action = 1;
142 | }
143 | else if (bit_is_set(enc_flags, 1) && (bit_is_set(enc_flags, 3) || bit_is_set(enc_flags, 4))) {
144 | enc_action = -1;
145 | }
146 | else if (bit_is_set(enc_flags, 3) && (bit_is_set(enc_flags, 1) || bit_is_set(enc_flags, 4))) {
147 | enc_action = -1;
148 | }
149 |
150 | enc_flags = 0; // reset for next time
151 | }
152 | }
153 |
154 | enc_prev_pos = enc_cur_pos;
155 |
156 | if (enc_action > 0) {
157 | TrinketHidCombo.pressMultimediaKey(rotate_r_R);
158 | //Serial.println("R");
159 | //counter -= speed_r;
160 | digitalWrite(TAPTIC, HIGH);
161 | delay(Taptic_r);
162 | digitalWrite(TAPTIC, LOW);
163 | }
164 | else if (enc_action < 0) {
165 | TrinketHidCombo.pressMultimediaKey(rotate_r_L);
166 | //Serial.println("L");
167 | //counter += speed_r;
168 | digitalWrite(TAPTIC, HIGH);
169 | delay(Taptic_r);
170 | digitalWrite(TAPTIC, LOW);
171 | }
172 |
173 | // // remember that the switch is active-high
174 | if (bit_is_set(TRINKET_PINx, PIN_ENCODER_SWITCH))
175 | {
176 | if (sw_was_pressed == 0) // only on initial press, so the keystroke is not repeated while the button is held down
177 | {
178 | TrinketHidCombo.pressMultimediaKey(DIAL_RELEASE);
179 | delay(50); // debounce delay
180 | }
181 | sw_was_pressed = 1;
182 | }
183 | else
184 | {
185 | if (sw_was_pressed != 0) {
186 | TrinketHidCombo.pressMultimediaKey(DIAL_PRESS);
187 | delay(50); // debounce delay
188 | lastDouble = nowDouble;
189 | nowDouble = millis();
190 | if((nowDouble-lastDouble) debounceDelay) {
204 | // if (buttonValue != previousButtonValue) {
205 | // previousButtonValue = buttonValue;
206 | // if (buttonValue) {
207 | // TrinketHidCombo.pressMultimediaKey(DIAL_PRESS);
208 | // digitalWrite(TAPTIC,HIGH);
209 | // delay(Taptic_r);
210 | // digitalWrite(TAPTIC,LOW);
211 | // lastDouble = nowDouble;
212 | // nowDouble = millis();
213 | // if((nowDouble-lastDouble) 0) {
137 | TrinketHidCombo.pressMultimediaKey(rotate_r_R);
138 | //Serial.println("R");
139 | //counter -= speed_r;
140 | }
141 | else if (enc_action < 0) {
142 | TrinketHidCombo.pressMultimediaKey(rotate_r_L);
143 | //Serial.println("L");
144 | //counter += speed_r;
145 | }
146 |
147 | // // remember that the switch is active-high
148 | if (bit_is_set(TRINKET_PINx, PIN_ENCODER_SWITCH))
149 | {
150 | if (sw_was_pressed == 0) // only on initial press, so the keystroke is not repeated while the button is held down
151 | {
152 | TrinketHidCombo.pressMultimediaKey(DIAL_RELEASE);
153 | delay(50); // debounce delay
154 | }
155 | sw_was_pressed = 1;
156 | }
157 | else
158 | {
159 | if (sw_was_pressed != 0) {
160 | TrinketHidCombo.pressMultimediaKey(DIAL_PRESS);
161 | delay(50); // debounce delay
162 | lastDouble = nowDouble;
163 | nowDouble = millis();
164 | if((nowDouble-lastDouble) debounceDelay) {
178 | // if (buttonValue != previousButtonValue) {
179 | // previousButtonValue = buttonValue;
180 | // if (buttonValue) {
181 | // TrinketHidCombo.pressMultimediaKey(DIAL_PRESS);
182 | // digitalWrite(TAPTIC,HIGH);
183 | // delay(Taptic_r);
184 | // digitalWrite(TAPTIC,LOW);
185 | // lastDouble = nowDouble;
186 | // nowDouble = millis();
187 | // if((nowDouble-lastDouble) it follows Objective Development's V-USB style.
23 | -> you probably shouldn't be changing stuff in there anyway!
24 | -> our usbdrv is hacked with some stuff to handle redirecting PCINT0
25 |
26 | On use of Ruby:
27 |
28 | Micronucleus uses ruby code for some little tasks, especially to aid in testing
29 | and building data for /upgrade/. The stuff in /ruby/ is out of date and doesn't
30 | work very well for uploading programs to devices. It isn't as good at recovering
31 | from errors as the commandline tool. It is mainly a legacy thing.
32 |
33 | The Ruby community has a long established style and all Ruby code in this
34 | repository should be styled in conformance with that. We use 2-space intents.
35 |
36 | We currently write for and use Ruby 2.0, but all the code should work fine with
37 | Ruby 1.9.2 and above, at the time of writing.
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/commandline/49-micronucleus.rules:
--------------------------------------------------------------------------------
1 | # UDEV Rules for Micronucleus boards including the Digispark.
2 | # This file must be placed at:
3 | #
4 | # /etc/udev/rules.d/49-micronucleus.rules (preferred location)
5 | # or
6 | # /lib/udev/rules.d/49-micronucleus.rules (req'd on some broken systems)
7 | #
8 | # After this file is copied, physically unplug and reconnect the board.
9 | #
10 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666"
11 | KERNEL=="ttyACM*", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
12 | #
13 | # If you share your linux system with other users, or just don't like the
14 | # idea of write permission for everybody, you can replace MODE:="0666" with
15 | # OWNER:="yourusername" to create the device owned by you, or with
16 | # GROUP:="somegroupname" and mange access using standard unix groups.
17 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/commandline/Makefile:
--------------------------------------------------------------------------------
1 | # Makefile initially writen for Little-Wire by Omer Kilic
2 | # Later on modified by ihsan Kehribar for Micronucleus bootloader application.
3 |
4 | CC=gcc
5 |
6 | ifeq ($(shell uname), Linux)
7 | USBFLAGS=$(shell libusb-config --cflags)
8 | USBLIBS=$(shell libusb-config --libs)
9 | EXE_SUFFIX =
10 | OSFLAG = -D LINUX
11 | else ifeq ($(shell uname), Darwin)
12 | USBFLAGS=$(shell libusb-config --cflags || libusb-legacy-config --cflags)
13 | USBLIBS=$(shell libusb-config --libs || libusb-legacy-config --libs)
14 | EXE_SUFFIX =
15 | OSFLAG = -D MAC_OS
16 | # Uncomment these to create a static binary:
17 | # USBLIBS = /opt/local/lib/libusb-legacy/libusb-legacy.a
18 | # USBLIBS += -mmacosx-version-min=10.5
19 | # USBLIBS += -framework CoreFoundation
20 | # USBLIBS += -framework IOKit
21 | # Uncomment these to create a dual architecture binary:
22 | # OSFLAG += -arch x86_64 -arch i386
23 | else
24 | USBFLAGS = -I C:\MinGW\include
25 | USBLIBS = -L C:\MinGW\lib -lusb
26 | EXE_SUFFIX = .exe
27 | OSFLAG = -D WIN
28 | endif
29 |
30 | LIBS = $(USBLIBS)
31 | INCLUDE = library
32 | CFLAGS = $(USBFLAGS) $(LIBS) -I$(INCLUDE) -O -g $(OSFLAG)
33 |
34 | LWLIBS = micronucleus_lib littleWire_util
35 | EXAMPLES = micronucleus
36 |
37 | .PHONY: clean library
38 |
39 | all: library $(EXAMPLES)
40 |
41 | library: $(LWLIBS)
42 |
43 | $(LWLIBS):
44 | @echo Building library: $@...
45 | $(CC) $(CFLAGS) -c library/$@.c
46 |
47 | $(EXAMPLES): $(addsuffix .o, $(LWLIBS))
48 | @echo Building command line tool: $@...
49 | $(CC) $(CFLAGS) -o $@$(EXE_SUFFIX) $@.c $^ $(LIBS)
50 |
51 | clean:
52 | rm -f $(EXAMPLES)$(EXE_SUFFIX) *.o *.exe
53 |
54 | install: all
55 | cp micronucleus /usr/local/bin
56 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/commandline/Readme:
--------------------------------------------------------------------------------
1 | This commandline application for the Micronucleus bootloader is written by
2 | ihsan Kehribar and Bluebie
3 |
4 | It's been tested casually on Mac, Windows, and Linux, and aught to work on all
5 | three. To make and install, do the regular 'make; sudo make install' on unixes.
6 | On windows just 'make' with mingw and do whatever people do with windows exes.
7 |
8 | Usage on Ubuntu:
9 | sudo micronucleus --run name_of_the_file.hex
10 | Usage on Mac:
11 | micronucleus --run name_of_the_file.hex
12 | Usage on Windows
13 | micronucleus.exe --run name_of_the_file.hex
14 |
15 | Raw binary file writing hasn't been tested as much as hex files.
16 |
17 | Every now and then the program fails once it reaches the Writing stage - this is
18 | a known bug - but if you simply rerun the micronucleus command immediately, it
19 | will succeed the second time usually. Most of the time this issue is not present.
20 |
21 | To linux users: sudo is used above because the default configuration under most
22 | modern linux distributions is to not allow userspace apps to communicate
23 | directly to unknown USB devices. You can fix this by installing some config
24 | files, or you can just use sudo. Either way you're going to need root. To
25 | configure your system to allow micronucleus access from non-root users, copy
26 | 49-micronucleus.rules from this folder to /etc/udev/rules.d/
27 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/commandline/builds/OSX/micronucleus:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/src/Surface_Dial_attiny/micronucleus-1.11/commandline/builds/OSX/micronucleus
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/commandline/builds/Windows/micronucleus.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/src/Surface_Dial_attiny/micronucleus-1.11/commandline/builds/Windows/micronucleus.exe
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/commandline/library/littleWire_util.c:
--------------------------------------------------------------------------------
1 | #include
2 |
3 | /* Delay in miliseconds */
4 | void delay(unsigned int duration) {
5 | #if defined _WIN32 || defined _WIN64
6 | // use windows sleep api with milliseconds
7 | // * 2 to make it run at half speed, because windows seems to have some trouble with this...
8 | Sleep(duration * 2);
9 | #else
10 | // use standard unix api with microseconds
11 | usleep(duration*1000);
12 | #endif
13 | }
14 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/commandline/library/littleWire_util.h:
--------------------------------------------------------------------------------
1 | #ifndef LITTLEWIRE_UTIL_H
2 | #define LITTLEWIRE_UTIL_H
3 |
4 | #if defined WIN
5 | #include
6 | #else
7 | #include
8 | #endif
9 |
10 | /* Delay in miliseconds */
11 | void delay(unsigned int duration);
12 |
13 | // end LITTLEWIRE_UTIL_H section:
14 | #endif
15 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/commandline/library/micronucleus_lib.h:
--------------------------------------------------------------------------------
1 | #ifndef MICRONUCLEUS_LIB_H
2 | #define MICRONUCLEUS_LIB_H
3 |
4 | /*
5 | Created: September 2012
6 | by ihsan Kehribar
7 |
8 | Permission is hereby granted, free of charge, to any person obtaining a copy of
9 | this software and associated documentation files (the "Software"), to deal in
10 | the Software without restriction, including without limitation the rights to
11 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
12 | of the Software, and to permit persons to whom the Software is furnished to do
13 | so, subject to the following conditions:
14 |
15 | The above copyright notice and this permission notice shall be included in all
16 | copies or substantial portions of the Software.
17 |
18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 | SOFTWARE.
25 | */
26 |
27 | /********************************************************************************
28 | * Header files
29 | ********************************************************************************/
30 | #if defined WIN
31 | #include // this is libusb, see http://libusb.sourceforge.net/
32 | #else
33 | #include // this is libusb, see http://libusb.sourceforge.net/
34 | #endif
35 | //#include "opendevice.h" // common code moved to separate module
36 | #include
37 | #include
38 | #include
39 | /*******************************************************************************/
40 |
41 | /********************************************************************************
42 | * USB details
43 | ********************************************************************************/
44 | #define MICRONUCLEUS_VENDOR_ID 0x16D0
45 | #define MICRONUCLEUS_PRODUCT_ID 0x0753
46 | #define MICRONUCLEUS_USB_TIMEOUT 0xFFFF
47 | #define MICRONUCLEUS_MAX_MAJOR_VERSION 1
48 | /*******************************************************************************/
49 |
50 | /********************************************************************************
51 | * Declearations
52 | ********************************************************************************/
53 | //typedef usb_dev_handle micronucleus;
54 | // representing version number of micronucleus device
55 | typedef struct _micronucleus_version {
56 | unsigned char major;
57 | unsigned char minor;
58 | } micronucleus_version;
59 |
60 | // handle representing one micronucleus device
61 | typedef struct _micronucleus {
62 | usb_dev_handle *device;
63 | // general information about device
64 | micronucleus_version version;
65 | unsigned int flash_size; // programmable size (in bytes) of progmem
66 | unsigned int page_size; // size (in bytes) of page
67 | unsigned int pages; // total number of pages to program
68 | unsigned int write_sleep; // milliseconds
69 | unsigned int erase_sleep; // milliseconds
70 | } micronucleus;
71 |
72 | typedef void (*micronucleus_callback)(float progress);
73 |
74 | /*******************************************************************************/
75 |
76 | /********************************************************************************
77 | * Try to connect to the device
78 | * Returns: device handle for success, NULL for fail
79 | ********************************************************************************/
80 | micronucleus* micronucleus_connect();
81 | /*******************************************************************************/
82 |
83 | /********************************************************************************
84 | * Erase the flash memory
85 | ********************************************************************************/
86 | int micronucleus_eraseFlash(micronucleus* deviceHandle, micronucleus_callback progress);
87 | /*******************************************************************************/
88 |
89 | /********************************************************************************
90 | * Write the flash memory
91 | ********************************************************************************/
92 | int micronucleus_writeFlash(micronucleus* deviceHandle, unsigned int program_length,
93 | unsigned char* program, micronucleus_callback progress);
94 | /*******************************************************************************/
95 |
96 | /********************************************************************************
97 | * Starts the user application
98 | ********************************************************************************/
99 | int micronucleus_startApp(micronucleus* deviceHandle);
100 | /*******************************************************************************/
101 |
102 | #endif
103 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/crt1.S:
--------------------------------------------------------------------------------
1 |
2 | /* Copyright (c) 2002, Marek Michalkiewicz
3 | Copyright (c) 2007, 2008 Eric B. Weddington
4 | All rights reserved.
5 |
6 | Redistribution and use in source and binary forms, with or without
7 | modification, are permitted provided that the following conditions are met:
8 |
9 | * Redistributions of source code must retain the above copyright
10 | notice, this list of conditions and the following disclaimer.
11 |
12 | * Redistributions in binary form must reproduce the above copyright
13 | notice, this list of conditions and the following disclaimer in
14 | the documentation and/or other materials provided with the
15 | distribution.
16 |
17 | * Neither the name of the copyright holders nor the names of
18 | contributors may be used to endorse or promote products derived
19 | from this software without specific prior written permission.
20 |
21 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 | POSSIBILITY OF SUCH DAMAGE. */
32 |
33 | /* $Id$ */
34 |
35 | #if (__GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 3)
36 | #error "GCC version >= 3.3 required"
37 | #endif
38 |
39 | /*
40 | #include IOSYMFILE
41 | #include "macros.inc"
42 | */
43 | #include
44 | //#include
45 |
46 | #define XJMP rjmp
47 | #define XCALL rcall
48 |
49 | .macro vector name
50 | .weak \name
51 | .set \name, __init
52 | XJMP \name
53 | .endm
54 |
55 | .section .vectors,"ax",@progbits
56 | .global __vectors
57 | .global __bad_interrupt
58 | .func __vectors
59 | __bad_interrupt:
60 | __vectors:
61 | XJMP __init
62 | vector __vector_1
63 | vector __vector_2
64 | vector __vector_3
65 | .endfunc
66 |
67 | /* Handle unexpected interrupts (enabled and no handler), which
68 | usually indicate a bug. Jump to the __vector_default function
69 | if defined by the user, otherwise jump to the reset address.
70 |
71 | This must be in a different section, otherwise the assembler
72 | will resolve "rjmp" offsets and there will be no relocs. */
73 |
74 | .section .init0,"ax",@progbits
75 | .weak __init
76 | ; .func __init
77 | __init:
78 |
79 | .weak __stack
80 | .set __stack, RAMEND
81 | /* By default, malloc() uses the current value of the stack pointer
82 | minus __malloc_margin as the highest available address.
83 |
84 | In some applications with external SRAM, the stack can be below
85 | the data section (in the internal SRAM - faster), and __heap_end
86 | should be set to the highest address available for malloc(). */
87 | .weak __heap_end
88 | .set __heap_end, 0
89 |
90 | .section .init2,"ax",@progbits
91 | clr R1
92 | out 0x3f,r1
93 | ldi r28,lo8(__stack)
94 | ldi r29,hi8(__stack)
95 | out 0x3d, r28
96 | out 0x3e, r29
97 | .section .init9,"ax",@progbits
98 | XJMP main
99 | ; .endfunc
100 |
101 |
102 | .section .zerotable,"ax",@progbits
103 | zerovectors:
104 | XJMP __init
105 | XJMP __vector_1
106 | XJMP __vector_2
107 | XJMP __vector_3
108 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/osccalASM.S:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/src/Surface_Dial_attiny/micronucleus-1.11/firmware/osccalASM.S
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/49-micronucleus.rules:
--------------------------------------------------------------------------------
1 | # UDEV Rules for Micronucleus boards including the Digispark.
2 | # This file must be placed at:
3 | #
4 | # /etc/udev/rules.d/49-micronucleus.rules (preferred location)
5 | # or
6 | # /lib/udev/rules.d/49-micronucleus.rules (req'd on some broken systems)
7 | #
8 | # After this file is copied, physically unplug and reconnect the board.
9 | #
10 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666"
11 | KERNEL=="ttyACM*", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
12 | #
13 | # If you share your linux system with other users, or just don't like the
14 | # idea of write permission for everybody, you can replace MODE:="0666" with
15 | # OWNER:="yourusername" to create the device owned by you, or with
16 | # GROUP:="somegroupname" and mange access using standard unix groups.
17 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/Makefile:
--------------------------------------------------------------------------------
1 | # Makefile initially writen for Little-Wire by Omer Kilic
2 | # Later on modified by ihsan Kehribar for Micronucleus bootloader application.
3 |
4 | CC=gcc
5 |
6 | ifeq ($(shell uname), Linux)
7 | USBFLAGS=$(shell libusb-config --cflags)
8 | USBLIBS=$(shell libusb-config --libs)
9 | EXE_SUFFIX =
10 | OSFLAG = -D LINUX
11 | else ifeq ($(shell uname), Darwin)
12 | USBFLAGS=$(shell libusb-config --cflags || libusb-legacy-config --cflags)
13 | USBLIBS=$(shell libusb-config --libs || libusb-legacy-config --libs)
14 | EXE_SUFFIX =
15 | OSFLAG = -D MAC_OS
16 | # Uncomment these to create a static binary:
17 | # USBLIBS = /opt/local/lib/libusb-legacy/libusb-legacy.a
18 | # USBLIBS += -mmacosx-version-min=10.5
19 | # USBLIBS += -framework CoreFoundation
20 | # USBLIBS += -framework IOKit
21 | # Uncomment these to create a dual architecture binary:
22 | # OSFLAG += -arch x86_64 -arch i386
23 | else
24 | USBFLAGS = -I C:\MinGW\include
25 | USBLIBS = -L C:\MinGW\lib -lusb
26 | EXE_SUFFIX = .exe
27 | OSFLAG = -D WIN
28 | endif
29 |
30 | LIBS = $(USBLIBS)
31 | INCLUDE = library
32 | CFLAGS = $(USBFLAGS) $(LIBS) -I$(INCLUDE) -O -g $(OSFLAG)
33 |
34 | LWLIBS = micronucleus_lib littleWire_util
35 | EXAMPLES = micronucleus
36 |
37 | .PHONY: clean library
38 |
39 | all: library $(EXAMPLES)
40 |
41 | library: $(LWLIBS)
42 |
43 | $(LWLIBS):
44 | @echo Building library: $@...
45 | $(CC) $(CFLAGS) -c library/$@.c
46 |
47 | $(EXAMPLES): $(addsuffix .o, $(LWLIBS))
48 | @echo Building command line tool: $@...
49 | $(CC) $(CFLAGS) -o $@$(EXE_SUFFIX) $@.c $^ $(LIBS)
50 |
51 | clean:
52 | rm -f $(EXAMPLES)$(EXE_SUFFIX) *.o *.exe
53 |
54 | install: all
55 | cp micronucleus /usr/local/bin
56 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/Readme:
--------------------------------------------------------------------------------
1 | This commandline application for the Micronucleus bootloader is written by
2 | ihsan Kehribar and Bluebie
3 |
4 | It's been tested casually on Mac, Windows, and Linux, and aught to work on all
5 | three. To make and install, do the regular 'make; sudo make install' on unixes.
6 | On windows just 'make' with mingw and do whatever people do with windows exes.
7 |
8 | Usage on Ubuntu:
9 | sudo micronucleus --run name_of_the_file.hex
10 | Usage on Mac:
11 | micronucleus --run name_of_the_file.hex
12 | Usage on Windows
13 | micronucleus.exe --run name_of_the_file.hex
14 |
15 | Raw binary file writing hasn't been tested as much as hex files.
16 |
17 | Every now and then the program fails once it reaches the Writing stage - this is
18 | a known bug - but if you simply rerun the micronucleus command immediately, it
19 | will succeed the second time usually. Most of the time this issue is not present.
20 |
21 | To linux users: sudo is used above because the default configuration under most
22 | modern linux distributions is to not allow userspace apps to communicate
23 | directly to unknown USB devices. You can fix this by installing some config
24 | files, or you can just use sudo. Either way you're going to need root. To
25 | configure your system to allow micronucleus access from non-root users, copy
26 | 49-micronucleus.rules from this folder to /etc/udev/rules.d/
27 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/builds/OSX/micronucleus:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/builds/OSX/micronucleus
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/builds/Windows/micronucleus.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/builds/Windows/micronucleus.exe
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/library/littleWire_util.c:
--------------------------------------------------------------------------------
1 | #include
2 |
3 | /* Delay in miliseconds */
4 | void delay(unsigned int duration) {
5 | #if defined _WIN32 || defined _WIN64
6 | // use windows sleep api with milliseconds
7 | // * 2 to make it run at half speed, because windows seems to have some trouble with this...
8 | Sleep(duration * 2);
9 | #else
10 | // use standard unix api with microseconds
11 | usleep(duration*1000);
12 | #endif
13 | }
14 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/library/littleWire_util.h:
--------------------------------------------------------------------------------
1 | #ifndef LITTLEWIRE_UTIL_H
2 | #define LITTLEWIRE_UTIL_H
3 |
4 | #if defined WIN
5 | #include
6 | #else
7 | #include
8 | #endif
9 |
10 | /* Delay in miliseconds */
11 | void delay(unsigned int duration);
12 |
13 | // end LITTLEWIRE_UTIL_H section:
14 | #endif
15 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/library/micronucleus_lib.h:
--------------------------------------------------------------------------------
1 | #ifndef MICRONUCLEUS_LIB_H
2 | #define MICRONUCLEUS_LIB_H
3 |
4 | /*
5 | Created: September 2012
6 | by ihsan Kehribar
7 |
8 | Permission is hereby granted, free of charge, to any person obtaining a copy of
9 | this software and associated documentation files (the "Software"), to deal in
10 | the Software without restriction, including without limitation the rights to
11 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
12 | of the Software, and to permit persons to whom the Software is furnished to do
13 | so, subject to the following conditions:
14 |
15 | The above copyright notice and this permission notice shall be included in all
16 | copies or substantial portions of the Software.
17 |
18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 | SOFTWARE.
25 | */
26 |
27 | /********************************************************************************
28 | * Header files
29 | ********************************************************************************/
30 | #if defined WIN
31 | #include // this is libusb, see http://libusb.sourceforge.net/
32 | #else
33 | #include // this is libusb, see http://libusb.sourceforge.net/
34 | #endif
35 | //#include "opendevice.h" // common code moved to separate module
36 | #include
37 | #include
38 | #include
39 | /*******************************************************************************/
40 |
41 | /********************************************************************************
42 | * USB details
43 | ********************************************************************************/
44 | #define MICRONUCLEUS_VENDOR_ID 0x16D0
45 | #define MICRONUCLEUS_PRODUCT_ID 0x0753
46 | #define MICRONUCLEUS_USB_TIMEOUT 0xFFFF
47 | #define MICRONUCLEUS_MAX_MAJOR_VERSION 1
48 | /*******************************************************************************/
49 |
50 | /********************************************************************************
51 | * Declearations
52 | ********************************************************************************/
53 | //typedef usb_dev_handle micronucleus;
54 | // representing version number of micronucleus device
55 | typedef struct _micronucleus_version {
56 | unsigned char major;
57 | unsigned char minor;
58 | } micronucleus_version;
59 |
60 | // handle representing one micronucleus device
61 | typedef struct _micronucleus {
62 | usb_dev_handle *device;
63 | // general information about device
64 | micronucleus_version version;
65 | unsigned int flash_size; // programmable size (in bytes) of progmem
66 | unsigned int page_size; // size (in bytes) of page
67 | unsigned int pages; // total number of pages to program
68 | unsigned int write_sleep; // milliseconds
69 | unsigned int erase_sleep; // milliseconds
70 | } micronucleus;
71 |
72 | typedef void (*micronucleus_callback)(float progress);
73 |
74 | /*******************************************************************************/
75 |
76 | /********************************************************************************
77 | * Try to connect to the device
78 | * Returns: device handle for success, NULL for fail
79 | ********************************************************************************/
80 | micronucleus* micronucleus_connect();
81 | /*******************************************************************************/
82 |
83 | /********************************************************************************
84 | * Erase the flash memory
85 | ********************************************************************************/
86 | int micronucleus_eraseFlash(micronucleus* deviceHandle, micronucleus_callback progress);
87 | /*******************************************************************************/
88 |
89 | /********************************************************************************
90 | * Write the flash memory
91 | ********************************************************************************/
92 | int micronucleus_writeFlash(micronucleus* deviceHandle, unsigned int program_length,
93 | unsigned char* program, micronucleus_callback progress);
94 | /*******************************************************************************/
95 |
96 | /********************************************************************************
97 | * Starts the user application
98 | ********************************************************************************/
99 | int micronucleus_startApp(micronucleus* deviceHandle);
100 | /*******************************************************************************/
101 |
102 | #endif
103 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/micronucleus-1.03-2secs.hex:
--------------------------------------------------------------------------------
1 | :1017C00022C040C06CC03EC03DC03CC03BC03AC01F
2 | :1017D00039C038C037C036C035C034C033C0040348
3 | :1017E000090412011001FF000008D016530703017D
4 | :1017F000000000010902120001010080320904000A
5 | :1018000000000000000011241FBECFE5D2E0DEBFC3
6 | :10181000CDBF00EB0F9307E00F9310E0A0E6B0E020
7 | :10182000EAECFFE102C005900D92A636B107D9F7A8
8 | :1018300010E0A6E6B0E001C01D92AA39B107E1F7B9
9 | :10184000DFD1C1C3BDCFA82FB92F80E090E041E028
10 | :1018500050EA609530E009C02D91822797958795D1
11 | :1018600010F084279527305EC8F36F5FA8F30895C2
12 | :10187000EADF8D939D930895A6E088279927AA957E
13 | :1018800069F00197E1F3B399FCCFB39BFECF81E000
14 | :101890009927A6B3019611F0A871D9F70895CF93AF
15 | :1018A000CFB7CF93C0915F02C03B21F4C0915E02DD
16 | :1018B000C73021F0CF91CFBFCF9181CFCC27C39537
17 | :1018C000B39BE9F7B39B0BC0B39B09C0B39B07C0A5
18 | :1018D000B39B05C0B39B03C0B39B01C0D3C00F92A1
19 | :1018E000DF93C0917D00DD27CC57DF4F012EB39BE6
20 | :1018F00003C0DF910F90E6CF2F930F931F934F9369
21 | :101900002FEF4F6F06B303FB20F95F933F9350E037
22 | :101910003BE065C016B30126502953FDC89556B368
23 | :10192000012703FB25F92F7306B3B1F050271027C9
24 | :1019300013FB26F906B22230F0F000C016B30127DF
25 | :1019400003FB27F90126502906B22430E8F54F772A
26 | :10195000206816B30000F6CF50274F7D206206B2F4
27 | :10196000102F000000C006B300265029102713FBDB
28 | :1019700026F906B2E2CF4F7B06B3206400C0DACF6F
29 | :1019800001265029187106B269F14E7F2160012F9E
30 | :1019900016B328C0002650294D7F06B22260102FB2
31 | :1019A00029C0012650294B7F06B22460012F2DC08B
32 | :1019B00016B301265029477F2860000006B22EC0CA
33 | :1019C0004F7E06B3206130C0422706B349930026FC
34 | :1019D0005029102706B24FEF13FB20F9297F16B3C9
35 | :1019E00079F2187159F10126502906B2012703FB3B
36 | :1019F00021F9237F06B371F2002650293150D0F02F
37 | :101A000006B2102713FB22F9277E16B351F20126E6
38 | :101A10005029012703FB06B223F92F7C49F200006D
39 | :101A200006B3102713FB24F90026502906B22F799C
40 | :101A300039F270CF10E21ABF002717C03B50319522
41 | :101A4000C31BD04010E21ABF0881033CF9F00B34ED
42 | :101A5000E9F020917B001981110F1213EDCF0936A7
43 | :101A600051F10D3211F0013E39F7009382003F91A0
44 | :101A70005F914F911F910F912F91DF910F90CAB7F6
45 | :101A8000C5FD1DCFCF91CFBFCF911895209182007A
46 | :101A9000222369F310918000112321F5343022F1C3
47 | :101AA0003093800020937C0010917D003BE0311B3F
48 | :101AB00030937D0019C00091800001309CF40AE54C
49 | :101AC0003091600034FD11C000936000C0E7D0E0A9
50 | :101AD00010C0052710E000C021C0052710E0C89500
51 | :101AE00008BB14C03AE501C032ED032EC0E0D0E0DF
52 | :101AF00032E017B31861C39A08B317BB58E120E866
53 | :101B00004FEF20FF052708BB279517951C3F28F7A7
54 | :101B100000004552B0F720FF0527279508BB179511
55 | :101B20001C3FB8F629913A9561F7077E1091810024
56 | :101B3000110F08BBC250D04011F010937B0010E28F
57 | :101B40001ABF086017B3177E402F477E54E05A959E
58 | :101B5000F1F708BB17BB48BB8ACF81E080936700D1
59 | :101B6000F894E0916E00F0916F00329785E08093D9
60 | :101B70005700E89507B600FCFDCF789408959C01C6
61 | :101B8000E0916E00F0916F00309749F1E430F1057B
62 | :101B9000B1F087E1EC3BF80739F420916A0030910D
63 | :101BA0006B002E5D3B4F0DC087E1EE3BF80749F41B
64 | :101BB00020916C0030916D002D5D3B4F02C02FEDE8
65 | :101BC0003BECF89481E0090180935700E8951124DB
66 | :101BD00078943296F0936F00E0936E00089581E15F
67 | :101BE00080935700E895EBCF8FEF9FEFC8DF809190
68 | :101BF0006E0090916F008F739070892BA9F7ADCF15
69 | :101C000088E10FB6F89481BD11BC0FBEE0E0F0E0B2
70 | :101C1000859194918F5D9B4C39F4E4E0F0E08591DF
71 | :101C200094918F5D9B4C09F0DFDF10926F00109252
72 | :101C30006E00AC9A8BB780628BBFBB9A88E893E149
73 | :101C4000ECE9F1E03197F1F70197D1F7BB9878947F
74 | :101C5000EE24FF2410918000135017FDD0C0809116
75 | :101C60007D00CCE0D0E0C81BD109CC57DF4F80917C
76 | :101C70007C008D3209F08DC0183009F0BEC083ECB5
77 | :101C8000809370008AE5809360001092690028813B
78 | :101C9000822F80769981882309F1992341F482E685
79 | :101CA00090E090937F0080937E0024E068C09130A4
80 | :101CB00051F48C819D8190936F0080936E0027FD7D
81 | :101CC00059C09FEF58C080916600923011F4816036
82 | :101CD00001C084608093660020E051C08A81109228
83 | :101CE0007900992331F410927A0089E790E022E09C
84 | :101CF0003CC0953019F48093810034C0963011F5C2
85 | :101D00008B81813019F482EE97E104C0823041F476
86 | :101D100084EF97E190937F0080937E0022E10EC0D4
87 | :101D2000833059F48A81882341F48EED97E19093B2
88 | :101D30007F0080937E0024E001C020E080E4809357
89 | :101D400069001DC0983019F483E890E009C099300B
90 | :101D500019F48093830006C09A3021F489E790E05B
91 | :101D600021E003C089E790E020E090937F0080931A
92 | :101D70007E0005C09E8180E88093690007C08F8146
93 | :101D8000882319F49E81921708F0922F9093610096
94 | :101D900034C08091690087FF30C080916E009091BF
95 | :101DA0006F00009739F48881998190936B0080933C
96 | :101DB0006A000DC08430910539F48881998190932F
97 | :101DC0006D0080936C0003C0805C974138F488817B
98 | :101DD0009981D5DE125011F02296DFCF80916E00EE
99 | :101DE00090916F008F739070892B39F48091660009
100 | :101DF0008260809366001092610010928000809152
101 | :101E0000600084FF3CC0809161008F3FC1F1182FBA
102 | :101E1000893008F018E0811B809361008091700088
103 | :101E200098E88927809370001123E1F0E0917E000B
104 | :101E3000F0917F008091690086FF09C0912FA1E792
105 | :101E4000B0E084918D9331969150D9F707C0912FCE
106 | :101E5000A1E7B0E081918D939150E1F7F0937F007D
107 | :101E6000E0937E0081E790E0612F02DD612F6C5FDF
108 | :101E70006C3019F08FEF809361006093600094E103
109 | :101E800086B3887131F49150D9F710928100109285
110 | :101E90007B0010E0992309F411E08091680081171C
111 | :101EA00039F0112319F4F8944FD078941093680006
112 | :101EB0008CE991E00197F1F780916600882319F091
113 | :101EC000EE24FF2403C00894E11CF11C182F80FFAE
114 | :101ED00014C0F894E0ECF7E1E054F04083E0809324
115 | :101EE0005700E89507B600FCFDCF3097A9F7109290
116 | :101EF0006F0010926E0078DE789411FF0FC08AE3B5
117 | :101F000090E20197F1F780916E0090916F008F73CE
118 | :101F10009070892B11F068DE01C01FDE12FD08C031
119 | :101F20001092660080E2E8168EE4F80608F492CE7D
120 | :101F300082E291EA0197F1F7F8941BBE15BA10926C
121 | :101F40005F0210925E023ACCFF920F931F93CF93E1
122 | :101F5000DF9380E8F82E00E0C0E0D0E0102F1F0DE6
123 | :101F600011BF8ADC29E0843392070CF0102FF6941D
124 | :101F70002196C830D10511F0012FF0CF115011BFBB
125 | :101F80001F5F012FEC0110C077DC8453994097FF4D
126 | :101F900003C0909581959F4F8C179D0714F401B74E
127 | :101FA000EC0181B78F5F81BF21B730E0812F90E0D6
128 | :101FB00001968217930744F701BFDF91CF911F91DC
129 | :0A1FC0000F91FF900895F894FFCFF1
130 | :061FCA005AFF17BC40089D
131 | :04000003000017C022
132 | :00000001FF
133 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/micronucleus-1.03-5secs.hex:
--------------------------------------------------------------------------------
1 | :1017C00022C040C06CC03EC03DC03CC03BC03AC01F
2 | :1017D00039C038C037C036C035C034C033C0040348
3 | :1017E000090412011001FF000008D016530703017D
4 | :1017F000000000010902120001010080320904000A
5 | :1018000000000000000011241FBECFE5D2E0DEBFC3
6 | :10181000CDBF00EB0F9307E00F9310E0A0E6B0E020
7 | :10182000EAECFFE102C005900D92A636B107D9F7A8
8 | :1018300010E0A6E6B0E001C01D92AA39B107E1F7B9
9 | :10184000DFD1C1C3BDCFA82FB92F80E090E041E028
10 | :1018500050EA609530E009C02D91822797958795D1
11 | :1018600010F084279527305EC8F36F5FA8F30895C2
12 | :10187000EADF8D939D930895A6E088279927AA957E
13 | :1018800069F00197E1F3B399FCCFB39BFECF81E000
14 | :101890009927A6B3019611F0A871D9F70895CF93AF
15 | :1018A000CFB7CF93C0915F02C03B21F4C0915E02DD
16 | :1018B000C73021F0CF91CFBFCF9181CFCC27C39537
17 | :1018C000B39BE9F7B39B0BC0B39B09C0B39B07C0A5
18 | :1018D000B39B05C0B39B03C0B39B01C0D3C00F92A1
19 | :1018E000DF93C0917D00DD27CC57DF4F012EB39BE6
20 | :1018F00003C0DF910F90E6CF2F930F931F934F9369
21 | :101900002FEF4F6F06B303FB20F95F933F9350E037
22 | :101910003BE065C016B30126502953FDC89556B368
23 | :10192000012703FB25F92F7306B3B1F050271027C9
24 | :1019300013FB26F906B22230F0F000C016B30127DF
25 | :1019400003FB27F90126502906B22430E8F54F772A
26 | :10195000206816B30000F6CF50274F7D206206B2F4
27 | :10196000102F000000C006B300265029102713FBDB
28 | :1019700026F906B2E2CF4F7B06B3206400C0DACF6F
29 | :1019800001265029187106B269F14E7F2160012F9E
30 | :1019900016B328C0002650294D7F06B22260102FB2
31 | :1019A00029C0012650294B7F06B22460012F2DC08B
32 | :1019B00016B301265029477F2860000006B22EC0CA
33 | :1019C0004F7E06B3206130C0422706B349930026FC
34 | :1019D0005029102706B24FEF13FB20F9297F16B3C9
35 | :1019E00079F2187159F10126502906B2012703FB3B
36 | :1019F00021F9237F06B371F2002650293150D0F02F
37 | :101A000006B2102713FB22F9277E16B351F20126E6
38 | :101A10005029012703FB06B223F92F7C49F200006D
39 | :101A200006B3102713FB24F90026502906B22F799C
40 | :101A300039F270CF10E21ABF002717C03B50319522
41 | :101A4000C31BD04010E21ABF0881033CF9F00B34ED
42 | :101A5000E9F020917B001981110F1213EDCF0936A7
43 | :101A600051F10D3211F0013E39F7009382003F91A0
44 | :101A70005F914F911F910F912F91DF910F90CAB7F6
45 | :101A8000C5FD1DCFCF91CFBFCF911895209182007A
46 | :101A9000222369F310918000112321F5343022F1C3
47 | :101AA0003093800020937C0010917D003BE0311B3F
48 | :101AB00030937D0019C00091800001309CF40AE54C
49 | :101AC0003091600034FD11C000936000C0E7D0E0A9
50 | :101AD00010C0052710E000C021C0052710E0C89500
51 | :101AE00008BB14C03AE501C032ED032EC0E0D0E0DF
52 | :101AF00032E017B31861C39A08B317BB58E120E866
53 | :101B00004FEF20FF052708BB279517951C3F28F7A7
54 | :101B100000004552B0F720FF0527279508BB179511
55 | :101B20001C3FB8F629913A9561F7077E1091810024
56 | :101B3000110F08BBC250D04011F010937B0010E28F
57 | :101B40001ABF086017B3177E402F477E54E05A959E
58 | :101B5000F1F708BB17BB48BB8ACF81E080936700D1
59 | :101B6000F894E0916E00F0916F00329785E08093D9
60 | :101B70005700E89507B600FCFDCF789408959C01C6
61 | :101B8000E0916E00F0916F00309749F1E430F1057B
62 | :101B9000B1F087E1EC3BF80739F420916A0030910D
63 | :101BA0006B002E5D3B4F0DC087E1EE3BF80749F41B
64 | :101BB00020916C0030916D002D5D3B4F02C02FEDE8
65 | :101BC0003BECF89481E0090180935700E8951124DB
66 | :101BD00078943296F0936F00E0936E00089581E15F
67 | :101BE00080935700E895EBCF8FEF9FEFC8DF809190
68 | :101BF0006E0090916F008F739070892BA9F7ADCF15
69 | :101C000088E10FB6F89481BD11BC0FBEE0E0F0E0B2
70 | :101C1000859194918F5D9B4C39F4E4E0F0E08591DF
71 | :101C200094918F5D9B4C09F0DFDF10926F00109252
72 | :101C30006E00AC9A8BB780628BBFBB9A88E893E149
73 | :101C4000ECE9F1E03197F1F70197D1F7BB9878947F
74 | :101C5000EE24FF2410918000135017FDD0C0809116
75 | :101C60007D00CCE0D0E0C81BD109CC57DF4F80917C
76 | :101C70007C008D3209F08DC0183009F0BEC083ECB5
77 | :101C8000809370008AE5809360001092690028813B
78 | :101C9000822F80769981882309F1992341F482E685
79 | :101CA00090E090937F0080937E0024E068C09130A4
80 | :101CB00051F48C819D8190936F0080936E0027FD7D
81 | :101CC00059C09FEF58C080916600923011F4816036
82 | :101CD00001C084608093660020E051C08A81109228
83 | :101CE0007900992331F410927A0089E790E022E09C
84 | :101CF0003CC0953019F48093810034C0963011F5C2
85 | :101D00008B81813019F482EE97E104C0823041F476
86 | :101D100084EF97E190937F0080937E0022E10EC0D4
87 | :101D2000833059F48A81882341F48EED97E19093B2
88 | :101D30007F0080937E0024E001C020E080E4809357
89 | :101D400069001DC0983019F483E890E009C099300B
90 | :101D500019F48093830006C09A3021F489E790E05B
91 | :101D600021E003C089E790E020E090937F0080931A
92 | :101D70007E0005C09E8180E88093690007C08F8146
93 | :101D8000882319F49E81921708F0922F9093610096
94 | :101D900034C08091690087FF30C080916E009091BF
95 | :101DA0006F00009739F48881998190936B0080933C
96 | :101DB0006A000DC08430910539F48881998190932F
97 | :101DC0006D0080936C0003C0805C974138F488817B
98 | :101DD0009981D5DE125011F02296DFCF80916E00EE
99 | :101DE00090916F008F739070892B39F48091660009
100 | :101DF0008260809366001092610010928000809152
101 | :101E0000600084FF3CC0809161008F3FC1F1182FBA
102 | :101E1000893008F018E0811B809361008091700088
103 | :101E200098E88927809370001123E1F0E0917E000B
104 | :101E3000F0917F008091690086FF09C0912FA1E792
105 | :101E4000B0E084918D9331969150D9F707C0912FCE
106 | :101E5000A1E7B0E081918D939150E1F7F0937F007D
107 | :101E6000E0937E0081E790E0612F02DD612F6C5FDF
108 | :101E70006C3019F08FEF809361006093600094E103
109 | :101E800086B3887131F49150D9F710928100109285
110 | :101E90007B0010E0992309F411E08091680081171C
111 | :101EA00039F0112319F4F8944FD078941093680006
112 | :101EB0008CE991E00197F1F780916600882319F091
113 | :101EC000EE24FF2403C00894E11CF11C182F80FFAE
114 | :101ED00014C0F894E0ECF7E1E054F04083E0809324
115 | :101EE0005700E89507B600FCFDCF3097A9F7109290
116 | :101EF0006F0010926E0078DE789411FF0FC08AE3B5
117 | :101F000090E20197F1F780916E0090916F008F73CE
118 | :101F10009070892B11F068DE01C01FDE12FD08C031
119 | :101F20001092660080E5E81683ECF80608F492CE7D
120 | :101F300082E291EA0197F1F7F8941BBE15BA10926C
121 | :101F40005F0210925E023ACCFF920F931F93CF93E1
122 | :101F5000DF9380E8F82E00E0C0E0D0E0102F1F0DE6
123 | :101F600011BF8ADC29E0843392070CF0102FF6941D
124 | :101F70002196C830D10511F0012FF0CF115011BFBB
125 | :101F80001F5F012FEC0110C077DC8453994097FF4D
126 | :101F900003C0909581959F4F8C179D0714F401B74E
127 | :101FA000EC0181B78F5F81BF21B730E0812F90E0D6
128 | :101FB00001968217930744F701BFDF91CF911F91DC
129 | :0A1FC0000F91FF900895F894FFCFF1
130 | :061FCA005AFF17BC40089D
131 | :04000003000017C022
132 | :00000001FF
133 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/micronucleus-1.04-low-power.hex:
--------------------------------------------------------------------------------
1 | :1017C00022C040C06CC03EC03DC03CC03BC03AC01F
2 | :1017D00039C038C037C036C035C034C033C0040348
3 | :1017E000090412011001FF000008D016530704017C
4 | :1017F000000000010902120001010080320904000A
5 | :1018000000000000000011241FBECFE5D2E0DEBFC3
6 | :10181000CDBF00EB0F9307E00F9310E0A0E6B0E020
7 | :10182000E6EFFFE102C005900D92A636B107D9F7A9
8 | :1018300010E0A6E6B0E001C01D92AC39B107E1F7B7
9 | :10184000DFD1D7C3BDCFA82FB92F80E090E041E012
10 | :1018500050EA609530E009C02D91822797958795D1
11 | :1018600010F084279527305EC8F36F5FA8F30895C2
12 | :10187000EADF8D939D930895A6E088279927AA957E
13 | :1018800069F00197E1F3B399FCCFB39BFECF81E000
14 | :101890009927A6B3019611F0A871D9F70895CF93AF
15 | :1018A000CFB7CF93C0915F02C03B21F4C0915E02DD
16 | :1018B000C73021F0CF91CFBFCF9181CFCC27C39537
17 | :1018C000B39BE9F7B39B0BC0B39B09C0B39B07C0A5
18 | :1018D000B39B05C0B39B03C0B39B01C0D3C00F92A1
19 | :1018E000DF93C0917F00DD27CA57DF4F012EB39BE6
20 | :1018F00003C0DF910F90E6CF2F930F931F934F9369
21 | :101900002FEF4F6F06B303FB20F95F933F9350E037
22 | :101910003BE065C016B30126502953FDC89556B368
23 | :10192000012703FB25F92F7306B3B1F050271027C9
24 | :1019300013FB26F906B22230F0F000C016B30127DF
25 | :1019400003FB27F90126502906B22430E8F54F772A
26 | :10195000206816B30000F6CF50274F7D206206B2F4
27 | :10196000102F000000C006B300265029102713FBDB
28 | :1019700026F906B2E2CF4F7B06B3206400C0DACF6F
29 | :1019800001265029187106B269F14E7F2160012F9E
30 | :1019900016B328C0002650294D7F06B22260102FB2
31 | :1019A00029C0012650294B7F06B22460012F2DC08B
32 | :1019B00016B301265029477F2860000006B22EC0CA
33 | :1019C0004F7E06B3206130C0422706B349930026FC
34 | :1019D0005029102706B24FEF13FB20F9297F16B3C9
35 | :1019E00079F2187159F10126502906B2012703FB3B
36 | :1019F00021F9237F06B371F2002650293150D0F02F
37 | :101A000006B2102713FB22F9277E16B351F20126E6
38 | :101A10005029012703FB06B223F92F7C49F200006D
39 | :101A200006B3102713FB24F90026502906B22F799C
40 | :101A300039F270CF10E21ABF002717C03B50319522
41 | :101A4000C31BD04010E21ABF0881033CF9F00B34ED
42 | :101A5000E9F020917D001981110F1213EDCF0936A5
43 | :101A600051F10D3211F0013E39F7009384003F919E
44 | :101A70005F914F911F910F912F91DF910F90CAB7F6
45 | :101A8000C5FD1DCFCF91CFBFCF9118952091840078
46 | :101A9000222369F310918200112321F5343022F1C1
47 | :101AA0003093820020937E0010917F003BE0311B39
48 | :101AB00030937F0019C00091820001309CF40AE548
49 | :101AC0003091600034FD11C000936000C2E7D0E0A7
50 | :101AD00010C0052710E000C021C0052710E0C89500
51 | :101AE00008BB14C03AE501C032ED032EC0E0D0E0DF
52 | :101AF00032E017B31861C39A08B317BB58E120E866
53 | :101B00004FEF20FF052708BB279517951C3F28F7A7
54 | :101B100000004552B0F720FF0527279508BB179511
55 | :101B20001C3FB8F629913A9561F7077E1091830022
56 | :101B3000110F08BBC250D04011F010937D0010E28D
57 | :101B40001ABF086017B3177E402F477E54E05A959E
58 | :101B5000F1F708BB17BB48BB8ACF81E080936900CF
59 | :101B6000F894E0917000F0917100329785E08093D5
60 | :101B70005700E89507B600FCFDCF789408959C01C6
61 | :101B8000E0917000F0917100309749F1E430F10577
62 | :101B9000B1F087E1EC3BF80739F420916C0030910B
63 | :101BA0006D002E5D3B4F0DC087E1EE3BF80749F419
64 | :101BB00020916E0030916F002D5D3B4F02C02FEDE4
65 | :101BC0003BECF89481E0090180935700E8951124DB
66 | :101BD00078943296F0937100E0937000089581E15B
67 | :101BE00080935700E895EBCF8FEF9FEFC8DF809190
68 | :101BF0007000909171008F739070892BA9F7ADCF11
69 | :101C000001B788E10FB6F89481BD11BC0FBEE0E0CA
70 | :101C1000F0E0859194918F5D9B4C39F4E4E0F0E025
71 | :101C2000859194918F5D9B4C09F0DEDF10927100DD
72 | :101C300010927000B39B87C180E886BD16BCAC9A39
73 | :101C40008BB780628BBFBB9A88E893E1ECE9F1E047
74 | :101C50003197F1F70197D1F7BB98789410918200F2
75 | :101C6000135017FDD4C080917F00CCE0D0E0C81B9A
76 | :101C7000D109CA57DF4F80917E008D3209F091C0A3
77 | :101C8000183009F0C2C083EC809372008AE580931B
78 | :101C9000600010926B002881822F807699818823C2
79 | :101CA00029F11092670010926600992341F482E6B0
80 | :101CB00090E0909381008093800024E068C0913090
81 | :101CC00051F48C819D81909371008093700027FD69
82 | :101CD00059C09FEF58C080916800923011F4816024
83 | :101CE00001C084608093680020E051C08A81109216
84 | :101CF0007B00992331F410927C008BE790E022E086
85 | :101D00003CC0953019F48093830034C0963011F5AF
86 | :101D10008B81813019F482EE97E104C0823041F466
87 | :101D200084EF97E1909381008093800022E10EC0C0
88 | :101D3000833059F48A81882341F48EED97E19093A2
89 | :101D400081008093800024E001C020E080E4809343
90 | :101D50006B001DC0983019F485E890E009C09930F7
91 | :101D600019F48093850006C09A3021F48BE790E047
92 | :101D700021E003C08BE790E020E090938100809306
93 | :101D8000800005C09E8180E880936B0007C08F8132
94 | :101D9000882319F49E81921708F0922F9093610086
95 | :101DA00034C080916B0087FF30C0809170009091AB
96 | :101DB0007100009739F48881998190936D00809328
97 | :101DC0006C000DC08430910539F48881998190931D
98 | :101DD0006F0080936E0003C0805C974138F4888167
99 | :101DE0009981CDDE125011F02296DFCF80917000E4
100 | :101DF000909171008F739070892B39F480916800F5
101 | :101E0000826080936800109261001092820080913D
102 | :101E1000600084FF3CC0809161008F3FC1F1182FAA
103 | :101E2000893008F018E0811B809361008091720076
104 | :101E300098E88927809372001123E1F0E0918000F7
105 | :101E4000F091810080916B0086FF09C0912FA3E77C
106 | :101E5000B0E084918D9331969150D9F707C0912FBE
107 | :101E6000A3E7B0E081918D939150E1F7F093810069
108 | :101E7000E093800083E790E0612FFADC612F6C5FD4
109 | :101E80006C3019F08FEF809361006093600094E1F3
110 | :101E900086B3887131F49150D9F710928300109273
111 | :101EA0007D0010E0992309F411E080916A00811708
112 | :101EB00039F0112319F4F8945DD0789410936A00E6
113 | :101EC0008CE991E00197F1F78091660090916700AD
114 | :101ED0000196909367008093660080916800182FA8
115 | :101EE00080FF14C0F894E0ECF7E1E054F04083E0A8
116 | :101EF00080935700E89507B600FCFDCF3097A9F70F
117 | :101F000010927100109270006FDE789411FF0FC074
118 | :101F10008AE390E20197F1F780917000909171004F
119 | :101F20008F739070892B11F05FDE01C016DE12FDF9
120 | :101F30000AC0109268008091660090916700885AEC
121 | :101F4000914608F48BCE80E886BD81E086BD03C053
122 | :101F500081B7815081BF81B70817D0F382E291EA3F
123 | :101F60000197F1F7F8941BBE15BA10925F02109218
124 | :101F70005E0224CCFF920F931F93CF93DF9380E8F0
125 | :101F8000F82E00E0C0E0D0E0102F1F0D11BF74DC70
126 | :101F900029E0843392070CF0102FF6942196C83074
127 | :101FA000D10511F0012FF0CF115011BF1F5F012F8C
128 | :101FB000EC0110C061DC8453994097FF03C09095F9
129 | :101FC00081959F4F8C179D0714F401B7EC0181B7E1
130 | :101FD0008F5F81BF21B730E0812F90E0019682179B
131 | :101FE000930744F701BFDF91CF911F910F91FF90AD
132 | :061FF0000895F894FFCFF4
133 | :061FF6005AFF17BC400673
134 | :04000003000017C022
135 | :00000001FF
136 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/micronucleus-1.04.hex:
--------------------------------------------------------------------------------
1 | :1017C00022C040C06CC03EC03DC03CC03BC03AC01F
2 | :1017D00039C038C037C036C035C034C033C0040348
3 | :1017E000090412011001FF000008D016530704017C
4 | :1017F000000000010902120001010080320904000A
5 | :1018000000000000000011241FBECFE5D2E0DEBFC3
6 | :10181000CDBF00EB0F9307E00F9310E0A0E6B0E020
7 | :10182000E4EDFFE102C005900D92A636B107D9F7AD
8 | :1018300010E0A6E6B0E001C01D92AC39B107E1F7B7
9 | :10184000DFD1C6C3BDCFA82FB92F80E090E041E023
10 | :1018500050EA609530E009C02D91822797958795D1
11 | :1018600010F084279527305EC8F36F5FA8F30895C2
12 | :10187000EADF8D939D930895A6E088279927AA957E
13 | :1018800069F00197E1F3B399FCCFB39BFECF81E000
14 | :101890009927A6B3019611F0A871D9F70895CF93AF
15 | :1018A000CFB7CF93C0915F02C03B21F4C0915E02DD
16 | :1018B000C73021F0CF91CFBFCF9181CFCC27C39537
17 | :1018C000B39BE9F7B39B0BC0B39B09C0B39B07C0A5
18 | :1018D000B39B05C0B39B03C0B39B01C0D3C00F92A1
19 | :1018E000DF93C0917F00DD27CA57DF4F012EB39BE6
20 | :1018F00003C0DF910F90E6CF2F930F931F934F9369
21 | :101900002FEF4F6F06B303FB20F95F933F9350E037
22 | :101910003BE065C016B30126502953FDC89556B368
23 | :10192000012703FB25F92F7306B3B1F050271027C9
24 | :1019300013FB26F906B22230F0F000C016B30127DF
25 | :1019400003FB27F90126502906B22430E8F54F772A
26 | :10195000206816B30000F6CF50274F7D206206B2F4
27 | :10196000102F000000C006B300265029102713FBDB
28 | :1019700026F906B2E2CF4F7B06B3206400C0DACF6F
29 | :1019800001265029187106B269F14E7F2160012F9E
30 | :1019900016B328C0002650294D7F06B22260102FB2
31 | :1019A00029C0012650294B7F06B22460012F2DC08B
32 | :1019B00016B301265029477F2860000006B22EC0CA
33 | :1019C0004F7E06B3206130C0422706B349930026FC
34 | :1019D0005029102706B24FEF13FB20F9297F16B3C9
35 | :1019E00079F2187159F10126502906B2012703FB3B
36 | :1019F00021F9237F06B371F2002650293150D0F02F
37 | :101A000006B2102713FB22F9277E16B351F20126E6
38 | :101A10005029012703FB06B223F92F7C49F200006D
39 | :101A200006B3102713FB24F90026502906B22F799C
40 | :101A300039F270CF10E21ABF002717C03B50319522
41 | :101A4000C31BD04010E21ABF0881033CF9F00B34ED
42 | :101A5000E9F020917D001981110F1213EDCF0936A5
43 | :101A600051F10D3211F0013E39F7009384003F919E
44 | :101A70005F914F911F910F912F91DF910F90CAB7F6
45 | :101A8000C5FD1DCFCF91CFBFCF9118952091840078
46 | :101A9000222369F310918200112321F5343022F1C1
47 | :101AA0003093820020937E0010917F003BE0311B39
48 | :101AB00030937F0019C00091820001309CF40AE548
49 | :101AC0003091600034FD11C000936000C2E7D0E0A7
50 | :101AD00010C0052710E000C021C0052710E0C89500
51 | :101AE00008BB14C03AE501C032ED032EC0E0D0E0DF
52 | :101AF00032E017B31861C39A08B317BB58E120E866
53 | :101B00004FEF20FF052708BB279517951C3F28F7A7
54 | :101B100000004552B0F720FF0527279508BB179511
55 | :101B20001C3FB8F629913A9561F7077E1091830022
56 | :101B3000110F08BBC250D04011F010937D0010E28D
57 | :101B40001ABF086017B3177E402F477E54E05A959E
58 | :101B5000F1F708BB17BB48BB8ACF81E080936900CF
59 | :101B6000F894E0917000F0917100329785E08093D5
60 | :101B70005700E89507B600FCFDCF789408959C01C6
61 | :101B8000E0917000F0917100309749F1E430F10577
62 | :101B9000B1F087E1EC3BF80739F420916C0030910B
63 | :101BA0006D002E5D3B4F0DC087E1EE3BF80749F419
64 | :101BB00020916E0030916F002D5D3B4F02C02FEDE4
65 | :101BC0003BECF89481E0090180935700E8951124DB
66 | :101BD00078943296F0937100E0937000089581E15B
67 | :101BE00080935700E895EBCF8FEF9FEFC8DF809190
68 | :101BF0007000909171008F739070892BA9F7ADCF11
69 | :101C000088E10FB6F89481BD11BC0FBEE0E0F0E0B2
70 | :101C1000859194918F5D9B4C39F4E4E0F0E08591DF
71 | :101C200094918F5D9B4C09F0DFDF10927100109250
72 | :101C30007000AC9A8BB780628BBFBB9A88E893E147
73 | :101C4000ECE9F1E03197F1F70197D1F7BB9878947F
74 | :101C500010918200135017FDD4C080917F00CCE01A
75 | :101C6000D0E0C81BD109CA57DF4F80917E008D326A
76 | :101C700009F091C0183009F0C2C083EC8093720063
77 | :101C80008AE58093600010926B002881822F807615
78 | :101C90009981882329F11092670010926600992398
79 | :101CA00041F482E690E0909381008093800024E0EC
80 | :101CB00068C0913051F48C819D8190937100809324
81 | :101CC000700027FD59C09FEF58C080916800923086
82 | :101CD00011F4816001C084608093680020E051C0ED
83 | :101CE0008A8110927B00992331F410927C008BE75B
84 | :101CF00090E022E03CC0953019F48093830034C01A
85 | :101D0000963011F58B81813019F482EE97E104C091
86 | :101D1000823041F484EF97E19093810080938000BA
87 | :101D200022E10EC0833059F48A81882341F48EED7C
88 | :101D300097E1909381008093800024E001C020E02F
89 | :101D400080E480936B001DC0983019F485E890E022
90 | :101D500009C0993019F48093850006C09A3021F4A7
91 | :101D60008BE790E021E003C08BE790E020E09093C8
92 | :101D700081008093800005C09E8180E880936B0085
93 | :101D800007C08F81882319F49E81921708F0922F43
94 | :101D90009093610034C080916B0087FF30C08091C8
95 | :101DA000700090917100009739F488819981909327
96 | :101DB0006D0080936C000DC08430910539F48881EA
97 | :101DC000998190936F0080936E0003C0805C97416F
98 | :101DD00038F488819981D3DE125011F02296DFCF3A
99 | :101DE00080917000909171008F739070892B39F4FD
100 | :101DF0008091680082608093680010926100109268
101 | :101E000082008091600084FF3CC0809161008F3F20
102 | :101E1000C1F1182F893008F018E0811B8093610010
103 | :101E20008091720098E88927809372001123E1F075
104 | :101E3000E0918000F091810080916B0086FF09C0E5
105 | :101E4000912FA3E7B0E084918D9331969150D9F70B
106 | :101E500007C0912FA3E7B0E081918D939150E1F7F6
107 | :101E6000F0938100E093800083E790E0612F00DD34
108 | :101E7000612F6C5F6C3019F08FEF8093610060937D
109 | :101E8000600094E186B3887131F49150D9F71092D3
110 | :101E9000830010927D0010E0992309F411E08091F5
111 | :101EA0006A00811739F0112319F4F89452D078940C
112 | :101EB00010936A008CE991E00197F1F78091660038
113 | :101EC00090916700019690936700809366008091DF
114 | :101ED0006800182F80FF14C0F894E0ECF7E1E0549C
115 | :101EE000F04083E080935700E89507B600FCFDCFF3
116 | :101EF0003097A9F7109271001092700075DE7894F7
117 | :101F000011FF0FC08AE390E20197F1F78091700012
118 | :101F1000909171008F739070892B11F065DE01C074
119 | :101F20001CDE12FD0AC0109268008091660090913C
120 | :101F30006700885A914608F48BCE82E291EA0197B5
121 | :101F4000F1F7F8941BBE15BA10925F0210925E0270
122 | :101F500035CCFF920F931F93CF93DF9380E8F82E39
123 | :101F600000E0C0E0D0E0102F1F0D11BF85DC29E09C
124 | :101F7000843392070CF0102FF6942196C830D105C7
125 | :101F800011F0012FF0CF115011BF1F5F012FEC0195
126 | :101F900010C072DC8453994097FF03C090958195DF
127 | :101FA0009F4F8C179D0714F401B7EC0181B78F5F29
128 | :101FB00081BF21B730E0812F90E00196821793070F
129 | :101FC00044F701BFDF91CF911F910F91FF900895CA
130 | :041FD000F894FFCFB3
131 | :061FD4005AFF17BC400695
132 | :04000003000017C022
133 | :00000001FF
134 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/micronucleus-1.05-jumper.hex:
--------------------------------------------------------------------------------
1 | :1017C00022C040C06CC03EC03DC03CC03BC03AC01F
2 | :1017D00039C038C037C036C035C034C033C0040348
3 | :1017E000090412011001FF000008D016530705017B
4 | :1017F000000000010902120001010080320904000A
5 | :1018000000000000000011241FBECFE5D2E0DEBFC3
6 | :10181000CDBF00EB0F9307E00F9310E0A0E6B0E020
7 | :10182000E0EFFFE102C005900D92A636B107D9F7AF
8 | :1018300010E0A6E6B0E001C01D92AC39B107E1F7B7
9 | :10184000DFD1D4C3BDCFA82FB92F80E090E041E015
10 | :1018500050EA609530E009C02D91822797958795D1
11 | :1018600010F084279527305EC8F36F5FA8F30895C2
12 | :10187000EADF8D939D930895A6E088279927AA957E
13 | :1018800069F00197E1F3B399FCCFB39BFECF81E000
14 | :101890009927A6B3019611F0A871D9F70895CF93AF
15 | :1018A000CFB7CF93C0915F02C03B21F4C0915E02DD
16 | :1018B000C73021F0CF91CFBFCF9181CFCC27C39537
17 | :1018C000B39BE9F7B39B0BC0B39B09C0B39B07C0A5
18 | :1018D000B39B05C0B39B03C0B39B01C0D3C00F92A1
19 | :1018E000DF93C0917F00DD27CA57DF4F012EB39BE6
20 | :1018F00003C0DF910F90E6CF2F930F931F934F9369
21 | :101900002FEF4F6F06B303FB20F95F933F9350E037
22 | :101910003BE065C016B30126502953FDC89556B368
23 | :10192000012703FB25F92F7306B3B1F050271027C9
24 | :1019300013FB26F906B22230F0F000C016B30127DF
25 | :1019400003FB27F90126502906B22430E8F54F772A
26 | :10195000206816B30000F6CF50274F7D206206B2F4
27 | :10196000102F000000C006B300265029102713FBDB
28 | :1019700026F906B2E2CF4F7B06B3206400C0DACF6F
29 | :1019800001265029187106B269F14E7F2160012F9E
30 | :1019900016B328C0002650294D7F06B22260102FB2
31 | :1019A00029C0012650294B7F06B22460012F2DC08B
32 | :1019B00016B301265029477F2860000006B22EC0CA
33 | :1019C0004F7E06B3206130C0422706B349930026FC
34 | :1019D0005029102706B24FEF13FB20F9297F16B3C9
35 | :1019E00079F2187159F10126502906B2012703FB3B
36 | :1019F00021F9237F06B371F2002650293150D0F02F
37 | :101A000006B2102713FB22F9277E16B351F20126E6
38 | :101A10005029012703FB06B223F92F7C49F200006D
39 | :101A200006B3102713FB24F90026502906B22F799C
40 | :101A300039F270CF10E21ABF002717C03B50319522
41 | :101A4000C31BD04010E21ABF0881033CF9F00B34ED
42 | :101A5000E9F020917D001981110F1213EDCF0936A5
43 | :101A600051F10D3211F0013E39F7009384003F919E
44 | :101A70005F914F911F910F912F91DF910F90CAB7F6
45 | :101A8000C5FD1DCFCF91CFBFCF9118952091840078
46 | :101A9000222369F310918200112321F5343022F1C1
47 | :101AA0003093820020937E0010917F003BE0311B39
48 | :101AB00030937F0019C00091820001309CF40AE548
49 | :101AC0003091600034FD11C000936000C2E7D0E0A7
50 | :101AD00010C0052710E000C021C0052710E0C89500
51 | :101AE00008BB14C03AE501C032ED032EC0E0D0E0DF
52 | :101AF00032E017B31861C39A08B317BB58E120E866
53 | :101B00004FEF20FF052708BB279517951C3F28F7A7
54 | :101B100000004552B0F720FF0527279508BB179511
55 | :101B20001C3FB8F629913A9561F7077E1091830022
56 | :101B3000110F08BBC250D04011F010937D0010E28D
57 | :101B40001ABF086017B3177E402F477E54E05A959E
58 | :101B5000F1F708BB17BB48BB8ACF81E080936900CF
59 | :101B6000F894E0917000F0917100329785E08093D5
60 | :101B70005700E89507B600FCFDCF789408959C01C6
61 | :101B8000E0917000F0917100309749F1E430F10577
62 | :101B9000B1F087E1EC3BF80739F420916C0030910B
63 | :101BA0006D002E5D3B4F0DC087E1EE3BF80749F419
64 | :101BB00020916E0030916F002D5D3B4F02C02FEDE4
65 | :101BC0003BECF89481E0090180935700E8951124DB
66 | :101BD00078943296F0937100E0937000089581E15B
67 | :101BE00080935700E895EBCF8FEF9FEFC8DF809190
68 | :101BF0007000909171008F739070892BA9F7ADCF11
69 | :101C00001F93CF93DF9388E10FB6F89481BD11BC89
70 | :101C10000FBEE0E0F0E0859194918F5D9B4C39F42C
71 | :101C2000E4E0F0E0859194918F5D9B4C09F0DCDF5E
72 | :101C30001092710010927000BD9AC59A82E291EAEA
73 | :101C40000197F1F786B382958695877080FD7DC1F7
74 | :101C5000AC9A8BB780628BBFBB9A88E893E1ECE9C2
75 | :101C6000F1E03197F1F70197D1F7BB987894109193
76 | :101C70008200135017FDD4C080917F00CCE0D0E0EB
77 | :101C8000C81BD109CA57DF4F80917E008D3209F001
78 | :101C900091C0183009F0C2C083EC809372008AE5CD
79 | :101CA0008093600010926B002881822F807699814A
80 | :101CB000882329F11092670010926600992341F45D
81 | :101CC00082E690E0909381008093800024E068C0D9
82 | :101CD000913051F48C819D819093710080937000BC
83 | :101CE00027FD59C09FEF58C080916800923011F4D1
84 | :101CF000816001C084608093680020E051C08A81C7
85 | :101D000010927B00992331F410927C008BE790E0D5
86 | :101D100022E03CC0953019F48093830034C09630A3
87 | :101D200011F58B81813019F482EE97E104C0823085
88 | :101D300041F484EF97E1909381008093800022E149
89 | :101D40000EC0833059F48A81882341F48EED97E1E7
90 | :101D5000909381008093800024E001C020E080E423
91 | :101D600080936B001DC0983019F485E890E009C09D
92 | :101D7000993019F48093850006C09A3021F48BE7DE
93 | :101D800090E021E003C08BE790E020E09093810099
94 | :101D90008093800005C09E8180E880936B0007C01F
95 | :101DA0008F81882319F49E81921708F0922F9093C7
96 | :101DB000610034C080916B0087FF30C0809170005B
97 | :101DC00090917100009739F48881998190936D000A
98 | :101DD00080936C000DC08430910539F4888199811D
99 | :101DE00090936F0080936E0003C0805C974138F43D
100 | :101DF00088819981C4DE125011F02296DFCF809144
101 | :101E00007000909171008F739070892B39F48091DC
102 | :101E100068008260809368001092610010928200D6
103 | :101E20008091600084FF3CC0809161008F3FC1F1D0
104 | :101E3000182F893008F018E0811B80936100809191
105 | :101E4000720098E88927809372001123E1F0E091F5
106 | :101E50008000F091810080916B0086FF09C0912F76
107 | :101E6000A3E7B0E084918D9331969150D9F707C0E4
108 | :101E7000912FA3E7B0E081918D939150E1F7F0931A
109 | :101E80008100E093800083E790E0612FF1DC612F17
110 | :101E90006C5F6C3019F08FEF80936100609360008D
111 | :101EA00094E186B3887131F49150D9F71092830090
112 | :101EB00010927D0010E0992309F411E080916A00EE
113 | :101EC000811739F0112319F4F89451D078941093B4
114 | :101ED0006A008CE991E00197F1F78091660090919A
115 | :101EE0006700019690936700809366008091680078
116 | :101EF000182F80FF14C0F894E0ECF7E1E054F040B4
117 | :101F000083E080935700E89507B600FCFDCF30973B
118 | :101F1000A9F7109271001092700066DE789411FF9C
119 | :101F20000FC08AE390E20197F1F7809170009091E1
120 | :101F300071008F739070892B11F056DE01C00DDE99
121 | :101F400012FD03C01092680092CE82E291EA0197DE
122 | :101F5000F1F718BA17BAF8941BBE15BA10925F02BF
123 | :101F600010925E022BCCDF91CF911F910895FF92CA
124 | :101F70000F931F93CF93DF9380E8F82E00E0C0E02B
125 | :101F8000D0E0102F1F0D11BF77DC29E084339207BA
126 | :101F90000CF0102FF6942196C830D10511F0012FC6
127 | :101FA000F0CF115011BF1F5F012FEC0110C064DC96
128 | :101FB0008453994097FF03C0909581959F4F8C174C
129 | :101FC0009D0714F401B7EC0181B78F5F81BF21B782
130 | :101FD00030E0812F90E001968217930744F701BF0C
131 | :101FE000DF91CF911F910F91FF900895F894FFCF4B
132 | :061FF0005AFF17BC400877
133 | :04000003000017C022
134 | :00000001FF
135 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/micronucleus-1.05.hex:
--------------------------------------------------------------------------------
1 | :1017C00022C040C06CC03EC03DC03CC03BC03AC01F
2 | :1017D00039C038C037C036C035C034C033C0040348
3 | :1017E000090412011001FF000008D016530705017B
4 | :1017F000000000010902120001010080320904000A
5 | :1018000000000000000011241FBECFE5D2E0DEBFC3
6 | :10181000CDBF00EB0F9307E00F9310E0A0E6B0E020
7 | :10182000E2EEFFE102C005900D92A636B107D9F7AE
8 | :1018300010E0A6E6B0E001C01D92AC39B107E1F7B7
9 | :10184000DFD1CDC3BDCFA82FB92F80E090E041E01C
10 | :1018500050EA609530E009C02D91822797958795D1
11 | :1018600010F084279527305EC8F36F5FA8F30895C2
12 | :10187000EADF8D939D930895A6E088279927AA957E
13 | :1018800069F00197E1F3B399FCCFB39BFECF81E000
14 | :101890009927A6B3019611F0A871D9F70895CF93AF
15 | :1018A000CFB7CF93C0915F02C03B21F4C0915E02DD
16 | :1018B000C73021F0CF91CFBFCF9181CFCC27C39537
17 | :1018C000B39BE9F7B39B0BC0B39B09C0B39B07C0A5
18 | :1018D000B39B05C0B39B03C0B39B01C0D3C00F92A1
19 | :1018E000DF93C0917F00DD27CA57DF4F012EB39BE6
20 | :1018F00003C0DF910F90E6CF2F930F931F934F9369
21 | :101900002FEF4F6F06B303FB20F95F933F9350E037
22 | :101910003BE065C016B30126502953FDC89556B368
23 | :10192000012703FB25F92F7306B3B1F050271027C9
24 | :1019300013FB26F906B22230F0F000C016B30127DF
25 | :1019400003FB27F90126502906B22430E8F54F772A
26 | :10195000206816B30000F6CF50274F7D206206B2F4
27 | :10196000102F000000C006B300265029102713FBDB
28 | :1019700026F906B2E2CF4F7B06B3206400C0DACF6F
29 | :1019800001265029187106B269F14E7F2160012F9E
30 | :1019900016B328C0002650294D7F06B22260102FB2
31 | :1019A00029C0012650294B7F06B22460012F2DC08B
32 | :1019B00016B301265029477F2860000006B22EC0CA
33 | :1019C0004F7E06B3206130C0422706B349930026FC
34 | :1019D0005029102706B24FEF13FB20F9297F16B3C9
35 | :1019E00079F2187159F10126502906B2012703FB3B
36 | :1019F00021F9237F06B371F2002650293150D0F02F
37 | :101A000006B2102713FB22F9277E16B351F20126E6
38 | :101A10005029012703FB06B223F92F7C49F200006D
39 | :101A200006B3102713FB24F90026502906B22F799C
40 | :101A300039F270CF10E21ABF002717C03B50319522
41 | :101A4000C31BD04010E21ABF0881033CF9F00B34ED
42 | :101A5000E9F020917D001981110F1213EDCF0936A5
43 | :101A600051F10D3211F0013E39F7009384003F919E
44 | :101A70005F914F911F910F912F91DF910F90CAB7F6
45 | :101A8000C5FD1DCFCF91CFBFCF9118952091840078
46 | :101A9000222369F310918200112321F5343022F1C1
47 | :101AA0003093820020937E0010917F003BE0311B39
48 | :101AB00030937F0019C00091820001309CF40AE548
49 | :101AC0003091600034FD11C000936000C2E7D0E0A7
50 | :101AD00010C0052710E000C021C0052710E0C89500
51 | :101AE00008BB14C03AE501C032ED032EC0E0D0E0DF
52 | :101AF00032E017B31861C39A08B317BB58E120E866
53 | :101B00004FEF20FF052708BB279517951C3F28F7A7
54 | :101B100000004552B0F720FF0527279508BB179511
55 | :101B20001C3FB8F629913A9561F7077E1091830022
56 | :101B3000110F08BBC250D04011F010937D0010E28D
57 | :101B40001ABF086017B3177E402F477E54E05A959E
58 | :101B5000F1F708BB17BB48BB8ACF81E080936900CF
59 | :101B6000F894E0917000F0917100329785E08093D5
60 | :101B70005700E89507B600FCFDCF789408959C01C6
61 | :101B8000E0917000F0917100309749F1E430F10577
62 | :101B9000B1F087E1EC3BF80739F420916C0030910B
63 | :101BA0006D002E5D3B4F0DC087E1EE3BF80749F419
64 | :101BB00020916E0030916F002D5D3B4F02C02FEDE4
65 | :101BC0003BECF89481E0090180935700E8951124DB
66 | :101BD00078943296F0937100E0937000089581E15B
67 | :101BE00080935700E895EBCF8FEF9FEFC8DF809190
68 | :101BF0007000909171008F739070892BA9F7ADCF11
69 | :101C00001F93CF93DF9388E10FB6F89481BD11BC89
70 | :101C10000FBEE0E0F0E0859194918F5D9B4C39F42C
71 | :101C2000E4E0F0E0859194918F5D9B4C09F0DCDF5E
72 | :101C30001092710010927000AC9A8BB780628BBFCB
73 | :101C4000BB9A88E893E1ECE9F1E03197F1F701976D
74 | :101C5000D1F7BB98789410918200135017FDD4C02F
75 | :101C600080917F00CCE0D0E0C81BD109CA57DF4F7C
76 | :101C700080917E008D3209F091C0183009F0C2C009
77 | :101C800083EC809372008AE58093600010926B0071
78 | :101C90002881822F80769981882329F1109267000C
79 | :101CA00010926600992341F482E690E090938100BF
80 | :101CB0008093800024E068C0913051F48C819D8134
81 | :101CC000909371008093700027FD59C09FEF58C01A
82 | :101CD00080916800923011F4816001C0846080932B
83 | :101CE000680020E051C08A8110927B00992331F472
84 | :101CF00010927C008BE790E022E03CC0953019F414
85 | :101D00008093830034C0963011F58B81813019F4B3
86 | :101D100082EE97E104C0823041F484EF97E1909322
87 | :101D200081008093800022E10EC0833059F48A81C3
88 | :101D3000882341F48EED97E1909381008093800099
89 | :101D400024E001C020E080E480936B001DC0983047
90 | :101D500019F485E890E009C0993019F48093850062
91 | :101D600006C09A3021F48BE790E021E003C08BE7B6
92 | :101D700090E020E0909381008093800005C09E81D8
93 | :101D800080E880936B0007C08F81882319F49E81BF
94 | :101D9000921708F0922F9093610034C080916B00ED
95 | :101DA00087FF30C08091700090917100009739F4E6
96 | :101DB0008881998190936D0080936C000DC0843070
97 | :101DC000910539F48881998190936F0080936E001A
98 | :101DD00003C0805C974138F488819981D0DE12502D
99 | :101DE00011F02296DFCF80917000909171008F7377
100 | :101DF0009070892B39F4809168008260809368002C
101 | :101E000010926100109282008091600084FF3CC0BB
102 | :101E1000809161008F3FC1F1182F893008F018E0E0
103 | :101E2000811B809361008091720098E889278093DC
104 | :101E300072001123E1F0E0918000F0918100809127
105 | :101E40006B0086FF09C0912FA3E7B0E084918D93CA
106 | :101E500031969150D9F707C0912FA3E7B0E0819157
107 | :101E60008D939150E1F7F0938100E093800083E738
108 | :101E700090E0612FFDDC612F6C5F6C3019F08FEF0B
109 | :101E8000809361006093600094E186B3887131F4BF
110 | :101E90009150D9F71092830010927D0010E09923A1
111 | :101EA00009F411E080916A00811739F0112319F4C7
112 | :101EB000F89456D0789410936A008CE991E00197D9
113 | :101EC000F1F780916600909167000196909367000A
114 | :101ED0008093660080916800182F80FF14C0F894EA
115 | :101EE000E0ECF7E1E054F04083E080935700E895A0
116 | :101EF00007B600FCFDCF3097A9F710927100109241
117 | :101F0000700072DE789411FF0FC08AE390E20197AF
118 | :101F1000F1F780917000909171008F739070892B10
119 | :101F200011F062DE01C019DE12FD0AC010926800D5
120 | :101F300080916600909167008055934C08F48BCE99
121 | :101F400082E291EA0197F1F7F8941BBE15BA10925C
122 | :101F50005F0210925E0232CCDF91CF911F91089503
123 | :101F6000FF920F931F93CF93DF9380E8F82E00E04A
124 | :101F7000C0E0D0E0102F1F0D11BF7EDC29E08433BC
125 | :101F800092070CF0102FF6942196C830D10511F06D
126 | :101F9000012FF0CF115011BF1F5F012FEC0110C0B6
127 | :101FA0006BDC8453994097FF03C0909581959F4FB8
128 | :101FB0008C179D0714F401B7EC0181B78F5F81BFC7
129 | :101FC00021B730E0812F90E001968217930744F704
130 | :101FD00001BFDF91CF911F910F91FF900895F89469
131 | :021FE000FFCF31
132 | :061FE2005AFF17BC400885
133 | :04000003000017C022
134 | :00000001FF
135 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/micronucleus-1.06-jumper-v2.hex:
--------------------------------------------------------------------------------
1 | :1017800022C040C06CC03EC03DC03CC03BC03AC05F
2 | :1017900039C038C037C036C035C034C033C0040388
3 | :1017A000090412011001FF000008D01653070601BA
4 | :1017B000000000010902120001010080320904004A
5 | :1017C00000000000000011241FBECFE5D2E0DEBF04
6 | :1017D000CDBF00EB0F9307E00F9310E0A0E6B0E061
7 | :1017E000EEEDFFE102C005900D92A636B107D9F7E4
8 | :1017F00010E0A6E6B0E001C01D92AC39B107E1F7F8
9 | :10180000E7D1EBC3BDCFA82FB92F80E090E041E036
10 | :1018100050EA609530E009C02D9182279795879511
11 | :1018200010F084279527305EC8F36F5FA8F3089502
12 | :10183000EADF8D939D930895A6E088279927AA95BE
13 | :1018400069F00197E1F3B399FCCFB39BFECF81E040
14 | :101850009927A6B3019611F0A871D9F70895CF93EF
15 | :10186000CFB7CF93C0915F02C03B21F4C0915E021D
16 | :10187000C73021F0CF91CFBFCF9181CFCC27C39577
17 | :10188000B39BE9F7B39B0BC0B39B09C0B39B07C0E5
18 | :10189000B39B05C0B39B03C0B39B01C0D3C00F92E1
19 | :1018A000DF93C0917F00DD27CA57DF4F012EB39B26
20 | :1018B00003C0DF910F90E6CF2F930F931F934F93A9
21 | :1018C0002FEF4F6F06B303FB20F95F933F9350E078
22 | :1018D0003BE065C016B30126502953FDC89556B3A9
23 | :1018E000012703FB25F92F7306B3B1F0502710270A
24 | :1018F00013FB26F906B22230F0F000C016B3012720
25 | :1019000003FB27F90126502906B22430E8F54F776A
26 | :10191000206816B30000F6CF50274F7D206206B234
27 | :10192000102F000000C006B300265029102713FB1B
28 | :1019300026F906B2E2CF4F7B06B3206400C0DACFAF
29 | :1019400001265029187106B269F14E7F2160012FDE
30 | :1019500016B328C0002650294D7F06B22260102FF2
31 | :1019600029C0012650294B7F06B22460012F2DC0CB
32 | :1019700016B301265029477F2860000006B22EC00A
33 | :101980004F7E06B3206130C0422706B3499300263C
34 | :101990005029102706B24FEF13FB20F9297F16B309
35 | :1019A00079F2187159F10126502906B2012703FB7B
36 | :1019B00021F9237F06B371F2002650293150D0F06F
37 | :1019C00006B2102713FB22F9277E16B351F2012627
38 | :1019D0005029012703FB06B223F92F7C49F20000AE
39 | :1019E00006B3102713FB24F90026502906B22F79DD
40 | :1019F00039F270CF10E21ABF002717C03B50319563
41 | :101A0000C31BD04010E21ABF0881033CF9F00B342D
42 | :101A1000E9F020917D001981110F1213EDCF0936E5
43 | :101A200051F10D3211F0013E39F7009384003F91DE
44 | :101A30005F914F911F910F912F91DF910F90CAB736
45 | :101A4000C5FD1DCFCF91CFBFCF91189520918400B8
46 | :101A5000222369F310918200112321F5343022F101
47 | :101A60003093820020937E0010917F003BE0311B79
48 | :101A700030937F0019C00091820001309CF40AE588
49 | :101A80003091600034FD11C000936000C2E7D0E0E7
50 | :101A900010C0052710E000C021C0052710E0C89540
51 | :101AA00008BB14C03AE501C032ED032EC0E0D0E01F
52 | :101AB00032E017B31861C39A08B317BB58E120E8A6
53 | :101AC0004FEF20FF052708BB279517951C3F28F7E8
54 | :101AD00000004552B0F720FF0527279508BB179552
55 | :101AE0001C3FB8F629913A9561F7077E1091830063
56 | :101AF000110F08BBC250D04011F010937D0010E2CE
57 | :101B00001ABF086017B3177E402F477E54E05A95DE
58 | :101B1000F1F708BB17BB48BB8ACF81E0809369000F
59 | :101B2000F894E0917000F0917100329785E0809315
60 | :101B30005700E89507B600FCFDCF789408959C0106
61 | :101B4000E0917000F0917100309789F1E430F10577
62 | :101B5000F1F087E1EC37F80739F420916C0030910F
63 | :101B60006D002E5B3B4F15C087E1EE37F80739F467
64 | :101B700020916E0030916F002D5B3B4F0AC087E1D2
65 | :101B8000EA37F80731F481B7282F30E002C02FEB95
66 | :101B90003BECF89481E0090180935700E89511240B
67 | :101BA00078943296F0937100E0937000089581E18B
68 | :101BB00080935700E895EBCF8FEF9FEFC0DF8091C8
69 | :101BC0007000909171008F739070892BA9F7A5CF49
70 | :101BD0001F93CF93DF9388E10FB6F89481BD11BCBA
71 | :101BE0000FBEE0E0F0E0859194918F5B9B4C39F45F
72 | :101BF000E4E0F0E0859194918F5B9B4C09F0DCDF91
73 | :101C00001092710010927000C59A82E291EA0197D9
74 | :101C1000F1F7B5997DC1AC9A8BB780628BBFBB9A47
75 | :101C200088E893E1ECE9F1E03197F1F70197D1F71A
76 | :101C3000BB98789410918200135017FDD4C0809106
77 | :101C40007F00CCE0D0E0C81BD109CA57DF4F80919C
78 | :101C50007E008D3209F091C0183009F0C2C083ECCB
79 | :101C6000809372008AE58093600010926B00288157
80 | :101C7000822F80769981882329F110926700109233
81 | :101C80006600992341F482E690E09093810080936E
82 | :101C9000800024E068C0913051F48C819D81909344
83 | :101CA00071008093700027FD59C09FEF58C080914C
84 | :101CB0006800923011F4816001C0846080936800F4
85 | :101CC00020E051C08A8110927B00992331F4109258
86 | :101CD0007C008BE790E022E03CC0953019F48093C3
87 | :101CE000830034C0963011F58B81813019F482EA7B
88 | :101CF00097E104C0823041F484EB97E19093810036
89 | :101D00008093800022E10EC0833059F48A818823B9
90 | :101D100041F48EE997E1909381008093800024E064
91 | :101D200001C020E080E480936B001DC0983019F45E
92 | :101D300085E890E009C0993019F48093850006C0C9
93 | :101D40009A3021F48BE790E021E003C08BE790E02C
94 | :101D500020E0909381008093800005C09E8180E800
95 | :101D600080936B0007C08F81882319F49E8192179E
96 | :101D700008F0922F9093610034C080916B0087FF30
97 | :101D800030C08091700090917100009739F4888183
98 | :101D9000998190936D0080936C000DC08430910503
99 | :101DA00039F48881998190936F0080936E0003C00D
100 | :101DB0008058974138F488819981C1DE125011F022
101 | :101DC0002296DFCF80917000909171008F73907098
102 | :101DD000892B39F4809168008260809368001092AA
103 | :101DE0006100109282008091600084FF3CC080916D
104 | :101DF00061008F3FC1F1182F893008F018E0811B76
105 | :101E0000809361008091720098E889278093720026
106 | :101E10001123E1F0E0918000F091810080916B004E
107 | :101E200086FF09C0912FA3E7B0E084918D9331968E
108 | :101E30009150D9F707C0912FA3E7B0E081918D931E
109 | :101E40009150E1F7F0938100E093800083E790E008
110 | :101E5000612FEEDC612F6C5F6C3019F08FEF809397
111 | :101E600061006093600094E186B3887131F4915011
112 | :101E7000D9F71092830010927D0010E0992309F4A5
113 | :101E800011E080916A00811739F0112319F4F89458
114 | :101E900065D0789410936A008CE991E00197F1F78E
115 | :101EA00080916600909167000196909367008093FF
116 | :101EB000660080916800182F80FF14C0F894E0E855
117 | :101EC000F7E1E054F04083E080935700E89507B6CF
118 | :101ED00000FCFDCF3097A9F71092710010927000AE
119 | :101EE0006BDE789411FF0FC08AE390E20197F1F75F
120 | :101EF00080917000909171008F739070892B11F018
121 | :101F00005BDE01C00ADE12FD03C01092680092CEB3
122 | :101F100082E291EA0197F1F718BAF8941BBE15BA5C
123 | :101F200010925F0210925E02EAE7F7E19491892F26
124 | :101F300081508E3F20F00DC081B7815081BF81B7A5
125 | :101F40009817D0F303C081B78F5F81BF81B789171E
126 | :101F5000D0F314CCDF91CF911F910895FF920F938E
127 | :101F60001F93CF93DF9380E8F82E00E0C0E0D0E02D
128 | :101F7000102F1F0D11BF60DC29E0843392070CF095
129 | :101F8000102FF6942196C830D10511F0012FF0CF13
130 | :101F9000115011BF1F5F012FEC0110C04DDC8453A5
131 | :101FA000994097FF03C0909581959F4F8C179D078F
132 | :101FB00014F401B7EC0181B78F5F81BF21B730E026
133 | :101FC000812F90E001968217930744F701BFDF91BC
134 | :0E1FD000CF911F910F91FF900895F894FFCFCD
135 | :061FDE005AFF177C4008C9
136 | :040000030000178062
137 | :00000001FF
138 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/micronucleus-1.06.hex:
--------------------------------------------------------------------------------
1 | :1017800022C040C06CC03EC03DC03CC03BC03AC05F
2 | :1017900039C038C037C036C035C034C033C0040388
3 | :1017A000090412011001FF000008D01653070601BA
4 | :1017B000000000010902120001010080320904004A
5 | :1017C00000000000000011241FBECFE5D2E0DEBF04
6 | :1017D000CDBF00EB0F9307E00F9310E0A0E6B0E061
7 | :1017E000ECEDFFE102C005900D92A636B107D9F7E6
8 | :1017F00010E0A6E6B0E001C01D92AC39B107E1F7F8
9 | :10180000E7D1EAC3BDCFA82FB92F80E090E041E037
10 | :1018100050EA609530E009C02D9182279795879511
11 | :1018200010F084279527305EC8F36F5FA8F3089502
12 | :10183000EADF8D939D930895A6E088279927AA95BE
13 | :1018400069F00197E1F3B399FCCFB39BFECF81E040
14 | :101850009927A6B3019611F0A871D9F70895CF93EF
15 | :10186000CFB7CF93C0915F02C03B21F4C0915E021D
16 | :10187000C73021F0CF91CFBFCF9181CFCC27C39577
17 | :10188000B39BE9F7B39B0BC0B39B09C0B39B07C0E5
18 | :10189000B39B05C0B39B03C0B39B01C0D3C00F92E1
19 | :1018A000DF93C0917F00DD27CA57DF4F012EB39B26
20 | :1018B00003C0DF910F90E6CF2F930F931F934F93A9
21 | :1018C0002FEF4F6F06B303FB20F95F933F9350E078
22 | :1018D0003BE065C016B30126502953FDC89556B3A9
23 | :1018E000012703FB25F92F7306B3B1F0502710270A
24 | :1018F00013FB26F906B22230F0F000C016B3012720
25 | :1019000003FB27F90126502906B22430E8F54F776A
26 | :10191000206816B30000F6CF50274F7D206206B234
27 | :10192000102F000000C006B300265029102713FB1B
28 | :1019300026F906B2E2CF4F7B06B3206400C0DACFAF
29 | :1019400001265029187106B269F14E7F2160012FDE
30 | :1019500016B328C0002650294D7F06B22260102FF2
31 | :1019600029C0012650294B7F06B22460012F2DC0CB
32 | :1019700016B301265029477F2860000006B22EC00A
33 | :101980004F7E06B3206130C0422706B3499300263C
34 | :101990005029102706B24FEF13FB20F9297F16B309
35 | :1019A00079F2187159F10126502906B2012703FB7B
36 | :1019B00021F9237F06B371F2002650293150D0F06F
37 | :1019C00006B2102713FB22F9277E16B351F2012627
38 | :1019D0005029012703FB06B223F92F7C49F20000AE
39 | :1019E00006B3102713FB24F90026502906B22F79DD
40 | :1019F00039F270CF10E21ABF002717C03B50319563
41 | :101A0000C31BD04010E21ABF0881033CF9F00B342D
42 | :101A1000E9F020917D001981110F1213EDCF0936E5
43 | :101A200051F10D3211F0013E39F7009384003F91DE
44 | :101A30005F914F911F910F912F91DF910F90CAB736
45 | :101A4000C5FD1DCFCF91CFBFCF91189520918400B8
46 | :101A5000222369F310918200112321F5343022F101
47 | :101A60003093820020937E0010917F003BE0311B79
48 | :101A700030937F0019C00091820001309CF40AE588
49 | :101A80003091600034FD11C000936000C2E7D0E0E7
50 | :101A900010C0052710E000C021C0052710E0C89540
51 | :101AA00008BB14C03AE501C032ED032EC0E0D0E01F
52 | :101AB00032E017B31861C39A08B317BB58E120E8A6
53 | :101AC0004FEF20FF052708BB279517951C3F28F7E8
54 | :101AD00000004552B0F720FF0527279508BB179552
55 | :101AE0001C3FB8F629913A9561F7077E1091830063
56 | :101AF000110F08BBC250D04011F010937D0010E2CE
57 | :101B00001ABF086017B3177E402F477E54E05A95DE
58 | :101B1000F1F708BB17BB48BB8ACF81E0809369000F
59 | :101B2000F894E0917000F0917100329785E0809315
60 | :101B30005700E89507B600FCFDCF789408959C0106
61 | :101B4000E0917000F0917100309789F1E430F10577
62 | :101B5000F1F087E1EC37F80739F420916C0030910F
63 | :101B60006D002E5B3B4F15C087E1EE37F80739F467
64 | :101B700020916E0030916F002D5B3B4F0AC087E1D2
65 | :101B8000EA37F80731F481B7282F30E002C02FEB95
66 | :101B90003BECF89481E0090180935700E89511240B
67 | :101BA00078943296F0937100E0937000089581E18B
68 | :101BB00080935700E895EBCF8FEF9FEFC0DF8091C8
69 | :101BC0007000909171008F739070892BA9F7A5CF49
70 | :101BD0001F93CF93DF9388E10FB6F89481BD11BCBA
71 | :101BE0000FBEE0E0F0E0859194918F5B9B4C39F45F
72 | :101BF000E4E0F0E0859194918F5B9B4C09F0DCDF91
73 | :101C00001092710010927000AC9A8BB780628BBFFB
74 | :101C1000BB9A88E893E1ECE9F1E03197F1F701979D
75 | :101C2000D1F7BB98789410918200135017FDD4C05F
76 | :101C300080917F00CCE0D0E0C81BD109CA57DF4FAC
77 | :101C400080917E008D3209F091C0183009F0C2C039
78 | :101C500083EC809372008AE58093600010926B00A1
79 | :101C60002881822F80769981882329F1109267003C
80 | :101C700010926600992341F482E690E090938100EF
81 | :101C80008093800024E068C0913051F48C819D8164
82 | :101C9000909371008093700027FD59C09FEF58C04A
83 | :101CA00080916800923011F4816001C0846080935B
84 | :101CB000680020E051C08A8110927B00992331F4A2
85 | :101CC00010927C008BE790E022E03CC0953019F444
86 | :101CD0008093830034C0963011F58B81813019F4E4
87 | :101CE00082EA97E104C0823041F484EB97E190935B
88 | :101CF00081008093800022E10EC0833059F48A81F4
89 | :101D0000882341F48EE997E19093810080938000CD
90 | :101D100024E001C020E080E480936B001DC0983077
91 | :101D200019F485E890E009C0993019F48093850092
92 | :101D300006C09A3021F48BE790E021E003C08BE7E6
93 | :101D400090E020E0909381008093800005C09E8108
94 | :101D500080E880936B0007C08F81882319F49E81EF
95 | :101D6000921708F0922F9093610034C080916B001D
96 | :101D700087FF30C08091700090917100009739F416
97 | :101D80008881998190936D0080936C000DC08430A0
98 | :101D9000910539F48881998190936F0080936E004A
99 | :101DA00003C08058974138F488819981C8DE125069
100 | :101DB00011F02296DFCF80917000909171008F73A7
101 | :101DC0009070892B39F4809168008260809368005C
102 | :101DD00010926100109282008091600084FF3CC0EC
103 | :101DE000809161008F3FC1F1182F893008F018E011
104 | :101DF000811B809361008091720098E8892780930D
105 | :101E000072001123E1F0E0918000F0918100809157
106 | :101E10006B0086FF09C0912FA3E7B0E084918D93FA
107 | :101E200031969150D9F707C0912FA3E7B0E0819187
108 | :101E30008D939150E1F7F0938100E093800083E768
109 | :101E400090E0612FF5DC612F6C5F6C3019F08FEF43
110 | :101E5000809361006093600094E186B3887131F4EF
111 | :101E60009150D9F71092830010927D0010E09923D1
112 | :101E700009F411E080916A00811739F0112319F4F7
113 | :101E8000F8946BD0789410936A008CE991E00197F4
114 | :101E9000F1F780916600909167000196909367003A
115 | :101EA0008093660080916800182F80FF14C0F8941A
116 | :101EB000E0E8F7E1E054F04083E080935700E895D4
117 | :101EC00007B600FCFDCF3097A9F710927100109271
118 | :101ED000700072DE789411FF0FC08AE390E20197E0
119 | :101EE000F1F780917000909171008F739070892B41
120 | :101EF00011F062DE01C011DE12FD0AC0109268000E
121 | :101F000080916600909167008055934C08F48BCEC9
122 | :101F100082E291EA0197F1F7F8941BBE15BA10928C
123 | :101F20005F0210925E02EAE7F7E19491892F8150F7
124 | :101F30008E3F20F00DC081B7815081BF81B79817C7
125 | :101F4000D0F303C081B78F5F81BF81B78917D0F30A
126 | :101F500015CCDF91CF911F910895FF920F931F939E
127 | :101F6000CF93DF9380E8F82E00E0C0E0D0E0102FA0
128 | :101F70001F0D11BF61DC29E0843392070CF0102F94
129 | :101F8000F6942196C830D10511F0012FF0CF1150F1
130 | :101F900011BF1F5F012FEC0110C04EDC845399402C
131 | :101FA00097FF03C0909581959F4F8C179D0714F460
132 | :101FB00001B7EC0181B78F5F81BF21B730E0812F7E
133 | :101FC00090E001968217930744F701BFDF91CF910C
134 | :0C1FD0001F910F91FF900895F894FFCF2F
135 | :061FDC005AFF177C4008CB
136 | :040000030000178062
137 | :00000001FF
138 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/micronucleus-1.10-ledpb1.hex:
--------------------------------------------------------------------------------
1 | :0800000057CC56CC8CCC54CC3B
2 | :1018800017C016C04CC014C009021200010100802C
3 | :101890003209040000000000000012011001FF00E6
4 | :1018A0000008D01653070A010000000104030904D0
5 | :1018B00011241FBECFE5D2E0CDBFDEBF00EB0F93FA
6 | :1018C00007E00F9310E0A0E6B0E0EAEDFFE102C010
7 | :1018D00005900D92A636B107D9F720E0A6E6B0E054
8 | :1018E00001C01D92AB39B207E1F7ECC1A82FB92FA7
9 | :1018F00080E090E041E050EA609530E009C02D9131
10 | :1019000082279795879510F084279527305EC8F336
11 | :101910006F5FA8F30895EADF8D939D930895CF93A9
12 | :10192000CFB7CF93C0915F02C03B21F4C0915E025C
13 | :10193000C73021F0CF91CFBFCF91A1CFCC27C39596
14 | :10194000B39BE9F7B39B0BC0B39B09C0B39B07C024
15 | :10195000B39B05C0B39B03C0B39B01C0D3C00F9220
16 | :10196000DF93C0917E00DD27CB57DF4F012EB39B65
17 | :1019700003C0DF910F90E6CF2F930F931F934F93E8
18 | :101980002FEF4F6F06B303FB20F95F933F9350E0B7
19 | :101990003BE065C016B30126502953FDC89556B3E8
20 | :1019A000012703FB25F92F7306B3B1F05027102749
21 | :1019B00013FB26F906B22230F0F000C016B301275F
22 | :1019C00003FB27F90126502906B22430E8F54F77AA
23 | :1019D000206816B30000F6CF50274F7D206206B274
24 | :1019E000102F000000C006B300265029102713FB5B
25 | :1019F00026F906B2E2CF4F7B06B3206400C0DACFEF
26 | :101A000001265029187106B269F14E7F2160012F1D
27 | :101A100016B328C0002650294D7F06B22260102F31
28 | :101A200029C0012650294B7F06B22460012F2DC00A
29 | :101A300016B301265029477F2860000006B22EC049
30 | :101A40004F7E06B3206130C0422706B3499300267B
31 | :101A50005029102706B24FEF13FB20F9297F16B348
32 | :101A600079F2187159F10126502906B2012703FBBA
33 | :101A700021F9237F06B371F2002650293150D0F0AE
34 | :101A800006B2102713FB22F9277E16B351F2012666
35 | :101A90005029012703FB06B223F92F7C49F20000ED
36 | :101AA00006B3102713FB24F90026502906B22F791C
37 | :101AB00039F270CF10E21ABF002717C03B503195A2
38 | :101AC000C31BD04010E21ABF0881033CF9F00B346D
39 | :101AD000E9F020917C001981110F1213EDCF093626
40 | :101AE00051F10D3211F0013E39F7009383003F911F
41 | :101AF0005F914F911F910F912F91DF910F90CAB776
42 | :101B0000C5FD1DCFCF91CFBFCF91189520918300F8
43 | :101B1000222369F310918100112321F5343022F141
44 | :101B20003093810020937D0010917E003BE0311BBB
45 | :101B300030937E0019C00091810001309CF40AE5C9
46 | :101B40003091600034FD11C000936000C1E7D0E027
47 | :101B500010C0052710E000C021C0052710E0C8957F
48 | :101B600008BB14C03AE501C032ED032EC0E0D0E05E
49 | :101B700032E017B31861C39A08B317BB58E120E8E5
50 | :101B80004FEF20FF052708BB279517951C3F28F727
51 | :101B900000004552B0F720FF0527279508BB179591
52 | :101BA0001C3FB8F629913A9561F7077E10918200A3
53 | :101BB000110F08BBC250D04011F010937C0010E20E
54 | :101BC0001ABF086017B3177E402F477E54E05A951E
55 | :101BD000F1F708BB17BB48BB8ACFF8942FEFB0E8EA
56 | :101BE000A0E44AE0B1BF000081EE9CE0B399FECFD3
57 | :101BF000B39BFECF0197B399FDCF97FF03C0BA1BEC
58 | :101C0000819501C0BA0FA69529F4281710F031B7B5
59 | :101C1000282FA1E0415031F731BF0000789408959A
60 | :101C2000F894E0916A00F0916B00329785E0809320
61 | :101C30005700E89578940895E0916A00F0916B0060
62 | :101C4000309729F490936D0080936C0007C0E430C6
63 | :101C5000F10539F490936F0080936E008FE39CEC54
64 | :101C60001CC0EC3728E1F20739F480916C009091A8
65 | :101C70006D008E539C4F11C0EE3728E1F20739F406
66 | :101C800080916E0090916F008D539C4F06C0EA3793
67 | :101C900028E1F20711F481B790E02FB7F89430975C
68 | :101CA00021F431E130935700E89531E00C01309395
69 | :101CB0005700E89511243296F0936B00E0936A0088
70 | :101CC0002FBF089514BE88E10FB6F89481BD11BCF2
71 | :101CD0000FBEC198BB9A88E893E1ECE9F1E0319737
72 | :101CE000F1F70197D1F7BB98AC9A8BB780628BBFA5
73 | :101CF000789400918100035007FDBAC080917E0066
74 | :101D0000CCE0D0E0C81BD109CB57DF4F80917D00DC
75 | :101D10008D3209F08EC0083009F0A8C083EC8093A2
76 | :101D200071008AE580936000109269002881922FEB
77 | :101D300090768981992319F110926700811108C06A
78 | :101D400082E690E09093800080937F0014E067C06B
79 | :101D5000813051F48C819D8190936B0080936A0057
80 | :101D600027FD58C01FEF57C090916800823011F4D2
81 | :101D7000916001C094609093680010E050C09A8117
82 | :101D800010927A00811106C010927B008AE790E0E1
83 | :101D900012E03BC0853019F4909382002CC086304D
84 | :101DA00009F58B81813019F48AE998E104C0823009
85 | :101DB00041F488E898E19093800080937F0012E1DD
86 | :101DC0000DC0833051F4911108C08CEA98E19093D2
87 | :101DD000800080937F0014E001C010E080E48093D5
88 | :101DE00069001DC0883059F0893019F4909384003F
89 | :101DF00002C08A3039F08AE790E010E006C084E83B
90 | :101E000090E002C08AE790E011E090938000809318
91 | :101E10007F0005C01E8180E88093690007C08F8124
92 | :101E2000811104C08E81811708F4182F109361006E
93 | :101E30001DC08091690087FF19C080916A00909150
94 | :101E40006B008038984128F080916A008F7339F0D8
95 | :101E50000DC089919991F0DE025079F7F5CF80910C
96 | :101E60006800826080936800109261001092810087
97 | :101E70008091600084FF43C0809161008F3F09F42E
98 | :101E80003EC0082F893008F008E0801B8093610075
99 | :101E90008091710098E8892780937100002319F1DF
100 | :101EA000E0917F00F09180008091690086FF0BC077
101 | :101EB000A2E7B0E084918D93319682E790E0800FA5
102 | :101EC0008A13F8CF0CC0CF01A2E7B0E0FC0121914A
103 | :101ED000CF012D9322E730E0200F2A13F7CFF093A4
104 | :101EE0008000E0937F00602F82E790E014DD0C5FBC
105 | :101EF0000C3019F08FEF809361000093600084E153
106 | :101F000096B3987131F48150D9F7109282001092F3
107 | :101F10007C0001E0811100E080917000801739F0B1
108 | :101F2000011103C01092670058DE009370008CE925
109 | :101F300091E00197F1F70091680000FF17C0F89455
110 | :101F4000E0E8F8E1E054F10983E080935700E89578
111 | :101F50003097C1F710926B0010926A0088E0F82E5B
112 | :101F60008FEF9FEF69DEFA94D9F75ADE01FF05C0C3
113 | :101F70008AE390E20197F1F753DE02FF13C0B998AC
114 | :101F800082E291EA0197F1F7F894BB9A1BBE15BA69
115 | :101F900010925F02EAE7F8E1E4918E2F81508E3FC4
116 | :101FA000C0F019C010926800809167008D7011F028
117 | :101FB000B99801C0B99A8091660090916700019626
118 | :101FC000909367008093660080369A4E08F491CE15
119 | :0A1FD000D6CFE1BF000052CC22CFB3
120 | :061FDA005AFF187A4008CE
121 | :040000030000188061
122 | :00000001FF
123 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/micronucleus-1.10.hex:
--------------------------------------------------------------------------------
1 | :0800000057CC56CC8CCC54CC3B
2 | :1018800017C016C04CC014C009021200010100802C
3 | :101890003209040000000000000012011001FF00E6
4 | :1018A0000008D01653070A010000000104030904D0
5 | :1018B00011241FBECFE5D2E0CDBFDEBF00EB0F93FA
6 | :1018C00007E00F9310E0A0E6B0E0E8ECFFE102C013
7 | :1018D00005900D92A636B107D9F720E0A6E6B0E054
8 | :1018E00001C01D92AB39B207E1F7ECC1A82FB92FA7
9 | :1018F00080E090E041E050EA609530E009C02D9131
10 | :1019000082279795879510F084279527305EC8F336
11 | :101910006F5FA8F30895EADF8D939D930895CF93A9
12 | :10192000CFB7CF93C0915F02C03B21F4C0915E025C
13 | :10193000C73021F0CF91CFBFCF91A1CFCC27C39596
14 | :10194000B39BE9F7B39B0BC0B39B09C0B39B07C024
15 | :10195000B39B05C0B39B03C0B39B01C0D3C00F9220
16 | :10196000DF93C0917E00DD27CB57DF4F012EB39B65
17 | :1019700003C0DF910F90E6CF2F930F931F934F93E8
18 | :101980002FEF4F6F06B303FB20F95F933F9350E0B7
19 | :101990003BE065C016B30126502953FDC89556B3E8
20 | :1019A000012703FB25F92F7306B3B1F05027102749
21 | :1019B00013FB26F906B22230F0F000C016B301275F
22 | :1019C00003FB27F90126502906B22430E8F54F77AA
23 | :1019D000206816B30000F6CF50274F7D206206B274
24 | :1019E000102F000000C006B300265029102713FB5B
25 | :1019F00026F906B2E2CF4F7B06B3206400C0DACFEF
26 | :101A000001265029187106B269F14E7F2160012F1D
27 | :101A100016B328C0002650294D7F06B22260102F31
28 | :101A200029C0012650294B7F06B22460012F2DC00A
29 | :101A300016B301265029477F2860000006B22EC049
30 | :101A40004F7E06B3206130C0422706B3499300267B
31 | :101A50005029102706B24FEF13FB20F9297F16B348
32 | :101A600079F2187159F10126502906B2012703FBBA
33 | :101A700021F9237F06B371F2002650293150D0F0AE
34 | :101A800006B2102713FB22F9277E16B351F2012666
35 | :101A90005029012703FB06B223F92F7C49F20000ED
36 | :101AA00006B3102713FB24F90026502906B22F791C
37 | :101AB00039F270CF10E21ABF002717C03B503195A2
38 | :101AC000C31BD04010E21ABF0881033CF9F00B346D
39 | :101AD000E9F020917C001981110F1213EDCF093626
40 | :101AE00051F10D3211F0013E39F7009383003F911F
41 | :101AF0005F914F911F910F912F91DF910F90CAB776
42 | :101B0000C5FD1DCFCF91CFBFCF91189520918300F8
43 | :101B1000222369F310918100112321F5343022F141
44 | :101B20003093810020937D0010917E003BE0311BBB
45 | :101B300030937E0019C00091810001309CF40AE5C9
46 | :101B40003091600034FD11C000936000C1E7D0E027
47 | :101B500010C0052710E000C021C0052710E0C8957F
48 | :101B600008BB14C03AE501C032ED032EC0E0D0E05E
49 | :101B700032E017B31861C39A08B317BB58E120E8E5
50 | :101B80004FEF20FF052708BB279517951C3F28F727
51 | :101B900000004552B0F720FF0527279508BB179591
52 | :101BA0001C3FB8F629913A9561F7077E10918200A3
53 | :101BB000110F08BBC250D04011F010937C0010E20E
54 | :101BC0001ABF086017B3177E402F477E54E05A951E
55 | :101BD000F1F708BB17BB48BB8ACFF8942FEFB0E8EA
56 | :101BE000A0E44AE0B1BF000081EE9CE0B399FECFD3
57 | :101BF000B39BFECF0197B399FDCF97FF03C0BA1BEC
58 | :101C0000819501C0BA0FA69529F4281710F031B7B5
59 | :101C1000282FA1E0415031F731BF0000789408959A
60 | :101C2000F894E0916A00F0916B00329785E0809320
61 | :101C30005700E89578940895E0916A00F0916B0060
62 | :101C4000309729F490936D0080936C0007C0E430C6
63 | :101C5000F10539F490936F0080936E008FE39CEC54
64 | :101C60001CC0EC3728E1F20739F480916C009091A8
65 | :101C70006D008E539C4F11C0EE3728E1F20739F406
66 | :101C800080916E0090916F008D539C4F06C0EA3793
67 | :101C900028E1F20711F481B790E02FB7F89430975C
68 | :101CA00021F431E130935700E89531E00C01309395
69 | :101CB0005700E89511243296F0936B00E0936A0088
70 | :101CC0002FBF089514BE88E10FB6F89481BD11BCF2
71 | :101CD0000FBEBB9A88E893E1ECE9F1E03197F1F7A8
72 | :101CE0000197D1F7BB98AC9A8BB780628BBF789481
73 | :101CF00000918100035007FDBAC080917E00CCE0C6
74 | :101D0000D0E0C81BD109CB57DF4F80917D008D32C9
75 | :101D100009F08EC0083009F0A8C083EC80937100F0
76 | :101D20008AE580936000109269002881922F907656
77 | :101D30008981992319F110926700811108C082E608
78 | :101D400090E09093800080937F0014E067C0813022
79 | :101D500051F48C819D8190936B0080936A0027FDE4
80 | :101D600058C01FEF57C090916800823011F4916005
81 | :101D700001C094609093680010E050C09A81109266
82 | :101D80007A00811106C010927B008AE790E012E091
83 | :101D90003BC0853019F4909382002CC0863009F541
84 | :101DA0008B81813019F48AE998E104C0823041F4D2
85 | :101DB00088E898E19093800080937F0012E10DC045
86 | :101DC000833051F4911108C08CEA98E1909380001F
87 | :101DD00080937F0014E001C010E080E480936900EC
88 | :101DE0001DC0883059F0893019F49093840002C0E6
89 | :101DF0008A3039F08AE790E010E006C084E890E08D
90 | :101E000002C08AE790E011E09093800080937F0009
91 | :101E100005C01E8180E88093690007C08F81811111
92 | :101E200004C08E81811708F4182F109361001DC023
93 | :101E30008091690087FF19C080916A0090916B00C2
94 | :101E40008038984128F080916A008F7339F00DC076
95 | :101E500089919991F1DE025079F7F5CF8091680070
96 | :101E600082608093680010926100109281008091DE
97 | :101E7000600084FF43C0809161008F3F09F43EC041
98 | :101E8000082F893008F008E0801B80936100809162
99 | :101E9000710098E8892780937100002319F1E0917F
100 | :101EA0007F00F09180008091690086FF0BC0A2E75F
101 | :101EB000B0E084918D93319682E790E0800F8A1391
102 | :101EC000F8CF0CC0CF01A2E7B0E0FC012191CF0117
103 | :101ED0002D9322E730E0200F2A13F7CFF0938000F4
104 | :101EE000E0937F00602F82E790E015DD0C5F0C30FF
105 | :101EF00019F08FEF809361000093600084E196B346
106 | :101F0000987131F48150D9F71092820010927C00C0
107 | :101F100001E0811100E080917000801739F001111B
108 | :101F200003C01092670059DE009370008CE991E0C5
109 | :101F30000197F1F70091680000FF17C0F894E0E8FE
110 | :101F4000F8E1E054F10983E080935700E895309779
111 | :101F5000C1F710926B0010926A0088E0F82E8FEFA4
112 | :101F60009FEF6ADEFA94D9F75BDE01FF05C08AE3D2
113 | :101F700090E20197F1F754DE02FF12C082E291EA8B
114 | :101F80000197F1F7F894BB9A1BBE15BA10925F0245
115 | :101F9000EAE7F8E1E4918E2F81508E3F88F012C07D
116 | :101FA000109268008091660090916700019690936E
117 | :101FB00067008093660080369A4E08F499CEDECF93
118 | :081FC000E1BF00005BCC2ACF59
119 | :061FC8005AFF187A4008E0
120 | :040000030000188061
121 | :00000001FF
122 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/micronucleus-1.11-entry_ext_reset.hex:
--------------------------------------------------------------------------------
1 | :0800000077CC76CCACCC74CCBB
2 | :1018C00017C016C04CC014C00902120001010080EC
3 | :1018D0003209040000000000000012011001FF00A6
4 | :1018E0000008D01653070B0100000001040309048F
5 | :1018F00011241FBECFE5D2E0CDBFDEBF00EB0F93BA
6 | :1019000007E00F9310E0A0E6B0E0E8EEFFE102C0D0
7 | :1019100005900D92A636B107D9F720E0A6E6B0E013
8 | :1019200001C01D92A639B207E1F7E2C1A82FB92F75
9 | :1019300080E090E041E050EA609530E009C02D91F0
10 | :1019400082279795879510F084279527305EC8F3F6
11 | :101950006F5FA8F30895EADF8D939D930895CF9369
12 | :10196000CFB7CF93C0915F02C03B21F4C0915E021C
13 | :10197000C73021F0CF91CFBFCF91A1CFCC27C39556
14 | :10198000B39BE9F7B39B0BC0B39B09C0B39B07C0E4
15 | :10199000B39B05C0B39B03C0B39B01C0D3C00F92E0
16 | :1019A000DF93C0917900DD27C058DF4F012EB39B34
17 | :1019B00003C0DF910F90E6CF2F930F931F934F93A8
18 | :1019C0002FEF4F6F06B303FB20F95F933F9350E077
19 | :1019D0003BE065C016B30126502953FDC89556B3A8
20 | :1019E000012703FB25F92F7306B3B1F05027102709
21 | :1019F00013FB26F906B22230F0F000C016B301271F
22 | :101A000003FB27F90126502906B22430E8F54F7769
23 | :101A1000206816B30000F6CF50274F7D206206B233
24 | :101A2000102F000000C006B300265029102713FB1A
25 | :101A300026F906B2E2CF4F7B06B3206400C0DACFAE
26 | :101A400001265029187106B269F14E7F2160012FDD
27 | :101A500016B328C0002650294D7F06B22260102FF1
28 | :101A600029C0012650294B7F06B22460012F2DC0CA
29 | :101A700016B301265029477F2860000006B22EC009
30 | :101A80004F7E06B3206130C0422706B3499300263B
31 | :101A90005029102706B24FEF13FB20F9297F16B308
32 | :101AA00079F2187159F10126502906B2012703FB7A
33 | :101AB00021F9237F06B371F2002650293150D0F06E
34 | :101AC00006B2102713FB22F9277E16B351F2012626
35 | :101AD0005029012703FB06B223F92F7C49F20000AD
36 | :101AE00006B3102713FB24F90026502906B22F79DC
37 | :101AF00039F270CF10E21ABF002717C03B50319562
38 | :101B0000C31BD04010E21ABF0881033CF9F00B342C
39 | :101B1000E9F0209177001981110F1213EDCF0936EA
40 | :101B200051F10D3211F0013E39F700937E003F91E3
41 | :101B30005F914F911F910F912F91DF910F90CAB735
42 | :101B4000C5FD1DCFCF91CFBFCF91189520917E00BD
43 | :101B5000222369F310917C00112321F5343022F106
44 | :101B600030937C0020937800109179003BE0311B8A
45 | :101B70003093790019C000917C0001309CF40AE593
46 | :101B80003091600034FD11C000936000CCE6D0E0DD
47 | :101B900010C0052710E000C021C0052710E0C8953F
48 | :101BA00008BB14C03AE501C032ED032EC0E0D0E01E
49 | :101BB00032E017B31861C39A08B317BB58E120E8A5
50 | :101BC0004FEF20FF052708BB279517951C3F28F7E7
51 | :101BD00000004552B0F720FF0527279508BB179551
52 | :101BE0001C3FB8F629913A9561F7077E10917D0068
53 | :101BF000110F08BBC250D04011F01093770010E2D3
54 | :101C00001ABF086017B3177E402F477E54E05A95DD
55 | :101C1000F1F708BB17BB48BB8ACFF8942FEFB0E8A9
56 | :101C2000A0E44AE0B1BF000081EE9CE0B399FECF92
57 | :101C3000B39BFECF0197B399FDCF97FF03C0BA1BAB
58 | :101C4000819501C0BA0FA69529F4281710F031B775
59 | :101C5000282FA1E0415031F731BF0000789408955A
60 | :101C6000F894F201329785E080935700E8957894D4
61 | :101C70000895F201309729F49093680080936700EB
62 | :101C800007C0E430F10539F490936A00809369004D
63 | :101C90008FE59CEC1FC02CEB421628E1520639F46C
64 | :101CA00080916700909168008E559C4F13C02EEB79
65 | :101CB000421628E1520639F48091690090916A0039
66 | :101CC0008D559C4F07C02AEB421628E1520611F4AD
67 | :101CD00081B790E02FB7F89431E00C0130935700B2
68 | :101CE000E89511242F0182E0480E511C2FBF089562
69 | :101CF00004B601FC14C0EDEBF8E1E491EF3F79F09C
70 | :101D0000F894BB9A1BBE15BA10925F02EAEBF8E199
71 | :101D1000E4918E2F81508E3F08F462C163C114BEDE
72 | :101D200088E181BD87E081BDBB9A88E893E1ECE959
73 | :101D3000F1E03197F1F70197D1F7BB98AC9A8BB7E7
74 | :101D400080628BBF7894712C8CE991E00197F1F758
75 | :101D5000A895312C60917C00162F135017FDB2C04E
76 | :101D600080917900CCE0D0E0C81BD109C058DF4F8A
77 | :101D70006150CE01DBDD8E3F9F4409F0A1C0809110
78 | :101D800078008D3209F085C0183009F099C083ECD5
79 | :101D900080936C008AE580936000109266009881C1
80 | :101DA000292F207689812223D1F0712C811108C03E
81 | :101DB00082E690E090937B0080937A0024E05FC0FD
82 | :101DC000813051F481E180935700E8954C805D802B
83 | :101DD00097FD50C02FEF4FC0382E20E050C09A81A1
84 | :101DE00010927500811106C01092760085E790E090
85 | :101DF00022E03BC0853019F490937D002CC08630E2
86 | :101E000009F58B81813019F48AED98E104C08230A4
87 | :101E100041F488EC98E190937B0080937A0022E172
88 | :101E20000DC0833051F4911108C08CEE98E190936D
89 | :101E30007B0080937A0024E001C020E080E480935E
90 | :101E400066001DC0883059F0893019F490937F00E6
91 | :101E500002C08A3039F085E790E020E006C08FE7C5
92 | :101E600090E002C085E790E021E090937B008093B2
93 | :101E70007A0005C02E8180E88093660007C08F81BC
94 | :101E8000811104C08E81821708F4282F20936100ED
95 | :101E900017C08091660087FF13C080EC481688E168
96 | :101EA000580620F0842D8F7339F00AC089919991DA
97 | :101EB000E0DE125091F7F6CF95E0392E10926100D6
98 | :101EC00010927C008091600084FF42C0809161008C
99 | :101ED0008F3F09F43DC0182F893008F018E0811BAE
100 | :101EE0008093610080916C0098E8892780936C0052
101 | :101EF000112311F1E0917A00F0917B00809166004E
102 | :101F000086FF0BC0ADE6B0E084918D9331968DE6EF
103 | :101F100090E0810F8A13F8CF0BC0EF01ADE6B0E07F
104 | :101F200089918D93FE018DE690E0810F8A13F8CFA1
105 | :101F3000F0937B00E0937A00612F8DE690E00BDD5B
106 | :101F40001C5F1C3019F08FEF8093610010936000CC
107 | :101F500084E196B3987131F48150D9F710927D00E5
108 | :101F600010927700C1E08111C0E080916B008C1766
109 | :101F700029F0C11101C051DEC0936B00C30101966D
110 | :101F80003C018035934C11F484E0382E232D33200E
111 | :101F9000E9F08AE390E20197F1F72230A9F4F8948E
112 | :101FA000E0ECF8E1E054F10983E080935700E89514
113 | :101FB0003097C1F7412C512CC8E08FEF9FEF59DECD
114 | :101FC000C150D9F74DDE02C02530E1F384E038126C
115 | :101FD000BBCEEDEBF8E1E491EF3F09F4B5CE90CE46
116 | :081FE000E1BF00006BCCFFCF54
117 | :061FE8005AFF18BA400880
118 | :04000003000018C021
119 | :00000001FF
120 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/micronucleus-1.11-entry_jumper_pb0.hex:
--------------------------------------------------------------------------------
1 | :0800000077CC76CCACCC74CCBB
2 | :1018C00017C016C04CC014C00902120001010080EC
3 | :1018D0003209040000000000000012011001FF00A6
4 | :1018E0000008D01653070B0100000001040309048F
5 | :1018F00011241FBECFE5D2E0CDBFDEBF00EB0F93BA
6 | :1019000007E00F9310E0A0E6B0E0E4EFFFE102C0D3
7 | :1019100005900D92A636B107D9F720E0A6E6B0E013
8 | :1019200001C01D92A639B207E1F7E2C1A82FB92F75
9 | :1019300080E090E041E050EA609530E009C02D91F0
10 | :1019400082279795879510F084279527305EC8F3F6
11 | :101950006F5FA8F30895EADF8D939D930895CF9369
12 | :10196000CFB7CF93C0915F02C03B21F4C0915E021C
13 | :10197000C73021F0CF91CFBFCF91A1CFCC27C39556
14 | :10198000B39BE9F7B39B0BC0B39B09C0B39B07C0E4
15 | :10199000B39B05C0B39B03C0B39B01C0D3C00F92E0
16 | :1019A000DF93C0917900DD27C058DF4F012EB39B34
17 | :1019B00003C0DF910F90E6CF2F930F931F934F93A8
18 | :1019C0002FEF4F6F06B303FB20F95F933F9350E077
19 | :1019D0003BE065C016B30126502953FDC89556B3A8
20 | :1019E000012703FB25F92F7306B3B1F05027102709
21 | :1019F00013FB26F906B22230F0F000C016B301271F
22 | :101A000003FB27F90126502906B22430E8F54F7769
23 | :101A1000206816B30000F6CF50274F7D206206B233
24 | :101A2000102F000000C006B300265029102713FB1A
25 | :101A300026F906B2E2CF4F7B06B3206400C0DACFAE
26 | :101A400001265029187106B269F14E7F2160012FDD
27 | :101A500016B328C0002650294D7F06B22260102FF1
28 | :101A600029C0012650294B7F06B22460012F2DC0CA
29 | :101A700016B301265029477F2860000006B22EC009
30 | :101A80004F7E06B3206130C0422706B3499300263B
31 | :101A90005029102706B24FEF13FB20F9297F16B308
32 | :101AA00079F2187159F10126502906B2012703FB7A
33 | :101AB00021F9237F06B371F2002650293150D0F06E
34 | :101AC00006B2102713FB22F9277E16B351F2012626
35 | :101AD0005029012703FB06B223F92F7C49F20000AD
36 | :101AE00006B3102713FB24F90026502906B22F79DC
37 | :101AF00039F270CF10E21ABF002717C03B50319562
38 | :101B0000C31BD04010E21ABF0881033CF9F00B342C
39 | :101B1000E9F0209177001981110F1213EDCF0936EA
40 | :101B200051F10D3211F0013E39F700937E003F91E3
41 | :101B30005F914F911F910F912F91DF910F90CAB735
42 | :101B4000C5FD1DCFCF91CFBFCF91189520917E00BD
43 | :101B5000222369F310917C00112321F5343022F106
44 | :101B600030937C0020937800109179003BE0311B8A
45 | :101B70003093790019C000917C0001309CF40AE593
46 | :101B80003091600034FD11C000936000CCE6D0E0DD
47 | :101B900010C0052710E000C021C0052710E0C8953F
48 | :101BA00008BB14C03AE501C032ED032EC0E0D0E01E
49 | :101BB00032E017B31861C39A08B317BB58E120E8A5
50 | :101BC0004FEF20FF052708BB279517951C3F28F7E7
51 | :101BD00000004552B0F720FF0527279508BB179551
52 | :101BE0001C3FB8F629913A9561F7077E10917D0068
53 | :101BF000110F08BBC250D04011F01093770010E2D3
54 | :101C00001ABF086017B3177E402F477E54E05A95DD
55 | :101C1000F1F708BB17BB48BB8ACFF8942FEFB0E8A9
56 | :101C2000A0E44AE0B1BF000081EE9CE0B399FECF92
57 | :101C3000B39BFECF0197B399FDCF97FF03C0BA1BAB
58 | :101C4000819501C0BA0FA69529F4281710F031B775
59 | :101C5000282FA1E0415031F731BF0000789408955A
60 | :101C6000F894F201329785E080935700E8957894D4
61 | :101C70000895F201309729F49093680080936700EB
62 | :101C800007C0E430F10539F490936A00809369004D
63 | :101C90008FE59CEC1FC02CEB421628E1520639F46C
64 | :101CA00080916700909168008E559C4F13C02EEB79
65 | :101CB000421628E1520639F48091690090916A0039
66 | :101CC0008D559C4F07C02AEB421628E1520611F4AD
67 | :101CD00081B790E02FB7F89431E00C0130935700B2
68 | :101CE000E89511242F0182E0480E511C2FBF089562
69 | :101CF000B898C09A8DE190E10197F1F7B09B15C0BB
70 | :101D0000EDEBF8E1E491EF3F81F0C098F894BB9AD5
71 | :101D10001BBE15BA10925F02EAEBF8E1E4918E2F38
72 | :101D200081508E3F08F462C163C114BE88E181BD59
73 | :101D300087E081BDBB9A88E893E1ECE9F1E0319757
74 | :101D4000F1F70197D1F7BB98AC9A8BB780628BBF44
75 | :101D50007894712C8CE991E00197F1F7A895312CDA
76 | :101D600060917C00162F135017FDB2C0809179004E
77 | :101D7000CCE0D0E0C81BD109C058DF4F6150CE0184
78 | :101D8000D5DD8E3F9F4409F0A1C0809178008D324F
79 | :101D900009F085C0183009F099C083EC80936C007D
80 | :101DA0008AE580936000109266009881292F207642
81 | :101DB00089812223D1F0712C811108C082E690E044
82 | :101DC00090937B0080937A0024E05FC0813051F4CF
83 | :101DD00081E180935700E8954C805D8097FD50C06D
84 | :101DE0002FEF4FC0382E20E050C09A81109275001E
85 | :101DF000811106C01092760085E790E022E03BC09A
86 | :101E0000853019F490937D002CC0863009F58B81C4
87 | :101E1000813019F48AED98E104C0823041F488ECF5
88 | :101E200098E190937B0080937A0022E10DC083308B
89 | :101E300051F4911108C08CEE98E190937B0080934F
90 | :101E40007A0024E001C020E080E4809366001DC099
91 | :101E5000883059F0893019F490937F0002C08A309D
92 | :101E600039F085E790E020E006C08FE790E002C0FF
93 | :101E700085E790E021E090937B0080937A0005C095
94 | :101E80002E8180E88093660007C08F81811104C095
95 | :101E90008E81821708F4282F2093610017C080914B
96 | :101EA000660087FF13C080EC481688E1580620F0D2
97 | :101EB000842D8F7339F00AC089919991DADE12501E
98 | :101EC00091F7F6CF95E0392E1092610010927C00C8
99 | :101ED0008091600084FF42C0809161008F3F09F4CF
100 | :101EE0003DC0182F893008F018E0811B80936100F5
101 | :101EF00080916C0098E8892780936C00112311F180
102 | :101F0000E0917A00F0917B008091660086FF0BC023
103 | :101F1000ADE6B0E084918D9331968DE690E0810F2F
104 | :101F20008A13F8CF0BC0EF01ADE6B0E089918D9335
105 | :101F3000FE018DE690E0810F8A13F8CFF0937B00CD
106 | :101F4000E0937A00612F8DE690E005DD1C5F1C3088
107 | :101F500019F08FEF809361001093600084E196B3D5
108 | :101F6000987131F48150D9F710927D00109277006A
109 | :101F7000C1E08111C0E080916B008C1729F0C11184
110 | :101F800001C04BDEC0936B00C30101963C0180355C
111 | :101F9000934C11F484E0382E232D3320E9F08AE3AA
112 | :101FA00090E20197F1F72230A9F4F894E0ECF8E11F
113 | :101FB000E054F10983E080935700E8953097C1F72A
114 | :101FC000412C512CC8E08FEF9FEF53DEC150D9F761
115 | :101FD00047DE02C02530E1F384E03812BBCEEDEBE2
116 | :101FE000F8E1E491EF3F09F4B5CE8FCEE1BF0000F8
117 | :041FF00065CCFFCFEE
118 | :061FF4005AFF18BA400874
119 | :04000003000018C021
120 | :00000001FF
121 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/micronucleus-1.11-ledpb1.hex:
--------------------------------------------------------------------------------
1 | :0800000077CC76CCACCC74CCBB
2 | :1018C00017C016C04CC014C00902120001010080EC
3 | :1018D0003209040000000000000012011001FF00A6
4 | :1018E0000008D01653070B0100000001040309048F
5 | :1018F00011241FBECFE5D2E0CDBFDEBF00EB0F93BA
6 | :1019000007E00F9310E0A0E6B0E0E2EEFFE102C0D6
7 | :1019100005900D92A636B107D9F720E0A6E6B0E013
8 | :1019200001C01D92A639B207E1F7E2C1A82FB92F75
9 | :1019300080E090E041E050EA609530E009C02D91F0
10 | :1019400082279795879510F084279527305EC8F3F6
11 | :101950006F5FA8F30895EADF8D939D930895CF9369
12 | :10196000CFB7CF93C0915F02C03B21F4C0915E021C
13 | :10197000C73021F0CF91CFBFCF91A1CFCC27C39556
14 | :10198000B39BE9F7B39B0BC0B39B09C0B39B07C0E4
15 | :10199000B39B05C0B39B03C0B39B01C0D3C00F92E0
16 | :1019A000DF93C0917900DD27C058DF4F012EB39B34
17 | :1019B00003C0DF910F90E6CF2F930F931F934F93A8
18 | :1019C0002FEF4F6F06B303FB20F95F933F9350E077
19 | :1019D0003BE065C016B30126502953FDC89556B3A8
20 | :1019E000012703FB25F92F7306B3B1F05027102709
21 | :1019F00013FB26F906B22230F0F000C016B301271F
22 | :101A000003FB27F90126502906B22430E8F54F7769
23 | :101A1000206816B30000F6CF50274F7D206206B233
24 | :101A2000102F000000C006B300265029102713FB1A
25 | :101A300026F906B2E2CF4F7B06B3206400C0DACFAE
26 | :101A400001265029187106B269F14E7F2160012FDD
27 | :101A500016B328C0002650294D7F06B22260102FF1
28 | :101A600029C0012650294B7F06B22460012F2DC0CA
29 | :101A700016B301265029477F2860000006B22EC009
30 | :101A80004F7E06B3206130C0422706B3499300263B
31 | :101A90005029102706B24FEF13FB20F9297F16B308
32 | :101AA00079F2187159F10126502906B2012703FB7A
33 | :101AB00021F9237F06B371F2002650293150D0F06E
34 | :101AC00006B2102713FB22F9277E16B351F2012626
35 | :101AD0005029012703FB06B223F92F7C49F20000AD
36 | :101AE00006B3102713FB24F90026502906B22F79DC
37 | :101AF00039F270CF10E21ABF002717C03B50319562
38 | :101B0000C31BD04010E21ABF0881033CF9F00B342C
39 | :101B1000E9F0209177001981110F1213EDCF0936EA
40 | :101B200051F10D3211F0013E39F700937E003F91E3
41 | :101B30005F914F911F910F912F91DF910F90CAB735
42 | :101B4000C5FD1DCFCF91CFBFCF91189520917E00BD
43 | :101B5000222369F310917C00112321F5343022F106
44 | :101B600030937C0020937800109179003BE0311B8A
45 | :101B70003093790019C000917C0001309CF40AE593
46 | :101B80003091600034FD11C000936000CCE6D0E0DD
47 | :101B900010C0052710E000C021C0052710E0C8953F
48 | :101BA00008BB14C03AE501C032ED032EC0E0D0E01E
49 | :101BB00032E017B31861C39A08B317BB58E120E8A5
50 | :101BC0004FEF20FF052708BB279517951C3F28F7E7
51 | :101BD00000004552B0F720FF0527279508BB179551
52 | :101BE0001C3FB8F629913A9561F7077E10917D0068
53 | :101BF000110F08BBC250D04011F01093770010E2D3
54 | :101C00001ABF086017B3177E402F477E54E05A95DD
55 | :101C1000F1F708BB17BB48BB8ACFF8942FEFB0E8A9
56 | :101C2000A0E44AE0B1BF000081EE9CE0B399FECF92
57 | :101C3000B39BFECF0197B399FDCF97FF03C0BA1BAB
58 | :101C4000819501C0BA0FA69529F4281710F031B775
59 | :101C5000282FA1E0415031F731BF0000789408955A
60 | :101C6000F894F201329785E080935700E8957894D4
61 | :101C70000895F201309729F49093680080936700EB
62 | :101C800007C0E430F10539F490936A00809369004D
63 | :101C90008FE59CEC1FC02CEB421628E1520639F46C
64 | :101CA00080916700909168008E559C4F13C02EEB79
65 | :101CB000421628E1520639F48091690090916A0039
66 | :101CC0008D559C4F07C02AEB421628E1520611F4AD
67 | :101CD00081B790E02FB7F89431E00C0130935700B2
68 | :101CE000E89511242F0182E0480E511C2FBF089562
69 | :101CF00014BE88E181BD87E081BDBB9A88E893E18D
70 | :101D0000ECE9F1E03197F1F70197D1F7BB98AC9A84
71 | :101D10008BB780628BBF7894C198712C8CE991E06D
72 | :101D20000197F1F7A895312C60917C00162F135084
73 | :101D300017FDB2C080917900CCE0D0E0C81BD1097A
74 | :101D4000C058DF4F6150CE01F1DD8E3F9F4409F056
75 | :101D5000A1C0809178008D3209F085C0183009F05B
76 | :101D600099C083EC80936C008AE5809360001092A8
77 | :101D700066009881292F207689812223D1F0712C49
78 | :101D8000811108C082E690E090937B0080937A00F6
79 | :101D900024E05FC0813051F481E180935700E895E1
80 | :101DA0004C805D8097FD50C02FEF4FC0382E20E053
81 | :101DB00050C09A8110927500811106C01092760071
82 | :101DC00085E790E022E03BC0853019F490937D00D8
83 | :101DD0002CC0863009F58B81813019F48AED98E1A9
84 | :101DE00004C0823041F488EC98E190937B008093AA
85 | :101DF0007A0022E10DC0833051F4911108C08CEEBD
86 | :101E000098E190937B0080937A0024E001C020E069
87 | :101E100080E4809366001DC0883059F0893019F441
88 | :101E200090937F0002C08A3039F085E790E020E08F
89 | :101E300006C08FE790E002C085E790E021E0909334
90 | :101E40007B0080937A0005C02E8180E88093660035
91 | :101E500007C08F81811104C08E81821708F4282F5A
92 | :101E60002093610017C08091660087FF13C080EC4B
93 | :101E7000481688E1580620F0842D8F7339F00AC087
94 | :101E800089919991F6DE125091F7F6CF95E0392EAF
95 | :101E90001092610010927C008091600084FF42C02B
96 | :101EA000809161008F3F09F43DC0182F893008F000
97 | :101EB00018E0811B8093610080916C0098E889276D
98 | :101EC00080936C00112311F1E0917A00F0917B0076
99 | :101ED0008091660086FF0BC0ADE6B0E084918D93E3
100 | :101EE00031968DE690E0810F8A13F8CF0BC0EF0199
101 | :101EF000ADE6B0E089918D93FE018DE690E0810F13
102 | :101F00008A13F8CFF0937B00E0937A00612F8DE67F
103 | :101F100090E021DD1C5F1C3019F08FEF8093610091
104 | :101F20001093600084E196B3987131F48150D9F731
105 | :101F300010927D0010927700C1E08111C0E0809185
106 | :101F40006B008C1729F0C11101C067DEC0936B00D4
107 | :101F5000C30101963C018035934C11F484E0382E86
108 | :101F6000872D8D7011F0B99801C0B99A232D3320B7
109 | :101F7000E9F08AE390E20197F1F72230A9F4F894AE
110 | :101F8000E0ECF8E1E054F10983E080935700E89534
111 | :101F90003097C1F7412C512CC8E08FEF9FEF69DEDD
112 | :101FA000C150D9F75DDE02C02530E1F384E038127C
113 | :101FB000B5CEEDEBF8E1E491EF3F09F4AFCEB9987F
114 | :101FC000F894BB9A1BBE15BA10925F02EAEBF8E1D7
115 | :101FD000E4918E2F81508E3F10F4E1BF00006ECC53
116 | :021FE000FFCF31
117 | :061FE2005AFF18BA400886
118 | :04000003000018C021
119 | :00000001FF
120 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/micronucleus-1.11.hex:
--------------------------------------------------------------------------------
1 | :0800000077CC76CCACCC74CCBB
2 | :1018C00017C016C04CC014C00902120001010080EC
3 | :1018D0003209040000000000000012011001FF00A6
4 | :1018E0000008D01653070B0100000001040309048F
5 | :1018F00011241FBECFE5D2E0CDBFDEBF00EB0F93BA
6 | :1019000007E00F9310E0A0E6B0E0E2EDFFE102C0D7
7 | :1019100005900D92A636B107D9F720E0A6E6B0E013
8 | :1019200001C01D92A639B207E1F7E2C1A82FB92F75
9 | :1019300080E090E041E050EA609530E009C02D91F0
10 | :1019400082279795879510F084279527305EC8F3F6
11 | :101950006F5FA8F30895EADF8D939D930895CF9369
12 | :10196000CFB7CF93C0915F02C03B21F4C0915E021C
13 | :10197000C73021F0CF91CFBFCF91A1CFCC27C39556
14 | :10198000B39BE9F7B39B0BC0B39B09C0B39B07C0E4
15 | :10199000B39B05C0B39B03C0B39B01C0D3C00F92E0
16 | :1019A000DF93C0917900DD27C058DF4F012EB39B34
17 | :1019B00003C0DF910F90E6CF2F930F931F934F93A8
18 | :1019C0002FEF4F6F06B303FB20F95F933F9350E077
19 | :1019D0003BE065C016B30126502953FDC89556B3A8
20 | :1019E000012703FB25F92F7306B3B1F05027102709
21 | :1019F00013FB26F906B22230F0F000C016B301271F
22 | :101A000003FB27F90126502906B22430E8F54F7769
23 | :101A1000206816B30000F6CF50274F7D206206B233
24 | :101A2000102F000000C006B300265029102713FB1A
25 | :101A300026F906B2E2CF4F7B06B3206400C0DACFAE
26 | :101A400001265029187106B269F14E7F2160012FDD
27 | :101A500016B328C0002650294D7F06B22260102FF1
28 | :101A600029C0012650294B7F06B22460012F2DC0CA
29 | :101A700016B301265029477F2860000006B22EC009
30 | :101A80004F7E06B3206130C0422706B3499300263B
31 | :101A90005029102706B24FEF13FB20F9297F16B308
32 | :101AA00079F2187159F10126502906B2012703FB7A
33 | :101AB00021F9237F06B371F2002650293150D0F06E
34 | :101AC00006B2102713FB22F9277E16B351F2012626
35 | :101AD0005029012703FB06B223F92F7C49F20000AD
36 | :101AE00006B3102713FB24F90026502906B22F79DC
37 | :101AF00039F270CF10E21ABF002717C03B50319562
38 | :101B0000C31BD04010E21ABF0881033CF9F00B342C
39 | :101B1000E9F0209177001981110F1213EDCF0936EA
40 | :101B200051F10D3211F0013E39F700937E003F91E3
41 | :101B30005F914F911F910F912F91DF910F90CAB735
42 | :101B4000C5FD1DCFCF91CFBFCF91189520917E00BD
43 | :101B5000222369F310917C00112321F5343022F106
44 | :101B600030937C0020937800109179003BE0311B8A
45 | :101B70003093790019C000917C0001309CF40AE593
46 | :101B80003091600034FD11C000936000CCE6D0E0DD
47 | :101B900010C0052710E000C021C0052710E0C8953F
48 | :101BA00008BB14C03AE501C032ED032EC0E0D0E01E
49 | :101BB00032E017B31861C39A08B317BB58E120E8A5
50 | :101BC0004FEF20FF052708BB279517951C3F28F7E7
51 | :101BD00000004552B0F720FF0527279508BB179551
52 | :101BE0001C3FB8F629913A9561F7077E10917D0068
53 | :101BF000110F08BBC250D04011F01093770010E2D3
54 | :101C00001ABF086017B3177E402F477E54E05A95DD
55 | :101C1000F1F708BB17BB48BB8ACFF8942FEFB0E8A9
56 | :101C2000A0E44AE0B1BF000081EE9CE0B399FECF92
57 | :101C3000B39BFECF0197B399FDCF97FF03C0BA1BAB
58 | :101C4000819501C0BA0FA69529F4281710F031B775
59 | :101C5000282FA1E0415031F731BF0000789408955A
60 | :101C6000F894F201329785E080935700E8957894D4
61 | :101C70000895F201309729F49093680080936700EB
62 | :101C800007C0E430F10539F490936A00809369004D
63 | :101C90008FE59CEC1FC02CEB421628E1520639F46C
64 | :101CA00080916700909168008E559C4F13C02EEB79
65 | :101CB000421628E1520639F48091690090916A0039
66 | :101CC0008D559C4F07C02AEB421628E1520611F4AD
67 | :101CD00081B790E02FB7F89431E00C0130935700B2
68 | :101CE000E89511242F0182E0480E511C2FBF089562
69 | :101CF00014BE88E181BD87E081BDBB9A88E893E18D
70 | :101D0000ECE9F1E03197F1F70197D1F7BB98AC9A84
71 | :101D10008BB780628BBF7894712C8CE991E001972E
72 | :101D2000F1F7A895312C60917C00162F135017FD08
73 | :101D3000B2C080917900CCE0D0E0C81BD109C05876
74 | :101D4000DF4F6150CE01F2DD8E3F9F4409F0A1C00C
75 | :101D5000809178008D3209F085C0183009F099C063
76 | :101D600083EC80936C008AE580936000109266009B
77 | :101D70009881292F207689812223D1F0712C81111D
78 | :101D800008C082E690E090937B0080937A0024E084
79 | :101D90005FC0813051F481E180935700E8954C8019
80 | :101DA0005D8097FD50C02FEF4FC0382E20E050C00F
81 | :101DB0009A8110927500811106C01092760085E715
82 | :101DC00090E022E03BC0853019F490937D002CC058
83 | :101DD000863009F58B81813019F48AED98E104C0D1
84 | :101DE000823041F488EC98E190937B0080937A00F4
85 | :101DF00022E10DC0833051F4911108C08CEE98E1BE
86 | :101E000090937B0080937A0024E001C020E080E47E
87 | :101E1000809366001DC0883059F0893019F4909382
88 | :101E20007F0002C08A3039F085E790E020E006C0EC
89 | :101E30008FE790E002C085E790E021E090937B007F
90 | :101E400080937A0005C02E8180E88093660007C0E9
91 | :101E50008F81811104C08E81821708F4282F20936E
92 | :101E6000610017C08091660087FF13C080EC4816A0
93 | :101E700088E1580620F0842D8F7339F00AC08991CB
94 | :101E80009991F7DE125091F7F6CF95E0392E109226
95 | :101E9000610010927C008091600084FF42C08091BC
96 | :101EA00061008F3F09F43DC0182F893008F018E019
97 | :101EB000811B8093610080916C0098E88927809352
98 | :101EC0006C00112311F1E0917A00F0917B00809178
99 | :101ED000660086FF0BC0ADE6B0E084918D9331962D
100 | :101EE0008DE690E0810F8A13F8CF0BC0EF01ADE6CD
101 | :101EF000B0E089918D93FE018DE690E0810F8A1309
102 | :101F0000F8CFF0937B00E0937A00612F8DE690E0AC
103 | :101F100022DD1C5F1C3019F08FEF8093610010935D
104 | :101F2000600084E196B3987131F48150D9F7109232
105 | :101F30007D0010927700C1E08111C0E080916B00BC
106 | :101F40008C1729F0C11101C068DEC0936B00C3017A
107 | :101F500001963C018035934C11F484E0382E232DFA
108 | :101F60003320E9F08AE390E20197F1F72230A9F4F7
109 | :101F7000F894E0ECF8E1E054F10983E08093570035
110 | :101F8000E8953097C1F7412C512CC8E08FEF9FEFB7
111 | :101F900070DEC150D9F764DE02C02530E1F384E081
112 | :101FA0003812BBCEEDEBF8E1E491EF3F09F4B5CE8A
113 | :101FB000F894BB9A1BBE15BA10925F02EAEBF8E1E7
114 | :101FC000E4918E2F81508E3F10F4E1BF000076CC5B
115 | :021FD000FFCF41
116 | :061FD2005AFF18BA400896
117 | :04000003000018C021
118 | :00000001FF
119 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/micronucleus.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/src/Surface_Dial_attiny/micronucleus-1.11/firmware/releases/micronucleus.exe
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/usbdrv/oddebug.c:
--------------------------------------------------------------------------------
1 | /* Name: oddebug.c
2 | * Project: AVR library
3 | * Author: Christian Starkjohann
4 | * Creation Date: 2005-01-16
5 | * Tabsize: 4
6 | * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
7 | * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
8 | */
9 |
10 | #include "oddebug.h"
11 |
12 | #if DEBUG_LEVEL > 0
13 |
14 | #warning "Never compile production devices with debugging enabled"
15 |
16 | static void uartPutc(char c)
17 | {
18 | while(!(ODDBG_USR & (1 << ODDBG_UDRE))); /* wait for data register empty */
19 | ODDBG_UDR = c;
20 | }
21 |
22 | static uchar hexAscii(uchar h)
23 | {
24 | h &= 0xf;
25 | if(h >= 10)
26 | h += 'a' - (uchar)10 - '0';
27 | h += '0';
28 | return h;
29 | }
30 |
31 | static void printHex(uchar c)
32 | {
33 | uartPutc(hexAscii(c >> 4));
34 | uartPutc(hexAscii(c));
35 | }
36 |
37 | void odDebug(uchar prefix, uchar *data, uchar len)
38 | {
39 | printHex(prefix);
40 | uartPutc(':');
41 | while(len--){
42 | uartPutc(' ');
43 | printHex(*data++);
44 | }
45 | uartPutc('\r');
46 | uartPutc('\n');
47 | }
48 |
49 | #endif
50 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/firmware/usbdrv/oddebug.h:
--------------------------------------------------------------------------------
1 | /* Name: oddebug.h
2 | * Project: AVR library
3 | * Author: Christian Starkjohann
4 | * Creation Date: 2005-01-16
5 | * Tabsize: 4
6 | * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
7 | * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
8 | */
9 |
10 | #ifndef __oddebug_h_included__
11 | #define __oddebug_h_included__
12 |
13 | /*
14 | General Description:
15 | This module implements a function for debug logs on the serial line of the
16 | AVR microcontroller. Debugging can be configured with the define
17 | 'DEBUG_LEVEL'. If this macro is not defined or defined to 0, all debugging
18 | calls are no-ops. If it is 1, DBG1 logs will appear, but not DBG2. If it is
19 | 2, DBG1 and DBG2 logs will be printed.
20 |
21 | A debug log consists of a label ('prefix') to indicate which debug log created
22 | the output and a memory block to dump in hex ('data' and 'len').
23 | */
24 |
25 |
26 | #ifndef F_CPU
27 | # define F_CPU 12000000 /* 12 MHz */
28 | #endif
29 |
30 | /* make sure we have the UART defines: */
31 | #include "usbportability.h"
32 |
33 | #ifndef uchar
34 | # define uchar unsigned char
35 | #endif
36 |
37 | #if DEBUG_LEVEL > 0 && !(defined TXEN || defined TXEN0) /* no UART in device */
38 | # warning "Debugging disabled because device has no UART"
39 | # undef DEBUG_LEVEL
40 | #endif
41 |
42 | #ifndef DEBUG_LEVEL
43 | # define DEBUG_LEVEL 0
44 | #endif
45 |
46 | /* ------------------------------------------------------------------------- */
47 |
48 | #if DEBUG_LEVEL > 0
49 | # define DBG1(prefix, data, len) odDebug(prefix, data, len)
50 | #else
51 | # define DBG1(prefix, data, len)
52 | #endif
53 |
54 | #if DEBUG_LEVEL > 1
55 | # define DBG2(prefix, data, len) odDebug(prefix, data, len)
56 | #else
57 | # define DBG2(prefix, data, len)
58 | #endif
59 |
60 | /* ------------------------------------------------------------------------- */
61 |
62 | #if DEBUG_LEVEL > 0
63 | extern void odDebug(uchar prefix, uchar *data, uchar len);
64 |
65 | /* Try to find our control registers; ATMEL likes to rename these */
66 |
67 | #if defined UBRR
68 | # define ODDBG_UBRR UBRR
69 | #elif defined UBRRL
70 | # define ODDBG_UBRR UBRRL
71 | #elif defined UBRR0
72 | # define ODDBG_UBRR UBRR0
73 | #elif defined UBRR0L
74 | # define ODDBG_UBRR UBRR0L
75 | #endif
76 |
77 | #if defined UCR
78 | # define ODDBG_UCR UCR
79 | #elif defined UCSRB
80 | # define ODDBG_UCR UCSRB
81 | #elif defined UCSR0B
82 | # define ODDBG_UCR UCSR0B
83 | #endif
84 |
85 | #if defined TXEN
86 | # define ODDBG_TXEN TXEN
87 | #else
88 | # define ODDBG_TXEN TXEN0
89 | #endif
90 |
91 | #if defined USR
92 | # define ODDBG_USR USR
93 | #elif defined UCSRA
94 | # define ODDBG_USR UCSRA
95 | #elif defined UCSR0A
96 | # define ODDBG_USR UCSR0A
97 | #endif
98 |
99 | #if defined UDRE
100 | # define ODDBG_UDRE UDRE
101 | #else
102 | # define ODDBG_UDRE UDRE0
103 | #endif
104 |
105 | #if defined UDR
106 | # define ODDBG_UDR UDR
107 | #elif defined UDR0
108 | # define ODDBG_UDR UDR0
109 | #endif
110 |
111 | static inline void odDebugInit(void)
112 | {
113 | ODDBG_UCR |= (1<
38 | #ifndef __IAR_SYSTEMS_ASM__
39 | # include
40 | #endif
41 |
42 | #define __attribute__(arg) /* not supported on IAR */
43 |
44 | #ifdef __IAR_SYSTEMS_ASM__
45 | # define __ASSEMBLER__ /* IAR does not define standard macro for asm */
46 | #endif
47 |
48 | #ifdef __HAS_ELPM__
49 | # define PROGMEM __farflash
50 | #else
51 | # define PROGMEM __flash
52 | #endif
53 |
54 | #define USB_READ_FLASH(addr) (*(PROGMEM char *)(addr))
55 |
56 | /* The following definitions are not needed by the driver, but may be of some
57 | * help if you port a gcc based project to IAR.
58 | */
59 | #define cli() __disable_interrupt()
60 | #define sei() __enable_interrupt()
61 | #define wdt_reset() __watchdog_reset()
62 | #define _BV(x) (1 << (x))
63 |
64 | /* assembler compatibility macros */
65 | #define nop2 rjmp $+2 /* jump to next instruction */
66 | #define XL r26
67 | #define XH r27
68 | #define YL r28
69 | #define YH r29
70 | #define ZL r30
71 | #define ZH r31
72 | #define lo8(x) LOW(x)
73 | #define hi8(x) (((x)>>8) & 0xff) /* not HIGH to allow XLINK to make a proper range check */
74 |
75 | /* Depending on the device you use, you may get problems with the way usbdrv.h
76 | * handles the differences between devices. Since IAR does not use #defines
77 | * for MCU registers, we can't check for the existence of a particular
78 | * register with an #ifdef. If the autodetection mechanism fails, include
79 | * definitions for the required USB_INTR_* macros in your usbconfig.h. See
80 | * usbconfig-prototype.h and usbdrv.h for details.
81 | */
82 |
83 | /* ------------------------------------------------------------------------- */
84 | #elif __CODEVISIONAVR__ /* check for CodeVision AVR */
85 | /* ------------------------------------------------------------------------- */
86 | /* This port is not working (yet) */
87 |
88 | /* #define F_CPU _MCU_CLOCK_FREQUENCY_ seems to be defined automatically */
89 |
90 | #include
91 | #include
92 |
93 | #define __attribute__(arg) /* not supported on IAR */
94 |
95 | #define PROGMEM __flash
96 | #define USB_READ_FLASH(addr) (*(PROGMEM char *)(addr))
97 |
98 | #ifndef __ASSEMBLER__
99 | static inline void cli(void)
100 | {
101 | #asm("cli");
102 | }
103 | static inline void sei(void)
104 | {
105 | #asm("sei");
106 | }
107 | #endif
108 | #define _delay_ms(t) delay_ms(t)
109 | #define _BV(x) (1 << (x))
110 | #define USB_CFG_USE_SWITCH_STATEMENT 1 /* macro for if() cascase fails for unknown reason */
111 |
112 | #define macro .macro
113 | #define endm .endmacro
114 | #define nop2 rjmp .+0 /* jump to next instruction */
115 |
116 | /* ------------------------------------------------------------------------- */
117 | #else /* default development environment is avr-gcc/avr-libc */
118 | /* ------------------------------------------------------------------------- */
119 |
120 | #include
121 | #ifdef __ASSEMBLER__
122 | # define _VECTOR(N) __vector_ ## N /* io.h does not define this for asm */
123 | #else
124 | # include
125 | #endif
126 |
127 | #if USB_CFG_DRIVER_FLASH_PAGE
128 | # define USB_READ_FLASH(addr) pgm_read_byte_far(((long)USB_CFG_DRIVER_FLASH_PAGE << 16) | (long)(addr))
129 | #else
130 | # define USB_READ_FLASH(addr) pgm_read_byte(addr)
131 | #endif
132 |
133 | #define macro .macro
134 | #define endm .endm
135 | #define nop2 rjmp .+0 /* jump to next instruction */
136 |
137 | #endif /* development environment */
138 |
139 | /* for conveniecne, ensure that PRG_RDB exists */
140 | #ifndef PRG_RDB
141 | # define PRG_RDB(addr) USB_READ_FLASH(addr)
142 | #endif
143 | #endif /* __usbportability_h_INCLUDED__ */
144 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/micronucleus-t85_winDriver.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/src/Surface_Dial_attiny/micronucleus-1.11/micronucleus-t85_winDriver.zip
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/ruby/dump.rb:
--------------------------------------------------------------------------------
1 | `rm temp-dump.bin`
2 | `avrdude -c usbtiny -p t85 -U flash:r:temp-dump.bin:r`
3 | puts open('temp-dump.bin').read(30).bytes.to_a.map { |x| x.to_s(16) }.join(' ')
4 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/ruby/hex-to-bin.rb:
--------------------------------------------------------------------------------
1 | require_relative "../ruby/micronucleus.rb"
2 |
3 | # just converts a hex file to a binary file
4 | program = HexProgram.new open ARGV.first
5 |
6 | File.open ARGV.first.split('/').last.sub(/\.hex$/, '') + '.raw', 'w' do |file|
7 | file.write program.binary
8 | file.close
9 | end
10 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/ruby/micronucleus.rb:
--------------------------------------------------------------------------------
1 | require 'libusb'
2 |
3 | # Abstracts access to micronucleus avr tiny85 bootloader - can be used only to erase and upload bytes
4 | class Micronucleus
5 | Functions = [
6 | :get_info,
7 | :write_page,
8 | :erase_application,
9 | :run_program
10 | ]
11 |
12 | # return all micronucleus devices connected to computer
13 | def self.all
14 | usb = LIBUSB::Context.new
15 | usb.devices.select { |device|
16 | device.idVendor == 0x16d0 && device.idProduct == 0x0753
17 | }.map { |device|
18 | self.new(device)
19 | }
20 | end
21 |
22 | def initialize devref
23 | @device = devref
24 | end
25 |
26 | def info
27 | unless @info
28 | result = control_transfer(function: :get_info, dataIn: 4)
29 | flash_length, page_size, write_sleep = result.unpack('S>CC')
30 |
31 | @info = {
32 | flash_length: flash_length,
33 | page_size: page_size,
34 | pages: (flash_length.to_f / page_size).ceil,
35 | write_sleep: write_sleep.to_f / 1000.0,
36 | version: "#{@device.bcdDevice >> 8}.#{@device.bcdDevice & 0xFF}",
37 | version_numeric: @device.bcdDevice
38 | }
39 | end
40 |
41 | @info
42 | end
43 |
44 | def erase!
45 | puts "erasing"
46 | info = self.info
47 | control_transfer(function: :erase_application)
48 | info[:pages].times do
49 | sleep(info[:write_sleep]) # sleep for as many pages as the chip has to erase
50 | end
51 | puts "erased chip"
52 | end
53 |
54 | # upload a new program
55 | def program= bytestring
56 | info = self.info
57 | raise "Program too long!" if bytestring.bytesize > info[:flash_length]
58 | bytes = bytestring.bytes.to_a
59 | bytes.push(0xFF) while bytes.length < info[:flash_length]
60 |
61 | erase!
62 |
63 | address = 0
64 | bytes.each_slice(info[:page_size]) do |slice|
65 | slice.push(0xFF) while slice.length < info[:page_size] # ensure every slice is one page_size long - pad out if needed
66 |
67 | puts "uploading @ #{address} of #{bytes.length}"
68 | control_transfer(function: :write_page, wIndex: address, wValue: slice.length, dataOut: slice.pack('C*'))
69 | sleep(info[:write_sleep])
70 | address += slice.length
71 | end
72 | end
73 |
74 | def finished
75 | info = self.info
76 |
77 | puts "asking device to finish writing"
78 | control_transfer(function: :run_program)
79 | puts "waiting for device to finish"
80 |
81 | # sleep for as many pages as the chip could potentially need to write - this could be smarter
82 | info[:pages].times do
83 | sleep(info[:write_sleep])
84 | end
85 |
86 | @io.close
87 | @io = nil
88 | end
89 |
90 | def inspect
91 | ""
92 | end
93 |
94 | protected
95 | # raw opened device
96 | def io
97 | unless @io
98 | @io = @device.open
99 | end
100 |
101 | @io
102 | end
103 |
104 | def control_transfer(opts = {})
105 | opts[:bRequest] = Functions.index(opts.delete(:function)) if opts[:function]
106 | io.control_transfer({
107 | wIndex: 0,
108 | wValue: 0,
109 | bmRequestType: usb_request_type(opts),
110 | timeout: 5000
111 | }.merge opts)
112 | end
113 |
114 | # calculate usb request type
115 | def usb_request_type opts #:nodoc:
116 | value = LIBUSB::REQUEST_TYPE_VENDOR | LIBUSB::RECIPIENT_DEVICE
117 | value |= LIBUSB::ENDPOINT_OUT if opts.has_key? :dataOut
118 | value |= LIBUSB::ENDPOINT_IN if opts.has_key? :dataIn
119 | return value
120 | end
121 | end
122 |
123 | class HexProgram
124 | def initialize input
125 | @bytes = Hash.new(0xFF)
126 | input = input.read if input.is_a? IO
127 | parse input
128 | end
129 |
130 | def binary
131 | bytes.pack('C*')
132 | end
133 |
134 | def bytes
135 | highest_address = @bytes.keys.max
136 |
137 | bytes = Array.new(highest_address + 1) { |index|
138 | @bytes[index]
139 | }
140 | end
141 |
142 | protected
143 |
144 | def parse input_text
145 | input_text.each_line do |line|
146 | next unless line.start_with? ':'
147 | line.chomp!
148 | length = line[1..2].to_i(16) # usually 16 or 32
149 | address = line[3..6].to_i(16) # 16-bit start address
150 | record_type = line[7..8].to_i(16)
151 | data = line[9... 9 + (length * 2)]
152 | checksum = line[9 + (length * 2).. 10 + (length * 2)].to_i(16)
153 | checksum_section = line[1...9 + (length * 2)]
154 |
155 | checksum_calculated = checksum_section.chars.to_a.each_slice(2).map { |slice|
156 | slice.join('').to_i(16)
157 | }.reduce(0, &:+)
158 |
159 | checksum_calculated = (((checksum_calculated % 256) ^ 0xFF) + 1) % 256
160 |
161 | raise "Hex file checksum mismatch @ #{line} should be #{checksum_calculated.to_s(16)}" unless checksum == checksum_calculated
162 |
163 | if record_type == 0 # data record
164 | data_bytes = data.chars.each_slice(2).map { |slice| slice.join('').to_i(16) }
165 | data_bytes.each_with_index do |byte, index|
166 | @bytes[address + index] = byte
167 | end
168 | end
169 | end
170 | end
171 | end
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/ruby/upload.rb:
--------------------------------------------------------------------------------
1 | require_relative './micronucleus'
2 |
3 | if ARGV[0]
4 | if ARGV[0].end_with? '.hex'
5 | puts "parsing input file as intel hex"
6 | test_data = HexProgram.new(open ARGV[0]).binary
7 | else
8 | puts "parsing input file as raw binary"
9 | test_data = open(ARGV[0]).read
10 | end
11 | else
12 | raise "Pass intel hex or raw binary as argument to script"
13 | end
14 |
15 | #test_data += ("\xFF" * 64)
16 |
17 | puts "Plug in programmable device now: (waiting)"
18 | sleep 0.25 while Micronucleus.all.length == 0
19 |
20 | nucleus = Micronucleus.all.first
21 | puts "Attached to device: #{nucleus.inspect}"
22 |
23 | #puts "Attempting to write '#{test_data.inspect}' to first thinklet's program memory"
24 | #puts "Bytes: #{test_data.bytes.to_a.inspect}"
25 | sleep(0.25) # some time to think?
26 | puts "Attempting to write supplied program in to device's memory"
27 | nucleus.program = test_data
28 |
29 | puts "Great! Starting program..."
30 |
31 |
32 | nucleus.finished # let thinklet know it can go do other things now if it likes
33 | puts "All done!"
34 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/upgrade/generate-data.rb:
--------------------------------------------------------------------------------
1 | require_relative "../ruby/micronucleus.rb"
2 |
3 | data = HexProgram.new(open ARGV.first)
4 |
5 | puts data.instance_variable_get(:@bytes).inspect
6 |
7 | data = data.bytes
8 |
9 | # find start address
10 | start_address = 16 # skip past baked in trampoline - upgrade firmware generates one anyway!
11 | # TODO: Verify jump table? or store it in the upgrade firmware for verbatim installation?
12 | start_address += 1 while data[start_address] == 0xFF
13 |
14 | raise "Seems to be junk data quite early in the bootloader" unless start_address > 100
15 |
16 | # trim blank padding data from start of data
17 | start_address.times { data.shift }
18 |
19 | # if data is an odd number of bytes make it even
20 | data.push 0xFF while (data.length % 2) != 0
21 |
22 | puts "Length: #{data.length}"
23 | puts "Start address: #{start_address}"
24 |
25 | File.open "bootloader_data.c", "w" do |file|
26 | file.puts "// This file contains the bootloader data itself and the address to"
27 | file.puts "// install the bootloader"
28 | file.puts "// Use generate-data.rb with ruby 1.9 or 2.0 to generate these"
29 | file.puts "// values from a hex file"
30 | file.puts "// Generated from #{ARGV.first} at #{Time.now} by #{ENV['USER']}"
31 | file.puts ""
32 | file.puts "const uint16_t bootloader_data[#{data.length / 2}] PROGMEM = {"
33 | file.puts data.each_slice(2).map { |big_end, little_end|
34 | "0x#{ ((little_end * 256) + big_end).to_s(16).rjust(4, '0') }"
35 | }.join(', ')
36 | file.puts "};"
37 | file.puts ""
38 | file.puts "uint16_t bootloader_address = #{start_address};"
39 | end
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/upgrade/readme.txt:
--------------------------------------------------------------------------------
1 | Micronucleus Upgrade
2 | ====================
3 |
4 | Upgrade is a virus-like payload you can upload via micronucleus (or other bootloaders!) to install a new version of micronucleus on the target chip. The upgrade program works by compiling the binary contents of a bootloader hex file in to a progmem array, then running on the chip bricking the device so it doesn't enter any existing bootloader anymore but instead runs the upgrade program exclusively. Next it erases and rewrites the bootloader in place at the same address the hex file specifies (BOOTLOADER_ADDRESS in the case of micronucleus). Once the bootloader has been rewritten, upgrade rewrites it's own interrupt vector table to point every interrupt including reset straight at the newly uploaded bootloader's interrupt vector table at whichever address it was installed.
5 |
6 | The program then emits a beep if a piezo speaker is connected between PB0 and PB1. If you have no speaker, use an LED with positive on PB0 (requires resistor). Premade upgrades are included in releases/ for micronucleus builds. Just upload one in the usual way and wait for the beep. Once you hear the beep, the chip will automatically reboot and should enumerate over USB as a micronucleus device, ready to accept a new program.
7 |
8 | Upgrade has only been tested with micronucleus - use it to upload other bootloaders at your own risk!
9 |
10 | Prerequesits
11 | ============
12 |
13 | You'll need a few dependencies to start with:
14 |
15 | gem install libusb
16 |
17 | Also, you'll need avr-gcc. For OS X, it can be obtained from http://www.obdev.at/products/crosspack/download.html
18 |
19 |
20 | Creating an Upgrade
21 | ===================
22 |
23 | ruby generate-data.rb my_new_bootloader.hex
24 | make clean; make
25 |
26 | Next upload the 'upgrade.hex' file generated in this folder, via whichever bootloader you're using, or an ISP or whatever - everything should work. If you're using micronucleus and have the command line tool installed: micronucleus --run upgrade.hex
27 |
28 | The generate-data.rb script requires Ruby 1.9 or newer to be installed. If you're using an older version of Mac OS X (before Mavericks), use homebrew to install ruby with 'brew install ruby' to get a recent version. On linuxes you can usually find a package called ruby1.9 in whichever installing thingy. On windows you're on your own!
29 |
30 |
31 | License
32 | =======
33 |
34 | Released under BSD license. Have fun!
35 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/upgrade/technical details.txt:
--------------------------------------------------------------------------------
1 | Technical Details
2 | =================
3 |
4 | A summary of how 'upgrade' works
5 |
6 |
7 | -- build process:
8 |
9 | 1) Manually run the generate-data.rb ruby script with the new bootloader's hex file:
10 | ruby generate-data.rb new_firmware.hex
11 | If you have trouble running it, make sure you're using ruby version 1.9. 1.8 is too old!
12 |
13 | generate-data.rb creates the bootloader_data.c file, which defines some variables containing
14 | the entire raw byte data of the bootloader as an array stored in flash memory. It also
15 | calculates and writes in the start address of the bootloader. The hex file supplied can be any
16 | bootloader which works similarly to USBaspLoader-tiny85 - which is most (all?) tiny85 bootloaders
17 | and likely some for other avr chips which lack hardware bootloader stuff.
18 |
19 | 2) Generate the hex file using make:
20 | make clean; make
21 |
22 | The upgrader hex file is built in the usual way, then combined with upgrade-prefix.hex (which
23 | I wrote by hand) to prefix a fake interrupt vector table in the start of the upgrader. This is
24 | necessary because bootloaders like micronucleus and Fast Tiny & Mega Bootloader only work with
25 | firmwares which begin with an interrupt vector table, because of the way they mangle the table
26 | to forward some interrupts to themselves.
27 |
28 | 3) Upload the resulting upgrade.hex file to a chip you have some means of recovering. If all works
29 | correctly, consider now uploading it to other chips which maybe more difficult to recover but are
30 | otherwise identical.
31 |
32 |
33 | -- how it works:
34 |
35 | Taking inspiration from computer viruses, when upgrade runs it goes through this process:
36 |
37 | 1) Brick the chip:
38 | The first thing upgrade does is erase the ISR vector table. Erasing it sets the first page to
39 | 0xFF bytes - creating a NOP sled. If the chip looses power or otherwise resets, it wont enter
40 | the bootloader, sliding in to the upgrader restarting the process.
41 |
42 | 2) erase and write bootloader:
43 | The flash pages for the new bootloader are erased and rewritten from start to finish.
44 |
45 | 3) install the trampoline:
46 | The fake ISR table which was erased in step one is now written to - a trampoline is added, simply
47 | forwarding any requests to the new bootloader's interrupt vector table. At this point the viral
48 | upgrader has completed it's life cycle and has disabled itself. It should never run again, booting
49 | directly in to the bootloader instead.
50 |
51 |
52 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/upgrade/upgrade-prefix.hex:
--------------------------------------------------------------------------------
1 | :1000000003C003C003C003C003C003C003C003C0D8
2 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/upgrade/upgrade.c:
--------------------------------------------------------------------------------
1 | // Upgrade is an in-place firmware upgrader for tiny85 chips - just fill in the
2 | // 'bootloaderAddress' variable in bootloader_data.h, and the bootloaderData
3 | // progmem array with the bootloader data, and you're ready to go.
4 | //
5 | // Upgrade will firstly rewrite the interrupt vector table to disable the bootloader,
6 | // rewriting it to just run the upgrade app. Next it erases and writes each page of the
7 | // bootloader in sequence, erasing over any remaining pages leaving them set to 0xFFFF
8 | // Finally upgrader erases it's interrupt table again and fills it with RJMPs to
9 | // bootloaderAddress, effectively bridging the interrupts in to the new bootloader's
10 | // interrupts table.
11 | //
12 | // While upgrade has been written with attiny85 and micronucleus in mind, it should
13 | // work with other bootloaders and other chips with flash self program but no hardware
14 | // bootloader protection, where the bootloader exists at the end of flash
15 | //
16 | // Be very careful to not power down the AVR while upgrader is running.
17 | // If you connect a piezo between pb0 and pb1 you'll hear a bleep when the update
18 | // is complete. You can also connect an LED with pb0 positive and pb1 or gnd negative and
19 | // it will blink
20 |
21 | #include "./utils.h"
22 | #include
23 | #include
24 | #include
25 | #include
26 | #include
27 | #include "./bootloader_data.c"
28 |
29 | void secure_interrupt_vector_table(void);
30 | void write_new_bootloader(void);
31 | void forward_interrupt_vector_table(void);
32 | void beep(void);
33 | void reboot(void);
34 |
35 | void load_table(uint16_t address, uint16_t words[SPM_PAGESIZE / 2]);
36 | void erase_page(uint16_t address);
37 | void write_page(uint16_t address, uint16_t words[SPM_PAGESIZE / 2]);
38 |
39 |
40 | int main(void) {
41 | pinsOff(0xFF); // pull down all pins
42 | outputs(0xFF); // all to ground - force usb disconnect
43 | delay(250); // milliseconds
44 | inputs(0xFF); // let them float
45 | delay(250);
46 | cli();
47 |
48 | secure_interrupt_vector_table(); // reset our vector table to it's original state
49 | write_new_bootloader();
50 | forward_interrupt_vector_table();
51 |
52 | beep();
53 |
54 | reboot();
55 |
56 | return 0;
57 | }
58 |
59 | // erase first page, removing any interrupt table hooks the bootloader added when
60 | // upgrade was uploaded
61 | void secure_interrupt_vector_table(void) {
62 | uint16_t table[SPM_PAGESIZE / 2];
63 |
64 | load_table(0, table);
65 |
66 | // wipe out any interrupt hooks the bootloader rewrote
67 | int i = 0;
68 | while (i < SPM_PAGESIZE / 2) {
69 | table[0] = 0xFFFF;
70 | i++;
71 | }
72 |
73 | erase_page(0);
74 | write_page(0, table);
75 | }
76 |
77 | // erase bootloader's section and write over it with new bootloader code
78 | void write_new_bootloader(void) {
79 | uint16_t outgoing_page[SPM_PAGESIZE / 2];
80 | int iter = 0;
81 | while (iter < sizeof(bootloader_data)) {
82 |
83 | // read in one page's worth of data from progmem
84 | int word_addr = 0;
85 | while (word_addr < SPM_PAGESIZE) {
86 | int subaddress = ((int) bootloader_data) + iter + word_addr;
87 | if (subaddress >= ((int) bootloader_data) + sizeof(bootloader_data)) {
88 | outgoing_page[word_addr / 2] = 0xFFFF;
89 | } else {
90 | outgoing_page[word_addr / 2] = pgm_read_word(subaddress);
91 | }
92 |
93 | word_addr += 2;
94 | }
95 |
96 | // erase page in destination
97 | erase_page(bootloader_address + iter);
98 | // write updated page
99 | write_page(bootloader_address + iter, outgoing_page);
100 |
101 | iter += 64;
102 | }
103 | }
104 |
105 | // write in forwarding interrupt vector table
106 | void forward_interrupt_vector_table(void) {
107 | uint16_t vector_table[SPM_PAGESIZE / 2];
108 |
109 | int iter = 0;
110 | while (iter < SPM_PAGESIZE / 2) {
111 | // rjmp to bootloader_address's interrupt table
112 | vector_table[iter] = 0xC000 + (bootloader_address / 2) - 1;
113 | iter++;
114 | }
115 |
116 | erase_page(0);
117 | write_page(0, vector_table);
118 | }
119 |
120 | void load_table(uint16_t address, uint16_t words[SPM_PAGESIZE / 2]) {
121 | uint16_t subaddress = 0;
122 | address -= address % SPM_PAGESIZE; // round down to nearest page start
123 |
124 | while (subaddress < SPM_PAGESIZE) {
125 | words[subaddress / 2] = pgm_read_word(address + subaddress);
126 | subaddress += 2;
127 | }
128 | }
129 |
130 | void erase_page(uint16_t address) {
131 | boot_page_erase(address - (address % SPM_PAGESIZE));
132 | boot_spm_busy_wait();
133 | }
134 |
135 | void write_page(uint16_t address, uint16_t words[SPM_PAGESIZE / 2]) {
136 | // fill buffer
137 | uint16_t iter = 0;
138 | while (iter < SPM_PAGESIZE / 2) {
139 | boot_page_fill(address + (iter * 2), words[iter]);
140 | iter++;
141 | }
142 |
143 | boot_page_write(address);
144 | boot_spm_busy_wait(); // Wait until the memory is written.
145 | }
146 |
147 | // beep for a quarter of a second
148 | void beep(void) {
149 | outputs(pin(0) | pin(1));
150 | pinOff(1);
151 |
152 | byte i = 0;
153 | while (i < 250) {
154 | delay(1);
155 | pinOn(pin(0));
156 | delay(1);
157 | pinOff(pin(0));
158 | i++;
159 | }
160 | }
161 |
162 | void reboot(void) {
163 | void (*ptrToFunction)(); // pointer to a function
164 | ptrToFunction = 0x0000;
165 | (*ptrToFunction)(); // reset!
166 | }
167 |
168 |
169 | ////////////// Add padding to start of program so no program code could reasonably be erased while program is running
170 | // this never needs to be called - avr-gcc stuff happening: http://www.nongnu.org/avr-libc/user-manual/mem_sections.html
171 | volatile void FakeISR (void) __attribute__ ((naked)) __attribute__ ((section (".init0")));
172 | volatile void FakeISR (void) {
173 | // 16 nops to pad out first section of program
174 | asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
175 | asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
176 | }
177 |
--------------------------------------------------------------------------------
/src/Surface_Dial_attiny/micronucleus-1.11/upgrade/utils.h:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | // For the niceness
5 | typedef unsigned char byte;
6 | typedef unsigned char boolean;
7 |
8 | // make bit & value, eg bit(5) #=> 0b00010000
9 | #define bit(number) _BV(number)
10 | #define pin(number) _BV(number)
11 |
12 | // USI serial aliases
13 | #define USIOutputPort PORTE
14 | #define USIInputPort PINE
15 | #define USIDirectionPort DDRE
16 | #define USIClockPin PE4
17 | #define USIDataInPin PE5
18 | #define USIDataOutPin PE6
19 |
20 | // booleans
21 | #define on 255
22 | #define off 0
23 | #define true 1
24 | #define false 0
25 | #define yes true
26 | #define no false
27 |
28 | // ensure a value is within the bounds of a minimum and maximum (inclusive)
29 | #define constrainUpper(value, max) (value > max ? max : value)
30 | #define constrainLower(value, min) (value < min ? min : value)
31 | #define constrain(value, min, max) constrainLower(constrainUpper(value, max), min)
32 | #define multiplyDecimal(a,b) (((a) * (b)) / 256)
33 |
34 | // set a pin on DDRB to be an input or an output - i.e. becomeOutput(pin(3));
35 | #define inputs(pinmap) DDRB &= ~(pinmap)
36 | #define outputs(pinmap) DDRB |= (pinmap)
37 |
38 | // turn some pins on or off
39 | #define pinsOn(pinmap) PORTB |= (pinmap)
40 | #define pinsOff(pinmap) PORTB &= ~(pinmap)
41 | #define pinsToggle(pinmap) PORTB ^= pinmap
42 |
43 | // turn a single pin on or off
44 | #define pinOn(pin) pinsOn(bit(pin))
45 | #define pinOff(pin) pinsOff(bit(pin))
46 | // TODO: Should be called pinToggle
47 | #define toggle(pin) pinsToggle(bit(pin))
48 |
49 | // delay a number of microseconds - or as close as we can get
50 | #if F_CPU == 16500000
51 | // special version to deal with half-mhz speed. in a resolution of 2us increments, rounded up
52 | // this loop has been tuned empirically with an oscilloscope and works in avr-gcc 4.5.1
53 | static inline void microdelay(int microseconds) {
54 | while (microseconds > 1) {
55 | // 16 nops
56 | asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
57 | asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
58 | // 16 nops
59 | asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
60 | asm("NOP");asm("NOP");asm("NOP");
61 |
62 |
63 | microseconds -= 2;
64 | }
65 | }
66 | #else
67 | #define microdelay(microseconds) _delay_loop_2(((microseconds) * (F_CPU / 100000)) / 40)
68 | #endif
69 |
70 | // delay in milliseconds - a custom implementation to avoid util/delay's tendancy to import floating point math libraries
71 | inline void delay(unsigned int ms) {
72 | while (ms > 0) {
73 | // delay for one millisecond (250*4 cycles, multiplied by cpu mhz)
74 | // subtract number of time taken in while loop and decrement and other bits
75 | _delay_loop_2((25 * F_CPU / 100000));
76 | ms--;
77 | }
78 | }
79 |
80 |
81 |
82 | // digital read returns 0 or 1
83 | #define get(pin) ((PINB >> pin) & 0b00000001)
84 | #define getBitmap(bitmap) (PINB & bitmap)
85 | static inline void set(byte pin, byte state) {
86 | if (state) { pinOn(pin); } else { pinOff(pin); }
87 | // alternatly:
88 | // PORTB = (PORTB & ~(bit(pin)) | ((state & 1) << pin);
89 | }
90 |
91 |
--------------------------------------------------------------------------------
/stl model/surface dial t v2.3.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/stl model/surface dial t v2.3.STL
--------------------------------------------------------------------------------
/stl model/surface dial v2.3.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/stl model/surface dial v2.3.STL
--------------------------------------------------------------------------------
/tools/avrdudess_20191012/Changelog.txt:
--------------------------------------------------------------------------------
1 | 2019-10-12 (v2.11):
2 | - Fixed null exception if no MCU selected and "Set fuses" ticked
3 | - Updated Polish translation
4 |
5 | 2019-10-02 (v2.10):
6 | - Fix fuse read issue with MCUs that don't have all low, high and extended fuses
7 | - Update avrdude.conf to allow setting the CFD bit (Disable Clock Failure Detection) in the extended fuse for the ATmega328PB
8 | - Update URLs to HTTPS
9 |
10 | 2019-09-06 (v2.9):
11 | - Added French translation
12 | - Added Russian translation
13 | - Now shows full command line arguments in console output whenever avrdude is invoked
14 | - Fixed breaking click and drag anywhere to move window
15 | - Window title now shows "avrdude version UNKNOWN" instead of "?" if unable to find avrdude version
16 |
17 | 2019-02-09 (v2.8):
18 | - Added .NET 4.0+ to the list of supported runtimes, no longer need to install old .NET versions onto newer systems
19 | - Language selection box has been widened
20 | - New "About" box, now with clickable link
21 | - No longer creates temporary files when reading fuses and lock bits
22 | - LPT parallel port names in the port drop down box are now lower case
23 | - When resizing the main window, the controls on the right side are now also resized
24 |
25 | 2019-01-22 (v2.7):
26 | - Added Polish translation
27 | - Added Chinese translation
28 | - Added AVRDUDE support for ATmega328PB
29 | - Added displaying MCU signature near to the flash and EEPROM sizes
30 | - Fixed being unable to load xml file in the fuse bit selector window in Linux
31 | - Fixed flash and EEPROM file operation only being able to verify when a language other than English is chosen
32 | - All configuration settings are now saved across sessions instead of only the last selected preset
33 | - Window size is now saved across sessions
34 | - Use save file dialog when appropriate instead of only using an open file dialog
35 |
36 | 2018-09-20 (v2.6):
37 | - Fetch a different XML file when checking for updates as older versions of AVRDUDESS don't like the new format
38 |
39 | 2018-09-20 (v2.5):
40 | - Updated AVRDUDE to v6.3
41 | - libusb0.dll now included
42 | - Added a preset manager, you can export and import presets and manage existing presets much easier now
43 | - Added options to hide programmers and MCUs from their drop-down menus
44 | - Added support for different languages, translations go into an xml file in the Languages folder
45 | - Added avrdude support for ATtiny841, ATtiny441 and ATmega16U4
46 | - Added persistent window location, AVRDUDESS will now open in the same location that it was last closed
47 | - Added a preset for Arduino as ISP
48 | - Fixed flash and EEPROM usage bars not working if there is a space in the file path
49 | - Fixed form tab indexes, pressing tab will now go through form controls in order
50 | - When clicking the 'Fuse settings' link it will now automatically load up the selected MCU and fuse values
51 | - Most errors and warnings are now printed to the output console (in pretty colours!) instead of having a million pop-up boxes
52 | - Main window can now be properly resized
53 | - Improved avrdude.conf file parsing
54 | - Various other little fixes and improvements
55 |
56 | 2014-08-05 (v2.4):
57 | - For some reason antivirus software falsely detects AVRDUDESS as malware when using HttpWebRequest to check for updates, using raw sockets seems to fix it
58 |
59 | 2014-07-13 (v2.3):
60 | - Updated AVRDUDE to v6.1
61 | - USB option in port drop down list is now lower case
62 | - Automatically prepend 0x to fuse hex values
63 | - Fixed issue with spaces when setting avrdude.conf location
64 |
65 | 2014-01-02 (v2.2):
66 | - Fixed USBasp frequency not loading from presets for some users
67 | - Fixed incorrect fuse bits for ATmega328(P)
68 | - Flash and EEPROM sizes of selected MCU is shown
69 | - Flash and EEPROM space used is shown as a little usage bar above .hex/.eep file locations and in console
70 | - Fuse bit names have been moved to an external file (bits.xml)
71 | - Added options window
72 | - Now shows log if MCU autodetect failed
73 |
74 | 2013-11-20 (v2.1):
75 | - No longer need to run as administrator to have the config and presets save correctly
76 | - Fixed some typos
77 | - Some more under the hood improvements
78 |
79 | 2013-11-19 (v2.0):
80 | - Updated AVRDUDE to v6.0.1
81 | - Window title shows AVRDUDE version
82 | - AVRDUDE output console moved to main window
83 | - Preset to load at startup can be specified in the command line
84 | - Sticky presets (load last used preset at startup, if one hasn't been specified in the command line)
85 | - Auto detect MCU
86 | - Fuse selector
87 | - USBasp programmer frequency options
88 | - Tool tips setting now saves
89 | - "Update available" window now shows a change log
90 | - "Update available" window now has "Skip version" instead of "Don't ask again"
91 | - "Set fuses" checkbox now defaults to unchecked
92 | - Port selection in Linux now shows ttyS*, ttyUSB*, ttyACM* and lp* devices instead of just ttyS*
93 | - Buttons to separately write/read/verify the flash/EEPROM/fuses
94 | - Popups for saving and deleting presets have been removed, now you type the name into the presets box and save or select the preset to delete and delete it.
95 | - GUI redesign
96 | - Various under the hood improvements
97 |
98 | 2013-02-26 (v1.2):
99 | - ATmega328 non-P added back to avrdude.conf
100 | - Fixed reading high and low fuses the wrong way around
101 | - Fixed if a textbox is full, selecting its contents and typing to replace text didn't work
102 | - Fixed wonky console window in Linux
103 | - Added right click options to console window (only seems to work in Windows)
104 |
105 | 2013-02-25 (v1.1):
106 | - Now only requires .NET Framework 2.0 SP1 instead of 4.0
107 | - Updated AVRDUDE to v5.11.1 from MHV AVR Tools (http://www.makehackvoid.com/project/mhvavrtools)
108 | - Fixed having to copy avrdude binary in Linux/OSX
109 | - Added verbosity level option
110 |
111 | 2013-02-17 (v1.0):
112 | - Initial release
113 |
--------------------------------------------------------------------------------
/tools/avrdudess_20191012/Credits.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/tools/avrdudess_20191012/Credits.txt
--------------------------------------------------------------------------------
/tools/avrdudess_20191012/README.md:
--------------------------------------------------------------------------------
1 | AVRDUDESS - A GUI for AVRDUDE
2 | =============================
3 |
4 | This is a GUI for AVRDUDE ([http://savannah.nongnu.org/projects/avrdude](http://savannah.nongnu.org/projects/avrdude)).
5 |
6 | [https://blog.zakkemble.net/avrdudess-a-gui-for-avrdude/](https://blog.zakkemble.net/avrdudess-a-gui-for-avrdude/)
7 |
8 | 
9 |
10 | Windows:
11 | --------
12 | Requires .NET Framework 2.0 SP1 or newer. All systems since Windows Vista will have the required version already installed.
13 |
14 | Linux & macOS:
15 | -----------------
16 | Can be ran using Mono ([http://www.mono-project.com](http://www.mono-project.com)).\
17 | Has not been tested on macOS, but should work. Might need the `--arch=32` argument.
18 |
19 | mono --arch=32 avrdudess.exe
20 |
21 | Installing on Ubuntu 18.04:
22 | ---------------------------
23 | Install Mono (this is the minimum required, you can use `mono-complete` for a full install):
24 |
25 | sudo apt-get install libmono-system-windows-forms4.0-cil
26 |
27 | On older versions of Ubuntu you might need to use `libmono-winforms2.0-cil` instead.
28 |
29 | Install AVRDUDE and AVR-GCC (for avr-size):
30 |
31 | sudo apt-get install avrdude gcc-avr
32 |
33 | Run AVRDUDESS with mono, you might have to run as root (sudo) so that AVRDUDE can access ports if you haven't changed any permissions or rules.d stuff:
34 |
35 | mono avrdudess.exe
36 |
37 | Building:
38 | ---------
39 | You will need Microsoft Visual Studio 2015 or newer installed (older might work too). Open `./src/avrdudess.sln` and click the 'Start' button at the top and it will build and run AVRDUDESS.\
40 | You can find the output in `./src/avrdudess/bin/Debug/`, or `./src/avrdudess/bin/Release/` if you chose to build for Release (the drop down box second from the left of the Start button is where you can choose the configuration).
41 |
42 | Making the Installer:
43 | ---------------------
44 | You will need [Inno Setup](http://www.jrsoftware.org/isinfo.php) installed. Once you've used Visual Studio to build the Release version of AVRDUDESS, run `./installer/installer.bat` and the installer exe will appear in the same directory.
45 |
46 | --------
47 |
48 | Zak Kemble
49 |
50 | contact@zakkemble.net
51 |
--------------------------------------------------------------------------------
/tools/avrdudess_20191012/TODO.txt:
--------------------------------------------------------------------------------
1 | Add: Better support for ATxmega devices (They have fuses 0-5 instead of low/high/extended and a few other things)
2 | Add: Better fuse selector
3 | Add: Compile avrdude with libftdi support
4 | Add: Simple UI mode
5 | Add: Options to run external programs before and after running AVRDUDE
6 | Add: Accept the same command line arguments as AVRDUDE, which will then be applied to the UI
7 | Fix: High verbosity level resulting in slow programming caused by slow console output
8 | Fix: When auto-detecting MCU have a better guess at what programming interface to use (at the moment it only uses ISP or bootloader)
9 |
--------------------------------------------------------------------------------
/tools/avrdudess_20191012/avr-size.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/tools/avrdudess_20191012/avr-size.exe
--------------------------------------------------------------------------------
/tools/avrdudess_20191012/avrdude.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/tools/avrdudess_20191012/avrdude.exe
--------------------------------------------------------------------------------
/tools/avrdudess_20191012/avrdudess.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/tools/avrdudess_20191012/avrdudess.exe
--------------------------------------------------------------------------------
/tools/avrdudess_20191012/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 1
4 | 0
5 |
6 | 0
7 | 0
8 |
9 | true
10 |
11 |
12 |
13 |
14 | 0
15 | 0
16 |
17 | chinese-zh_CN
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | a
28 | w
29 |
30 | a
31 | w
32 | false
33 | false
34 | false
35 | false
36 | false
37 |
38 |
39 |
40 | false
41 |
42 | false
43 |
44 | 0
45 |
46 |
47 | true
48 |
49 | 0
50 | 0
51 |
52 |
--------------------------------------------------------------------------------
/tools/avrdudess_20191012/libusb0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eddddddddy/Surface_Dial_Arduino/a981019ab3bb6065ff2f4ae199197c2b65d60c7a/tools/avrdudess_20191012/libusb0.dll
--------------------------------------------------------------------------------