46 lines
1.2 KiB
Rust
46 lines
1.2 KiB
Rust
mod pcspkr;
|
|
mod scheme;
|
|
|
|
use std::fs::File;
|
|
use std::io::{Read, Write};
|
|
|
|
use syscall::call::iopl;
|
|
use syscall::data::Packet;
|
|
use syscall::scheme::SchemeMut;
|
|
|
|
use redox_daemon::Daemon;
|
|
|
|
use self::pcspkr::Pcspkr;
|
|
use self::scheme::PcspkrScheme;
|
|
|
|
fn main() {
|
|
Daemon::new(move |daemon| {
|
|
unsafe { iopl(3).unwrap() };
|
|
|
|
let mut socket = File::create(":pcspkr").expect("pcspkrd: failed to create pcspkr scheme");
|
|
daemon.ready().expect("failed to notify parent");
|
|
|
|
let pcspkr = Pcspkr::new();
|
|
println!(" + pcspkr");
|
|
|
|
let mut scheme = PcspkrScheme {
|
|
pcspkr,
|
|
handle: None,
|
|
next_id: 0,
|
|
};
|
|
|
|
syscall::setrens(0, 0).expect("pcspkrd: failed to enter null namespace");
|
|
|
|
loop {
|
|
let mut packet = Packet::default();
|
|
socket
|
|
.read(&mut packet)
|
|
.expect("pcspkrd: failed to read events from pcspkr scheme");
|
|
scheme.handle(&mut packet);
|
|
socket
|
|
.write(&packet)
|
|
.expect("pcspkrd: failed to write responses to pcspkr scheme");
|
|
}
|
|
}).expect("pcspkrd: failed to daemonize");
|
|
}
|