diff --git a/book.toml b/book.toml index d2d43af..f4bff1f 100644 --- a/book.toml +++ b/book.toml @@ -10,3 +10,12 @@ after = ["links"] [preprocessor.toc] marker = "[[_TOC_]]" + +[preprocessor.admonish] +command = "mdbook-admonish" +assets_version = "3.0.0" # do not edit: managed by `mdbook-admonish install` + +[output] + +[output.html] +additional-css = ["./mdbook-admonish.css"] diff --git a/flake.nix b/flake.nix index 6a24fbd..290c9c3 100644 --- a/flake.nix +++ b/flake.nix @@ -36,7 +36,7 @@ devShells.default = pkgs.mkShell { nativeBuildInputs = builtins.attrValues { - inherit (pkgs) mdbook mdbook-katex mdbook-toc; + inherit (pkgs) mdbook mdbook-katex mdbook-toc mdbook-admonish; }; }; }); diff --git a/mdbook-admonish.css b/mdbook-admonish.css new file mode 100644 index 0000000..e0a3365 --- /dev/null +++ b/mdbook-admonish.css @@ -0,0 +1,341 @@ +@charset "UTF-8"; +:root { + --md-admonition-icon--admonish-note: url("data:image/svg+xml;charset=utf-8,"); + --md-admonition-icon--admonish-abstract: url("data:image/svg+xml;charset=utf-8,"); + --md-admonition-icon--admonish-info: url("data:image/svg+xml;charset=utf-8,"); + --md-admonition-icon--admonish-tip: url("data:image/svg+xml;charset=utf-8,"); + --md-admonition-icon--admonish-success: url("data:image/svg+xml;charset=utf-8,"); + --md-admonition-icon--admonish-question: url("data:image/svg+xml;charset=utf-8,"); + --md-admonition-icon--admonish-warning: url("data:image/svg+xml;charset=utf-8,"); + --md-admonition-icon--admonish-failure: url("data:image/svg+xml;charset=utf-8,"); + --md-admonition-icon--admonish-danger: url("data:image/svg+xml;charset=utf-8,"); + --md-admonition-icon--admonish-bug: url("data:image/svg+xml;charset=utf-8,"); + --md-admonition-icon--admonish-example: url("data:image/svg+xml;charset=utf-8,"); + --md-admonition-icon--admonish-quote: url("data:image/svg+xml;charset=utf-8,"); + --md-details-icon: url("data:image/svg+xml;charset=utf-8,"); +} + +:is(.admonition) { + display: flow-root; + margin: 1.5625em 0; + padding: 0 1.2rem; + color: var(--fg); + page-break-inside: avoid; + background-color: var(--bg); + border: 0 solid black; + border-inline-start-width: 0.4rem; + border-radius: 0.2rem; + box-shadow: 0 0.2rem 1rem rgba(0, 0, 0, 0.05), 0 0 0.1rem rgba(0, 0, 0, 0.1); +} +@media print { + :is(.admonition) { + box-shadow: none; + } +} +:is(.admonition) > * { + box-sizing: border-box; +} +:is(.admonition) :is(.admonition) { + margin-top: 1em; + margin-bottom: 1em; +} +:is(.admonition) > .tabbed-set:only-child { + margin-top: 0; +} +html :is(.admonition) > :last-child { + margin-bottom: 1.2rem; +} + +a.admonition-anchor-link { + display: none; + position: absolute; + left: -1.2rem; + padding-right: 1rem; +} +a.admonition-anchor-link:link, a.admonition-anchor-link:visited { + color: var(--fg); +} +a.admonition-anchor-link:link:hover, a.admonition-anchor-link:visited:hover { + text-decoration: none; +} +a.admonition-anchor-link::before { + content: "ยง"; +} + +:is(.admonition-title, summary.admonition-title) { + position: relative; + min-height: 4rem; + margin-block: 0; + margin-inline: -1.6rem -1.2rem; + padding-block: 0.8rem; + padding-inline: 4.4rem 1.2rem; + font-weight: 700; + background-color: rgba(68, 138, 255, 0.1); + display: flex; +} +:is(.admonition-title, summary.admonition-title) p { + margin: 0; +} +html :is(.admonition-title, summary.admonition-title):last-child { + margin-bottom: 0; +} +:is(.admonition-title, summary.admonition-title)::before { + position: absolute; + top: 0.625em; + inset-inline-start: 1.6rem; + width: 2rem; + height: 2rem; + background-color: #448aff; + mask-image: url('data:image/svg+xml;charset=utf-8,'); + -webkit-mask-image: url('data:image/svg+xml;charset=utf-8,'); + mask-repeat: no-repeat; + -webkit-mask-repeat: no-repeat; + mask-size: contain; + -webkit-mask-size: contain; + content: ""; +} +:is(.admonition-title, summary.admonition-title):hover a.admonition-anchor-link { + display: initial; +} + +details.admonition > summary.admonition-title::after { + position: absolute; + top: 0.625em; + inset-inline-end: 1.6rem; + height: 2rem; + width: 2rem; + background-color: currentcolor; + mask-image: var(--md-details-icon); + -webkit-mask-image: var(--md-details-icon); + mask-repeat: no-repeat; + -webkit-mask-repeat: no-repeat; + mask-size: contain; + -webkit-mask-size: contain; + content: ""; + transform: rotate(0deg); + transition: transform 0.25s; +} +details[open].admonition > summary.admonition-title::after { + transform: rotate(90deg); +} + +:is(.admonition):is(.admonish-note) { + border-color: #448aff; +} + +:is(.admonish-note) > :is(.admonition-title, summary.admonition-title) { + background-color: rgba(68, 138, 255, 0.1); +} +:is(.admonish-note) > :is(.admonition-title, summary.admonition-title)::before { + background-color: #448aff; + mask-image: var(--md-admonition-icon--admonish-note); + -webkit-mask-image: var(--md-admonition-icon--admonish-note); + mask-repeat: no-repeat; + -webkit-mask-repeat: no-repeat; + mask-size: contain; + -webkit-mask-repeat: no-repeat; +} + +:is(.admonition):is(.admonish-abstract, .admonish-summary, .admonish-tldr) { + border-color: #00b0ff; +} + +:is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title) { + background-color: rgba(0, 176, 255, 0.1); +} +:is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title)::before { + background-color: #00b0ff; + mask-image: var(--md-admonition-icon--admonish-abstract); + -webkit-mask-image: var(--md-admonition-icon--admonish-abstract); + mask-repeat: no-repeat; + -webkit-mask-repeat: no-repeat; + mask-size: contain; + -webkit-mask-repeat: no-repeat; +} + +:is(.admonition):is(.admonish-info, .admonish-todo) { + border-color: #00b8d4; +} + +:is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title) { + background-color: rgba(0, 184, 212, 0.1); +} +:is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title)::before { + background-color: #00b8d4; + mask-image: var(--md-admonition-icon--admonish-info); + -webkit-mask-image: var(--md-admonition-icon--admonish-info); + mask-repeat: no-repeat; + -webkit-mask-repeat: no-repeat; + mask-size: contain; + -webkit-mask-repeat: no-repeat; +} + +:is(.admonition):is(.admonish-tip, .admonish-hint, .admonish-important) { + border-color: #00bfa5; +} + +:is(.admonish-tip, .admonish-hint, .admonish-important) > :is(.admonition-title, summary.admonition-title) { + background-color: rgba(0, 191, 165, 0.1); +} +:is(.admonish-tip, .admonish-hint, .admonish-important) > :is(.admonition-title, summary.admonition-title)::before { + background-color: #00bfa5; + mask-image: var(--md-admonition-icon--admonish-tip); + -webkit-mask-image: var(--md-admonition-icon--admonish-tip); + mask-repeat: no-repeat; + -webkit-mask-repeat: no-repeat; + mask-size: contain; + -webkit-mask-repeat: no-repeat; +} + +:is(.admonition):is(.admonish-success, .admonish-check, .admonish-done) { + border-color: #00c853; +} + +:is(.admonish-success, .admonish-check, .admonish-done) > :is(.admonition-title, summary.admonition-title) { + background-color: rgba(0, 200, 83, 0.1); +} +:is(.admonish-success, .admonish-check, .admonish-done) > :is(.admonition-title, summary.admonition-title)::before { + background-color: #00c853; + mask-image: var(--md-admonition-icon--admonish-success); + -webkit-mask-image: var(--md-admonition-icon--admonish-success); + mask-repeat: no-repeat; + -webkit-mask-repeat: no-repeat; + mask-size: contain; + -webkit-mask-repeat: no-repeat; +} + +:is(.admonition):is(.admonish-question, .admonish-help, .admonish-faq) { + border-color: #64dd17; +} + +:is(.admonish-question, .admonish-help, .admonish-faq) > :is(.admonition-title, summary.admonition-title) { + background-color: rgba(100, 221, 23, 0.1); +} +:is(.admonish-question, .admonish-help, .admonish-faq) > :is(.admonition-title, summary.admonition-title)::before { + background-color: #64dd17; + mask-image: var(--md-admonition-icon--admonish-question); + -webkit-mask-image: var(--md-admonition-icon--admonish-question); + mask-repeat: no-repeat; + -webkit-mask-repeat: no-repeat; + mask-size: contain; + -webkit-mask-repeat: no-repeat; +} + +:is(.admonition):is(.admonish-warning, .admonish-caution, .admonish-attention) { + border-color: #ff9100; +} + +:is(.admonish-warning, .admonish-caution, .admonish-attention) > :is(.admonition-title, summary.admonition-title) { + background-color: rgba(255, 145, 0, 0.1); +} +:is(.admonish-warning, .admonish-caution, .admonish-attention) > :is(.admonition-title, summary.admonition-title)::before { + background-color: #ff9100; + mask-image: var(--md-admonition-icon--admonish-warning); + -webkit-mask-image: var(--md-admonition-icon--admonish-warning); + mask-repeat: no-repeat; + -webkit-mask-repeat: no-repeat; + mask-size: contain; + -webkit-mask-repeat: no-repeat; +} + +:is(.admonition):is(.admonish-failure, .admonish-fail, .admonish-missing) { + border-color: #ff5252; +} + +:is(.admonish-failure, .admonish-fail, .admonish-missing) > :is(.admonition-title, summary.admonition-title) { + background-color: rgba(255, 82, 82, 0.1); +} +:is(.admonish-failure, .admonish-fail, .admonish-missing) > :is(.admonition-title, summary.admonition-title)::before { + background-color: #ff5252; + mask-image: var(--md-admonition-icon--admonish-failure); + -webkit-mask-image: var(--md-admonition-icon--admonish-failure); + mask-repeat: no-repeat; + -webkit-mask-repeat: no-repeat; + mask-size: contain; + -webkit-mask-repeat: no-repeat; +} + +:is(.admonition):is(.admonish-danger, .admonish-error) { + border-color: #ff1744; +} + +:is(.admonish-danger, .admonish-error) > :is(.admonition-title, summary.admonition-title) { + background-color: rgba(255, 23, 68, 0.1); +} +:is(.admonish-danger, .admonish-error) > :is(.admonition-title, summary.admonition-title)::before { + background-color: #ff1744; + mask-image: var(--md-admonition-icon--admonish-danger); + -webkit-mask-image: var(--md-admonition-icon--admonish-danger); + mask-repeat: no-repeat; + -webkit-mask-repeat: no-repeat; + mask-size: contain; + -webkit-mask-repeat: no-repeat; +} + +:is(.admonition):is(.admonish-bug) { + border-color: #f50057; +} + +:is(.admonish-bug) > :is(.admonition-title, summary.admonition-title) { + background-color: rgba(245, 0, 87, 0.1); +} +:is(.admonish-bug) > :is(.admonition-title, summary.admonition-title)::before { + background-color: #f50057; + mask-image: var(--md-admonition-icon--admonish-bug); + -webkit-mask-image: var(--md-admonition-icon--admonish-bug); + mask-repeat: no-repeat; + -webkit-mask-repeat: no-repeat; + mask-size: contain; + -webkit-mask-repeat: no-repeat; +} + +:is(.admonition):is(.admonish-example) { + border-color: #7c4dff; +} + +:is(.admonish-example) > :is(.admonition-title, summary.admonition-title) { + background-color: rgba(124, 77, 255, 0.1); +} +:is(.admonish-example) > :is(.admonition-title, summary.admonition-title)::before { + background-color: #7c4dff; + mask-image: var(--md-admonition-icon--admonish-example); + -webkit-mask-image: var(--md-admonition-icon--admonish-example); + mask-repeat: no-repeat; + -webkit-mask-repeat: no-repeat; + mask-size: contain; + -webkit-mask-repeat: no-repeat; +} + +:is(.admonition):is(.admonish-quote, .admonish-cite) { + border-color: #9e9e9e; +} + +:is(.admonish-quote, .admonish-cite) > :is(.admonition-title, summary.admonition-title) { + background-color: rgba(158, 158, 158, 0.1); +} +:is(.admonish-quote, .admonish-cite) > :is(.admonition-title, summary.admonition-title)::before { + background-color: #9e9e9e; + mask-image: var(--md-admonition-icon--admonish-quote); + -webkit-mask-image: var(--md-admonition-icon--admonish-quote); + mask-repeat: no-repeat; + -webkit-mask-repeat: no-repeat; + mask-size: contain; + -webkit-mask-repeat: no-repeat; +} + +.navy :is(.admonition) { + background-color: var(--sidebar-bg); +} + +.ayu :is(.admonition), +.coal :is(.admonition) { + background-color: var(--theme-hover); +} + +.rust :is(.admonition) { + background-color: var(--sidebar-bg); + color: var(--sidebar-fg); +} +.rust .admonition-anchor-link:link, .rust .admonition-anchor-link:visited { + color: var(--sidebar-fg); +} diff --git a/src/assembly.md b/src/assembly.md index fd788c0..d08750a 100644 --- a/src/assembly.md +++ b/src/assembly.md @@ -2,7 +2,9 @@ This is an illustrated guide to making a NaxGCC, using photos taken of a NaxGCC board version 1.0.0. -> **NOTE:** Assembling a NaxGCC is conceptually very similar to assembling a Phob 2.0, therefore many sections of this guide (including images) have been taken straight from the official PhobGCC assembly guide. Note that though some images may depict a PhobGCC, the steps are still applicable to the NaxGCC. In parts where the hardware differs, newer images have been used. +```admonish note +Assembling a NaxGCC is conceptually very similar to assembling a Phob 2.0, therefore many sections of this guide (including images) have been taken straight from the official PhobGCC assembly guide. Note that though some images may depict a PhobGCC, the steps are still applicable to the NaxGCC. In parts where the hardware differs, newer images have been used. +``` @@ -120,9 +122,11 @@ Insert magnets into the magnet wells, making sure that the magnets are all orien **If the magnets are not horizontal then the stick will not function.** -> **NOTE:** The magnets should be inserted to have their polarity aligned, that is to say **if you were to remove the magnet mounts and hold them opposite each other, they should attract one another without attempting to flip orientation**. Mounting them differently may cause cross-axis interference, which can (and probably will) lead to erratic stick behavior. The NaxGCC firmware is especially sensitive to this. -> -> If you're inserting your magnets into already-glued magnet mounts, you may use a third magnet to ensure you're inserting both the same way. **The third magnet should attract to both magnets you're inserting the same way around, without attempting to flip orientation.** It is recommended to mark the third magnet, so you don't forget which way it should be oriented. +```admonish note +The magnets should be inserted to have their polarity aligned, that is to say **if you were to remove the magnet mounts and hold them opposite each other, they should attract one another without attempting to flip orientation**. Mounting them differently may cause cross-axis interference, which can (and probably will) lead to erratic stick behavior. The NaxGCC firmware is especially sensitive to this. + +If you're inserting your magnets into already-glued magnet mounts, you may use a third magnet to ensure you're inserting both the same way. **The third magnet should attract to both magnets you're inserting the same way around, without attempting to flip orientation.** It is recommended to mark the third magnet, so you don't forget which way it should be oriented. +``` @@ -134,7 +138,9 @@ Set the stickboxes aside to cure. The NaxGCC only makes use of the digital trigger paddles, as such it is highly recommended to modify the `L` & `R` triggers to include a 3D-printed stopper in order to raise their height and make them more comfortable to use. You can find the 3D-printable stopper files in the [NaxGCC-HW git repo](https://git.naxdy.org/NaxdyOrg/NaxGCC-HW/releases). Simply print two stoppers (or have someone print them for you) and slide them into the hole at the bottom of the triggers. -> **NOTE:** Be careful when reassembling the controller, as slightly depressing the triggers may cause the rubber to be pushed out. +```admonish warning +Be careful when reassembling the controller, as slightly depressing the triggers may cause the rubber to be pushed out. +``` ### Board Preparation @@ -258,9 +264,13 @@ If you're using an OEM top shell, you will need to modify it to allow the USB ca More advanced modders, feel free to use a dremel or a drill to make a cleaner hole. -> **NOTE:** When melting or sanding, take care to wear breathing protection and work in a well-ventilated area. The fumes from melting plastic are toxic, and inhaling microplastics is not particularly good for your health either. +```admonish danger +When melting or sanding, take care to wear breathing protection and work in a well-ventilated area. The fumes from melting plastic are toxic, and inhaling microplastics is not particularly good for your health either. +``` -> **NOTE:** It is highly recommended to only do this with a soldering iron that has exchangeable tips, as the plastic will stick to the tip and reduce its usefulness for actual soldering. Conical tips are best expended for this, since they aren't very good at making surface contact for soldering anyway. +```admonish tip +It is highly recommended to only do this with a soldering iron that has exchangeable tips, as the plastic will stick to the tip and reduce its usefulness for actual soldering. Conical tips are best expended for this, since they aren't very good at making surface contact for soldering anyway. +``` The end result should look something like this: diff --git a/src/configuration.md b/src/configuration.md index 1f99cdd..83f2104 100644 --- a/src/configuration.md +++ b/src/configuration.md @@ -63,7 +63,9 @@ Finally, after having tuned your snapback, you'll probably want to select your p These are all options you have while config mode is active. Config mode is activated by simultaneously pressing `A+X+Y+Start`. -> **NOTE:** When entering config mode, ensure you do not _hold_ the `A+X+Y+Start` combo for multiple seconds. The reason is that the same combo is used to _exit_ config mode, and keeping it held during config mode activation will cause you to immediately leave it again. It is recommended to enter config mode by holding `A+X+Y` and simply _tapping_ `Start`. +```admonish caution +When entering config mode, ensure you do not _hold_ the `A+X+Y+Start` combo for multiple seconds. The reason is that the same combo is used to _exit_ config mode, and keeping it held during config mode activation will cause you to immediately leave it again. It is recommended to enter config mode by holding `A+X+Y` and simply _tapping_ `Start`. +``` --- @@ -87,7 +89,9 @@ When in the measurement phase, the other stick's position (the one you're **not* - If the other stick is centered, let go of the stick you're calibrating and press `A` to record that position. - If the other stick is not centered, move the stick you're calibrating into that position, ensuring that it is perfectly located within the notch, and press `A` to measure that position. - **NOTE:** If you don't have a notch in the position the other stick indicates, simply let go of the stick you're calibrating and press `A` to advance. This notch will then be marked as "Inactive" by the firmware. + ```admonish note + If you don't have a notch in the position the other stick indicates, simply let go of the stick you're calibrating and press `A` to advance. This notch will then be marked as "Inactive" by the firmware. + ``` - You **must measure all four cardinal directions (East, North, West, South) and all four diagonal directions** or calibration will not work. @@ -145,7 +149,9 @@ When the other stick's position returns to center, or resumes displaying the act **Button Combo (C-Stick):** `A+Z+X/Y+Du/Dd` -> **NOTE:** This feature is currently unused for the C-Stick. While you can still adjust the values, changing them won't actually affect the stick's behavior. +```admonish note +This feature is currently unused for the C-Stick. While you can still adjust the values, changing them won't actually affect the stick's behavior. +``` Button combos for adjusting values for the C-Stick are the same as for the analog stick, with an added press of the `Z` button. @@ -201,7 +207,9 @@ Press `L+Start` while in config mode to display the waveshaping values on each s **Button Combo (C-Stick):** `L+Z+A+Du/Dd` -> **NOTE:** This feature has simply been ported over from the PhobGCC for compatibility reasons, but is not very useful for Super Smash Bros. Ultimate. It is recommended to leave this setting at its default value of `100`. +```admonish note +This feature has simply been ported over from the PhobGCC for compatibility reasons, but is not very useful for Super Smash Bros. Ultimate. It is recommended to leave this setting at its default value of `100`. +``` Button combos for adjusting values for the C-Stick are the same as for the analog stick, with an added press of the `Z` button. @@ -223,7 +231,9 @@ The Stick Scaling setting allows the user to adjust what value the stick can rea **Button Combo (C-Stick):** `R+Z+A+Du/Dd` -> **NOTE:** This feature has simply been ported over from the PhobGCC for compatibility reasons, but is not very useful for Super Smash Bros. Ultimate. It is recommended to leave this setting at its default value of `6`. +```admonish note +This feature has simply been ported over from the PhobGCC for compatibility reasons, but is not very useful for Super Smash Bros. Ultimate. It is recommended to leave this setting at its default value of `6`. +``` Button combos for adjusting values for the C-Stick are the same as for the analog stick, with an added press of the `Z` button. @@ -284,11 +294,28 @@ Cycles the input consistency setting through its three modes and displays which For more information about the different input consistency modes, consult the [Input Consistency Mode](./input-consistency.md#input-consistency-modes) list. -> **NOTE:** This setting will only become active upon unplugging and replugging the controller. The controller will then indicate the mode it's in by changing its device name. You can then use your operating system's device viewer to have a look at the device name and determine which mode is currently active. For example, under Linux you can run `lsusb -v` and look for `NaxGCC`: -> -> -> -> +```admonish note +This setting will only become active upon unplugging and replugging the controller. The controller will then indicate the mode it's in by changing its device name. You can then use your operating system's device viewer to have a look at the device name and determine which mode is currently active. For example, under Linux you can run `lsusb -v` and look for `NaxGCC`: + + + +``` + +--- + +## Pro Controller Mode + +`Since: v1.2.0` + +**Button Combo:** `Start` while plugging in the controller + +Makes the NaxGCC present itself as a Nintendo Switch Pro Controller instead of a GameCube adapter with 1 controller connected. While in this mode, pressing `Z+Start` will behave like pressing the home button on a regular Pro Controller. Additionally, pressing `L` will press both `L` and `ZL` at the same time. + +If you unplug your controller, then plug it in again _without_ holding `Start`, it will once again show up as a regular GameCube controller. + +```admonish note +Switch firmware version 19.0.0 suffers from a known issue with GCC adapters (including NaxGCC, which pretends to be one). It is recommended to use Pro Controller Mode if you are on Switch firmware version 19.0.0. If not, it is entirely up to personal preference. +``` --- diff --git a/src/input-consistency.md b/src/input-consistency.md index 660e927..718b73d 100644 --- a/src/input-consistency.md +++ b/src/input-consistency.md @@ -2,7 +2,9 @@ This is a rather technical document about USB polling, input latency, and the issues that arise with input consistency. If you only care about the NaxGCC's solutions to this problem, and not the background knowledge, you can skip ahead to the [Input Consistency Modes](#input-consistency-modes) section. -> **NOTE:** "Input consistency" and "input integrity" are used interchangeably in this document, and refer to the predictability with regards to the frame on which your input will come out. +```admonish note +"Input consistency" and "input integrity" are used interchangeably in this document, and refer to the predictability with regards to the frame on which your input will come out. +``` [[_TOC_]] @@ -61,7 +63,9 @@ The original full-length videos of the experiment are saved and uploaded to my Y - [OG controller mode](https://www.youtube.com/watch?v=UG7NFoMiE-Y) - [Input consistency mode](https://www.youtube.com/watch?v=MNcWOTF9fLk) -> **NOTE:** Repetition of this experiment is important, because in theory, it is possible to get "lucky" by plugging in the controller during the first $8.\overline{6}\mathrm{ms}$ of a frame capture window, and then never unplugging it, which would result in a theoretical $\approx100\%$ accuracy. However, this is not a realistic scenario, and the experiment has been repeated multiple times to ensure that the results are consistent. +```admonish note +Repetition of this experiment is important, because in theory, it is possible to get "lucky" by plugging in the controller during the first $8.\overline{6}\mathrm{ms}$ of a frame capture window, and then never unplugging it, which would result in a theoretical $\approx100\%$ accuracy. However, this is not a realistic scenario, and the experiment has been repeated multiple times to ensure that the results are consistent. +``` # Input Consistency Modes @@ -75,18 +79,22 @@ In regular mode, the NaxGCC will not attempt to modify the polling rate of the c Same as Regular mode, except it asks to be polled at 1000Hz instead of 125Hz. This is useful if you're planning to use your controller on pretty much any device that isn't the Nintendo Switch. This mode carries the lowest latency, so if the device you're connecting to supports it, it is recommended to use this mode. -> **NOTE:** This is not recommended for use on the Switch, because it carries no benefit over Regular mode, and may actually lead to incompatibilities with other connected devices. +```admonish note +This is not recommended for use on the Switch, because it carries no benefit over Regular mode, and may actually lead to incompatibilities with other connected devices. +``` ### Consistency Mode In consistency mode, the NaxGCC introduces a variable delay in order to wait responding to a poll request from the console until exactly $8.\overline{3}\mathrm{ms}$ (half a frame) have elapsed since the last status update. This ensures that the controller is polled exactly twice as often as the game updates and (nearly) eliminates the chance of your inputs being misinterpreted. This is the recommended mode for competitive play, and is the default mode for the NaxGCC. -> **NOTE:** While this is not exactly in-spec behavior for a USB device, it is still within the realm of what is generally considered to be "acceptable" with USB, and has been extensively tested to ensure that it does not cause any issues with the console. +```admonish note +While this is not exactly in-spec behavior for a USB device, it is still within the realm of what is generally considered to be "acceptable" with USB, and has been extensively tested to ensure that it does not cause any issues with the console. +``` ### "Super Hack" Mode In "super hack" mode, the NaxGCC abstains from responding to the console's poll requests until the controller state has changed, _and_ at least $8.\overline{3}\mathrm{ms}$ have elapsed since the last poll request. This ensures that, for inputs made more than $8.\overline{3}\mathrm{ms}$ apart, the latency is minimized, since the state is immediately dispatched to, and interpreted by, the console, at a slight cost to input integrity for inputs made less than $8.\overline{3}\mathrm{ms}$ apart. -> **WARNING:** This mode is currently experimental, as it is still undergoing extensive testing, and is currently **not** recommended for tournament play. - -> **NOTE:** "Super Hack" does not refer to this being a hack that is super, but rather something that is super hacky, since this pretty much out of spec behavior for a USB HID. +```admonish note +"Super Hack" does not refer to this being a hack that is super, but rather something that is super hacky, since this pretty much out of spec behavior for a USB HID. However, it works! +``` diff --git a/src/jlcpcb-parts-ordering.md b/src/jlcpcb-parts-ordering.md index 003dc74..13cc308 100644 --- a/src/jlcpcb-parts-ordering.md +++ b/src/jlcpcb-parts-ordering.md @@ -22,9 +22,13 @@ Since the NaxGCC board is fully integrated, all of the non-GCC components are so The following parts usually have low stock and pre-ordering them is advised: -> **NOTE:** These part quantities are for a single NaxGCC board. You need to multiply them by the number of boards you plan to order. +```admonish note +These part quantities are for a single NaxGCC board. You need to multiply them by the number of boards you plan to order. +``` -> **NOTE:** You can only order PCBs in quantities of 5, 10, 15, 20, 25, 30, 50, or more. Do not order SMD components for amounts other than these or you will either have unused extra parts or unpopulated PCBs later. +```admonish note +You can only order PCBs in quantities of 5, 10, 15, 20, 25, 30, 50, or more. Do not order SMD components for amounts other than these or you will either have unused extra parts or unpopulated PCBs later. +``` - [1x RP2040](https://jlcpcb.com/partdetail/RaspberryPi-RP2040/C2040) - [1x Winbond NOR Flash Chip](https://jlcpcb.com/partdetail/WinbondElec-W25Q128JVSIQ/C97521)$^1$ @@ -46,7 +50,9 @@ Some of the parts may be in stock and be available immediately. You must wait un ## Purchasing the NaxGCC board from JLCPCB -> **NOTE:** Once your pre-ordered SMD Components have come in (report as "Complete" in the parts order history), you may proceed to ordering boards. If they are not in, the parts will not be present on your board, and your board will not be functional. +```admonish warning +Once your pre-ordered SMD Components have come in (report as "Complete" in the parts order history), you may proceed to ordering boards. If they are not in, the parts will not be present on your board, and your board will not be functional. +``` Download the files available in the [NaxGCC-HW git repo](https://git.naxdy.org/NaxdyOrg/NaxGCC-HW/releases) in the releases section as shown below: @@ -70,9 +76,13 @@ Once you've checked that the size is set to `96.07x125.5mm`, you can progress wi Scroll down to PCB Assembly and toggle it on the right. Select Standard PCBA Type (Not available for large orders or colors), the top side, and confirm parts placement as seen below. -> **NOTE:** For large orders such as more than 50 boards or different colors, Standard Assembly is required. This attaches removable rails to the PCB at a significant extra cost. +```admonish note +For large orders such as more than 50 boards or different colors, Standard Assembly is required. This attaches removable rails to the PCB at a significant extra cost. +``` -> **NOTE:** If arranging group buys or purchasing in large quantities, we strongly suggest using Standard PCBA so DOA boards are less likely. +```admonish note +If arranging group buys or purchasing in large quantities, we strongly suggest using Standard PCBA so DOA boards are less likely. +``` diff --git a/src/phob2-to-naxgcc.md b/src/phob2-to-naxgcc.md index 41a954a..2e5d29c 100644 --- a/src/phob2-to-naxgcc.md +++ b/src/phob2-to-naxgcc.md @@ -22,9 +22,11 @@ The alternative method involves modifying only your controller shell to allow a You will also need a **right-angle micro USB cable** to connect to the Phob board. This is because the clearance between the board and the shell is very tight, and a regular micro USB cable will not fit. Alternatively, you can drill or melt a hole in the top part of the shell, but this is not recommended as it will make the controller less comfortable to hold. -> **NOTE:** When choosing a right-angle micro USB cable to buy, keep in mind that the wide side of the trapezoid connector is going to be facing upwards when the controller is held normally. Most right-angle micro USB cables have the wide side facing downwards, so you will need to find one that fits this particular use case. Here's an example of what it _should_ look like: -> -> ->   +```admonish note +When choosing a right-angle micro USB cable to buy, keep in mind that the wide side of the trapezoid connector is going to be facing upwards when the controller is held normally. Most right-angle micro USB cables have the wide side facing downwards, so you will need to find one that fits this particular use case. Here's an example of what it _should_ look like: + + +  +``` After flashing the firmware and making all the necessary modifications, it's now time to go ahead and [configure your controller](./configuration.md) to your liking. Enjoy your new NaxGCC! diff --git a/src/update-firmware.md b/src/update-firmware.md index 567a73e..f0a1eff 100644 --- a/src/update-firmware.md +++ b/src/update-firmware.md @@ -2,7 +2,9 @@ Keeping your firmware up-to-date is recommended to ensure you benefit from the latest features, fixes, and improvements to performance. New versions of the firmware are published at the [official NaxGCC-FW repo's release page](https://git.naxdy.org/NaxdyOrg/NaxGCC-FW/releases) -> **NOTE:** Take care not to accidentally download the _nightly_ release, as these are experimental and may not be stable, unless you want to be a guinea pig for new features. +```admonish caution +Take care not to accidentally download the _nightly_ release, as these are experimental and may not be stable, unless you want to be a guinea pig for new features. +``` ## Flashing your controller for the first time @@ -14,14 +16,20 @@ Simply plug in your NaxGCC to your computer. It will show up as a regular mass-s If you already have a controller with firmware on it, updating is easy. Simply plug in your NaxGCC to your computer while keeping the `A+X+Y` buttons held. The controller will show up as a mass-storage device, similar to when you first plugged it in. Drag & drop the new firmware binary onto the device, and you're done! -> **NOTE:** Major firmware updates (e.g. `1.x.x` to `2.x.x`), **WILL** cause your configuration and calibration to be reset! For these updates, it is recommended to write down your config values for things such as snapback, stick smoothing, etc. before updating. Also make sure to set aside some time to recalibrate your sticks after updating. -> -> Minor firmware updates (e.g. `1.0.x` to `1.1.x`) and fix updates (e.g. `1.0.0` to `1.0.1`) will not cause your configuration to be reset, and you can safely update without having to recalibrate. +```admonish warning +Major firmware updates (e.g. `1.x.x` to `2.x.x`), **WILL** cause your configuration and calibration to be reset! For these updates, it is recommended to write down your config values for things such as snapback, stick smoothing, etc. before updating. Also make sure to set aside some time to recalibrate your sticks after updating. -> **NOTE:** If holding the `A+X+Y` buttons doesn't work, e.g. because the connection was interrupted during the last flashing of the firmware, and the controller is stuck in a non-functional state, you must take it apart and press the `BOOTSEL` switch on the controller board itself. This is a small button located near the center of the board. Hold this button down while plugging in the controller to your computer, and it will show up as a mass-storage device. You can then drag & drop the firmware binary onto it. +Minor firmware updates (e.g. `1.0.x` to `1.1.x`) and fix updates (e.g. `1.0.0` to `1.0.1`) will not cause your configuration to be reset, and you can safely update without having to recalibrate. +``` + +```admonish note +If holding the `A+X+Y` buttons doesn't work, e.g. because the connection was interrupted during the last flashing of the firmware, and the controller is stuck in a non-functional state, you must take it apart and press the `BOOTSEL` switch on the controller board itself. This is a small button located near the center of the board. Hold this button down while plugging in the controller to your computer, and it will show up as a mass-storage device. You can then drag & drop the firmware binary onto it. +``` ## Downgrading your firmware If you ever need to downgrade your firmware, the process is the same as updating. Simply plug in your NaxGCC to your computer while keeping the `A+X+Y` buttons held. The controller will show up as a mass-storage device, similar to when you first plugged it in. Drag & drop the old firmware binary onto the device, and you're done! -> **NOTE:** The same rules as for updating apply here. Major downgrades will cause your configuration and calibration to be reset, while minor downgrades and fix downgrades will not. +```admonish note +The same rules as for updating apply here. Major downgrades will cause your configuration and calibration to be reset, while minor downgrades and fix downgrades will not. +```