Changes

Jump to navigation Jump to search
3,410 bytes added ,  03:49, 30 September 2020
Line 1: Line 1: −
== Library ==
+
== Module ==
   −
=== Known NIDs ===
   
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! World !! Privilege
 
|-
 
|-
! Version !! Name !! World !! Privilege !! NID
+
| 1.69-3.60 || Non-secure || Kernel
|-
  −
| 1.69 || SceUsbSerial || Non-secure || Kernel || 0xF8D9930F
   
|}
 
|}
   −
== Modules ==
+
== Libraries ==
    
=== Known NIDs ===
 
=== Known NIDs ===
   
{| class="wikitable"
 
{| class="wikitable"
|-
   
! Version !! Name !! World !! Visibility !! NID
 
! Version !! Name !! World !! Visibility !! NID
 
|-
 
|-
 
| 1.69 || [[SceUsbSerial#SceUsbSerialForDriver|SceUsbSerialForDriver]] || Non-secure || Kernel || 0x8829C2F3
 
| 1.69 || [[SceUsbSerial#SceUsbSerialForDriver|SceUsbSerialForDriver]] || Non-secure || Kernel || 0x8829C2F3
 
|-
 
|-
| 1.69 || [[SceUsbSerial#SceUsbSerial|SceUsbSerial]] || Non-secure || User || 0x2820117D
+
| 3.60 || [[SceUsbSerial#SceUsbSerialForDriver|SceUsbSerialForDriver]] || Non-secure || Kernel || not present
 +
|-
 +
| 1.69-3.60 || [[SceUsbSerial#SceUsbSerial|SceUsbSerial]] || Non-secure || User || 0x2820117D
 
|}
 
|}
    
== SceUsbSerialForDriver ==
 
== SceUsbSerialForDriver ==
   −
=== Activate USB serial device ===
+
This library does not exist anymore as of FW 3.60.
 +
 
 +
=== sceUsbSerialStartForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
! Version
+
| 1.69 || 0xFEE7F4BA
! NID
  −
|-
  −
| 1.69
  −
| 0xFEE7F4BA
   
|}
 
|}
The user is responsible for making sure no other UDC driver is active. This activates UDC as a <code>"PS Vita" Type D</code> device.
     −
<source lang="c">int SceUsbSerialForDriver_0xFEE7F4BA_start(void);</source>
+
<source lang="c">
 +
/**
 +
* Activate USB serial device
 +
*
 +
* @return 0 on success, < 0 on error
 +
*
 +
* @note The user is responsible for making sure no other UDC driver is active. This activates UDC as a "PS Vita" Type D device.
 +
*/
 +
int sceUsbSerialStartForDriver(void);
 +
</source>
   −
=== Setup USB serial device ===
+
=== sceUsbSerialSetupForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
! Version
+
| 1.69 || 0x590B8F97
! NID
  −
|-
  −
| 1.69
  −
| 0x590B8F97
   
|}
 
|}
   −
<source lang="c">int SceUsbSerialForDriver_0x590B8F97_setup(int unk);</source>
+
<source lang="c">
 +
/**
 +
* Setup USB serial device
 +
*
 +
* @return 0 on success, < 0 on error
 +
*
 +
* @param unk Unknown
 +
*/
 +
int sceUsbSerialSetupForDriver(int unk);
 +
</source>
   −
=== Get Device Status ===
+
=== sceUsbSerialStatusForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
! Version
+
| 1.69 || 0x8C426906
! NID
  −
|-
  −
| 1.69
  −
| 0x8C426906
   
|}
 
|}
Returns 1 when device is ready.
     −
<source lang="c">int SceUsbSerialForDriver_0x8C426906_status(void);</source>
+
<source lang="c">
 +
/**
 +
* Get USB device status
 +
*
 +
* @return Returns 1 when serial port is open
 +
*/
 +
int sceUsbSerialStatusForDriver(void);</source>
   −
=== Close USB serial device ===
+
=== sceUsbSerialCloseForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
! Version
+
| 1.69 || 0xE6B1E64F
! NID
  −
|-
  −
| 1.69
  −
| 0xE6B1E64F
   
|}
 
|}
   −
<source lang="c">int SceUsbSerialForDriver_0xE6B1E64F_close(void);</source>
+
<source lang="c">
 +
/**
 +
* Close USB serial device
 +
*/
 +
int sceUsbSerialCloseForDriver(void);
 +
</source>
   −
=== Get receive buffer length ===
+
=== sceUsbSerialGetRecvBufferSizeForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
! Version
+
| 1.69 || 0xF531B5AE
! NID
  −
|-
  −
| 1.69
  −
| 0xF531B5AE
   
|}
 
|}
   −
<source lang="c">unsigned int SceUsbSerialForDriver_0xF531B5AE_get_len(void);</source>
+
<source lang="c">
 +
/**
 +
* Get receive buffer length
 +
*
 +
* @return Returns length of USB rx buffer
 +
*/
 +
unsigned int sceUsbSerialGetRecvBufferSizeForDriver(void);
 +
</source>
   −
=== Send Data ===
+
=== sceUsbSerialSendForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
! Version
+
| 1.69 || 0x0C2E73C0
! NID
  −
|-
  −
| 1.69
  −
| 0x0C2E73C0
   
|}
 
|}
   −
<source lang="c">unsigned int SceUsbSerialForDriver_0x0C2E73C0_send(const void *buffer, unsigned int len, int unk1, int unk2);</source>
+
<source lang="c">
 +
/**
 +
* Send data
 +
*
 +
* @param[in] *buffer data to send over usb
 +
* @param[in] len int len of serial buffer data
 +
* @param unk1 Unknown
 +
* @param unk2 Unknown
 +
* @note max send length is 0x10000
 +
*/
 +
unsigned int sceUsbSerialSendForDriver(const void *buffer, unsigned int len, int unk1, int unk2);
 +
</source>
   −
=== Receive Data ===
+
=== sceUsbSerialRecvForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
! Version
+
| 1.69 || 0x6B5E296F
! NID
  −
|-
  −
| 1.69
  −
| 0x6B5E296F
   
|}
 
|}
   −
<source lang="c">unsigned int SceUsbSerialForDriver_0x6B5E296F_recv(void *buffer, unsigned int max_len, int unk1, int unk2);</source>
+
<source lang="c">
 +
/**
 +
* Receive Data
 +
*
 +
* @param[out] *buffer buffer for incoming data
 +
* @param[in] max_len max data length to receive
 +
* @param unk1 Unknown
 +
* @param unk2 Unknown
 +
* @note max recv length is 0x10000
 +
*/
 +
unsigned int sceUsbSerialRecvForDriver(void *buffer, unsigned int max_len, int unk1, int unk2);
 +
</source>
    
== SceUsbSerial ==
 
== SceUsbSerial ==
   −
=== Activate USB serial device ===
+
=== sceUsbSerialStart ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
! Version
+
| 1.69 || 0xE3BEC18C
! NID
   
|-
 
|-
| 1.69
+
| 3.60 || 0xE3BEC18C
| 0xE3BEC18C
   
|}
 
|}
User wrapper for <code>0xFEE7F4BA</code>. Must have correct permissions to call.
     −
=== Setup USB serial device ===
+
User wrapper for <code>sceUsbSerialStartForDriver</code>.
 +
 
 +
Checks [[SceSblACMgr#sceSblACMgrIsAllowedUsbSerialForDriver|sceSblACMgrIsAllowedUsbSerialForDriver]].
 +
 
 +
<source lang="c">
 +
/**
 +
* Activate USB serial device
 +
*
 +
* @return 0 on success, < 0 on error
 +
*
 +
* @note The user is responsible for making sure no other UDC driver is active. This activates UDC as a "PS Vita" Type D device.
 +
*
 +
* @note Wrapper for kernel function sceUsbSerialStartForDriver()
 +
*/
 +
int sceUsbSerialStart(void);
 +
</source>
 +
 
 +
<source lang="c">
 +
int ret = 0;
 +
sceUdcdDeactivateForDriver(a1, a2, a3, (*(uint32_t *)(/*data_81003000*/)) << 0x17);
 +
sceUdcdStopForDriver("USB_MTP_Driver", 0, 0);
 +
sceUdcdStopForDriver("USBDeviceControllerDriver", 0, 0);
 +
ret = sceUdcdStartForDriver("USBDeviceControllerDriver", 0, 0);
 +
if (ret != 0)
 +
    return ret;
 +
ret = sceUdcdStartForDriver("USBSerDriver", 0, 0);
 +
if (ret != 0) {
 +
    sceUdcdStopForDriver("USBSerDriver", 0, 0);
 +
    return ret;
 +
}
 +
ret = sceUdcdActivateForDriver(0x69B);
 +
if (ret != 0) {
 +
    sceUdcdStopForDriver("USBDeviceControllerDriver", 0, 0);
 +
    return ret;
 +
}
 +
return ret;
 +
</source>
 +
 
 +
=== sceUsbSerialSetup ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
! Version
+
| 1.69 || 0x290E08B4
! NID
   
|-
 
|-
| 1.69
+
| 3.60 || 0x290E08B4
| 0x290E08B4
   
|}
 
|}
User wrapper for <code>0x590B8F97</code>. Must have correct permissions to call.
     −
=== Get Device Status ===
+
User wrapper for <code>sceUsbSerialSetupForDriver</code>. Must have correct permissions to call.
 +
 
 +
<source lang="c">
 +
/**
 +
* Setup USB serial device
 +
*
 +
* @return 0 on success, < 0 on error
 +
*
 +
* @param unk Unknown
 +
*
 +
* @note Wrapper for kernel function sceUsbSerialSetupForDriver()
 +
*/
 +
int sceUsbSerialSetup(int unk);
 +
</source>
 +
 
 +
=== sceUsbSerialStatus ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
! Version
+
| 1.69 || 0xA6A2F5DE
! NID
   
|-
 
|-
| 1.69
+
| 3.60 || 0xA6A2F5DE
| 0xA6A2F5DE
   
|}
 
|}
User wrapper for <code>0x8C426906</code>. Must have correct permissions to call.
     −
=== Close USB serial device ===
+
User wrapper for <code>sceUsbSerialStatusForDriver</code>. Must have correct permissions to call.
 +
 
 +
<source lang="c">
 +
/**
 +
* Close USB serial device
 +
*
 +
* @return Returns 1 when serial port is open
 +
*
 +
* @note Wrapper for kernel function sceUsbSerialStatusForDriver()
 +
*/
 +
int sceUsbSerialStatus(void);
 +
</source>
 +
 
 +
=== sceUsbSerialClose ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
! Version
+
| 1.69 || 0xF2415853
! NID
   
|-
 
|-
| 1.69
+
| 3.60 || 0xF2415853
| 0xF2415853
   
|}
 
|}
User wrapper for <code>0xE6B1E64F</code>. Must have correct permissions to call.
     −
=== Get receive buffer length ===
+
User wrapper for <code>sceUsbSerialCloseForDriver</code>. Must have correct permissions to call.
 +
 
 +
<source lang="c">
 +
/**
 +
* Close USB serial device
 +
*/
 +
int sceUsbSerialClose(void);
 +
</source>
 +
 
 +
<source lang="c">
 +
sceUdcdDeactivateForDriver();
 +
sceUdcdStopForDriver("USBSerDriver", 0, 0);
 +
sceUdcdStopForDriver("USBDeviceControllerDriver", 0, 0);
 +
sceUdcdStartForDriver("USBDeviceControllerDriver", 0, 0);
 +
sceUdcdStartForDriver("USB_MTP_Driver", 0, 0);
 +
sceUdcdActivateForDriver(0x4E4);
 +
</source>
 +
 
 +
=== sceUsbSerialGetRecvBufferSize ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
! Version
+
| 1.69-3.60 || 0xE8567A87
! NID
  −
|-
  −
| 1.69
  −
| 0xE8567A87
   
|}
 
|}
User wrapper for <code>0xF531B5AE</code>. Must have correct permissions to call.
     −
=== Send Data ===
+
User wrapper for <code>sceUsbSerialGetRecvBufferSizeForDriver</code>. Must have correct permissions to call.
 +
 
 +
<source lang="c">
 +
/**
 +
* Get receive buffer length
 +
*
 +
* @return Returns length of USB rx buffer
 +
*/
 +
unsigned int sceUsbSerialGetRecvBufferSize(void);
 +
</source>
 +
 
 +
=== sceUsbSerialSend ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
! Version
+
| 1.69-3.60 || 0x89E71202
! NID
  −
|-
  −
| 1.69
  −
| 0x89E71202
   
|}
 
|}
User wrapper for <code>0x0C2E73C0</code>. Must have correct permissions to call. Max length is <code>0x10000</code>.
     −
=== Receive Data ===
+
User wrapper for <code>sceUsbSerialSendForDriver</code>. Must have correct permissions to call.
 +
 
 +
<source lang="c">
 +
/**
 +
* Send data
 +
* @param[in] *buffer data to send over usb
 +
* @param len int len of serial buffer data
 +
* @param unk1 Unknown
 +
* @param unk2 Unknown
 +
* @note len max value is 0x10000
 +
*/
 +
unsigned int sceUsbSerialSend(const void *buffer, unsigned int len, int unk1, int unk2);
 +
</source>
 +
 
 +
=== sceUsbSerialRecv ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
! Version
+
| 1.69-3.60 || 0xF26DC8D8
! NID
  −
|-
  −
| 1.69
  −
| 0xF26DC8D8
   
|}
 
|}
User wrapper for <code>0x6B5E296F</code>. Must have correct permissions to call. Max length is <code>0x10000</code>.
     −
== Sample Usage ==
+
User wrapper for <code>sceUsbSerialRecvForDriver</code>. Must have correct permissions to call.
 +
 
 +
<source lang="c">
 +
/**
 +
* Receive Data
 +
*
 +
* @param[out] *buffer buffer for incoming data
 +
* @param max_len max data length to receive
 +
* @param unk1 Unknown
 +
* @param unk2 Unknown
 +
* @note max_len max value is 0x10000
 +
*/
 +
unsigned int sceUsbSerialRecv(void *buffer, unsigned int max_len, int unk1, int unk2);
 +
</source>
 +
 
 +
== Sample Kernel Usage ==
    
<source lang="c">
 
<source lang="c">
int usb_serial_connect(void)
+
int usb_serial_connect(void) {
{
   
     int ret;
 
     int ret;
   −
     ret = SceUsbSerialForDriver_0x8C426906_status();
+
     ret = sceUsbSerialStatusForDriver();
     printf("SceUsbSerialForDriver_0x8C426906_status: 0x%08X\n", ret);
+
     printf("sceUsbSerialStatusForDriver: 0x%08X\n", ret);
     if (ret != 0x80244401)
+
     if (ret != 0x80244401) {
    {
   
         printf("already connected\n");
 
         printf("already connected\n");
 
         return 0;
 
         return 0;
 
     }
 
     }
   −
     ret = SceUsbSerialForDriver_0xFEE7F4BA_start();
+
     ret = sceUsbSerialStartForDriver();
     printf("SceUsbSerialForDriver_0xFEE7F4BA_start: 0x%08X\n", ret);
+
     printf("sceUsbSerialStartForDriver: 0x%08X\n", ret);
     ret = SceUsbSerialForDriver_0x590B8F97_setup(1);
+
     ret = sceUsbSerialSetupForDriver(1);
     printf("SceUsbSerialForDriver_0x590B8F97_setup: 0x%08X\n", ret);
+
     printf("sceUsbSerialSetupForDriver: 0x%08X\n", ret);
   −
     if (ret == 0x80244403)
+
     if (ret == 0x80244403) {
    {
   
         ret = SceUsbSerialForDriver_0x6AA4EFA4();
 
         ret = SceUsbSerialForDriver_0x6AA4EFA4();
 
         printf("SceUsbSerialForDriver_0x6AA4EFA4: 0x%08X\n", ret);
 
         printf("SceUsbSerialForDriver_0x6AA4EFA4: 0x%08X\n", ret);
         ret = SceUsbSerialForDriver_0x590B8F97_setup(1);
+
         ret = sceUsbSerialSetupForDriver(1);
         printf("SceUsbSerialForDriver_0x590B8F97_setup: 0x%08X\n", ret);
+
         printf("sceUsbSerialSetupForDriver: 0x%08X\n", ret);
 
     }
 
     }
   −
     while (SceUsbSerialForDriver_0x8C426906_status() != 1); // wait for ready
+
     while (sceUsbSerialStatusForDriver() != 1); // wait for ready
    
     return 0;
 
     return 0;
 
}
 
}
   −
int usb_serial_close(void)
+
int usb_serial_close(void) {
{
   
     int ret;
 
     int ret;
    
     ret = SceUsbSerialForDriver_0x6AA4EFA4();
 
     ret = SceUsbSerialForDriver_0x6AA4EFA4();
 
     printf("SceUsbSerialForDriver_0x6AA4EFA4: 0x%08X\n", ret);
 
     printf("SceUsbSerialForDriver_0x6AA4EFA4: 0x%08X\n", ret);
     ret = SceUsbSerialForDriver_0xE6B1E64F_close();
+
     ret = sceUsbSerialCloseForDriver();
     printf("SceUsbSerialForDriver_0xE6B1E64F_close: 0x%08X\n", ret);
+
     printf("sceUsbSerialCloseForDriver: 0x%08X\n", ret);
    
     return 0;
 
     return 0;
 
}
 
}
   −
int usb_serial_send(const void *data, unsigned int len)
+
int usb_serial_send(const void *data, unsigned int len) {
{
   
     int ret;
 
     int ret;
   −
     ret = SceUsbSerialForDriver_0x0C2E73C0_send(data, len, 0, -1);
+
     ret = sceUsbSerialSendForDriver(data, len, 0, -1);
     printf("SceUsbSerialForDriver_0x0C2E73C0_send: 0x%08X\n");
+
     printf("sceUsbSerialSendForDriver: 0x%08X\n");
    
     return ret;
 
     return ret;
 
}
 
}
   −
int usb_serial_recv(void *data, unsigned int len)
+
int usb_serial_recv(void *data, unsigned int len) {
{
   
     int ret;
 
     int ret;
   −
     while (SceUsbSerialForDriver_0xF531B5AE_get_len() < len)
+
     while (sceUsbSerialGetRecvBufferSizeForDriver() < len) {
    {
+
         if (sceUsbSerialStatusForDriver() != 1)
         if (SceUsbSerialForDriver_0x8C426906_status() != 1)
  −
        {
   
             return 0;
 
             return 0;
        }
   
     }
 
     }
   −
     ret = SceUsbSerialForDriver_0x6B5E296F_recv(data, len, 0, -1);
+
     ret = sceUsbSerialRecvForDriver(data, len, 0, -1);
     printf("SceUsbSerialForDriver_0x6B5E296F_recv: 0x%08X\n");
+
     printf("sceUsbSerialRecvForDriver: 0x%08X\n");
    
     return ret;
 
     return ret;
 
}
 
}
 +
</source>
   −
</source>
     −
[[Category:Libraries]]
+
[[Category:Modules]]
 
[[Category:Kernel]]
 
[[Category:Kernel]]

Navigation menu