aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonald Kinard <[email protected]>2017-07-26 11:16:30 -0500
committerGitHub <[email protected]>2017-07-26 11:16:30 -0500
commitbbd4d28af107aa2e283e33e32def522fcca0d218 (patch)
treee01c54e053090cf91b2eeca3a8e2c883fe15c0dc
parentMerge pull request #39 from panicbit/travis_fix (diff)
parentAdd examples directory (diff)
downloadarchived-ctru-rs-bbd4d28af107aa2e283e33e32def522fcca0d218.tar.xz
archived-ctru-rs-bbd4d28af107aa2e283e33e32def522fcca0d218.zip
Merge pull request #38 from FenrirWolf/examples
Add examples directory
-rw-r--r--examples/.cargo/config15
-rw-r--r--examples/3ds.json19
-rw-r--r--examples/Cargo.toml9
-rw-r--r--examples/Xargo.toml6
-rw-r--r--examples/build.rs11
-rw-r--r--examples/src/bin/hello-both-screens.rs42
-rw-r--r--examples/src/bin/hello-world.rs55
7 files changed, 157 insertions, 0 deletions
diff --git a/examples/.cargo/config b/examples/.cargo/config
new file mode 100644
index 0000000..d2c7139
--- /dev/null
+++ b/examples/.cargo/config
@@ -0,0 +1,15 @@
+[build]
+target = "3ds"
+
+[target.3ds]
+linker = "arm-none-eabi-gcc"
+rustflags = [
+ "-Clink-arg=-specs=3dsx.specs",
+ "-Clink-arg=-mfloat-abi=hard",
+ "-Clink-arg=-march=armv6k",
+ "-Clink-arg=-mtune=mpcore",
+ "-Clink-arg=-mfpu=vfp",
+ "-Clink-arg=-mtp=soft",
+ "-Clink-arg=-lsysbase",
+ "-Clink-arg=-lc"
+]
diff --git a/examples/3ds.json b/examples/3ds.json
new file mode 100644
index 0000000..bec3423
--- /dev/null
+++ b/examples/3ds.json
@@ -0,0 +1,19 @@
+{
+ "data-layout": "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64",
+ "llvm-target": "arm-none-eabihf",
+ "linker": "arm-none-eabi-gcc",
+ "ar": "arm-none-eabi-ar",
+ "target-endian": "little",
+ "target-pointer-width": "32",
+ "target-family": "unix",
+ "arch": "arm",
+ "os": "linux",
+ "env": "newlib",
+ "cpu": "mpcore",
+ "features": "+vfp2",
+ "relocation-model": "static",
+ "executables": true,
+ "exe-suffix": ".elf",
+ "panic-strategy": "abort",
+ "linker-flavor": "gcc"
+}
diff --git a/examples/Cargo.toml b/examples/Cargo.toml
new file mode 100644
index 0000000..e01118a
--- /dev/null
+++ b/examples/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "examples"
+version = "0.1.0"
+
+[dependencies]
+ctru-rs = { path = "../ctru-rs" }
+
+[profile.release]
+lto = true
diff --git a/examples/Xargo.toml b/examples/Xargo.toml
new file mode 100644
index 0000000..7cc0423
--- /dev/null
+++ b/examples/Xargo.toml
@@ -0,0 +1,6 @@
+[dependencies.collections]
+[dependencies.rand]
+
+[dependencies.std]
+path = "../ctr-std"
+stage = 1
diff --git a/examples/build.rs b/examples/build.rs
new file mode 100644
index 0000000..cded1d0
--- /dev/null
+++ b/examples/build.rs
@@ -0,0 +1,11 @@
+use std::env;
+
+fn main() {
+ let dkp_path = env::var("DEVKITPRO").unwrap();
+
+ println!("cargo:rustc-link-search=native={}/libctru/lib", dkp_path);
+ println!("cargo:rustc-link-lib=static={}", match env::var("PROFILE").unwrap().as_str() {
+ "debug" => "ctrud",
+ _ => "ctru",
+ });
+}
diff --git a/examples/src/bin/hello-both-screens.rs b/examples/src/bin/hello-both-screens.rs
new file mode 100644
index 0000000..ade33d4
--- /dev/null
+++ b/examples/src/bin/hello-both-screens.rs
@@ -0,0 +1,42 @@
+extern crate ctru;
+
+use ctru::gfx::{Gfx, Screen};
+use ctru::console::Console;
+use ctru::services::apt::Apt;
+use ctru::services::hid::{Hid, PadKey};
+
+fn main() {
+ // Initialize services
+ let apt = Apt::init().unwrap();
+ let hid = Hid::init().unwrap();
+ let mut gfx = Gfx::default();
+
+ // Start a console on the top screen
+ let mut top_screen = Console::init(Screen::Top);
+
+ // Start a console on the bottom screen.
+ // The most recently initialized console will be active by default
+ let mut bottom_screen = Console::init(Screen::Bottom);
+
+ // Let's print on the top screen first
+ top_screen.select();
+ println!("This is the top screen! We have a lot of space up here!");
+
+ // Now let's print something on the bottom screen
+ bottom_screen.select();
+ println!("\x1b[14;00HThis is the bottom screen.");
+ println!("There's not as much space down here, but that's okay.");
+
+ top_screen.select();
+ println!("\x1b[29;16HPress Start to exit");
+
+ while apt.main_loop() {
+ gfx.flush_buffers();
+ gfx.swap_buffers();
+
+ hid.scan_input();
+ if hid.key_down(PadKey::Start) {
+ break;
+ }
+ }
+}
diff --git a/examples/src/bin/hello-world.rs b/examples/src/bin/hello-world.rs
new file mode 100644
index 0000000..cb63510
--- /dev/null
+++ b/examples/src/bin/hello-world.rs
@@ -0,0 +1,55 @@
+extern crate ctru;
+
+use ctru::gfx::Gfx;
+use ctru::console::Console;
+use ctru::services::apt::Apt;
+use ctru::services::hid::{Hid, PadKey};
+
+fn main() {
+ // Initialize ctrulib service handles.
+ // Service handles are internally reference-counted. When all instances of a
+ // service handle go out of scope, the service will be closed.
+
+ // The APT service handles application management functions, such as
+ // syncing our main loop with the graphics hardware.
+ let apt = Apt::init().unwrap();
+
+ // The HID service handles button and touch screen inputs.
+ let hid = Hid::init().unwrap();
+
+ // The GFX service manages the framebuffers for the top and bottom screens.
+ let mut gfx = Gfx::default();
+
+ // Initialize a ctrulib console and direct standard output to it.
+ // Consoles can be initialized on both the top and bottom screens.
+ // The top screen is initialized by default.
+ let _console = Console::default();
+
+ // Now we can print to stdout!
+ println!("Hello, world!");
+
+ // We can use escape sequences to move the cursor around the terminal.
+ // The following text will be moved down 29 rows and right 16 characters
+ // before printing begins.
+ println!("\x1b[29;16HPress Start to exit");
+
+ // Main application loop.
+ while apt.main_loop() {
+
+ // Flushes and swaps the framebuffers when double-buffering
+ // is enabled
+ gfx.flush_buffers();
+ gfx.swap_buffers();
+
+ // Scan for user input.
+ hid.scan_input();
+ // Check if the user has pressed the given button on this frame.
+ // If so, break out of the loop.
+ if hid.key_down(PadKey::Start) {
+ break;
+ }
+ }
+
+ // All of our service handles will drop out of scope at this point,
+ // triggering the end of our application.
+}