accessor

A Rust library to access MMIO.

Latest version: 0.3.3 registry icon
Maintenance score
0
Safety score
0
Popularity score
71
Check your open source dependency risks. Get immediate insight about security, stability and licensing risks.
Security
  Vulnerabilities
Version Suggest Low Medium High Critical
0.3.3 0 0 0 0 0
0.3.2 0 0 0 0 0
0.3.1 0 0 0 0 0
0.3.0 0 0 0 0 0
0.2.0 0 0 0 0 0
0.1.0 0 0 0 0 0

Stability
Latest release:

0.3.3 - This version may not be safe as it has not been updated for a long time. Find out if your coding project uses this component and get notified of any reported security vulnerabilities with Meterian-X Open Source Security Platform

Licensing

Maintain your licence declarations and avoid unwanted licences to protect your IP the way you intended.

Apache-2.0   -   Apache License 2.0

Not a wildcard

Not proprietary

OSI Compliant


MIT   -   MIT License

Not a wildcard

Not proprietary

OSI Compliant



accessor

GitHub Actions Crates.io Crates.io docs.rs

Accessors to access physical memory.

This crate provides accessors to values at a specific memory address. When an accessor is created, physical memory is mapped to virtual memory. The methods of the accessors can access a value at the specified physical address. Once an accessor is dropped, the mapped memory is unmapped.

This crate is intended to access memory-mapped I/O. Reading and writing are done volatilely.

The accessed type must implement [Copy] because reading and writing values need to copy it.

This crate is #[no_std] compatible.

use accessor::array;
use accessor::mapper::Mapper;
use accessor::single;
use core::num::NonZeroUsize;

struct M;
impl Mapper for M {
    unsafe fn map(&mut self, phys_start: usize, bytes: usize) -> NonZeroUsize {
        todo!()
    }

    fn unmap(&mut self, phys_start: usize, bytes: usize) {
        todo!()
    }
}

// Create an accessor to an i32 value at the physical address 0x1000.
let mut a = unsafe { single::ReadWrite::<i32, M>::new(0x1000, M) };

// Read a value.
a.read_volatile();

// Write a value.
a.write_volatile(3);

// Create an accessor to an array at the physical address 0x2000 of the type i32 that has 5 elements.
let mut arr = unsafe { array::ReadWrite::<i32, M>::new(0x2000, 5, M) };

// Read the 2nd element.
arr.read_volatile_at(2);

// Write 42 as the 0th element.
arr.write_volatile_at(0, 42);

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.