diff options
author | Philipp Gesang <phg@phi-gamma.net> | 2021-12-12 00:42:47 +0100 |
---|---|---|
committer | Philipp Gesang <phg@phi-gamma.net> | 2021-12-12 00:42:52 +0100 |
commit | 951df26618973a74d8c68a80634f965c23ba0734 (patch) | |
tree | f7198bec0e5eb6da8606b0f74c475fbfc9bfd53d /src/lib.rs | |
parent | 7426d6278f640d1b0c541586013329f9132a7a5f (diff) | |
download | vtcol-951df26618973a74d8c68a80634f965c23ba0734.tar.gz |
bin: implement “leds set” subcommand
Currently only supports setting the raw state from an integer
value:
$ vtcol leds set -8 2
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 28 |
1 files changed, 27 insertions, 1 deletions
@@ -160,7 +160,7 @@ pub mod ioctl } } -#[derive(Debug)] +#[derive(Clone, Copy, Debug)] pub struct KbLedState(u8); impl KbLedState @@ -180,6 +180,12 @@ impl KbLedState pub fn get(con: &Console) -> io::Result<Self> { ioctl::kdgetled(con) } #[inline] + pub fn set(&self, con: &Console) -> io::Result<()> + { + ioctl::kdsetled(con, Some(*self)) + } + + #[inline] pub fn cap(&self) -> bool { (self.0 & 0x4) != 0 } #[inline] @@ -221,6 +227,26 @@ impl From<KbLedState> for u8 fn from(state: KbLedState) -> Self { state.0 } } +impl TryFrom<u8> for KbLedState +{ + type Error = io::Error; + + fn try_from(val: u8) -> io::Result<Self> + { + if val <= 0b111 { + Ok(Self(val)) + } else { + Err(io::Error::new( + io::ErrorKind::Other, + format!( + "invalid raw led value: {:#b}; must not exceed 3 b", + val + ), + )) + } + } +} + #[cfg(test)] mod kb_led_state { |