| // Copyright lowRISC contributors. | |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. | |
| // SPDX-License-Identifier: Apache-2.0 | |
| use serde::{Deserialize, Serialize}; | |
| use std::collections::HashMap; | |
| use crate::bootstrap::BootstrapOptions; | |
| use crate::io::emu::{EmuState, EmuValue}; | |
| use crate::io::gpio::{PinMode, PullMode}; | |
| use crate::io::spi::TransferMode; | |
| use crate::proxy::errors::SerializedError; | |
| use crate::transport::Capabilities; | |
| use crate::util::voltage::Voltage; | |
| #[derive(Serialize, Deserialize)] | |
| pub enum Message { | |
| Req(Request), | |
| Res(Result<Response, SerializedError>), | |
| } | |
| #[derive(Serialize, Deserialize)] | |
| pub enum Request { | |
| GetCapabilities, | |
| ApplyDefaultConfiguration, | |
| Gpio { id: String, command: GpioRequest }, | |
| Uart { id: String, command: UartRequest }, | |
| Spi { id: String, command: SpiRequest }, | |
| I2c { id: String, command: I2cRequest }, | |
| Emu { command: EmuRequest }, | |
| Proxy(ProxyRequest), | |
| } | |
| #[derive(Serialize, Deserialize)] | |
| pub enum Response { | |
| GetCapabilities(Capabilities), | |
| ApplyDefaultConfiguration, | |
| Gpio(GpioResponse), | |
| Uart(UartResponse), | |
| Spi(SpiResponse), | |
| I2c(I2cResponse), | |
| Emu(EmuResponse), | |
| Proxy(ProxyResponse), | |
| } | |
| #[derive(Serialize, Deserialize)] | |
| pub enum GpioRequest { | |
| Write { logic: bool }, | |
| Read, | |
| SetMode { mode: PinMode }, | |
| SetPullMode { pull: PullMode }, | |
| } | |
| #[derive(Serialize, Deserialize)] | |
| pub enum GpioResponse { | |
| Write, | |
| Read { value: bool }, | |
| SetMode, | |
| SetPullMode, | |
| } | |
| #[derive(Serialize, Deserialize)] | |
| pub enum UartRequest { | |
| GetBaudrate, | |
| SetBaudrate { | |
| rate: u32, | |
| }, | |
| Read { | |
| timeout_millis: Option<u32>, | |
| len: u32, | |
| }, | |
| Write { | |
| data: Vec<u8>, | |
| }, | |
| } | |
| #[derive(Serialize, Deserialize)] | |
| pub enum UartResponse { | |
| GetBaudrate { rate: u32 }, | |
| SetBaudrate, | |
| Read { data: Vec<u8> }, | |
| Write, | |
| } | |
| #[derive(Serialize, Deserialize)] | |
| pub enum SpiTransferRequest { | |
| Read { len: u32 }, | |
| Write { data: Vec<u8> }, | |
| Both { data: Vec<u8> }, | |
| } | |
| #[derive(Serialize, Deserialize)] | |
| pub enum SpiTransferResponse { | |
| Read { data: Vec<u8> }, | |
| Write, | |
| Both { data: Vec<u8> }, | |
| } | |
| #[derive(Serialize, Deserialize)] | |
| pub enum SpiRequest { | |
| GetTransferMode, | |
| SetTransferMode { | |
| mode: TransferMode, | |
| }, | |
| GetBitsPerWord, | |
| SetBitsPerWord { | |
| bits_per_word: u32, | |
| }, | |
| GetMaxSpeed, | |
| SetMaxSpeed { | |
| value: u32, | |
| }, | |
| GetMaxTransferCount, | |
| GetMaxChunkSize, | |
| SetVoltage { | |
| voltage: Voltage, | |
| }, | |
| RunTransaction { | |
| transaction: Vec<SpiTransferRequest>, | |
| }, | |
| AssertChipSelect, | |
| DeassertChipSelect, | |
| } | |
| #[derive(Serialize, Deserialize)] | |
| pub enum SpiResponse { | |
| GetTransferMode { | |
| mode: TransferMode, | |
| }, | |
| SetTransferMode, | |
| GetBitsPerWord { | |
| bits_per_word: u32, | |
| }, | |
| SetBitsPerWord, | |
| GetMaxSpeed { | |
| speed: u32, | |
| }, | |
| SetMaxSpeed, | |
| GetMaxTransferCount { | |
| number: usize, | |
| }, | |
| GetMaxChunkSize { | |
| size: usize, | |
| }, | |
| SetVoltage, | |
| RunTransaction { | |
| transaction: Vec<SpiTransferResponse>, | |
| }, | |
| AssertChipSelect, | |
| DeassertChipSelect, | |
| } | |
| #[derive(Serialize, Deserialize)] | |
| pub enum I2cTransferRequest { | |
| Read { len: u32 }, | |
| Write { data: Vec<u8> }, | |
| } | |
| #[derive(Serialize, Deserialize)] | |
| pub enum I2cTransferResponse { | |
| Read { data: Vec<u8> }, | |
| Write, | |
| } | |
| #[derive(Serialize, Deserialize)] | |
| pub enum I2cRequest { | |
| RunTransaction { | |
| address: u8, | |
| transaction: Vec<I2cTransferRequest>, | |
| }, | |
| } | |
| #[derive(Serialize, Deserialize)] | |
| pub enum I2cResponse { | |
| RunTransaction { | |
| transaction: Vec<I2cTransferResponse>, | |
| }, | |
| } | |
| #[derive(Serialize, Deserialize)] | |
| pub enum EmuRequest { | |
| GetState, | |
| Start { | |
| factory_reset: bool, | |
| args: HashMap<String, EmuValue>, | |
| }, | |
| Stop, | |
| } | |
| #[derive(Serialize, Deserialize)] | |
| pub enum EmuResponse { | |
| GetState { state: EmuState }, | |
| Start, | |
| Stop, | |
| } | |
| #[derive(Serialize, Deserialize)] | |
| pub enum ProxyRequest { | |
| Bootstrap { | |
| options: BootstrapOptions, | |
| payload: Vec<u8>, | |
| }, | |
| ApplyPinStrapping { | |
| strapping_name: String, | |
| }, | |
| RemovePinStrapping { | |
| strapping_name: String, | |
| }, | |
| } | |
| #[derive(Serialize, Deserialize)] | |
| pub enum ProxyResponse { | |
| Bootstrap, | |
| ApplyPinStrapping, | |
| RemovePinStrapping, | |
| } |