1use crate::utils::{Channel, Receiver, Sender};
4use embassy_sync::channel::DynamicSender;
5
6pub mod rgb {
7 use crate::{config::CONST_CONFIG, drivers::interface::rgb::RgbCommand};
8
9 use super::*;
10
11 pub(crate) static RGB_CHANNEL: Channel<RgbCommand, { CONST_CONFIG.buffer.rgb_channel }> =
12 Channel::new();
13
14 pub fn rgb_sender() -> DynamicSender<'static, RgbCommand> {
16 RGB_CHANNEL.dyn_sender()
17 }
18}
19
20pub mod split {
21 use crate::{
22 config::CONST_CONFIG,
23 drivers::interface::split::{MasterToSlave, SlaveToMaster},
24 };
25
26 use super::*;
27
28 type S2mChannel = Channel<SlaveToMaster, { CONST_CONFIG.buffer.split_channel }>;
29 pub type S2mRx<'a> = Receiver<'a, SlaveToMaster, { CONST_CONFIG.buffer.split_channel }>;
30 pub type S2mTx<'a> = Sender<'a, SlaveToMaster, { CONST_CONFIG.buffer.split_channel }>;
31
32 type M2sChannel = Channel<MasterToSlave, { CONST_CONFIG.buffer.split_channel }>;
33 pub type M2sRx<'a> = Receiver<'a, MasterToSlave, { CONST_CONFIG.buffer.split_channel }>;
34 pub type M2sTx<'a> = Sender<'a, MasterToSlave, { CONST_CONFIG.buffer.split_channel }>;
35
36 pub(crate) static M2S_CHANNEL: M2sChannel = Channel::new();
37 pub(crate) static S2M_CHANNEL: S2mChannel = Channel::new();
38}
39
40pub mod report {
41 use core::sync::atomic::Ordering;
42
43 use portable_atomic::AtomicI8;
44 use rktk_keymanager::interface::state::input_event::{EncoderDirection, KeyChangeEvent};
45
46 use crate::{config::CONST_CONFIG, utils::Signal};
47
48 use super::*;
49
50 pub(crate) static MOUSE_CHANGE_X: AtomicI8 = AtomicI8::new(0);
51 pub(crate) static MOUSE_CHANGE_Y: AtomicI8 = AtomicI8::new(0);
52 pub(crate) static MOUSE_CHANGE_SIGNAL: Signal<()> = Signal::new();
53
54 pub fn update_mouse(x: i8, y: i8) {
55 MOUSE_CHANGE_X.fetch_add(x, Ordering::Release);
56 MOUSE_CHANGE_Y.fetch_add(y, Ordering::Release);
57 MOUSE_CHANGE_SIGNAL.signal(());
58 }
59
60 pub(crate) static KEYBOARD_EVENT_REPORT_CHANNEL: Channel<
61 KeyChangeEvent,
62 { CONST_CONFIG.buffer.keyboard_event },
63 > = Channel::new();
64
65 pub fn keyboard_event_sender() -> DynamicSender<'static, KeyChangeEvent> {
67 KEYBOARD_EVENT_REPORT_CHANNEL.dyn_sender()
68 }
69
70 pub(crate) static ENCODER_EVENT_REPORT_CHANNEL: Channel<
71 (u8, EncoderDirection),
72 { CONST_CONFIG.buffer.encoder_event },
73 > = Channel::new();
74
75 pub fn encoder_event_sender() -> DynamicSender<'static, (u8, EncoderDirection)> {
77 ENCODER_EVENT_REPORT_CHANNEL.dyn_sender()
78 }
79}