use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct DriverConfig {
pub connection: ConnectionConfig,
#[serde(default = "default_runtime_clock_ms")]
pub runtime_clock_ms: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(deny_unknown_fields)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum ConnectionConfig {
Can { bus: u8, node_id: u8 },
I2c { bus: u8, address: u16 },
Spi { bus: u8, chip_select: u8 },
Serial { port: String, baud: u32 },
Uart { port: String, baud_rate: u32 },
Usb {
vendor_id: Option<u16>,
product_id: Option<u16>,
},
Gpio {
chip: String,
pins: Vec<GpioPinConfig>,
},
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(deny_unknown_fields)]
pub struct GpioPinConfig {
pub line: u16,
pub direction: GpioDirection,
#[serde(default)]
pub active_low: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum GpioDirection {
Input,
Output,
}
const fn default_runtime_clock_ms() -> u64 {
100
}