Browse Source

Finishing touches after complete revision

pull/134/head
Andrea Ciliberti 1 year ago
parent
commit
1640e201e9
  1. 2
      ctru-rs/src/console.rs
  2. 6
      ctru-rs/src/lib.rs
  3. 4
      ctru-rs/src/linear.rs
  4. 2
      ctru-rs/src/services/apt.rs
  5. 11
      ctru-rs/src/services/cam.rs
  6. 2
      ctru-rs/src/services/cfgu.rs
  7. 12
      ctru-rs/src/services/fs.rs
  8. 33
      ctru-rs/src/services/gfx.rs
  9. 2
      ctru-rs/src/services/hid.rs
  10. 22
      ctru-rs/src/services/ndsp/mod.rs
  11. 16
      ctru-rs/src/services/ndsp/wave.rs

2
ctru-rs/src/console.rs

@ -127,7 +127,7 @@ impl<'screen> Console<'screen> {
/// ///
/// Any previously selected console will be unhooked and will not show the `stdout` output. /// Any previously selected console will be unhooked and will not show the `stdout` output.
/// ///
/// # Example /// # Example
/// ///
/// ```no_run /// ```no_run
/// # use std::error::Error; /// # use std::error::Error;

6
ctru-rs/src/lib.rs

@ -3,7 +3,7 @@
//! # About //! # About
//! //!
//! This crate behaves as the main tool to access system-specific functionality on the Nintendo 3DS when developing homebrew software in Rust. //! This crate behaves as the main tool to access system-specific functionality on the Nintendo 3DS when developing homebrew software in Rust.
//! Thanks to it, developers can access the underlying system services and the console's hardware to develop userland applications //! Thanks to it, developers can develop userland applications by accessing access the underlying system services and the console's hardware
//! (such as [HID devices](crate::services::hid), [network capabilities](crate::services::soc), [graphics](crate::services::gfx), [built-in cameras](crate::services::cam), etc.). //! (such as [HID devices](crate::services::hid), [network capabilities](crate::services::soc), [graphics](crate::services::gfx), [built-in cameras](crate::services::cam), etc.).
//! //!
//! Among these features, [`ctru-rs`](crate) also automatically includes functionality to properly integrate the Rust `std` with the console's operating system, //! Among these features, [`ctru-rs`](crate) also automatically includes functionality to properly integrate the Rust `std` with the console's operating system,
@ -13,7 +13,7 @@
//! //!
//! Thoroughly read the official [`ctru-rs` wiki](https://github.com/rust3ds/ctru-rs/wiki) which guides you through the setup needed to install the required toolchain and helpful tools. //! Thoroughly read the official [`ctru-rs` wiki](https://github.com/rust3ds/ctru-rs/wiki) which guides you through the setup needed to install the required toolchain and helpful tools.
//! After following the guide and understanding the many quirks of the Nintendo 3DS homebrew development environment, you can create a new project by including this crate as a dependency //! After following the guide and understanding the many quirks of the Nintendo 3DS homebrew development environment, you can create a new project by including this crate as a dependency
//! of your project in your `Cargo.toml` manifest and build your binaries either manually (for the `armv6k-nintendo-3ds` target) or via [`cargo-3ds`](https://github.com/rust3ds/cargo-3ds). //! in your `Cargo.toml` manifest and build your binaries either manually (for the `armv6k-nintendo-3ds` target) or via [`cargo-3ds`](https://github.com/rust3ds/cargo-3ds).
#![crate_type = "rlib"] #![crate_type = "rlib"]
#![crate_name = "ctru"] #![crate_name = "ctru"]
@ -60,7 +60,7 @@ macro_rules! from_impl {
/// ///
/// # Notes /// # Notes
/// ///
/// When ´test´ is enabled, this function will not do anything, as it should be overridden by the ´test´ environment. /// When `test` is enabled, this function will not do anything, as its behaviour should be overridden by the `test` environment.
pub fn use_panic_handler() { pub fn use_panic_handler() {
#[cfg(not(test))] #[cfg(not(test))]
panic_hook_setup(); panic_hook_setup();

4
ctru-rs/src/linear.rs

@ -1,11 +1,11 @@
//! LINEAR memory allocator. //! LINEAR memory allocator.
//! //!
//! LINEAR memory is a sector of the 3DS' RAM that binds virtual addresses exactly to the physical address. //! LINEAR memory is a sector of the 3DS' RAM that binds virtual addresses exactly to the physical address.
//! As such, it is used for fast and safe memory sharing between hardware processors (such as the GPU and the DSP). //! As such, it is used for fast and safe memory sharing between different hardware components (such as the GPU and the DSP processor).
//! //!
//! # Additional Resources //! # Additional Resources
//! //!
//! - <https://github.com/devkitPro/libctru/blob/master/libctru/source/allocator/linear.cpp><br> //! - <https://github.com/devkitPro/libctru/blob/master/libctru/source/allocator/linear.cpp>
//! - <https://www.3dbrew.org/wiki/Memory_layout> //! - <https://www.3dbrew.org/wiki/Memory_layout>
use std::alloc::{AllocError, Allocator, Layout}; use std::alloc::{AllocError, Allocator, Layout};

2
ctru-rs/src/services/apt.rs

@ -67,7 +67,7 @@ impl Apt {
unsafe { ctru_sys::aptMainLoop() } unsafe { ctru_sys::aptMainLoop() }
} }
/// Sets (in percentage) the amount of time to lend to the application thread spawned on the syscore (core #1). /// Set (in percentage) the amount of time to lend to the application thread spawned on the syscore (core #1).
/// ///
/// # Notes /// # Notes
/// ///

11
ctru-rs/src/services/cam.rs

@ -302,8 +302,7 @@ impl Camera for OutwardLeftCam {
pub struct BothOutwardCam; pub struct BothOutwardCam;
impl BothOutwardCam { impl BothOutwardCam {
/// Sets whether to enable or disable synchronization /// Set whether to enable or disable brightness synchronization between the two cameras.
/// of brightness for both left and right cameras
#[doc(alias = "CAMU_SetBrightnessSynchronization")] #[doc(alias = "CAMU_SetBrightnessSynchronization")]
pub fn set_brightness_synchronization( pub fn set_brightness_synchronization(
&mut self, &mut self,
@ -560,7 +559,7 @@ pub trait Camera {
} }
} }
/// Sets whether auto white balance is enabled or disabled for the camera /// Set whether auto white balance is enabled or disabled for the camera.
#[doc(alias = "CAMU_SetAutoWhiteBalance")] #[doc(alias = "CAMU_SetAutoWhiteBalance")]
fn set_auto_white_balance(&mut self, enabled: bool) -> crate::Result<()> { fn set_auto_white_balance(&mut self, enabled: bool) -> crate::Result<()> {
unsafe { unsafe {
@ -659,7 +658,7 @@ pub trait Camera {
} }
} }
/// Sets the photo mode of the camera. /// Set the photo mode of the camera.
#[doc(alias = "CAMU_SetPhotoMode")] #[doc(alias = "CAMU_SetPhotoMode")]
fn set_photo_mode(&mut self, photo_mode: PhotoMode) -> crate::Result<()> { fn set_photo_mode(&mut self, photo_mode: PhotoMode) -> crate::Result<()> {
unsafe { unsafe {
@ -671,7 +670,7 @@ pub trait Camera {
} }
} }
/// Sets the effect of the camera. /// Set the effect of the camera.
/// ///
/// # Notes /// # Notes
/// ///
@ -975,7 +974,7 @@ impl Cam {
} }
} }
/// Plays the specified sound based on the [`ShutterSound`] argument /// Play the specified sound based on the [`ShutterSound`] argument
/// ///
/// # Notes /// # Notes
/// ///

2
ctru-rs/src/services/cfgu.rs

@ -1,6 +1,6 @@
//! System Configuration service. //! System Configuration service.
//! //!
//! This module contains basic methods to retrieve and change configuration from the console. //! This module contains basic methods to retrieve the console's system configuration.
use crate::error::ResultCode; use crate::error::ResultCode;

12
ctru-rs/src/services/fs.rs

@ -542,7 +542,7 @@ impl OpenOptions {
Self::default() Self::default()
} }
/// Sets the option for read access. /// Set the option for read access.
/// ///
/// This option, when true, will indicate that the file should be /// This option, when true, will indicate that the file should be
/// `read`-able if opened. /// `read`-able if opened.
@ -551,7 +551,7 @@ impl OpenOptions {
self self
} }
/// Sets the option for write access. /// Set the option for write access.
/// ///
/// This option, when true, will indicate that the file should be /// This option, when true, will indicate that the file should be
/// `write`-able if opened. /// `write`-able if opened.
@ -563,7 +563,7 @@ impl OpenOptions {
self self
} }
/// Sets the option for the append mode. /// Set the option for the append mode.
/// ///
/// This option, when true, means that writes will append to a file instead /// This option, when true, means that writes will append to a file instead
/// of overwriting previous contents. Note that setting .write(true).append(true) /// of overwriting previous contents. Note that setting .write(true).append(true)
@ -575,7 +575,7 @@ impl OpenOptions {
self self
} }
/// Sets the option for truncating a previous file. /// Set the option for truncating a previous file.
/// ///
/// If a file is successfully opened with this option set it will truncate /// If a file is successfully opened with this option set it will truncate
/// the file to 0 length if it already exists. /// the file to 0 length if it already exists.
@ -586,7 +586,7 @@ impl OpenOptions {
self self
} }
/// Sets the option for creating a new file. /// Set the option for creating a new file.
/// ///
/// This option indicates whether a new file will be created /// This option indicates whether a new file will be created
/// if the file does not yet already /// if the file does not yet already
@ -598,7 +598,7 @@ impl OpenOptions {
self self
} }
/// Sets which archive the file is to be opened in. /// Set which archive the file is to be opened in.
/// ///
/// Failing to pass in an archive will result in the file failing to open. /// Failing to pass in an archive will result in the file failing to open.
pub fn archive(&mut self, archive: &Archive) -> &mut OpenOptions { pub fn archive(&mut self, archive: &Archive) -> &mut OpenOptions {

33
ctru-rs/src/services/gfx.rs

@ -55,15 +55,6 @@ pub trait Screen: private::Sealed {
} }
} }
/// Sets whether to use double buffering. Enabled by default.
///
/// [`Swap::swap_buffers`] must be called after this function for the configuration
/// change to take effect.
#[doc(alias = "gfxSetDoubleBuffering")]
fn set_double_buffering(&mut self, enabled: bool) {
unsafe { ctru_sys::gfxSetDoubleBuffering(self.as_raw(), enabled) }
}
/// Gets the framebuffer format. /// Gets the framebuffer format.
#[doc(alias = "gfxGetScreenFormat")] #[doc(alias = "gfxGetScreenFormat")]
fn framebuffer_format(&self) -> FramebufferFormat { fn framebuffer_format(&self) -> FramebufferFormat {
@ -106,11 +97,21 @@ pub trait Swap: private::Sealed {
/// ///
/// Even if double buffering is disabled, "swapping" the buffers has the side effect /// Even if double buffering is disabled, "swapping" the buffers has the side effect
/// of committing any configuration changes to the buffers (e.g. [`TopScreen::set_wide_mode()`], /// of committing any configuration changes to the buffers (e.g. [`TopScreen::set_wide_mode()`],
/// [`Screen::set_framebuffer_format()`], [`Screen::set_double_buffering()`]), so it should still be used. /// [`Screen::set_framebuffer_format()`], [`Swap::set_double_buffering()`]), so it should still be used.
/// ///
/// This should be called once per frame at most. /// This should be called once per frame at most.
#[doc(alias = "gfxScreenSwapBuffers")] #[doc(alias = "gfxScreenSwapBuffers")]
fn swap_buffers(&mut self); fn swap_buffers(&mut self);
/// Set whether to use double buffering.
///
/// # Notes
///
/// Double buffering is enabled by default.
/// [`Swap::swap_buffers`] must be called after this function for the configuration
/// change to take effect.
#[doc(alias = "gfxSetDoubleBuffering")]
fn set_double_buffering(&mut self, enabled: bool);
} }
impl Swap for TopScreen3D<'_> { impl Swap for TopScreen3D<'_> {
@ -119,6 +120,10 @@ impl Swap for TopScreen3D<'_> {
ctru_sys::gfxScreenSwapBuffers(ctru_sys::GFX_TOP, true); ctru_sys::gfxScreenSwapBuffers(ctru_sys::GFX_TOP, true);
} }
} }
fn set_double_buffering(&mut self, enabled: bool) {
unsafe { ctru_sys::gfxSetDoubleBuffering(ctru_sys::GFX_TOP, enabled) }
}
} }
impl Swap for TopScreen { impl Swap for TopScreen {
@ -127,6 +132,10 @@ impl Swap for TopScreen {
ctru_sys::gfxScreenSwapBuffers(ctru_sys::GFX_TOP, false); ctru_sys::gfxScreenSwapBuffers(ctru_sys::GFX_TOP, false);
} }
} }
fn set_double_buffering(&mut self, enabled: bool) {
unsafe { ctru_sys::gfxSetDoubleBuffering(ctru_sys::GFX_TOP, enabled) }
}
} }
impl Swap for BottomScreen { impl Swap for BottomScreen {
@ -135,6 +144,10 @@ impl Swap for BottomScreen {
ctru_sys::gfxScreenSwapBuffers(ctru_sys::GFX_BOTTOM, false); ctru_sys::gfxScreenSwapBuffers(ctru_sys::GFX_BOTTOM, false);
} }
} }
fn set_double_buffering(&mut self, enabled: bool) {
unsafe { ctru_sys::gfxSetDoubleBuffering(ctru_sys::GFX_BOTTOM, enabled) }
}
} }
/// A screen with buffers that can be flushed. /// A screen with buffers that can be flushed.

2
ctru-rs/src/services/hid.rs

@ -142,7 +142,7 @@ impl Hid {
/// hid.scan_input(); /// hid.scan_input();
/// ///
/// if hid.keys_down().contains(KeyPad::A) { /// if hid.keys_down().contains(KeyPad::A) {
/// println!("You just pressed the A button!") /// println!("You have pressed the A button!")
/// } /// }
/// # /// #
/// # Ok(()) /// # Ok(())

22
ctru-rs/src/services/ndsp/mod.rs

@ -540,7 +540,7 @@ impl Channel<'_> {
unsafe { ctru_sys::ndspChnIirMonoSetEnable(self.id.into(), enable) }; unsafe { ctru_sys::ndspChnIirMonoSetEnable(self.id.into(), enable) };
} }
/// Sets the monopole to be a high pass filter. /// Set the monopole to be a high pass filter.
/// ///
/// # Notes /// # Notes
/// ///
@ -550,7 +550,7 @@ impl Channel<'_> {
unsafe { ctru_sys::ndspChnIirMonoSetParamsHighPassFilter(self.id.into(), cut_off_freq) }; unsafe { ctru_sys::ndspChnIirMonoSetParamsHighPassFilter(self.id.into(), cut_off_freq) };
} }
/// Sets the monopole to be a low pass filter. /// Set the monopole to be a low pass filter.
/// ///
/// # Notes /// # Notes
/// ///
@ -566,7 +566,7 @@ impl Channel<'_> {
unsafe { ctru_sys::ndspChnIirBiquadSetEnable(self.id.into(), enable) }; unsafe { ctru_sys::ndspChnIirBiquadSetEnable(self.id.into(), enable) };
} }
/// Sets the biquad to be a high pass filter. /// Set the biquad to be a high pass filter.
#[doc(alias = "ndspChnIirBiquadSetParamsHighPassFilter")] #[doc(alias = "ndspChnIirBiquadSetParamsHighPassFilter")]
pub fn iir_biquad_set_params_high_pass_filter(&mut self, cut_off_freq: f32, quality: f32) { pub fn iir_biquad_set_params_high_pass_filter(&mut self, cut_off_freq: f32, quality: f32) {
unsafe { unsafe {
@ -574,7 +574,7 @@ impl Channel<'_> {
}; };
} }
/// Sets the biquad to be a low pass filter. /// Set the biquad to be a low pass filter.
#[doc(alias = "ndspChnIirBiquadSetParamsLowPassFilter")] #[doc(alias = "ndspChnIirBiquadSetParamsLowPassFilter")]
pub fn iir_biquad_set_params_low_pass_filter(&mut self, cut_off_freq: f32, quality: f32) { pub fn iir_biquad_set_params_low_pass_filter(&mut self, cut_off_freq: f32, quality: f32) {
unsafe { unsafe {
@ -582,7 +582,7 @@ impl Channel<'_> {
}; };
} }
/// Sets the biquad to be a notch filter. /// Set the biquad to be a notch filter.
#[doc(alias = "ndspChnIirBiquadSetParamsNotchFilter")] #[doc(alias = "ndspChnIirBiquadSetParamsNotchFilter")]
pub fn iir_biquad_set_params_notch_filter(&mut self, notch_freq: f32, quality: f32) { pub fn iir_biquad_set_params_notch_filter(&mut self, notch_freq: f32, quality: f32) {
unsafe { unsafe {
@ -590,7 +590,7 @@ impl Channel<'_> {
}; };
} }
/// Sets the biquad to be a band pass filter. /// Set the biquad to be a band pass filter.
#[doc(alias = "ndspChnIirBiquadSetParamsBandPassFilter")] #[doc(alias = "ndspChnIirBiquadSetParamsBandPassFilter")]
pub fn iir_biquad_set_params_band_pass_filter(&mut self, mid_freq: f32, quality: f32) { pub fn iir_biquad_set_params_band_pass_filter(&mut self, mid_freq: f32, quality: f32) {
unsafe { unsafe {
@ -598,7 +598,7 @@ impl Channel<'_> {
}; };
} }
/// Sets the biquad to be a peaking equalizer. /// Set the biquad to be a peaking equalizer.
#[doc(alias = "ndspChnIirBiquadSetParamsPeakingEqualizer")] #[doc(alias = "ndspChnIirBiquadSetParamsPeakingEqualizer")]
pub fn iir_biquad_set_params_peaking_equalizer( pub fn iir_biquad_set_params_peaking_equalizer(
&mut self, &mut self,
@ -681,7 +681,7 @@ impl AudioMix {
(self.raw[index], self.raw[index + 1]) (self.raw[index], self.raw[index + 1])
} }
/// Sets the values for the "front" volume mix (left and right channel). /// Set the values for the "front" volume mix (left and right channel).
/// ///
/// # Notes /// # Notes
/// ///
@ -692,7 +692,7 @@ impl AudioMix {
self.raw[1] = right; self.raw[1] = right;
} }
/// Sets the values for the "back" volume mix (left and right channel). /// Set the values for the "back" volume mix (left and right channel).
/// ///
/// # Notes /// # Notes
/// ///
@ -703,7 +703,7 @@ impl AudioMix {
self.raw[3] = right; self.raw[3] = right;
} }
/// Sets the values for the "front" volume mix (left and right channel) for the specified auxiliary output device (either 0 or 1). /// Set the values for the "front" volume mix (left and right channel) for the specified auxiliary output device (either 0 or 1).
/// ///
/// # Notes /// # Notes
/// ///
@ -720,7 +720,7 @@ impl AudioMix {
self.raw[index + 1] = right; self.raw[index + 1] = right;
} }
/// Sets the values for the "back" volume mix (left and right channel) for the specified auxiliary output device (either 0 or 1). /// Set the values for the "back" volume mix (left and right channel) for the specified auxiliary output device (either 0 or 1).
/// ///
/// # Notes /// # Notes
/// ///

16
ctru-rs/src/services/ndsp/wave.rs

@ -32,7 +32,7 @@ pub enum Status {
} }
impl Wave { impl Wave {
/// Build a new playable wave object from a raw buffer on [LINEAR memory](`crate::linear`) and a some info. /// Build a new playable wave object from a raw buffer on [LINEAR memory](`crate::linear`) and some info.
/// ///
/// # Example /// # Example
/// ///
@ -86,12 +86,12 @@ impl Wave {
} }
} }
/// Return a slice to the audio data (on the LINEAR memory). /// Returns a slice to the audio data (on the LINEAR memory).
pub fn get_buffer(&self) -> &[u8] { pub fn get_buffer(&self) -> &[u8] {
&self.buffer &self.buffer
} }
/// Return a mutable slice to the audio data (on the LINEAR memory). /// Returns a mutable slice to the audio data (on the LINEAR memory).
/// ///
/// # Errors /// # Errors
/// ///
@ -106,7 +106,7 @@ impl Wave {
} }
} }
/// Return this wave's playback status. /// Returns this wave's playback status.
/// ///
/// # Example /// # Example
/// ///
@ -130,7 +130,7 @@ impl Wave {
self.raw_data.status.try_into().unwrap() self.raw_data.status.try_into().unwrap()
} }
/// Get the amounts of samples *read* by the NDSP process. /// Returns the amount of samples *read* by the NDSP process.
/// ///
/// # Notes /// # Notes
/// ///
@ -139,7 +139,7 @@ impl Wave {
self.raw_data.nsamples as usize self.raw_data.nsamples as usize
} }
/// Get the format of the audio data. /// Returns the format of the audio data.
pub fn format(&self) -> AudioFormat { pub fn format(&self) -> AudioFormat {
self.audio_format self.audio_format
} }
@ -152,11 +152,11 @@ impl Wave {
} }
/// Set the amount of samples to be read. /// Set the amount of samples to be read.
/// This function doesn't resize the internal buffer.
/// ///
/// # Note /// # Note
/// ///
/// Operations of this kind are particularly useful to allocate memory pools ///
/// This function doesn't resize the internal buffer. Operations of this kind are particularly useful to allocate memory pools
/// for VBR (Variable BitRate) formats, like OGG Vorbis. /// for VBR (Variable BitRate) formats, like OGG Vorbis.
/// ///
/// # Errors /// # Errors

Loading…
Cancel
Save