aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.toml2
-rw-r--r--src/console.rs24
-rw-r--r--src/lib.rs6
-rw-r--r--src/sdmc.rs2
-rw-r--r--src/services/apt.rs20
-rw-r--r--src/services/hid.rs19
6 files changed, 52 insertions, 21 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 54b043e..0aa1ecf 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -5,7 +5,7 @@ description = "A safe wrapper around smealum's ctrulib."
license = "https://en.wikipedia.org/wiki/Zlib_License"
links = "ctru"
name = "ctru-rs"
-version = "0.3.0"
+version = "0.4.0"
[dependencies.ctru-sys]
path = "ctru-sys"
diff --git a/src/console.rs b/src/console.rs
index 0d0535a..123c067 100644
--- a/src/console.rs
+++ b/src/console.rs
@@ -1,17 +1,26 @@
-use libctru::console::{consoleInit, consoleClear};
-use libctru::gfx;
+use libctru::console::*;
use libctru::libc;
+use gfx::Screen;
+
use core::fmt::{self, Write};
use core::default::Default;
-use core::marker::PhantomData;
use core::ptr;
pub struct Console {
- pd: PhantomData<()>,
+ context: PrintConsole,
}
impl Console {
+ pub fn init(screen: Screen) -> Self {
+ let ret = unsafe { *(consoleInit(screen.into(), ptr::null_mut())) };
+ Console { context: ret }
+ }
+
+ pub fn set_window(&mut self, x: i32, y: i32, width: i32, height: i32) {
+ unsafe { consoleSetWindow(&mut self.context, x, y, width, height) }
+ }
+
pub fn clear(&mut self) {
unsafe { consoleClear() }
}
@@ -19,15 +28,14 @@ impl Console {
impl Default for Console {
fn default() -> Self {
- unsafe {
- consoleInit(gfx::gfxScreen_t::GFX_TOP, ptr::null_mut());
- }
- Console { pd: PhantomData }
+ let ret = unsafe { *(consoleInit(Screen::Top.into(), ptr::null_mut())) };
+ Console { context: ret }
}
}
impl Write for Console {
fn write_str(&mut self, s: &str) -> fmt::Result {
+ unsafe { consoleSelect(&mut self.context); }
let ret = unsafe { libc::write(libc::STDOUT_FILENO, s.as_ptr() as *const _, s.len()) };
if ret == s.len() as isize {
Ok(())
diff --git a/src/lib.rs b/src/lib.rs
index 2bec58d..43d72a7 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,12 +1,8 @@
-#![feature(lang_items, alloc, collections, macro_reexport, allow_internal_unstable)]
+#![feature(lang_items)]
#![no_std]
#![crate_type = "rlib"]
#![crate_name = "ctru"]
-extern crate alloc;
-#[macro_reexport(format, vec)]
-extern crate collections;
-
extern crate ctru_sys as libctru;
pub mod console;
diff --git a/src/sdmc.rs b/src/sdmc.rs
index 23a70ea..5e98552 100644
--- a/src/sdmc.rs
+++ b/src/sdmc.rs
@@ -7,7 +7,7 @@ pub struct Sdmc {
}
impl Sdmc {
- pub fn new() -> Result<Self, i32> {
+ pub fn new() -> Result<Sdmc, i32> {
unsafe {
let r = sdmcInit();
if r < 0 {
diff --git a/src/services/apt.rs b/src/services/apt.rs
index 8c891a6..612fdf7 100644
--- a/src/services/apt.rs
+++ b/src/services/apt.rs
@@ -51,14 +51,22 @@ impl From<apt::APT_AppStatus> for AppStatus {
}
pub struct Apt {
- pd: PhantomData<()>,
+ pd: PhantomData<i32>
}
impl Apt {
- pub fn new() -> Apt {
- Apt { pd: PhantomData }
+ pub fn new() -> Result<Apt, i32> {
+ unsafe {
+ let r = apt::aptInit();
+ if r < 0 {
+ Err(r)
+ } else {
+ Ok(Apt { pd: PhantomData })
+ }
+ }
}
+
pub fn get_status(&self) -> AppStatus {
unsafe { apt::aptGetStatus().into() }
}
@@ -88,3 +96,9 @@ impl Apt {
}
}
}
+
+impl Drop for Apt {
+ fn drop(&mut self) {
+ unsafe { apt::aptExit() };
+ }
+}
diff --git a/src/services/hid.rs b/src/services/hid.rs
index 14dda12..a9e7954 100644
--- a/src/services/hid.rs
+++ b/src/services/hid.rs
@@ -74,12 +74,19 @@ impl From<PadKey> for u32 {
}
pub struct Hid {
- pd: PhantomData<()>,
+ pd: PhantomData<i32>
}
impl Hid {
- pub fn new() -> Hid {
- Hid { pd: PhantomData }
+ pub fn new() -> Result<Hid, i32> {
+ unsafe {
+ let r = hid::hidInit();
+ if r < 0 {
+ Err(r)
+ } else {
+ Ok(Hid { pd: PhantomData })
+ }
+ }
}
pub fn scan_input(&mut self) {
@@ -119,3 +126,9 @@ impl Hid {
}
}
}
+
+impl Drop for Hid {
+ fn drop(&mut self) {
+ unsafe { hid::hidExit() };
+ }
+}