Line 661:
Line 661:
This uses the same func internally as [[#PostBufferAsync_2|#PostBufferAsync]] except multiple urbs are specified by the user: the input buffer contains an array of u32s for the size of each urb, where '''urbCount''' is the total number of entries in this array. With [[#PostBufferAsync_2|#PostBufferAsync]] the last 2 params passed to the internal func are hard-coded to 0, while with this command it's '''unk1''' and '''unk2'''.
This uses the same func internally as [[#PostBufferAsync_2|#PostBufferAsync]] except multiple urbs are specified by the user: the input buffer contains an array of u32s for the size of each urb, where '''urbCount''' is the total number of entries in this array. With [[#PostBufferAsync_2|#PostBufferAsync]] the last 2 params passed to the internal func are hard-coded to 0, while with this command it's '''unk1''' and '''unk2'''.
+
+
= usb:pd =
+
This is "nn::usb::pd::detail::IPdManager".
+
+
{| class="wikitable" border="1"
+
|-
+
! Cmd || Name
+
|-
+
| 0 || [[#OpenSession]]
+
|}
+
+
Only system-titles with access to this are [[PTM_services|ptm]] and [[AM_services|am]].
+
+
== OpenSession ==
+
No input. Returns an [[#IPdSession]].
+
+
== IPdSession ==
+
This is "nn::usb::pd::detail::IPdSession".
+
+
{| class="wikitable" border="1"
+
|-
+
! Cmd || Name
+
|-
+
| 0 || BindNoticeEvent
+
|-
+
| 1 || UnbindNoticeEvent
+
|-
+
| 2 || GetStatus
+
|-
+
| 3 || GetNotice
+
|-
+
| 4 || EnablePowerRequestNotice
+
|-
+
| 5 || DisablePowerRequestNotice
+
|-
+
| 6 || ReplyPowerRequest
+
|}
+
+
= usb:pd:c =
+
This is "nn::usb::pd::detail::IPdCradleManager".
+
+
{| class="wikitable" border="1"
+
|-
+
! Cmd || Name
+
|-
+
| 0 || [[#OpenCradleSession]]
+
|}
+
+
USB-sysmodule symbols for this refer to "Cradle", which is the [[Dock]].
+
+
== OpenCradleSession ==
+
No input. Returns an [[#IPdCradleSession]].
+
+
== IPdCradleSession ==
+
This is "nn::usb::pd::detail::IPdCradleSession".
+
+
{| class="wikitable" border="1"
+
|-
+
! Cmd || Name
+
|-
+
| 0 || [[#AccessCradleVdoWithWriteRequest]]
+
|-
+
| 1 || [[#AccessCradleVdoWithReadRequest]]
+
|-
+
| 2 || Vdm20Init || No input/output.
+
If Cradle or RelayBox is connected, caches result of VDM 0x20.
+
|-
+
| 3 || [2.0.0+] GetFwType
+
|-
+
| 4 || [2.0.0+] GetFwRevision
+
|-
+
| 5 || [2.0.0+] GetManufacturerId
+
|-
+
| 6 || [2.0.0+] GetDeviceId
+
|-
+
| 7 || [3.0.0+]
+
|-
+
| 8 || [3.0.0+]
+
|}
+
+
=== AccessCradleVdoWithWriteRequest ===
+
Takes two input u32s '''Value''' and '''UserId'''. No output.
+
+
'''UserId''' is translated to the actual [[#VdmCommand]] to send.
+
+
=== AccessCradleVdoWithReadRequest ===
+
Takes an input u32 '''UserId'''. Returns an u32 '''Value'''.
+
+
'''UserId''' is translated to the actual [[#VdmCommand]] to send.
+
+
=== GetFwType ===
+
No input. Returns an output u16.
+
+
=== GetFwRevision ===
+
No input. Returns an output u16.
+
+
=== GetManufacturerId ===
+
No input. Returns an output u16.
+
+
=== GetDeviceId ===
+
No input. Returns an output u16.
+
+
= usb:pd:m =
+
This is "nn::usb::pd::detail::IPdManufactureManager".
+
+
[2.0.0+] This service was merged into [[#usb:pd:c|usb:pd:c]].
+
+
{| class="wikitable" border="1"
+
|-
+
! Cmd || Name
+
|-
+
| 0 || [[#OpenManufactureSession]]
+
|}
+
+
== OpenManufactureSession ==
+
No input. Returns an [[#IPdManufactureSession]].
+
+
== IPdManufactureSession ==
+
This is "nn::usb::pd::detail::IPdManufactureSession".
+
+
{| class="wikitable" border="1"
+
|-
+
! Cmd || Name
+
|-
+
| 0 || GetFwType
+
|-
+
| 1 || GetFwRevision
+
|-
+
| 2 || GetManufacturerId
+
|-
+
| 3 || GetDeviceId
+
|}
+
+
= usb:pm =
+
This is "nn::usb::pm::IPmService".
+
+
{| class="wikitable" border="1"
+
|-
+
! Cmd || Name
+
|-
+
| 0 ||
+
|-
+
| 1 ||
+
|-
+
| 2 ||
+
|-
+
| 3 ||
+
|-
+
| 4 ||
+
|-
+
| 5 ||
+
|}
+
+
USB Port Manager, only system-title using this is [[PTM_services|ptm]].
+
+
= usb:qdb =
+
Added with [[7.0.0]].
+
+
{| class="wikitable" border="1"
+
|-
+
! Cmd || Name
+
|-
+
| 0 ||
+
|-
+
| 1 ||
+
|}
+
+
== Cmd0 ==
+
No input/output, takes a type-0x5 input buffer.
+
+
This loads data for [[#HidGamepad]] with the input .json.
+
+
== Cmd1 ==
+
Takes 6-bytes of input (u16s '''vid''', '''pid''', '''bcdDevice''') and a type-0x5 input buffer, returns an output u8 bool indicating success.
+
+
Locates an entry in the [[#HidGamepad]] state with the input u16s, and checks for a '''quirks''' array entry where '''name''' matches the input buffer string. Returns 1 when found, 0 otherwise.
+
+
= usb:obsv =
+
Added with [8.0.0+].
+
+
{| class="wikitable" border="1"
+
|-
+
! Cmd || Name
+
|-
+
| 0 ||
+
|-
+
| 1 ||
+
|}
= UsbHsInterface =
= UsbHsInterface =
Line 780:
Line 968:
Official sw only uses the Result/size fields.
Official sw only uses the Result/size fields.
−
= usb:pd =
+
= VdmCommand =
−
This is "nn::usb::pd::detail::IPdManager".
−
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
−
! Cmd || Name
+
! Value || UserId || Name
|-
|-
−
| 0 || GetPdSession
+
| 0 || - || None
−
|}
−
−
Only system-titles with access to this are [[PTM_services|ptm]] and [[AM_services|am]].
−
−
== IPdSession ==
−
This is "nn::usb::pd::detail::IPdSession".
−
−
{| class="wikitable" border="1"
−
|-
−
! Cmd || Name
−
|-
−
| 0 || BindNoticeEvent
−
|-
−
| 1 || UnbindNoticeEvent
−
|-
−
| 2 || GetStatus
−
|-
−
| 3 || GetNotice
|-
|-
−
| 4 || EnablePowerRequestNotice
+
| 1 || 0 || LedControlRequest
−
|-
−
| 5 || DisablePowerRequestNotice
−
|-
−
| 6 || ReplyPowerRequest
−
|}
−
−
= usb:pd:c =
−
This is "nn::usb::pd::detail::IPdCradleManager".
−
−
{| class="wikitable" border="1"
−
|-
−
! Cmd || Name || Notes
−
|-
−
| 0 || GetPdCradleSession || Returns a session handle for the below.
−
|}
−
−
USB-sysmodule symbols for this refer to "Cradle", which is the [[Dock]].
−
−
== IPdCradleSession ==
−
This is "nn::usb::pd::detail::IPdCradleSession".
−
−
{| class="wikitable" border="1"
|-
|-
−
! Cmd || Name || Notes
+
| 2 || - || SleepButtonNotice
|-
|-
−
| 0 || VdmUserWrite || Input { u32 value; u32 VdmUserId; }. Output {}.
+
| 3 || 10 || DeviceTypeRequest
−
If Cradle or RelayBox is connected, issues given VDM with value.
|-
|-
−
| 1 || VdmUserRead || Input { u32 VdmUserId; }. Output { u32 value; }.
+
| 4 || - || DeviceTypeReply
−
If Cradle or RelayBox is connected, returns u32 response from issuing given VDM.
|-
|-
−
| 2 || Vdm20Init || No input/output.
+
| 5 || - || UsbPowerErrorNotice
−
If Cradle or RelayBox is connected, caches result of VDM 0x20.
|-
|-
−
| 3 || [2.0.0+] GetFwType || No input. Returns an output u16.
+
| 6 || 1 || Dp2HdmiFwVerRequest
|-
|-
−
| 4 || [2.0.0+] GetFwRevision || No input. Returns an output u16.
+
| 7 || - || Dp2HdmiFwVerReply
|-
|-
−
| 5 || [2.0.0+] GetManufacturerId || No input. Returns an output u16.
+
| 8 || - || Dp2HdmiFwUpdateRequest
|-
|-
−
| 6 || [2.0.0+] GetDeviceId || No input. Returns an output u16.
+
| 9 || - || Dp2HdmiFwUpdateReply
|-
|-
−
| 7 || [3.0.0+] ||
+
| 10 || - || Dp2HdmiFwUpdateNotice
|-
|-
−
| 8 || [3.0.0+] ||
+
| 11 || 2 || PdcHFwVerRequest
−
|}
−
−
Note: The VdmUserId given to VdmUserRead/VdmUserWrite is translated from the given (enum) value to the actual cmd to send.
−
−
= usb:pd:m =
−
This is "nn::usb::pd::detail::IPdManufactureManager". This is only available on 1.0.0.
−
−
{| class="wikitable" border="1"
|-
|-
−
! Cmd || Name || Notes
+
| 12 || - || PdcHFwVerReply
|-
|-
−
| 0 || || No input, returns an [[#IPdManufactureSession]].
+
| 13 || - || PdcHFwUpdateRequest
−
|}
−
−
== IPdManufactureSession ==
−
This is "nn::usb::pd::detail::IPdManufactureSession".
−
−
These commands just load the u16 from global state.
−
−
{| class="wikitable" border="1"
|-
|-
−
! Cmd || Name || Notes
+
| 14 || - || PdcHFwUpdateReply
|-
|-
−
| 0 || || No input, returns an output u16.
+
| 15 || - || PdcHFwUpdateNotice
|-
|-
−
| 1 || || No input, returns an output u16.
+
| 16 || 3 || PdcAFwVerRequest
|-
|-
−
| 2 || || No input, returns an output u16.
+
| 17 || - || PdcAFwVerReply
|-
|-
−
| 3 || || No input, returns an output u16.
+
| 18 || - || PdcAFwUpdateRequest
|-
|-
−
|}
+
| 19 || - || PdcAFwUpdateReply
−
−
= usb:pm =
−
This is "nn::usb::pm::IPmService".
−
−
{| class="wikitable" border="1"
|-
|-
−
! Cmd || Name
+
| 20 || - || PdcAFwUpdateNotice
|-
|-
−
| 0 ||
+
| 21 || - || DeviceErrorNotice
|-
|-
−
| 1 ||
+
| 22 || 4 || DeviceStateRequest
|-
|-
−
| 2 ||
+
| 23 || || DeviceStateReply
|-
|-
−
| 3 ||
+
| 24 || 5 || McuFwVerRequest
|-
|-
−
| 4 ||
+
| 25 || || McuFwVerReply
|-
|-
−
| 5 ||
+
| 26 || 6 || McuFwUpdateRequest
−
|}
−
−
USB Port Manager, only system-title using this is [[PTM_services|ptm]].
−
−
= usb:qdb =
−
Added with [[7.0.0]].
−
−
{| class="wikitable" border="1"
|-
|-
−
! Cmd || Name
+
| 27 || || McuFwUpdateReply
|-
|-
−
| 0 ||
+
| 28 || 7 || McuFwUpdateNotice
|-
|-
−
| 1 ||
+
| 29 || - ||
−
|}
−
−
== Cmd0 ==
−
No input/output, takes a type-0x5 input buffer.
−
−
This loads data for [[#HidGamepad]] with the input .json.
−
−
== Cmd1 ==
−
Takes 6-bytes of input (u16s '''vid''', '''pid''', '''bcdDevice''') and a type-0x5 input buffer, returns an output u8 bool indicating success.
−
−
Locates an entry in the [[#HidGamepad]] state with the input u16s, and checks for a '''quirks''' array entry where '''name''' matches the input buffer string. Returns 1 when found, 0 otherwise.
−
−
= usb:obsv =
−
Added with [8.0.0+].
−
−
{| class="wikitable" border="1"
|-
|-
−
! Cmd || Name
+
| 30 || 8 ||
|-
|-
−
| 0 ||
+
| 31 || - ||
|-
|-
−
| 1 ||
+
| 32 || 9 ||
|}
|}