use crate::kernel::types::ConnectionType;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize)]
#[serde(tag = "type")]
pub enum BoardEvent {
Connection(ConnectionEvent),
Reconnect(ReconnectEvent),
KeyPress(KeyPressEvent),
ComboKey(ComboKeyEvent),
AiVoiceKey(AiVoiceKeyEvent),
ModeChange(ModeChangeEvent),
#[cfg(feature = "test-mode")]
FactoryKey(FactoryKeyEvent),
DeviceInfo(DeviceInfo),
Error(ErrorEvent),
}
#[cfg(feature = "test-mode")]
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
pub struct FactoryKeyEvent {
pub session: u16,
pub input_index: u8,
pub pressed: bool,
pub sequence: u8,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConnectionEvent {
pub connected: bool,
pub connection_type: Option<ConnectionType>,
pub reason: Option<DisconnectReason>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum DisconnectReason {
DeviceGone,
ConnectionTypeChanged(ConnectionType),
UserAction,
DeviceDisconnect,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReconnectEvent {
pub state: ReconnectState,
pub attempt: Option<u32>,
pub message: Option<String>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
pub enum ReconnectState {
Idle,
WaitingForDevice,
Scanning,
Connecting,
Connected,
Suppressed,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeyPressEvent {
pub key_index: usize,
pub key_name: String,
pub key_value: u16,
pub pressed: bool,
pub source: KeySource,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub enum KeySource {
Config,
Consumer,
Gatt,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ComboKeyEvent {
pub keys: Vec<usize>,
pub key_names: Vec<String>,
pub config_mask: Option<u8>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AiVoiceKeyEvent {
pub pressed: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModeChangeEvent {
pub mode: String,
pub mode_value: u8,
pub source: ModeSource,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum ModeSource {
Dial,
Connection,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeviceInfo {
pub mode: u8,
pub mac_address: String,
pub receiver_version: String,
pub firmware_version: String,
pub battery_level: u8,
pub battery_charging: bool,
pub battery_full: bool,
pub chip_id: String,
pub connection_type: ConnectionType,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ErrorEvent {
pub message: String,
pub recoverable: bool,
}