From acb1d3fbb8a11842aea88349122140ecfb303a88 Mon Sep 17 00:00:00 2001 From: Andrea Ciliberti Date: Wed, 26 Jul 2023 18:47:41 +0200 Subject: [PATCH] Finalize Mii module --- ctru-rs/src/applets/mii_selector.rs | 6 +-- ctru-rs/src/linear.rs | 4 +- ctru-rs/src/mii.rs | 76 +++++++++++++------------- ctru-rs/src/services/cam.rs | 82 ++++++++++++++--------------- 4 files changed, 85 insertions(+), 83 deletions(-) diff --git a/ctru-rs/src/applets/mii_selector.rs b/ctru-rs/src/applets/mii_selector.rs index 76a4d5e..bd0e4b4 100644 --- a/ctru-rs/src/applets/mii_selector.rs +++ b/ctru-rs/src/applets/mii_selector.rs @@ -1,9 +1,9 @@ //! Mii Selector applet. //! //! This applet opens a window which lets the player/user choose a Mii from the ones present on their console. -//! The selected Mii is readable as a [`MiiData`](crate::mii::MiiData). +//! The selected Mii is readable as a [`Mii`](crate::mii::Mii). -use crate::mii::MiiData; +use crate::mii::Mii; use bitflags::bitflags; use std::{ffi::CString, fmt}; @@ -65,7 +65,7 @@ pub struct MiiSelector { #[derive(Clone, Debug)] pub struct Selection { /// Data of the selected Mii. - pub mii_data: MiiData, + pub mii_data: Mii, /// Type of the selected Mii. pub mii_type: MiiType, } diff --git a/ctru-rs/src/linear.rs b/ctru-rs/src/linear.rs index fd776be..8c0639a 100644 --- a/ctru-rs/src/linear.rs +++ b/ctru-rs/src/linear.rs @@ -4,7 +4,7 @@ //! As such, it is used for fast and safe memory sharing between hardware processors (such as the GPU and the DSP). //! //! # Additional Resources -//! +//! //! -
//! - @@ -17,7 +17,7 @@ use std::ptr::NonNull; // but the default fallback of the `std` will take care of that for us. /// [`Allocator`](std::alloc::Allocator) struct for LINEAR memory. -/// +/// /// To use this struct the main crate must activate the `allocator_api` unstable feature. #[derive(Copy, Clone, Default, Debug)] pub struct LinearAllocator; diff --git a/ctru-rs/src/mii.rs b/ctru-rs/src/mii.rs index b5a2f03..beccd4e 100644 --- a/ctru-rs/src/mii.rs +++ b/ctru-rs/src/mii.rs @@ -1,9 +1,10 @@ -//! Mii Data +//! Mii data. //! //! This module contains the structs that represent all the data of a Mii. -//! This data is given by the [``MiiSelector``](crate::applets::mii_selector::MiiSelector) +//! +//! Have a look at the [`MiiSelector`](crate::applets::mii_selector::MiiSelector) applet to learn how to ask the user for a specific Mii. -/// Represents the region lock of the console. +/// Region lock of the Mii. #[derive(Copy, Clone, Debug, Eq, PartialEq)] pub enum RegionLock { /// No region-lock. @@ -16,7 +17,7 @@ pub enum RegionLock { Europe, } -/// Represent the charset of the console. +/// Charset of the Mii. #[derive(Copy, Clone, Debug, Eq, PartialEq)] pub enum Charset { /// Japan-USA-Europe unified charset. @@ -29,9 +30,9 @@ pub enum Charset { Taiwan, } -/// Represents the options of the Mii. +/// Generic options of the Mii. #[derive(Copy, Clone, Debug)] -pub struct MiiDataOptions { +pub struct Options { /// Whether it is allowed to copy the Mii. pub is_copying_allowed: bool, /// Whether the profanity flag is active. @@ -42,7 +43,7 @@ pub struct MiiDataOptions { pub charset: Charset, } -/// Represents the position that the Mii has on the selector. +/// Positional Index that the Mii has on the [`MiiSelector`](crate::applets::mii_selector::MiiSelector) window. #[derive(Copy, Clone, Debug)] pub struct SelectorPosition { /// Index of the page where the Mii is found. @@ -51,40 +52,42 @@ pub struct SelectorPosition { pub slot_index: u8, } -/// Represents the console where the Mii originated from. +/// Console model from which the Mii originated. #[derive(Copy, Clone, Debug, Eq, PartialEq)] pub enum OriginConsole { /// Nintendo Wii. Wii, /// Nintendo DSi. DSi, - /// Nintendo 3DS (both New 3DS and Old 3DS). + /// Nintendo 3DS. + /// + /// This includes all consoles of the 3DS family (3DS, 2DS, and their respective "New" or "XL" variants). N3DS, - /// Nintendo WiiU/Switch. + /// Nintendo Wii U/Switch. WiiUSwitch, } -/// Represents the identity of the origin console. +/// Identity of the origin console. #[derive(Copy, Clone, Debug)] pub struct ConsoleIdentity { /// From which console the Mii originated from. pub origin_console: OriginConsole, } -/// Represents the sex of the Mii. +/// Sex of the Mii. #[derive(Copy, Clone, Debug, Eq, PartialEq)] -pub enum MiiSex { +pub enum Sex { /// Male sex. Male, /// Female sex. Female, } -/// Represents the details of the Mii. +/// Generic details of the Mii. #[derive(Copy, Clone, Debug)] pub struct Details { /// Sex of the Mii. - pub sex: MiiSex, + pub sex: Sex, /// Birthday month. pub birthday_month: u8, /// Birthday day. @@ -97,7 +100,7 @@ pub struct Details { pub is_sharing_enabled: bool, } -/// Represents the face style of the Mii. +/// Face style of the Mii. #[derive(Copy, Clone, Debug)] pub struct FaceStyle { /// Face shape. @@ -106,7 +109,7 @@ pub struct FaceStyle { pub skin_color: u8, } -/// Represents the face details of the Mii. +/// Face details of the Mii. #[derive(Copy, Clone, Debug)] pub struct FaceDetails { /// Face style. @@ -117,7 +120,7 @@ pub struct FaceDetails { pub makeup: u8, } -/// Represents the hair details of the Mii. +/// Hair details of the Mii. #[derive(Copy, Clone, Debug)] pub struct HairDetails { /// Hair style. @@ -128,7 +131,7 @@ pub struct HairDetails { pub is_flipped: bool, } -/// Represents the eye details of the Mii. +/// Eye details of the Mii. #[derive(Copy, Clone, Debug)] pub struct EyeDetails { /// Eye style. @@ -147,7 +150,7 @@ pub struct EyeDetails { pub y_position: u8, } -/// Represents the eyebrow details of the Mii +/// Eyebrow details of the Mii. #[derive(Copy, Clone, Debug)] pub struct EyebrowDetails { /// Eyebrow style. @@ -166,7 +169,7 @@ pub struct EyebrowDetails { pub y_position: u8, } -/// Represents the details of the nose +/// Nose details of the Mii. #[derive(Copy, Clone, Debug)] pub struct NoseDetails { /// Nose style. @@ -177,7 +180,7 @@ pub struct NoseDetails { pub y_position: u8, } -/// Represents the details of the mouth +/// Mouth details of the Mii. #[derive(Copy, Clone, Debug)] pub struct MouthDetails { /// Mouth style. @@ -192,14 +195,14 @@ pub struct MouthDetails { pub y_position: u8, } -/// Represents the details of the mustache +/// Mustache details of the Mii. #[derive(Copy, Clone, Debug)] pub struct MustacheDetails { /// Mustache style. pub mustache_style: u8, } -/// Represents the details of the beard +/// Beard details of the Mii. #[derive(Copy, Clone, Debug)] pub struct BeardDetails { /// Beard style @@ -212,7 +215,7 @@ pub struct BeardDetails { pub y_position: u8, } -/// Represents the details of the glasses +/// Glasses details of the Mii. #[derive(Copy, Clone, Debug)] pub struct GlassesDetails { /// Glasses style. @@ -225,7 +228,7 @@ pub struct GlassesDetails { pub y_position: u8, } -/// Represents the details of the mole. +/// Mole details of the Mii. #[derive(Copy, Clone, Debug)] pub struct MoleDetails { /// Whether the Mii has a mole. @@ -238,16 +241,15 @@ pub struct MoleDetails { pub y_position: u8, } -/// Represents all the data of a Mii +/// Full Mii data representation. /// -/// Some values are not ordered _like_ the Mii Editor UI. The mapped values can be seen here: -/// +/// Some values are not ordered *like* the Mii Editor UI. The mapped values can be seen [here](https://www.3dbrew.org/wiki/Mii#Mapped_Editor_.3C-.3E_Hex_values). /// -/// This struct is returned by the [`MiiSelector`](crate::applets::mii_selector::MiiSelector) +/// This struct can be retrieved by [`MiiSelector::lauch()`](crate::applets::mii_selector::MiiSelector::launch). #[derive(Clone, Debug)] -pub struct MiiData { +pub struct Mii { /// Mii options. - pub options: MiiDataOptions, + pub options: Options, /// Position taken by the Mii on the Mii Selector screen. pub selector_position: SelectorPosition, /// Console the Mii was created on. @@ -293,7 +295,7 @@ pub struct MiiData { pub author_name: String, } -impl From for MiiData { +impl From for Mii { fn from(mii_data: ctru_sys::MiiData) -> Self { let raw_mii_data = mii_data._bindgen_opaque_blob; // Source for the representation and what each thing means: https://www.3dbrew.org/wiki/Mii @@ -358,7 +360,7 @@ impl From for MiiData { let name = utf16_byte_pairs_to_string(raw_utf16_name); let author_name = utf16_byte_pairs_to_string(raw_utf16_author); - let options = MiiDataOptions { + let options = Options { is_copying_allowed: raw_options[0], is_profanity_flag_enabled: raw_options[1], region_lock: { @@ -398,8 +400,8 @@ impl From for MiiData { let details = Details { sex: { match raw_details[0] { - true => MiiSex::Female, - false => MiiSex::Male, + true => Sex::Female, + false => Sex::Male, } }, birthday_month: partial_u8_bits_to_u8(&raw_details[1..=4]), @@ -485,7 +487,7 @@ impl From for MiiData { y_position: partial_u8_bits_to_u8(&raw_mole_details[10..=14]), }; - MiiData { + Mii { options, selector_position, console_identity, diff --git a/ctru-rs/src/services/cam.rs b/ctru-rs/src/services/cam.rs index ff9bd5b..dd4437b 100644 --- a/ctru-rs/src/services/cam.rs +++ b/ctru-rs/src/services/cam.rs @@ -22,7 +22,7 @@ pub struct Cam { } /// Different kinds of flip modes. -/// +/// /// See [`Camera::flip_image()`] to learn how to use this. #[doc(alias = "CAMU_Flip")] #[derive(Copy, Clone, Debug, PartialEq, Eq)] @@ -39,7 +39,7 @@ pub enum FlipMode { } /// Size of the camera view. -/// +/// /// See [`Camera::set_view_size()`] to learn how to use this. #[doc(alias = "CAMU_Size")] #[derive(Copy, Clone, Debug, PartialEq, Eq)] @@ -68,7 +68,7 @@ pub enum ViewSize { } /// Framerate settings. -/// +/// /// See [`Camera::set_frame_rate()`] to learn how to use this. #[doc(alias = "CAMU_FramRate")] #[derive(Copy, Clone, Debug, PartialEq, Eq)] @@ -103,7 +103,7 @@ pub enum FrameRate { } /// White balance settings. -/// +/// /// See [`Camera::set_white_balance()`] and [`Camera::set_white_balance_without_base_up()`] to learn how to use this. #[doc(alias = "CAMU_WhiteBalance")] #[derive(Copy, Clone, Debug, PartialEq, Eq)] @@ -124,7 +124,7 @@ pub enum WhiteBalance { } /// Photo mode settings. -/// +/// /// See [`Camera::set_photo_mode()`] to learn how to use this. #[doc(alias = "CAMU_PhotoMode")] #[derive(Copy, Clone, Debug, PartialEq, Eq)] @@ -143,7 +143,7 @@ pub enum PhotoMode { } /// Special camera effects. -/// +/// /// See [`Camera::set_effect()`] to learn how to use this. #[doc(alias = "CAMU_Effect")] #[derive(Copy, Clone, Debug, PartialEq, Eq)] @@ -160,13 +160,13 @@ pub enum Effect { /// Negative film effect. Negafilm = ctru_sys::EFFECT_NEGAFILM, /// Sepia effect. - /// + /// /// The difference between this and [`Sepia`](Effect::Sepia) is unknown. Sepia01 = ctru_sys::EFFECT_SEPIA01, } /// Contrast settings. -/// +/// /// See [`Camera::set_contrast()`] to learn how to use this. #[doc(alias = "CAMU_Contrast")] #[derive(Copy, Clone, Debug, PartialEq, Eq)] @@ -181,7 +181,7 @@ pub enum Contrast { } /// Lens correction settings. -/// +/// /// See [`Camera::set_lens_correction()`] to learn how to use this. #[doc(alias = "CAMU_LensCorrection")] #[derive(Copy, Clone, Debug, PartialEq, Eq)] @@ -196,7 +196,7 @@ pub enum LensCorrection { } /// Image output format. -/// +/// /// See [`Camera::set_output_format()`] to learn how to use this. #[doc(alias = "CAMU_OutputFormat")] #[derive(Copy, Clone, Debug, PartialEq, Eq)] @@ -209,7 +209,7 @@ pub enum OutputFormat { } /// Playable shutter sounds. -/// +/// /// See [`Cam::play_shutter_sound()`] to learn how to use this. #[doc(alias = "CAMU_ShutterSoundType")] #[derive(Copy, Clone, Debug, PartialEq, Eq)] @@ -224,7 +224,7 @@ pub enum ShutterSound { } /// Parameters to handle image trimming. -/// +/// /// See [`Camera::set_trimming_params()`] to learn how to use this. #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub struct TrimmingParams { @@ -237,7 +237,7 @@ pub struct TrimmingParams { impl TrimmingParams { /// Creates a new [`TrimmingParams`] and guarantees the start coordinates are less than or /// equal to the end coordinates. - /// + /// /// # Panics /// /// This function panics if the start coordinates are larger than the end coordinates (for each axis). @@ -264,7 +264,7 @@ pub struct ImageQualityCalibrationData(pub ctru_sys::CAMU_ImageQualityCalibratio pub struct StereoCameraCalibrationData(pub ctru_sys::CAMU_StereoCameraCalibrationData); /// Inward camera representation (facing the user of the 3DS). -/// +/// /// Usually used for selfies. #[non_exhaustive] pub struct InwardCam; @@ -296,7 +296,7 @@ impl Camera for OutwardLeftCam { } /// Both outer cameras combined. -/// +/// /// Usually used for 3D photos. #[non_exhaustive] pub struct BothOutwardCam; @@ -340,7 +340,7 @@ pub trait Camera { } /// Returns `true` if the camera is busy (receiving data). - /// + /// /// # Example /// /// ```no_run @@ -349,9 +349,9 @@ pub trait Camera { /// # /// use ctru::services::cam::{Cam, Camera}; /// let cam = Cam::new()?; - /// + /// /// let inward = &cam.inner_cam; - /// + /// /// // Inward cam is not busy since it is not being used. /// assert!(!inward.is_busy()?); /// # @@ -369,7 +369,7 @@ pub trait Camera { /// Returns the maximum amount of transfer bytes based on the view size, trimming, and other /// modifications set to the camera. - /// + /// /// # Example /// /// ```no_run @@ -378,9 +378,9 @@ pub trait Camera { /// # /// use ctru::services::cam::{Cam, Camera}; /// let cam = Cam::new()?; - /// + /// /// let inward = &cam.inner_cam; - /// + /// /// // Inward cam is not busy since it is not being used. /// let transfer_count = inward.transfer_byte_count(); /// # @@ -400,7 +400,7 @@ pub trait Camera { } /// Set whether or not the camera should trim the image. - /// + /// /// [`TrimmingParams`] can be set via [`Camera::set_trimming_params`]. #[doc(alias = "CAMU_SetTrimming")] fn set_trimming(&mut self, enabled: bool) -> crate::Result<()> { @@ -421,7 +421,7 @@ pub trait Camera { } /// Set trimming bounds based on image coordinates. - /// + /// /// For trimming to take effect it is required to pass `true` into [`Camera::set_trimming()`]. #[doc(alias = "CAMU_SetTrimmingParams")] fn set_trimming_params(&mut self, params: TrimmingParams) -> crate::Result<()> { @@ -463,9 +463,9 @@ pub trait Camera { } /// Set the trimming bounds relatively to the center of the image. - /// + /// /// # Notes - /// + /// /// The new width will be `trim_width / 2` to the left and right of the center. /// The new height will be `trim_height / 2` above and below the center. // TODO: This function doesn't use `TrimmingParams`. It'd be better to merge it with `set_trimming_params()` and change the `TrimmingParams` representation. @@ -606,7 +606,7 @@ pub trait Camera { /// coordinates of the second crop point. /// /// # Arguments - /// + /// /// * `width` - Width of the image /// * `height` - height of the image /// * `crop_0` - The first crop point in which the image will be trimmed @@ -672,9 +672,9 @@ pub trait Camera { } /// Sets the effect of the camera. - /// + /// /// # Notes - /// + /// /// This operation will override any previously set [`Effect`]s. /// Multiple effects can be set at once by combining the bitflags of [`Effect`]. #[doc(alias = "CAMU_SetEffect")] @@ -762,9 +762,9 @@ pub trait Camera { /// * `y` - Starting y coordinate of the window /// * `width` - Width of the window /// * `height` - Height of the window - /// + /// /// # Notes - /// + /// /// To activate automatic white balance, you must pass [`WhiteBalance::Auto`] into [`Camera::set_white_balance()`]. #[doc(alias = "CAMU_SetAutoWhiteBalanceWindow")] fn set_auto_white_balance_window( @@ -838,9 +838,9 @@ pub trait Camera { /// * `width` - Width of the desired image /// * `height` - Height of the desired image /// * `timeout` - Duration to wait for the image - /// + /// /// # Example - /// + /// /// ```no_run /// # use std::error::Error; /// # use std::time::Duration; @@ -848,19 +848,19 @@ pub trait Camera { /// # /// use ctru::services::cam::{Cam, Camera, ViewSize, OutputFormat}; /// let mut cam = Cam::new()?; - /// + /// /// // We borrow the inward facing `Camera`. /// let inward = &mut cam.inner_cam; - /// + /// /// inward.set_view_size(ViewSize::TopLCD)?; /// inward.set_output_format(OutputFormat::Rgb565)?; /// inward.set_noise_filter(true)?; /// inward.set_auto_exposure(true)?; /// inward.set_auto_white_balance(true)?; - /// + /// /// // Size of the top screen buffer at 2 bytes per pixel (RGB565). /// let mut buffer = vec![0; 400*240*2]; - /// + /// /// // Take picture with 3 seconds of timeout. /// inward.take_picture(&mut buffer, 400, 240, Duration::from_secs(3)); /// # @@ -948,7 +948,7 @@ impl Cam { /// This function will return an error if the service was unable to be initialized. /// Since this service requires no special or elevated permissions, errors are /// rare in practice. - /// + /// /// # Example /// /// ```no_run @@ -976,12 +976,12 @@ impl Cam { } /// Plays the specified sound based on the [`ShutterSound`] argument - /// + /// /// # Notes - /// + /// /// Playing the shutter sound does not require a liviving handle to the [`Ndsp`](crate::services::ndsp::Ndsp) service. /// Volume will always be maxed out to ensure everyone within photo range can hear the picture being taken (as by japanese law). - /// + /// /// # Example /// /// ```no_run @@ -990,7 +990,7 @@ impl Cam { /// # /// use ctru::services::cam::{Cam, ShutterSound}; /// let cam = Cam::new()?; - /// + /// /// // We play the shutter sound on the console's speakers! /// // (even though we aren't taking a photo :P) /// cam.play_shutter_sound(ShutterSound::Normal);