跳转到内容

Underglow

以下是配置键盘使用底部照明的步骤:

设置

必要的 Cargo 功能

您必须启用以下 rumcake 功能:

必要的代码

要设置底部照明,您必须添加一个新的类型来实现特性。然后,您可以在您的 #[keyboard] 宏调用中添加 underglow(id = <type>, driver_setup_fn = <setup_fn>)。您的新类型必须实现 UnderglowDevice 特性。

driver_setup_fn 必须是一个没有参数的异步函数,并返回一个实现 UnderglowDriver<T> 特性的类型。

use rumcake::keyboard;
#[keyboard(
// 在您的键盘宏调用中的某处...
underglow(
id = MyKeyboardUnderglow,
driver_setup_fn = my_underglow_setup,
)
)]
struct MyKeyboard;
// 底部照明配置
use rumcake::lighting::underglow::{UnderglowDevice, UnderglowDriver};
struct MyKeyboardUnderglow; // 实现底部照明特性的新类型
async fn my_underglow_setup() -> impl UnderglowDriver<MyKeyboardUnderglow> {
// TODO: 我们很快会填写这部分!
todo!()
}
impl UnderglowDevice for MyKeyboardUnderglow {
// 必填项:设置 LED 的数量
const NUM_LEDS: usize = 20
}

最后,您必须设置驱动程序。为此,您需要完成您的 driver_setup_fn,构建驱动程序。 您可以检查您选择的驱动程序的 API 参考以查找设置函数或宏,以使此过程更加简单。

根据驱动程序的不同,您可能还需要在 #[keyboard] 宏中实现与您选择的驱动程序对应的适当特性。 查看可用底部照明驱动程序列表以获取此信息。

例如,对于 ws2812_bitbang,您可以使用 setup_ws2812_bitbang! 宏来设置驱动程序:

// 在您的文件中的后面...
use rumcake::lighting::underglow::{UnderglowDevice, UnderglowDriver};
use rumcake::drivers::ws2812_bitbang::setup_ws2812_bitbang;
struct MyKeyboardUnderglow; // 新类型以实现底部照明特性
async fn my_underglow_setup() -> impl UnderglowDriver<MyKeyboardUnderglow> {
// TODO: 我们很快会填写这部分!
todo!()
setup_ws2812_bitbang! { pin: PA10 }
}
impl UnderglowDevice for MyKeyboardUnderglow { /* ... */ }

键值

在您的 Keyberon 布局中,您可以使用 UnderglowCommand 中定义的任何枚举成员:

Toggle,
TurnOn,
TurnOff,
NextEffect,
PrevEffect,
SetEffect(UnderglowEffect),
SetHue(u8),
IncreaseHue(u8),
DecreaseHue(u8),
SetSaturation(u8),
IncreaseSaturation(u8),
DecreaseSaturation(u8),
SetValue(u8),
IncreaseValue(u8),
DecreaseValue(u8),
SetSpeed(u8),
IncreaseSpeed(u8),
DecreaseSpeed(u8),
SaveConfig,// 通常在底部照明配置更改时在内部调用,仅在启用了 `storage` 时可用
ResetTime,// 通常在分割键盘中用于同步 LED

在您的 KeyboardLayout 实现中,您必须通过实现 UnderglowDeviceType 来选择与按键码对应的底部照明系统。

使用示例:

use keyberon::action::Action::*;
use rumcake::lighting::underglow::UnderglowCommand::*;
use rumcake::keyboard::{build_layout, Keyboard, Keycode::*};
impl KeyboardLayout for MyKeyboard {
/* ... */
build_layout! {
{
[ Escape {Custom(Underglow(Toggle))} A B C]
}
}
type UnderglowDeviceType = MyKeyboardUnderglow;
}

可用驱动程序

名称特性标志必需特性
WS2812 Bitbangws2812-bitbangN/A