blob: 71d46430469b15f0e82de4e2e23e2950ff337401 [file] [log] [blame]
David Brownde7729e2017-01-09 10:41:35 -07001//! HAL api for MyNewt applications
2
3use flash::{Result, Flash};
4use libc;
5use std::slice;
6
7// This isn't meant to call directly, but by a wrapper.
8
9#[no_mangle]
10pub extern fn sim_flash_erase(dev: *mut Flash, offset: u32, size: u32) -> libc::c_int {
11 let mut dev: &mut Flash = unsafe { &mut *dev };
12 map_err(dev.erase(offset as usize, size as usize))
13}
14
15#[no_mangle]
16pub extern fn sim_flash_read(dev: *const Flash, offset: u32, dest: *mut u8, size: u32) -> libc::c_int {
17 let dev: &Flash = unsafe { &*dev };
18 let mut buf: &mut[u8] = unsafe { slice::from_raw_parts_mut(dest, size as usize) };
19 map_err(dev.read(offset as usize, &mut buf))
20}
21
22#[no_mangle]
23pub extern fn sim_flash_write(dev: *mut Flash, offset: u32, src: *const u8, size: u32) -> libc::c_int {
24 let mut dev: &mut Flash = unsafe { &mut *dev };
25 let buf: &[u8] = unsafe { slice::from_raw_parts(src, size as usize) };
26 map_err(dev.write(offset as usize, &buf))
27}
28
29fn map_err(err: Result<()>) -> libc::c_int {
30 match err {
31 Ok(()) => 0,
32 Err(_) => -1,
33 }
34}