Changes

Jump to navigation Jump to search
3,224 bytes added ,  21:48, 29 July 2019
Line 265: Line 265:     
== SetSupportedNpadStyleSet ==
 
== SetSupportedNpadStyleSet ==
Takes an u32 [[#NpadStyleTag]].
+
Takes a PID-descriptor, an u32 [[#NpadStyleTag]], and an u64 [[AM_services|AppletResourceUserId]], no output.
    
== GetSupportedNpadStyleSet ==
 
== GetSupportedNpadStyleSet ==
Returns an u32 [[#NpadStyleTag]].
+
Takes a PID-descriptor and an u64 [[AM_services|AppletResourceUserId]], returns an u32 [[#NpadStyleTag]].
    
== SetSupportedNpadIdType ==
 
== SetSupportedNpadIdType ==
Line 421: Line 421:  
| 7
 
| 7
 
| NpadLark
 
| NpadLark
| NES controller.
+
| NES/Famicom controller.
 
|-
 
|-
 
| 8
 
| 8
 
| NpadHandheldLark
 
| NpadHandheldLark
| NES controller in handheld mode.
+
| NES/Famicom controller in handheld mode.
 
|-
 
|-
 
| 9
 
| 9
 
| NpadLucia
 
| NpadLucia
|  
+
| Unknown.
 
|-
 
|-
 
| 10-28
 
| 10-28
Line 437: Line 437:  
| 29
 
| 29
 
| NpadSystemExt
 
| NpadSystemExt
|
+
| Generic external controller.
 
|-
 
|-
 
| 30
 
| 30
 
| NpadSystem
 
| NpadSystem
|
+
| Generic controller.
 
|-
 
|-
 
| 31
 
| 31
Line 606: Line 606:  
| 303 || [5.0.0+] [[#GetAbstractedPadsState]]
 
| 303 || [5.0.0+] [[#GetAbstractedPadsState]]
 
|-
 
|-
| 321 || [5.0.0+] SetAutoPilotVirtualPadState
+
| 321 || [5.0.0+] [[#SetAutoPilotVirtualPadState]]
 
|-
 
|-
| 322 || [5.0.0+] UnsetAutoPilotVirtualPadState
+
| 322 || [5.0.0+] [[#UnsetAutoPilotVirtualPadState]]
 
|-
 
|-
| 323 || [5.0.0+] UnsetAllAutoPilotVirtualPadState
+
| 323 || [5.0.0+] [[#UnsetAllAutoPilotVirtualPadState]]
 
|-
 
|-
 
| 324 || [7.0.0+] [[#AttachHdlsWorkBuffer]]
 
| 324 || [7.0.0+] [[#AttachHdlsWorkBuffer]]
Line 692: Line 692:  
== GetAbstractedPadsState ==
 
== GetAbstractedPadsState ==
 
Takes a type-0xA output buffer containing an array of u64 '''AbstractedPadHandle''', a type-0x22 output buffer containing an array of [[#AbstractedPadState]], and returns an output s32 for total entries.
 
Takes a type-0xA output buffer containing an array of u64 '''AbstractedPadHandle''', a type-0x22 output buffer containing an array of [[#AbstractedPadState]], and returns an output s32 for total entries.
 +
 +
== SetAutoPilotVirtualPadState ==
 +
Takes an input s8 '''AbstractedVirtualPadId''' and an input [[#AbstractedPadState]], no output.
 +
 +
== UnsetAutoPilotVirtualPadState ==
 +
Takes an input s8 '''AbstractedVirtualPadId''', no output.
 +
 +
Clears AutoPilot state for the specified pad.
 +
 +
== UnsetAllAutoPilotVirtualPadState ==
 +
No input/output.
 +
 +
Same as [[#UnsetAutoPilotVirtualPadState]] except this clears state for every pad.
    
== AttachHdlsWorkBuffer ==
 
== AttachHdlsWorkBuffer ==
Line 735: Line 748:  
== SetHdlsState ==
 
== SetHdlsState ==
 
Takes an input [[#HdlsState]] and an input 8-byte '''HdlsHandle''', no output.
 
Takes an input [[#HdlsState]] and an input 8-byte '''HdlsHandle''', no output.
 +
 +
== AbstractedPadState ==
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || Type, only 1 bit can be set. Converted to [[#HdlsDeviceInfo]]::type internally by [[#SetAutoPilotVirtualPadState]].
 +
|-
 +
| 0x4 || 0x1 || Flags. [[#SetAutoPilotVirtualPadState]] only uses bit0: when clear it will skip using the rest of the input and run [[#UnsetAutoPilotVirtualPadState]] internally.
 +
|-
 +
| 0x5 || 0x3 || Padding
 +
|-
 +
| 0x8 || 0x4 || RGBA Single Body Color
 +
|-
 +
| 0xC || 0x4 || RGBA Single Buttons Color
 +
|-
 +
| 0x10 || 0x1 || Type2. See [[#HiddbgHdlsDeviceInfo]]::type2.
 +
|-
 +
| 0x11 || 0x3 || Padding
 +
|-
 +
| 0x14 || 0x24 || [[#HdlsState]]. Unknown if the last 4-bytes are included in this struct, [[#SetAutoPilotVirtualPadState]]/[[#hiddbgGetAbstractedPadsState]] only uses the first 0x20-bytes.
 +
|-
 +
| 0x38 || 0x60 || Unused with [[#SetAutoPilotVirtualPadState]]/[[#GetAbstractedPadsState]].
 +
|}
 +
 +
Normally the input state is merged with an existing controller selected by Type. However in some cases (BIT(2-5) with type2!=0x2 and BIT(31)) it's detected as a dedicated controller.
 +
 +
Type:
 +
{| class="wikitable" border="1"
 +
!  Bits
 +
!  [[#HdlsDeviceInfo]]::type bits
 +
!  Description
 +
!  Notes
 +
|-
 +
| 0 || 0 || ||
 +
|-
 +
| 1 || 15 || || [[#DeviceType]] |= BIT(1)
 +
|-
 +
| 2 || 1 || ||
 +
|-
 +
| 3 || 2 || ||
 +
|-
 +
| 4 || 1 || ||
 +
|-
 +
| 5 || 2 || ||
 +
|-
 +
| 6 || 3 || ||
 +
|-
 +
| 7 || 11 || || [[#DeviceType]] |= BIT(11)
 +
|-
 +
| 8 || 12 || || [[#DeviceType]] |= BIT(12)
 +
|-
 +
| 9 || 13 || || [[#DeviceType]] |= BIT(13)
 +
|-
 +
| 10 || 14 || || [[#DeviceType]] |= BIT(14)
 +
|-
 +
| 11 || 15 || || [[#DeviceType]] |= BIT(11)
 +
|-
 +
| 12 || 12 || || [[#DeviceType]] |= BIT(12)
 +
|-
 +
| 13 || 13 || || [[#DeviceType]] |= BIT(13)
 +
|-
 +
| 14 || 14 || || [[#DeviceType]] |= BIT(14)
 +
|-
 +
| 15 || 17 || ||
 +
|-
 +
| 31 || 21 || || [[#DeviceType]] = BIT(31)
 +
|-
 +
|}
 +
 +
The above "[[#DeviceType]] |=" notes only apply when type2 is 0x2.
    
== HdlsNpadAssignment ==
 
== HdlsNpadAssignment ==
This is a 0x208-byte struct. This seems to be an array, structure unknown.
+
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || s32 Total entries
 +
|-
 +
| 0x4 || 0x4 || Padding
 +
|-
 +
| 0x8 || 0x200(0x20*0x10) || Array of [[#HdlsNpadAssignmentEntry]].
 +
|}
   −
== AbstractedPadState ==
+
This is a 0x208-byte struct.
 +
 
 +
=== HdlsNpadAssignmentEntry ===
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
 
! Offset || Size || Description
 
! Offset || Size || Description
 
|-
 
|-
| 0x0 || 0x98 || ?
+
| 0x0 || 0x8 || HdlsHandle
 +
|-
 +
| 0x8 || 0x4 || ?
 +
|-
 +
| 0xC || 0x4 || ?
 +
|-
 +
| 0x10 || 0x8 || ?
 +
|-
 +
| 0x18 || 0x1 || ?
 +
|-
 +
| 0x19 || 0x7 || Padding
 
|}
 
|}
 +
 +
This is a 0x20-byte struct.
    
== HdlsStateList ==
 
== HdlsStateList ==
Line 752: Line 859:  
! Offset || Size || Description
 
! Offset || Size || Description
 
|-
 
|-
| 0x0 || 0x4 || Total entries
+
| 0x0 || 0x4 || s32 Total entries
 
|-
 
|-
 
| 0x4 || 0x4 || Padding
 
| 0x4 || 0x4 || Padding
Line 790: Line 897:  
| 0x8 || 0x4 || RGBA Single Buttons Color
 
| 0x8 || 0x4 || RGBA Single Buttons Color
 
|-
 
|-
| 0xC || 0x1 || Additional type field used with the above type field, if the value doesn't match one of the following a default is used. Type Pro-Controller: value 0x3 indicates that the controller is connected via USB. Type Joy-Con Left/Right: with value 0x2 the system doesn't list the controller in hid sharedmem. Type bit21: value 0x3 = unknown.
+
| 0xC || 0x1 || Additional type field used with the above type field, if the value doesn't match one of the following a default is used. Type Pro-Controller: value 0x3 indicates that the controller is connected via USB. Type bit21: value 0x3 = unknown. When value is 0x2, state is merged with an existing controller (when the type value is compatible with this). Otherwise, it's a dedicated controller.
 
|-
 
|-
 
| 0xD || 0x3 || Padding
 
| 0xD || 0x3 || Padding
Line 806: Line 913:  
| 0-7
 
| 0-7
 
|  
 
|  
| BIT(N*4+0) = Pro-Controller, BIT(N*4+1) = Joy-Con Left, BIT(N*4+2) = Joy-Con Right, BIT(N*4+3) = invalid. Where N is 0-1.
+
| BIT(N*4+0) = Pro Controller, BIT(N*4+1) = Joy-Con Left, BIT(N*4+2) = Joy-Con Right, BIT(N*4+3) = invalid. Where N is 0-1.
 
|-
 
|-
 
| 8-10
 
| 8-10
 
|  
 
|  
| Pro-Controller
+
| Pro Controller
 
|-
 
|-
 
| 11
 
| 11
 
|  
 
|  
| Famicom-Controller
+
| Famicom left controller
 
|-
 
|-
 
| 12
 
| 12
 
|  
 
|  
| Famicom-Controller II with microphone
+
| Famicom right controller (with microphone)
 
|-
 
|-
 
| 13
 
| 13
 
|  
 
|  
| NES-Controller ([[#DeviceType]]=0x200)
+
| NES left controller
 
|-
 
|-
 
| 14
 
| 14
 
|  
 
|  
| NES-Controller ([[#DeviceType]]=0x400)
+
| NES right controller
 
|-
 
|-
 
| 15-16
 
| 15-16
Line 834: Line 941:  
| 17
 
| 17
 
|  
 
|  
| Unknown ([[#DeviceType]]=0x8000)
+
| Generic external controller
 
|-
 
|-
 
| 18-20
 
| 18-20
Line 842: Line 949:  
| 21-23
 
| 21-23
 
|  
 
|  
| Unknown ([[#DeviceType]]=0x80000000)
+
| Generic controller
 
|}
 
|}
   Line 858: Line 965:  
| 0x8 || 0x4 || batteryCharge for the main [[HID_Shared_Memory#Controllers|PowerInfo]].
 
| 0x8 || 0x4 || batteryCharge for the main [[HID_Shared_Memory#Controllers|PowerInfo]].
 
|-
 
|-
| 0xC || 0x4 || Buttons
+
| 0xC || 0x4 || [[HID_Shared_Memory#Button_State|Buttons]]. Bit18 = HOME and bit19 = Capture.
 
|-
 
|-
 
| 0x10 || 0x10(4*2*2) || Joystick data, see [[HID_Shared_Memory#Controller_State]].
 
| 0x10 || 0x10(4*2*2) || Joystick data, see [[HID_Shared_Memory#Controller_State]].
Line 924: Line 1,031:  
| 309 || [5.0.0+] GetNpadFullKeyGripColor
 
| 309 || [5.0.0+] GetNpadFullKeyGripColor
 
|-
 
|-
| 310 || [6.0.0+] GetMaskedSupportedNpadStyleSet
+
| 310 || [6.0.0+] [[#GetMaskedSupportedNpadStyleSet]]
 
|-
 
|-
 
| 311 || SetNpadPlayerLedBlinkingDevice
 
| 311 || SetNpadPlayerLedBlinkingDevice
Line 1,094: Line 1,201:  
| 1150 || [8.0.0+] SetTouchScreenMagnification
 
| 1150 || [8.0.0+] SetTouchScreenMagnification
 
|}
 
|}
 +
 +
== GetMaskedSupportedNpadStyleSet ==
 +
Takes an input u64 AppletResourceUserId, returns an output u32 [[#NpadStyleTag]].
 +
 +
Official sw uses the output from [[Applet_Manager_services|GetAppletResourceUserIdOfCallerApplet]] with this.
    
== GetUniquePadsFromNpad ==
 
== GetUniquePadsFromNpad ==
Line 1,310: Line 1,422:  
| 0
 
| 0
 
| FullKey
 
| FullKey
| Pro Controller.
+
| Pro Controller and Gc controller.
 
|-
 
|-
 
| 1
 
| 1
Line 1,318: Line 1,430:  
| 2
 
| 2
 
| HandheldLeft
 
| HandheldLeft
| Joy-Con left controller in handheld mode.
+
| Joy-Con/Famicom/NES left controller in handheld mode.
 
|-
 
|-
 
| 3
 
| 3
 
| HandheldRight
 
| HandheldRight
| Joy-Con right controller in handheld mode.
+
| Joy-Con/Famicom/NES right controller in handheld mode.
 
|-
 
|-
 
| 4
 
| 4
 
| JoyLeft
 
| JoyLeft
| Joy-Con left controller in single mode.
+
| Joy-Con left controller.
 
|-
 
|-
 
| 5
 
| 5
 
| JoyRight
 
| JoyRight
| Joy-Con right controller in single mode.
+
| Joy-Con right controller.
 
|-
 
|-
 
| 6
 
| 6
Line 1,337: Line 1,449:  
|-
 
|-
 
| 7
 
| 7
|  
+
| LarkLeft (HVC)
| Famicom controller.
+
| Famicom left controller.
 
|-
 
|-
 
| 8
 
| 8
|  
+
| LarkRight (HVC)
| Famicom controller II with microphone.
+
| Famicom right controller (with microphone).
 
|-
 
|-
 
| 9
 
| 9
|  
+
| LarkLeft (NES)
| NES controller.
+
| NES left controller.
 
|-
 
|-
 
| 10
 
| 10
|  
+
| LarkRight (NES)
| NES controller (same as above?).
+
| NES right controller.
 
|-
 
|-
 
| 11-14
 
| 11-14
 
|  
 
|  
| Unknown
+
| Reserved
 
|-
 
|-
 
| 15
 
| 15
|  
+
| SystemExt
| Unknown controller type.
+
| Generic external controller.
 
|-
 
|-
 
| 16-30
 
| 16-30
 
|  
 
|  
| Unknown
+
| Reserved
 
|-
 
|-
 
| 31
 
| 31
|  
+
| System
| Unknown controller type (similar to bit15?).
+
| Generic controller.
 
|}
 
|}
  

Navigation menu