aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRonald Kinard <[email protected]>2015-06-09 19:00:59 -0500
committerRonald Kinard <[email protected]>2015-06-09 19:00:59 -0500
commitde4cca655dfce2e92611e5f7b3e890adbadfa105 (patch)
treea34cfa4e8cbaf44a5bb78e2e0fe857a152d78246 /src
downloadctru-rs-de4cca655dfce2e92611e5f7b3e890adbadfa105.tar.xz
ctru-rs-de4cca655dfce2e92611e5f7b3e890adbadfa105.zip
Initial commit.
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs29
-rw-r--r--src/raw/mod.rs72
-rw-r--r--src/raw/srv.rs16
-rw-r--r--src/raw/svc.rs0
4 files changed, 117 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644
index 0000000..e94c809
--- /dev/null
+++ b/src/lib.rs
@@ -0,0 +1,29 @@
+#![feature(core)]
+#![feature(no_std)]
+#![no_std]
+
+extern crate core;
+
+pub mod raw;
+
+pub type Result = i32;
+pub type Handle = u32;
+
+pub mod srv {
+ use super::Result;
+ use super::raw::srv;
+ pub fn init() -> Result {
+ unsafe {
+ return srv::srvInit();
+ }
+ }
+ pub fn exit() -> Result {
+ unsafe {
+ return srv::srvExit();
+ }
+ }
+
+ pub fn awesome() -> i32 {
+ 0
+ }
+}
diff --git a/src/raw/mod.rs b/src/raw/mod.rs
new file mode 100644
index 0000000..d02165f
--- /dev/null
+++ b/src/raw/mod.rs
@@ -0,0 +1,72 @@
+#![allow(non_camel_case_types)]
+#![allow(overflowing_literals)]
+
+pub mod srv;
+pub mod svc;
+
+#[repr(C)]
+pub enum mediatypes_enum {
+ mediatype_NAND,
+ mediatype_SDMC,
+ mediatype_GAMECARD
+}
+
+pub type s8 = i8;
+pub type s16 = i16;
+pub type s32 = i32;
+pub type s64 = i64;
+
+#[repr(u8)]
+pub enum c_void {
+ __variant1,
+ __variant2
+}
+
+#[repr(C)]
+pub enum MemOp {
+ MEMOP_FREE = 1,
+ MEMOP_ALLOC = 3,
+ MEMOP_MAP = 4,
+ MEMOP_UNMAP = 5,
+ MEMOP_PROT = 6,
+
+ MEMOP_ALLOC_LINEAR = 0x10003,
+}
+
+#[repr(C)]
+pub enum MemState {
+ MEMSTATE_FREE = 0,
+ MEMSTATE_RESERVED = 1,
+ MEMSTATE_IO = 2,
+ MEMSTATE_STATIC = 3,
+ MEMSTATE_CODE = 4,
+ MEMSTATE_PRIVATE = 5,
+ MEMSTATE_SHARED = 6,
+ MEMSTATE_CONTINUOUS = 7,
+ MEMSTATE_ALIASED = 8,
+ MEMSTATE_ALIAS = 9,
+ MEMSTATE_ALIASCODE = 10,
+ MEMSTATE_LOCKED = 11
+}
+
+#[repr(C)]
+pub enum MemPerm {
+ MEMPERM_READ = 1,
+ MEMPERM_WRITE = 2,
+ MEMPERM_EXECUTE = 4,
+ MEMPERM_DONTCARE = 0x10000000,
+ MEMPERM_MAX = 0xFFFFFFFF //force 4-byte
+}
+
+#[repr(C)]
+pub struct MemInfo {
+ pub base_addr: u32,
+ pub size: u32,
+ pub perm: u32,
+ pub state: u32,
+}
+
+#[repr(C)]
+pub struct PageInfo {
+ flags: u32,
+}
diff --git a/src/raw/srv.rs b/src/raw/srv.rs
new file mode 100644
index 0000000..338b30f
--- /dev/null
+++ b/src/raw/srv.rs
@@ -0,0 +1,16 @@
+use super::*;
+use super::super::{Result, Handle};
+
+#[link(name="ctru")]
+extern {
+ pub fn srvInit() -> Result;
+ pub fn srvExit() -> Result;
+ pub fn srvGetSessionHandle() -> * const Handle;
+ pub fn srvRegisterClient() -> Result;
+ pub fn srvGetServiceHandle(out: *mut Handle, name: * const u8) -> Result;
+ pub fn srvRegisterService(out: *mut Handle, name: * const u8) -> Result;
+ pub fn srvUnregisterService(name: * const u8) -> Result;
+ pub fn srvPmInit() -> Result;
+ pub fn srvRegisterProcess(procid: u32, count: u32, serviceaccesscontrol: *mut c_void) -> Result;
+ pub fn srvUnregisterProcess(procid: u32) -> Result;
+}
diff --git a/src/raw/svc.rs b/src/raw/svc.rs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/raw/svc.rs