hardware 0.0.9

A no_std bare-metal hardware abstraction layer — all port I/O, memory and swap allocations are guarded at runtime. Do not consider this dependency stable before x.1.x
Documentation
#[derive(Copy, Clone, PartialEq)]
pub enum CommandOpcode {
    Read,
    Write,
    Flush,
    Trim,
    Identify,
}

#[derive(Copy, Clone)]
pub struct Command {
    pub opcode: CommandOpcode,
    pub lba: u64,
    pub sector_count: u32,
    pub buffer_addr: u64,
    pub flags: u32,
}

pub fn read_cmd(lba: u64, sectors: u32, buf: u64) -> Command {
    Command {
        opcode: CommandOpcode::Read,
        lba,
        sector_count: sectors,
        buffer_addr: buf,
        flags: 0,
    }
}

pub fn write_cmd(lba: u64, sectors: u32, buf: u64) -> Command {
    Command {
        opcode: CommandOpcode::Write,
        lba,
        sector_count: sectors,
        buffer_addr: buf,
        flags: 0,
    }
}

pub fn flush_cmd() -> Command {
    Command {
        opcode: CommandOpcode::Flush,
        lba: 0,
        sector_count: 0,
        buffer_addr: 0,
        flags: 0,
    }
}

pub fn trim_cmd(lba: u64, sectors: u32) -> Command {
    Command {
        opcode: CommandOpcode::Trim,
        lba,
        sector_count: sectors,
        buffer_addr: 0,
        flags: 0,
    }
}

pub fn identify_cmd(buf: u64) -> Command {
    Command {
        opcode: CommandOpcode::Identify,
        lba: 0,
        sector_count: 1,
        buffer_addr: buf,
        flags: 0,
    }
}