Files
RedBear-OS/drivers/i2c/i2c-interface/src/lib.rs
T

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),
}