#![allow(dead_code)]
use bitflags::bitflags;
bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct InterruptEnableFlags: u8 {
const RECEIVED_DATA_AVAILABLE = 0x01;
const TRANSMITTER_HOLDING_EMPTY = 0x02;
const RECEIVER_LINE_STATUS = 0x04;
const MODEM_STATUS = 0x08;
}
}
bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct InterruptIdentificationFlags: u8 {
const NO_INTERRUPT_PENDING = 0x01;
const INTERRUPT_ID_MASK = 0x0E;
const RECEIVER_LINE_STATUS = 0x06;
const RECEIVED_DATA_AVAILABLE = 0x04;
const CHARACTER_TIMEOUT = 0x0C;
const TRANSMITTER_HOLDING_EMPTY = 0x02;
const MODEM_STATUS = 0x00;
const FIFO_ENABLE_MASK = 0xC0;
}
}
bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct FifoControlFlags: u8 {
const ENABLE_FIFO = 0x01;
const CLEAR_RECEIVER_FIFO = 0x02;
const CLEAR_TRANSMITTER_FIFO = 0x04;
const DMA_MODE_SELECT = 0x08;
const TRIGGER_LEVEL_MASK = 0xC0;
const TRIGGER_1_BYTE = 0x00;
const TRIGGER_4_BYTES = 0x40;
const TRIGGER_8_BYTES = 0x80;
const TRIGGER_14_BYTES = 0xC0;
}
}
bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct LineControlFlags: u8 {
const WORD_LENGTH_MASK = 0x03;
const WORD_LENGTH_5 = 0x00;
const WORD_LENGTH_6 = 0x01;
const WORD_LENGTH_7 = 0x02;
const WORD_LENGTH_8 = 0x03;
const STOP_BITS = 0x04;
const PARITY_ENABLE = 0x08;
const EVEN_PARITY = 0x10;
const STICK_PARITY = 0x20;
const SET_BREAK = 0x40;
const DIVISOR_LATCH_ACCESS = 0x80;
}
}
bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct ModemControlFlags: u8 {
const DATA_TERMINAL_READY = 0x01;
const REQUEST_TO_SEND = 0x02;
const OUT_1 = 0x04;
const OUT_2 = 0x08;
const LOOPBACK_ENABLE = 0x10;
const MODEM_CONTROL_MASK = 0x0F;
}
}
bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct LineStatusFlags: u8 {
const DATA_READY = 0x01;
const OVERRUN_ERROR = 0x02;
const PARITY_ERROR = 0x04;
const FRAMING_ERROR = 0x08;
const BREAK_INTERRUPT = 0x10;
const TRANSMITTER_HOLDING_EMPTY = 0x20;
const TRANSMITTER_EMPTY = 0x40;
const FIFO_ERROR = 0x80;
const ERROR_MASK = 0x1E;
}
}
bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct ModemStatusFlags: u8 {
const DELTA_CLEAR_TO_SEND = 0x01;
const DELTA_DATA_SET_READY = 0x02;
const TRAILING_EDGE_RING = 0x04;
const DELTA_DATA_CARRIER_DETECT = 0x08;
const CLEAR_TO_SEND = 0x10;
const DATA_SET_READY = 0x20;
const RING_INDICATOR = 0x40;
const DATA_CARRIER_DETECT = 0x80;
const DELTA_MASK = 0x0F;
const STATUS_MASK = 0xF0;
}
}
pub const UART_RBR: u8 = 0x00;
pub const UART_THR: u8 = 0x00;
pub const UART_DLL: u8 = 0x00;
pub const UART_IER: u8 = 0x01;
pub const UART_DLH: u8 = 0x01;
pub const UART_IIR: u8 = 0x02;
pub const UART_FCR: u8 = 0x02;
pub const UART_LCR: u8 = 0x03;
pub const UART_MCR: u8 = 0x04;
pub const UART_LSR: u8 = 0x05;
pub const UART_MSR: u8 = 0x06;
pub const UART_SCR: u8 = 0x07;
pub const UART_IER_RDI: u8 = 0x01; pub const UART_IER_THRI: u8 = 0x02; pub const UART_IER_RLSI: u8 = 0x04; pub const UART_IER_MSI: u8 = 0x08;
pub const UART_IIR_NO_INT: u8 = 0x01; pub const UART_IIR_ID: u8 = 0x0E; pub const UART_IIR_RLSI: u8 = 0x06; pub const UART_IIR_RDI: u8 = 0x04; pub const UART_IIR_CTI: u8 = 0x0C; pub const UART_IIR_THRI: u8 = 0x02; pub const UART_IIR_MSI: u8 = 0x00; pub const UART_IIR_FIFO_ENABLE: u8 = 0xC0; pub const UART_IIR_FIFO_MASK: u8 = 0xC0;
pub const UART_FCR_ENABLE_FIFO: u8 = 0x01; pub const UART_FCR_CLEAR_RCVR: u8 = 0x02; pub const UART_FCR_CLEAR_XMIT: u8 = 0x04; pub const UART_FCR_DMA_SELECT: u8 = 0x08; pub const UART_FCR_TRIGGER_MASK: u8 = 0xC0; pub const UART_FCR_TRIGGER_1: u8 = 0x00; pub const UART_FCR_TRIGGER_4: u8 = 0x40; pub const UART_FCR_TRIGGER_8: u8 = 0x80; pub const UART_FCR_TRIGGER_14: u8 = 0xC0;
pub const UART_LCR_WLEN5: u8 = 0x00; pub const UART_LCR_WLEN6: u8 = 0x01; pub const UART_LCR_WLEN7: u8 = 0x02; pub const UART_LCR_WLEN8: u8 = 0x03; pub const UART_LCR_STOP: u8 = 0x04; pub const UART_LCR_PARITY: u8 = 0x08; pub const UART_LCR_EPAR: u8 = 0x10; pub const UART_LCR_SPAR: u8 = 0x20; pub const UART_LCR_SBRK: u8 = 0x40; pub const UART_LCR_DLAB: u8 = 0x80;
pub const UART_MCR_DTR: u8 = 0x01; pub const UART_MCR_RTS: u8 = 0x02; pub const UART_MCR_OUT1: u8 = 0x04; pub const UART_MCR_OUT2: u8 = 0x08; pub const UART_MCR_LOOP: u8 = 0x10;
pub const UART_LSR_DR: u8 = 0x01; pub const UART_LSR_OE: u8 = 0x02; pub const UART_LSR_PE: u8 = 0x04; pub const UART_LSR_FE: u8 = 0x08; pub const UART_LSR_BI: u8 = 0x10; pub const UART_LSR_THRE: u8 = 0x20; pub const UART_LSR_TEMT: u8 = 0x40; pub const UART_LSR_FIFOE: u8 = 0x80;
pub const UART_MSR_DCTS: u8 = 0x01; pub const UART_MSR_DDSR: u8 = 0x02; pub const UART_MSR_TERI: u8 = 0x04; pub const UART_MSR_DDCD: u8 = 0x08; pub const UART_MSR_CTS: u8 = 0x10; pub const UART_MSR_DSR: u8 = 0x20; pub const UART_MSR_RI: u8 = 0x40; pub const UART_MSR_DCD: u8 = 0x80;
pub const UART_DEFAULT_BAUD_RATE: u32 = 9600;
pub const UART_INPUT_CLOCK: u32 = 1_843_200;
pub const UART_DEFAULT_DIVISOR: u16 = (UART_INPUT_CLOCK / (16 * UART_DEFAULT_BAUD_RATE)) as u16;
pub const UART_FIFO_SIZE: u8 = 16;
pub const UART_LCR_WLEN_MASK: u8 = 0x03;
pub const UART_IIR_INTERRUPT_MASK: u8 = 0x0E;
pub const UART_MCR_MODEM_MASK: u8 = 0x0F;
pub const UART_LSR_ERROR_MASK: u8 = 0x1E;
pub const UART_MSR_DELTA_MASK: u8 = 0x0F;
pub const UART_MSR_STATUS_MASK: u8 = 0xF0;