diff --git a/src/codec/command.rs b/src/codec/command.rs index b818b44..f22a74b 100644 --- a/src/codec/command.rs +++ b/src/codec/command.rs @@ -46,14 +46,14 @@ macro_rules! command { } macro_rules! param { - (pub enum $name:ident { $($variant:ident => $val:literal),+ }) => { + (pub enum $name:ident { $($variant:ident => $val:literal),+ $(,)? }) => { pub enum $name { $($variant),+ } impl Param for $name { fn write_bytes(&self, dst: &mut tokio_util::bytes::BytesMut) { let s = match self { - $(Self::$variant => $val),+ + $(Self::$variant => $val.as_slice()),+ }; dst.extend_from_slice(s); } @@ -88,15 +88,13 @@ command!( } ); -param! { - pub enum Backlight { - AlwaysOn => b"AO", - AlwaysOff => b"AF", - Keypress => b"KY", - Squelch => b"SQ", - KeySquelch => b"KS" - } -} +param!(pub enum Backlight { + AlwaysOn => b"AO", + AlwaysOff => b"AF", + Keypress => b"KY", + Squelch => b"SQ", + KeySquelch => b"KS", +}); command!(b"BSV", GetBatteryInfo); command!(b"BSV", SetBatteryInfo(BatteryChargeTime)); @@ -110,3 +108,20 @@ param!(pub enum BandPlan { Usa => b"0", Canada => b"1" }); + +command!(b"KBP", GetKeyBeep); +command!( + b"KBP", + SetKeyBeep { + beep_level: BeepLevel, + key_lock_status: KeyLockStatus + } +); +param!(pub enum BeepLevel { + Auto => b"0", + Off => b"99", +}); +param!(pub enum KeyLockStatus { + Off => b"0", + On => b"1", +}); diff --git a/src/lib.rs b/src/lib.rs index 335db9e..fe2e655 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,9 +10,9 @@ use crate::codec::Codec; use crate::codec::command::Command; pub use crate::codec::command::{ - Backlight, BandPlan, BatteryChargeTime, ClearAllMemory, EnterProgramMode, ExitProgramMode, - GetBacklight, GetBandPlan, GetBatteryInfo, GetFirmwareVersion, GetModelInfo, SetBacklight, - SetBandPlan, SetBatteryInfo, + Backlight, BandPlan, BatteryChargeTime, BeepLevel, ClearAllMemory, EnterProgramMode, + ExitProgramMode, GetBacklight, GetBandPlan, GetBatteryInfo, GetFirmwareVersion, GetKeyBeep, + GetModelInfo, KeyLockStatus, SetBacklight, SetBandPlan, SetBatteryInfo, SetKeyBeep, }; const VENDOR_ID: u16 = 0x1965; diff --git a/src/main.rs b/src/main.rs index fd004b2..49b2a4b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,6 @@ use uniden::{ - Backlight, BandPlan, BatteryChargeTime, EnterProgramMode, ExitProgramMode, GetBacklight, - GetBandPlan, GetBatteryInfo, GetFirmwareVersion, GetModelInfo, Scanner, SetBacklight, - SetBandPlan, SetBatteryInfo, + EnterProgramMode, ExitProgramMode, GetFirmwareVersion, GetKeyBeep, GetModelInfo, Scanner, + SetKeyBeep, }; #[tokio::main] @@ -11,9 +10,18 @@ async fn main() -> Result<(), Box> { dbg!(scanner.command(GetFirmwareVersion).await?); dbg!(scanner.command(GetModelInfo).await?); dbg!(scanner.command(EnterProgramMode).await?); - dbg!(scanner.command(GetBandPlan).await?); - dbg!(scanner.command(SetBandPlan(BandPlan::Usa)).await?); - dbg!(scanner.command(GetBandPlan).await?); + + dbg!(scanner.command(GetKeyBeep).await?); + dbg!( + scanner + .command(SetKeyBeep { + beep_level: uniden::BeepLevel::Auto, + key_lock_status: uniden::KeyLockStatus::Off + }) + .await? + ); + dbg!(scanner.command(GetKeyBeep).await?); + dbg!(scanner.command(ExitProgramMode).await?); Ok(()) }