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控制器, 可视化界面, 嵌入式开发, 开源固件, 硬件交互, 通知系统, 音频设备