diff --git a/Packages/com.unity.inputsystem/DocCodeSamples.Tests.meta b/Packages/com.unity.inputsystem/DocCodeSamples.Tests.meta
new file mode 100644
index 0000000000..b137e3ae9b
--- /dev/null
+++ b/Packages/com.unity.inputsystem/DocCodeSamples.Tests.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c0f26b555bfc14351a9f8ec342fd6ae8
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Packages/com.unity.inputsystem/DocCodeSamples.Tests/DocCodeSamples.asmdef b/Packages/com.unity.inputsystem/DocCodeSamples.Tests/DocCodeSamples.asmdef
new file mode 100644
index 0000000000..180bbcadf0
--- /dev/null
+++ b/Packages/com.unity.inputsystem/DocCodeSamples.Tests/DocCodeSamples.asmdef
@@ -0,0 +1,16 @@
+{
+    "name": "Unity.InputSystem.DocCodeSamples",
+    "rootNamespace": "",
+    "references": [
+        "GUID:75469ad4d38634e559750d17036d5f7c"
+    ],
+    "includePlatforms": [],
+    "excludePlatforms": [],
+    "allowUnsafeCode": false,
+    "overrideReferences": true,
+    "precompiledReferences": [],
+    "autoReferenced": false,
+    "defineConstraints": [],
+    "versionDefines": [],
+    "noEngineReferences": false
+}
\ No newline at end of file
diff --git a/Packages/com.unity.inputsystem/DocCodeSamples.Tests/DocCodeSamples.asmdef.meta b/Packages/com.unity.inputsystem/DocCodeSamples.Tests/DocCodeSamples.asmdef.meta
new file mode 100644
index 0000000000..213c7c30d8
--- /dev/null
+++ b/Packages/com.unity.inputsystem/DocCodeSamples.Tests/DocCodeSamples.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 41b01d3964f844d8b43923c18b3a9a6f
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Packages/com.unity.inputsystem/DocCodeSamples.Tests/GamepadExample.cs b/Packages/com.unity.inputsystem/DocCodeSamples.Tests/GamepadExample.cs
new file mode 100644
index 0000000000..1ba384dd31
--- /dev/null
+++ b/Packages/com.unity.inputsystem/DocCodeSamples.Tests/GamepadExample.cs
@@ -0,0 +1,53 @@
+using UnityEngine;
+using UnityEngine.InputSystem;
+
+namespace DocCodeSamples.Tests
+{
+    internal class GamepadExample : MonoBehaviour
+    {
+        void Start()
+        {
+            // Print all connected gamepads
+            Debug.Log(string.Join("\n", Gamepad.all));
+        }
+
+        void Update()
+        {
+            var gamepad = Gamepad.current;
+
+            // No gamepad connected.
+            if (gamepad == null)
+            {
+                return;
+            }
+
+            // Check if "Button North" was pressed this frame
+            if (gamepad.buttonNorth.wasPressedThisFrame)
+            {
+                Debug.Log("Button North was pressed");
+            }
+
+            // Check if the button control is being continuously actuated and read its value
+            if (gamepad.rightTrigger.IsActuated())
+            {
+                Debug.Log("Right trigger value: " + gamepad.rightTrigger.ReadValue());
+            }
+
+            // Read left stick value and perform some code based on the value
+            Vector2 move = gamepad.leftStick.ReadValue();
+            {
+                // Use the Vector2 move for the game logic here
+            }
+
+            // Creating haptic feedback while "Button South" is pressed and stopping it when released.
+            if (gamepad.buttonSouth.wasPressedThisFrame)
+            {
+                gamepad.SetMotorSpeeds(0.2f, 1.0f);
+            }
+            else if (gamepad.buttonSouth.wasReleasedThisFrame)
+            {
+                gamepad.ResetHaptics();
+            }
+        }
+    }
+}
diff --git a/Packages/com.unity.inputsystem/DocCodeSamples.Tests/GamepadExample.cs.meta b/Packages/com.unity.inputsystem/DocCodeSamples.Tests/GamepadExample.cs.meta
new file mode 100644
index 0000000000..2b7c0d0a09
--- /dev/null
+++ b/Packages/com.unity.inputsystem/DocCodeSamples.Tests/GamepadExample.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 898672c95e554f2fb492125d78b11af2
+timeCreated: 1733401360
\ No newline at end of file
diff --git a/Packages/com.unity.inputsystem/DocCodeSamples.Tests/GamepadHapticsExample.cs b/Packages/com.unity.inputsystem/DocCodeSamples.Tests/GamepadHapticsExample.cs
new file mode 100644
index 0000000000..b1c414641b
--- /dev/null
+++ b/Packages/com.unity.inputsystem/DocCodeSamples.Tests/GamepadHapticsExample.cs
@@ -0,0 +1,48 @@
+using UnityEngine;
+using UnityEngine.InputSystem;
+
+namespace DocCodeSamples.Tests
+{
+    internal class GamepadHapticsExample : MonoBehaviour
+    {
+        bool hapticsArePaused = false;
+
+        void Update()
+        {
+            var gamepad = Gamepad.current;
+
+            // No gamepad connected, no need to continue.
+            if (gamepad == null)
+                return;
+
+            float leftTrigger = gamepad.leftTrigger.ReadValue();
+            float rightTrigger = gamepad.rightTrigger.ReadValue();
+
+            // Only set motor speeds if haptics were not paused and if trigger is actuated.
+            // Both triggers must be actuated past 0.2f to start haptics.
+            if (!hapticsArePaused &&
+                (gamepad.leftTrigger.IsActuated() || gamepad.rightTrigger.IsActuated()))
+                gamepad.SetMotorSpeeds(
+                    leftTrigger < 0.2f ? 0.0f : leftTrigger,
+                    rightTrigger < 0.2f ? 0.0f : rightTrigger);
+
+            // Toggle haptics "playback" when "Button South" is pressed.
+            // Notice that if you release the triggers after pausing,
+            // and press the button again, haptics will resume.
+            if (gamepad.buttonSouth.wasPressedThisFrame)
+            {
+                if (hapticsArePaused)
+                    gamepad.ResumeHaptics();
+                else
+                    gamepad.PauseHaptics();
+
+                hapticsArePaused = !hapticsArePaused;
+            }
+
+            // Notice that if you release the triggers after pausing,
+            // and press the Start button, haptics will be reset.
+            if (gamepad.startButton.wasPressedThisFrame)
+                gamepad.ResetHaptics();
+        }
+    }
+}
diff --git a/Packages/com.unity.inputsystem/DocCodeSamples.Tests/GamepadHapticsExample.cs.meta b/Packages/com.unity.inputsystem/DocCodeSamples.Tests/GamepadHapticsExample.cs.meta
new file mode 100644
index 0000000000..42a614007b
--- /dev/null
+++ b/Packages/com.unity.inputsystem/DocCodeSamples.Tests/GamepadHapticsExample.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 3bbc200178984676a2dcb977a2fe3bae
+timeCreated: 1733400387
\ No newline at end of file
diff --git a/Packages/com.unity.inputsystem/InputSystem/Devices/Gamepad.cs b/Packages/com.unity.inputsystem/InputSystem/Devices/Gamepad.cs
index 1a6a98c1e9..3841c4d723 100644
--- a/Packages/com.unity.inputsystem/InputSystem/Devices/Gamepad.cs
+++ b/Packages/com.unity.inputsystem/InputSystem/Devices/Gamepad.cs
@@ -102,7 +102,6 @@ public struct GamepadState : IInputStateTypeInfo
         /// 
         /// Button bit mask.
         /// 
-        /// Button bit mask.
         /// 
         /// 
         /// 
@@ -132,20 +131,20 @@ public struct GamepadState : IInputStateTypeInfo
         public uint buttons;
 
         /// 
-        /// Left stick position. Each axis goes from -1 to 1 with
-        /// 0 being center position.
+        /// A 2D vector representing the current position of the left stick on a gamepad.
         /// 
-        /// Left stick position.
+        /// Each axis of the 2D vector's range goes from -1 to 1. 0 represents the stick in its center position, and -1 or 1 represents the the stick pushed to its extent in each direction along the axis.
         /// 
         [InputControl(layout = "Stick", usage = "Primary2DMotion", processors = "stickDeadzone", displayName = "Left Stick", shortDisplayName = "LS")]
         [FieldOffset(4)]
         public Vector2 leftStick;
 
         /// 
-        /// Right stick position. Each axis from -1 to 1 with
-        /// 0 being center position.
+        /// A 2D vector representing the current position of the right stick on a gamepad.
         /// 
-        /// Right stick position.
+        /// Each axis of the 2D vector's range goes from -1 to 1.
+        /// 0 represents the stick in its center position.
+        /// -1 or 1 represents the stick pushed to its extent in each direction along the axis.
         /// 
         [InputControl(layout = "Stick", usage = "Secondary2DMotion", processors = "stickDeadzone", displayName = "Right Stick", shortDisplayName = "RS")]
         [FieldOffset(12)]
@@ -154,18 +153,22 @@ public struct GamepadState : IInputStateTypeInfo
         ////REVIEW: should left and right trigger get deadzones?
 
         /// 
-        /// Position of the left trigger. Goes from 0 (not pressed) to 1 (fully pressed).
+        /// The current position of the left trigger on a gamepad.
         /// 
-        /// Position of left trigger.
+        /// The value's range goes from 0 to 1.
+        /// 0 represents the trigger in its neutral position.
+        /// 1 represents the trigger in its fully pressed position.
         /// 
         [InputControl(layout = "Button", format = "FLT", usage = "SecondaryTrigger", displayName = "Left Trigger", shortDisplayName = "LT")]
         [FieldOffset(20)]
         public float leftTrigger;
 
         /// 
-        /// Position of the right trigger. Goes from 0 (not pressed) to 1 (fully pressed).
+        /// The current position of the right trigger on a gamepad.
         /// 
-        /// Position of right trigger.
+        /// The value's range goes from 0 to 1.
+        /// 0 represents the trigger in its neutral position.
+        /// 1 represents the trigger in its fully pressed position.
         /// 
         [InputControl(layout = "Button", format = "FLT", usage = "SecondaryTrigger", displayName = "Right Trigger", shortDisplayName = "RT")]
         [FieldOffset(24)]
@@ -174,7 +177,7 @@ public struct GamepadState : IInputStateTypeInfo
         /// 
         /// State format tag for GamepadState.
         /// 
-        /// Returns "GPAD".
+        ///  Holds the format tag for GamepadState ("GPAD")
         public FourCC format => Format;
 
         /// 
@@ -399,109 +402,96 @@ namespace UnityEngine.InputSystem
     /// to be mapped correctly and consistently. If, based on the set of supported devices available
     /// to the input system, this cannot be guaranteed, a given device is usually represented as a
     /// generic  or as just a plain  instead.
-    ///
+    /// 
     /// 
-    /// 
-    /// // Show all gamepads in the system.
-    /// Debug.Log(string.Join("\n", Gamepad.all));
-    ///
-    /// // Check whether the X button on the current gamepad is pressed.
-    /// if (Gamepad.current.xButton.wasPressedThisFrame)
-    ///     Debug.Log("Pressed");
-    ///
-    /// // Rumble the left motor on the current gamepad slightly.
-    /// Gamepad.current.SetMotorSpeeds(0.2f, 0.
-    /// 
+    /// 
+        /// using System;
+        /// using UnityEngine;
+        /// using UnityEngine.InputSystem;
+        ///
+        /// public class MakeCurrentGamepadExample : MonoBehaviour
+        /// {
+        ///     void Update()
+        ///     {
+        ///         /// Make the first Gamepad always the current one
+        ///         if (Gamepad.all.Count > 0)
+        ///         {
+        ///             Gamepad.all[0].MakeCurrent();
+        ///         }
+        ///     }
+        /// }
+        /// 
+        /// 
         public override void MakeCurrent()
         {
             base.MakeCurrent();
             current = this;
         }
 
+        /// 
         /// 
-        /// Called when the gamepad is added to the system.
+        /// Called when a gamepad is added to the system.
         /// 
+        /// 
+        /// Override this method if you want to do additional processing when a gamepad becomes connected. After this method is called, the gamepad is automatically added to the list of  gamepads.
+        /// 
         protected override void OnAdded()
         {
             ArrayHelpers.AppendWithCapacity(ref s_Gamepads, ref s_GamepadCount, this);
         }
 
+        /// 
         /// 
         /// Called when the gamepad is removed from the system.
         /// 
+        /// 
+        /// Override this method if you want to do additional processing when a gamepad becomes disconnected. After this method is called, the gamepad is automatically removed from the list of  gamepads.
+        /// 
         protected override void OnRemoved()
         {
             if (current == this)
@@ -730,34 +741,61 @@ protected override void OnRemoved()
         }
 
         /// 
-        /// Pause rumble effects on the gamepad. Resume with .
+        /// Pause rumble effects on the gamepad.
         /// 
+        /// 
+        /// It will pause rumble effects and save the current motor speeds.
+        /// Resume from those speeds with .
+        /// Some devices such as  and
+        ///  can also set the LED color when this method is called.
+        /// 
         /// 
+        /// 
+        ///