Skip to content

Commit 9d450df

Browse files
authored
Merge pull request #53 from Neotron-Compute/use-new-common-bios-api
Update OS to use new common crate.
2 parents c64f0ea + 758855e commit 9d450df

File tree

9 files changed

+57
-48
lines changed

9 files changed

+57
-48
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
## Unreleased changes
44

5+
* Switch to neotron-common-bios 0.9
6+
57
## v0.4.0
68

79
* The `load` command now takes ELF binaries, not raw binaries.

Cargo.lock

Lines changed: 3 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ panic = "abort"
4141
panic = "abort"
4242

4343
[dependencies]
44-
neotron-common-bios = "0.8"
44+
neotron-common-bios = "0.9"
4545
pc-keyboard = "0.7"
4646
r0 = "1.0"
4747
postcard = "1.0"

src/commands/block.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ fn lsblk(_menu: &menu::Menu<Ctx>, _item: &menu::Item<Ctx>, _args: &[&str], _ctx:
3636

3737
println!("Block Devices:");
3838
for dev_idx in 0..=255u8 {
39-
if let bios::Option::Some(device_info) = (api.block_dev_get_info)(dev_idx) {
39+
if let bios::FfiOption::Some(device_info) = (api.block_dev_get_info)(dev_idx) {
4040
let (bsize, bunits, dsize, dunits) =
4141
match device_info.num_blocks * u64::from(device_info.block_size) {
4242
x if x < (1024 * 1024 * 1024) => {
@@ -91,9 +91,9 @@ fn read_block(_menu: &menu::Menu<Ctx>, _item: &menu::Item<Ctx>, args: &[&str], _
9191
dev_idx,
9292
bios::block_dev::BlockIdx(block_idx),
9393
1,
94-
bios::ApiBuffer::new(&mut buffer),
94+
bios::FfiBuffer::new(&mut buffer),
9595
) {
96-
bios::Result::Ok(_) => {
96+
bios::ApiResult::Ok(_) => {
9797
// Carry on
9898
let mut count = 0;
9999
for chunk in buffer.chunks(32) {
@@ -105,7 +105,7 @@ fn read_block(_menu: &menu::Menu<Ctx>, _item: &menu::Item<Ctx>, args: &[&str], _
105105
println!();
106106
}
107107
}
108-
bios::Result::Err(e) => {
108+
bios::ApiResult::Err(e) => {
109109
println!("Failed to read: {:?}", e);
110110
}
111111
}

src/commands/hardware.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ fn lshw(_menu: &menu::Menu<Ctx>, _item: &menu::Item<Ctx>, _args: &[&str], _ctx:
1818

1919
println!("Memory regions:");
2020
for region_idx in 0..=255u8 {
21-
if let bios::Option::Some(region) = (api.memory_get_region)(region_idx) {
21+
if let bios::FfiOption::Some(region) = (api.memory_get_region)(region_idx) {
2222
println!(" {}: {}", region_idx, region);
2323
found = true;
2424
}
@@ -31,7 +31,7 @@ fn lshw(_menu: &menu::Menu<Ctx>, _item: &menu::Item<Ctx>, _args: &[&str], _ctx:
3131

3232
println!("Serial Devices:");
3333
for dev_idx in 0..=255u8 {
34-
if let bios::Option::Some(device_info) = (api.serial_get_info)(dev_idx) {
34+
if let bios::FfiOption::Some(device_info) = (api.serial_get_info)(dev_idx) {
3535
println!(
3636
" {}: {} {:?}",
3737
dev_idx, device_info.name, device_info.device_type
@@ -47,7 +47,7 @@ fn lshw(_menu: &menu::Menu<Ctx>, _item: &menu::Item<Ctx>, _args: &[&str], _ctx:
4747

4848
println!("Block Devices:");
4949
for dev_idx in 0..=255u8 {
50-
if let bios::Option::Some(device_info) = (api.block_dev_get_info)(dev_idx) {
50+
if let bios::FfiOption::Some(device_info) = (api.block_dev_get_info)(dev_idx) {
5151
println!(
5252
" {}: {} {:?} bs={} size={} MiB",
5353
dev_idx,
@@ -67,7 +67,7 @@ fn lshw(_menu: &menu::Menu<Ctx>, _item: &menu::Item<Ctx>, _args: &[&str], _ctx:
6767

6868
println!("I2C Buses:");
6969
for dev_idx in 0..=255u8 {
70-
if let bios::Option::Some(device_info) = (api.i2c_bus_get_info)(dev_idx) {
70+
if let bios::FfiOption::Some(device_info) = (api.i2c_bus_get_info)(dev_idx) {
7171
println!(" {}: {:?}", dev_idx, device_info);
7272
found = true;
7373
}
@@ -80,7 +80,7 @@ fn lshw(_menu: &menu::Menu<Ctx>, _item: &menu::Item<Ctx>, _args: &[&str], _ctx:
8080

8181
println!("Neotron Bus Devices:");
8282
for dev_idx in 0..=255u8 {
83-
if let bios::Option::Some(device_info) = (api.bus_get_info)(dev_idx) {
83+
if let bios::FfiOption::Some(device_info) = (api.bus_get_info)(dev_idx) {
8484
println!(" {}: {:?}", dev_idx, device_info);
8585
found = true;
8686
}
@@ -93,7 +93,7 @@ fn lshw(_menu: &menu::Menu<Ctx>, _item: &menu::Item<Ctx>, _args: &[&str], _ctx:
9393

9494
println!("Audio Mixers:");
9595
for dev_idx in 0..=255u8 {
96-
if let bios::Option::Some(device_info) = (api.audio_mixer_channel_get_info)(dev_idx) {
96+
if let bios::FfiOption::Some(device_info) = (api.audio_mixer_channel_get_info)(dev_idx) {
9797
println!(" {}: {:?}", dev_idx, device_info);
9898
found = true;
9999
}

src/commands/input.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ fn kbtest(_menu: &menu::Menu<Ctx>, _item: &menu::Item<Ctx>, _args: &[&str], ctx:
1616
let api = API.get();
1717
loop {
1818
match (api.hid_get_event)() {
19-
bios::Result::Ok(bios::Option::Some(bios::hid::HidEvent::KeyPress(code))) => {
19+
bios::ApiResult::Ok(bios::FfiOption::Some(bios::hid::HidEvent::KeyPress(code))) => {
2020
let pckb_ev = pc_keyboard::KeyEvent {
2121
code,
2222
state: pc_keyboard::KeyState::Down,
@@ -30,7 +30,7 @@ fn kbtest(_menu: &menu::Menu<Ctx>, _item: &menu::Item<Ctx>, _args: &[&str], ctx:
3030
break;
3131
}
3232
}
33-
bios::Result::Ok(bios::Option::Some(bios::hid::HidEvent::KeyRelease(code))) => {
33+
bios::ApiResult::Ok(bios::FfiOption::Some(bios::hid::HidEvent::KeyRelease(code))) => {
3434
let pckb_ev = pc_keyboard::KeyEvent {
3535
code,
3636
state: pc_keyboard::KeyState::Up,
@@ -41,11 +41,13 @@ fn kbtest(_menu: &menu::Menu<Ctx>, _item: &menu::Item<Ctx>, _args: &[&str], ctx:
4141
println!("Code={code:?} State=Up Decoded=None");
4242
}
4343
}
44-
bios::Result::Ok(bios::Option::Some(bios::hid::HidEvent::MouseInput(_ignore))) => {}
45-
bios::Result::Ok(bios::Option::None) => {
44+
bios::ApiResult::Ok(bios::FfiOption::Some(bios::hid::HidEvent::MouseInput(
45+
_ignore,
46+
))) => {}
47+
bios::ApiResult::Ok(bios::FfiOption::None) => {
4648
// Do nothing
4749
}
48-
bios::Result::Err(e) => {
50+
bios::ApiResult::Err(e) => {
4951
println!("Failed to get HID events: {:?}", e);
5052
}
5153
}

src/config.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,24 @@ impl Config {
1717
pub fn load() -> Result<Config, &'static str> {
1818
let api = API.get();
1919
let mut buffer = [0u8; 64];
20-
match (api.configuration_get)(bios::ApiBuffer::new(&mut buffer)) {
21-
bios::Result::Ok(n) => {
20+
match (api.configuration_get)(bios::FfiBuffer::new(&mut buffer)) {
21+
bios::ApiResult::Ok(n) => {
2222
postcard::from_bytes(&buffer[0..n]).map_err(|_e| "Failed to parse config")
2323
}
24-
bios::Result::Err(_e) => Err("Failed to load config"),
24+
bios::ApiResult::Err(_e) => Err("Failed to load config"),
2525
}
2626
}
2727

2828
pub fn save(&self) -> Result<(), &'static str> {
2929
let api = API.get();
3030
let mut buffer = [0u8; 64];
3131
let slice = postcard::to_slice(self, &mut buffer).map_err(|_e| "Failed to parse config")?;
32-
match (api.configuration_set)(bios::ApiByteSlice::new(slice)) {
33-
bios::Result::Ok(_) => Ok(()),
34-
bios::Result::Err(bios::Error::Unimplemented) => Err("BIOS doesn't support this (yet)"),
35-
bios::Result::Err(_) => Err("BIOS reported an error"),
32+
match (api.configuration_set)(bios::FfiByteSlice::new(slice)) {
33+
bios::ApiResult::Ok(_) => Ok(()),
34+
bios::ApiResult::Err(bios::Error::Unimplemented) => {
35+
Err("BIOS doesn't support this (yet)")
36+
}
37+
bios::ApiResult::Err(_) => Err("BIOS reported an error"),
3638
}
3739
}
3840

src/fs.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ impl embedded_sdmmc::BlockDevice for BiosBlock {
2727
0,
2828
bios::block_dev::BlockIdx(u64::from(start_block_idx.0)),
2929
blocks.len() as u8,
30-
bios::ApiBuffer::new(byte_slice),
30+
bios::FfiBuffer::new(byte_slice),
3131
) {
32-
bios::Result::Ok(_) => Ok(()),
33-
bios::Result::Err(e) => Err(e),
32+
bios::ApiResult::Ok(_) => Ok(()),
33+
bios::ApiResult::Err(e) => Err(e),
3434
}
3535
}
3636

@@ -50,18 +50,18 @@ impl embedded_sdmmc::BlockDevice for BiosBlock {
5050
0,
5151
bios::block_dev::BlockIdx(u64::from(start_block_idx.0)),
5252
blocks.len() as u8,
53-
bios::ApiByteSlice::new(byte_slice),
53+
bios::FfiByteSlice::new(byte_slice),
5454
) {
55-
bios::Result::Ok(_) => Ok(()),
56-
bios::Result::Err(e) => Err(e),
55+
bios::ApiResult::Ok(_) => Ok(()),
56+
bios::ApiResult::Err(e) => Err(e),
5757
}
5858
}
5959

6060
fn num_blocks(&self) -> Result<embedded_sdmmc::BlockCount, Self::Error> {
6161
let api = API.get();
6262
match (api.block_dev_get_info)(0) {
63-
bios::Option::Some(info) => Ok(embedded_sdmmc::BlockCount(info.num_blocks as u32)),
64-
bios::Option::None => Err(bios::Error::InvalidDevice),
63+
bios::FfiOption::Some(info) => Ok(embedded_sdmmc::BlockCount(info.num_blocks as u32)),
64+
bios::FfiOption::None => Err(bios::Error::InvalidDevice),
6565
}
6666
}
6767
}

src/lib.rs

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,9 @@ impl SerialConsole {
141141
// Which port
142142
self.0,
143143
// Data
144-
bios::ApiByteSlice::new(data),
144+
bios::FfiByteSlice::new(data),
145145
// No timeout
146-
bios::Option::None,
146+
bios::FfiOption::None,
147147
);
148148
if !is_panic {
149149
res.unwrap();
@@ -160,9 +160,9 @@ impl core::fmt::Write for SerialConsole {
160160
// Which port
161161
self.0,
162162
// Data
163-
bios::ApiByteSlice::new(data.as_bytes()),
163+
bios::FfiByteSlice::new(data.as_bytes()),
164164
// No timeout
165-
bios::Option::None,
165+
bios::FfiOption::None,
166166
);
167167
if !is_panic {
168168
res.unwrap();
@@ -267,10 +267,10 @@ pub extern "C" fn os_main(api: &bios::Api) -> ! {
267267
println!("Copyright © Jonathan 'theJPster' Pallant and the Neotron Developers, 2022");
268268

269269
let (tpa_start, tpa_size) = match (api.memory_get_region)(0) {
270-
bios::Option::None => {
270+
bios::FfiOption::None => {
271271
panic!("No TPA offered by BIOS!");
272272
}
273-
bios::Option::Some(tpa) => {
273+
bios::FfiOption::Some(tpa) => {
274274
if tpa.length < 256 {
275275
panic!("TPA not large enough");
276276
}
@@ -305,7 +305,7 @@ pub extern "C" fn os_main(api: &bios::Api) -> ! {
305305

306306
loop {
307307
match (api.hid_get_event)() {
308-
bios::Result::Ok(bios::Option::Some(bios::hid::HidEvent::KeyPress(code))) => {
308+
bios::ApiResult::Ok(bios::FfiOption::Some(bios::hid::HidEvent::KeyPress(code))) => {
309309
let pckb_ev = pc_keyboard::KeyEvent {
310310
code,
311311
state: pc_keyboard::KeyState::Down,
@@ -323,7 +323,7 @@ pub extern "C" fn os_main(api: &bios::Api) -> ! {
323323
}
324324
}
325325
}
326-
bios::Result::Ok(bios::Option::Some(bios::hid::HidEvent::KeyRelease(code))) => {
326+
bios::ApiResult::Ok(bios::FfiOption::Some(bios::hid::HidEvent::KeyRelease(code))) => {
327327
let pckb_ev = pc_keyboard::KeyEvent {
328328
code,
329329
state: pc_keyboard::KeyState::Up,
@@ -338,23 +338,25 @@ pub extern "C" fn os_main(api: &bios::Api) -> ! {
338338
}
339339
}
340340
}
341-
bios::Result::Ok(bios::Option::Some(bios::hid::HidEvent::MouseInput(_ignore))) => {}
342-
bios::Result::Ok(bios::Option::None) => {
341+
bios::ApiResult::Ok(bios::FfiOption::Some(bios::hid::HidEvent::MouseInput(
342+
_ignore,
343+
))) => {}
344+
bios::ApiResult::Ok(bios::FfiOption::None) => {
343345
// Do nothing
344346
}
345-
bios::Result::Err(e) => {
347+
bios::ApiResult::Err(e) => {
346348
println!("Failed to get HID events: {:?}", e);
347349
}
348350
}
349351
if let Some((uart_dev, _serial_conf)) = menu.context.config.get_serial_console() {
350352
loop {
351353
let mut buffer = [0u8; 8];
352-
let wrapper = neotron_common_bios::ApiBuffer::new(&mut buffer);
353-
match (api.serial_read)(uart_dev, wrapper, neotron_common_bios::Option::None) {
354-
neotron_common_bios::Result::Ok(n) if n == 0 => {
354+
let wrapper = neotron_common_bios::FfiBuffer::new(&mut buffer);
355+
match (api.serial_read)(uart_dev, wrapper, neotron_common_bios::FfiOption::None) {
356+
neotron_common_bios::ApiResult::Ok(n) if n == 0 => {
355357
break;
356358
}
357-
neotron_common_bios::Result::Ok(n) => {
359+
neotron_common_bios::ApiResult::Ok(n) => {
358360
for b in &buffer[0..n] {
359361
menu.input_byte(*b);
360362
}

0 commit comments

Comments
 (0)