Capmtp services: Difference between revisions

Behemoth (talk | contribs)
No edit summary
No edit summary
 
(9 intermediate revisions by 2 users not shown)
Line 1: Line 1:
This implements the MTP PTP protocol[https://www.usb.org/document-library/media-transfer-protocol-v11-spec-and-mtp-v11-adopters-agreement].
This implements the MTP PTP [https://www.usb.org/document-library/media-transfer-protocol-v11-spec-and-mtp-v11-adopters-agreement protocol]. This was added with [[11.0.0]].


= capmtp =
= capmtp =
Line 6: Line 6:
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Cmd || Name || Notes
! Cmd || Name
|-
| 0 || || No input. Returns a session of [[#ICapmtpInterface]]
|-
|-
| 0 || [[#CreateInterface]]
|}
|}
== CreateInterface ==
No input. Returns an [[#ICapmtpInterface]].


== ICapmtpInterface ==
== ICapmtpInterface ==
Line 17: Line 19:
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Cmd || Name || Notes
! Cmd || Name
|-
| 0 || ||
|-
|-
| 1 || || No input or output.
| 0 || [[#Initialize]]
|-
|-
| 2 || || No input or output. Starts MTP command handler "nn.capmtp.CapmtpCommandLoop".
| 1 || [[#Finalize]]
|-
|-
| 3 || || No input or output. Stops "nn.capmtp.CapmtpCommandLoop".
| 2 || [[#Enable]]
|-
|-
| 4 || || No input. Returns true if "nn.capmtp.CapmtpCommandLoop" is running.
| 3 || [[#Disable]]
|-
|-
| 5 || || No input. Returns readable event handle.
| 4 || [[#GetConnectionStateChangeEvent]]
|-
|-
| 6 || || No input. Returns a boolean.
| 5 || [[#IsEnabled]]
|-
|-
| 7 || || No input. Returns readable event handle.
| 6 || [[#IsConnected]]
|-
|-
| 8 || || No input or output.
| 7 || [[#GetUpdatedErrorEvent]]
|-
|-
| 8 || [[#GetLastError]]
|}
|}


== Notes ==
=== Initialize ===
Only operation calls 0x1001-0x100A are available.
Takes a u32 max folder count, a u32 max image count, a u32 max video count, a transfer memory handle + u32 size and a type-0x5 buffer translated "Other" utf-16 string.
 
=== Finalize ===
No input/output.
 
Unmaps transfer memory from [[#Initialize]], stops "nn.capmtp.CapmtpCommandLoop".
 
=== Enable ===
No input/output.
 
Starts MTP command handler thread "nn.capmtp.CapmtpCommandLoop".
 
=== Disable ===
No input/output.
 
Stops "nn.capmtp.CapmtpCommandLoop".
 
=== GetConnectionStateChangeEvent ===
No input. Returns readable event handle.
 
Signaled when the USB connection status changes.
 
=== IsEnabled ===
No input. Returns an output bool.
 
Returns true if "nn.capmtp.CapmtpCommandLoop" is running.
 
=== IsConnected ===
No input. Returns an output bool.
 
Returns true if a USB connection is established.
 
=== GetUpdatedErrorEvent ===
No input. Returns readable event handle.
 
Signaled when an error occurred during album scan.
 
=== GetLastError ===
No input/output.
 
Returns the album scan Result.
 
= Notes =
Only PTP operations 0x1001-0x100A are available.
 
* OpenSession/CloseSession only allow a maximum of 1 session to be opened.
* DeviceInfo: Serial Number is set to the output from [[Settings_services#GetSerialNumber|GetSerialNumber]]. Device Version is set to the [[System_Version_Title|SystemVersion]] DisplayVersion.
 
While this has access to [[Filesystem_services#fsp-srv|fsp-srv]] it remains unused.
Images and Videos are loaded with [[Capture_services#caps:a|caps:a]].
 
Program names are loaded with [[NS_Services|ns]] using the transfer memory from [[#Initialize]].