DerFetzer/open-cleverpad
GitHub: DerFetzer/open-cleverpad
为 MIDIPLUS SmartPAD MIDI 控制器开发的开源替代固件,提供更丰富的颜色支持和 MIDI 控制能力。
Stars: 30 | Forks: 6
# open-cleverpad
本项目由 [DerFetzer][team] 开发和维护。
非常欢迎提交功能建议和 pull request!
## 功能
* 所有 pad、编码器和底部的按钮在使用时都会生成标准的 MIDI 消息。
* Pad 支持 64 种颜色,而不是原厂固件仅有 8 种。
* 所有 LED 都可以通过 MIDI 消息进行完全控制。
* 左侧按钮用于设置编码器消息的 channel。
* 右侧按钮用于设置 pad 的 channel。
* 通过 MIDI 消息切换 channel。
## MIDI 消息
请查看包含的 [Ardour MIDI 映射][midimap],以了解其具体的使用方式。
* Pad:`note_on/note_off channel=m note=0-64 velocity=127/0`,其中 `m` 可以通过右侧的按钮进行设置
* 底部按钮:`note_on/note_off channel=8/9 note=0-3 velocity=127/0`
* 编码器:`control_change channel=n control=1-8 value=v time=0`,其中 `n` 可以通过左侧的按钮进行设置,默认情况下 `v` 的工作方式遵循[此处][ardourmidi]的 `enc-l` 规则
* 设置编码器参数:
* 发送 `control_change channel=n control=112, value=0-4` 可将 channel `n` 的编码器行为更改为 `0=enc-r`、`1=enc-l`、`2=enc-2`、`3=enc-b`,如[此处][ardourmidi]所述。
当值为 `4` 时,编码器发送绝对值。当前的内部值可以通过相应的编码器消息进行设置。
* 发送 `control_change channel=n control=113, value=1-33` 可更改快速移动时 channel `n` 编码器的值乘数(默认值为 10)
* 设置编码器 channel:发送 `control_change, control=110, value=0-7`
* 设置 pad channel:发送 `control_change, control=111, value=0-7`
* 设置 LED 颜色:发送与 pad/button 生成消息具有相同 channel 和 note 的 `note_on` 指令,发送任何值的 `note_off` 都会关闭 LED
* 底部按钮:任何大于 0 的 `value` 都会点亮 LED
* Pad:`value` 被解析为 `0b0bbggrr`
## 安装说明
* **[仅需执行一次]** 本固件专为配合 [HID-bootloader][bootloader] 使用而设计。
* 下载此 [代码库][bootloader]。
* 在 `./bootloader/F1` 文件夹中执行 `make smartpad` 来编译 bootloader,或者使用 [bin](bin) 文件夹中预编译的二进制文件。
* **重要提示:此步骤后原厂固件将会丢失,且无法恢复!**
* 按照[此处][kikpadflash]的说明通过 SWD 烧录生成的二进制文件,或者使用任何其他你熟悉的方法。
* 为了进入 bootloader 模式,你必须在设备通电期间**按住第三行的第一个 pad 约 1 秒钟**。
* 使用 [bin](bin) 文件夹中预编译的二进制文件,或者运行 `cargo objcopy --release -- --bin open-cleverpad -O binary open-cleverpad.bin` 从源码生成二进制文件。
* 使用 `./cli` 文件夹中的 `hid-flash` 工具烧录 .bin 文件,命令类似于:`hid-flash open-cleverpad.bin tty0`。你可以使用任意一个串口设备,忽略诸如 `error, counldn't open [/dev/tty0]` 的报错信息即可。
## 开发者文档
* 所使用的 STM32F103RBT6 不幸开启了 flash 读取保护,并且
有一个函数会在 SWD 接口有活动时重置微控制器。
* 原厂固件中有一个更新机制,但我没有深入研究过。
当前的更新程序可以在 [MIDIPLUS 主页][firmware] 下载。
* [s0len0id][solenoid] 在[此处][smartpad-tester]整理了一份关于原厂固件功能的详细文档。
* 为了解除读取保护,你必须对设备进行全片擦除,**因此原厂固件将会丢失**。
你必须在启动期间进行尝试,方法类似于以下操作:
```
$ openocd -f /usr/share/openocd/scripts/interface/stlink-v1.cfg -f /usr/share/openocd/scripts/target/stm32f1x.cfg -c init -c "reset halt" -c "flash banks" -c "stm32f1x mass_erase 0" -c "stm32f1x unlock 0"
```
* 有关所用硬件的逆向工程信息,请参见 [hardware](hardware) 文件夹。
## 依赖项
- ARM Cortex-M3 的 `rust-std` 组件(预编译的 `core` crate)
target。运行:
```
$ rustup target add thumbv7m-none-eabi
```
# 许可证
本 crate 可根据以下任一许可证进行授权
- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) 或
http://www.apache.org/licenses/LICENSE-2.0)
- MIT license ([LICENSE-MIT](LICENSE-MIT) 或 http://opensource.org/licenses/MIT)
由你自行选择。
## 贡献
除非你明确声明,否则根据 Apache-2.0 许可证的定义,你出于包含在本作品中的目的而有意提交的
任何贡献,均应按上述方式进行
双重授权,无需遵守任何额外的条款或条件。
## 行为准则
对本 crate 的贡献受 [Rust 行为准则][CoC] 的条款管辖,本 crate 的维护者 [DerFetzer][team] 承诺
将介入以维护该行为准则。
标签:MIDI控制器, 可视化界面, 嵌入式开发, 开源固件, 硬件交互, 通知系统, 音频设备