feat(init): implement supervisor with storage-backed restart, binary source tracking, and back-off delays

This commit is contained in:
2026-10-18 03:52:07 +02:00
parent 29c3841679
commit 0a2e01bec9
5 changed files with 211 additions and 42 deletions

View File

@@ -0,0 +1,47 @@
pub fn storage_open(storage_ep: usize, path: &[u8]) -> usize {
let mut w0 = [0u8; 8];
let mut w1 = [0u8; 8];
for (i, &b) in path.iter().enumerate() {
if i < 8 { w0[i] = b; }
else if i < 16 { w1[i - 8] = b; }
}
// StorageRequest::Open tag = 0
let (r0, _, _, _) = userspace::syscall::receive(storage_ep);
let _ = userspace::syscall::send(
storage_ep,
0, // Open tag
usize::from_le_bytes(w0),
usize::from_le_bytes(w1),
0,
);
// Response: Handle(h) has tag 0, handle in word 1
let (tag, handle, _, _) = userspace::syscall::receive(storage_ep);
if tag == 0 { handle } else { usize::MAX }
}
pub fn storage_close(storage_ep: usize, handle: usize) {
let _ = userspace::syscall::send(
storage_ep,
3, // Close tag
handle,
0,
0,
);
}
pub fn storage_write_binary(storage_ep: usize, path: &[u8], _binary: &[u8]) {
let mut w0 = [0u8; 8];
let mut w1 = [0u8; 8];
for (i, &b) in path.iter().enumerate() {
if i < 8 { w0[i] = b; }
else if i < 16 { w1[i - 8] = b; }
}
// Create file
let _ = userspace::syscall::send(
storage_ep,
5, // Create tag
usize::from_le_bytes(w0),
usize::from_le_bytes(w1),
0,
);
}