93 lines
2.2 KiB
Rust
93 lines
2.2 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
|
|
pub use syscall;
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub enum I2cTransferOp {
|
|
Write(Vec<u8>),
|
|
Read(usize),
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub struct I2cTransferSegment {
|
|
pub address: u16,
|
|
pub ten_bit_address: bool,
|
|
pub op: I2cTransferOp,
|
|
}
|
|
|
|
impl I2cTransferSegment {
|
|
pub fn write(address: u16, payload: impl Into<Vec<u8>>) -> Self {
|
|
Self {
|
|
address,
|
|
ten_bit_address: false,
|
|
op: I2cTransferOp::Write(payload.into()),
|
|
}
|
|
}
|
|
|
|
pub fn read(address: u16, len: usize) -> Self {
|
|
Self {
|
|
address,
|
|
ten_bit_address: false,
|
|
op: I2cTransferOp::Read(len),
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub struct I2cTransferRequest {
|
|
pub adapter: String,
|
|
pub segments: Vec<I2cTransferSegment>,
|
|
pub stop: bool,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub struct I2cTransferResponse {
|
|
pub ok: bool,
|
|
pub read_data: Vec<Vec<u8>>,
|
|
pub error: Option<String>,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
|
|
pub struct I2cAdapterRegistration {
|
|
pub name: String,
|
|
pub description: String,
|
|
pub acpi_companion: Option<String>,
|
|
pub slave_address_override: Option<u16>,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub struct I2cAdapterInfo {
|
|
pub id: u32,
|
|
pub name: String,
|
|
pub max_transaction_size: usize,
|
|
pub supports_10bit_addr: bool,
|
|
}
|
|
|
|
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub enum I2cTransferStatus {
|
|
Ok,
|
|
Nack,
|
|
Timeout,
|
|
Error,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub enum I2cControlRequest {
|
|
RegisterAdapter { info: I2cAdapterInfo },
|
|
OpenAdapter { id: u32 },
|
|
Transfer {
|
|
adapter_id: u32,
|
|
request: I2cTransferRequest,
|
|
},
|
|
ListAdapters,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub enum I2cControlResponse {
|
|
AdapterRegistered { id: u32 },
|
|
AdapterOpened,
|
|
TransferResult(I2cTransferResponse),
|
|
AdapterList(Vec<I2cAdapterInfo>),
|
|
Error(String),
|
|
}
|