diff --git a/nx/include/switch/runtime/devices/usb_comms.h b/nx/include/switch/runtime/devices/usb_comms.h index 9da622d3..f486d9cf 100644 --- a/nx/include/switch/runtime/devices/usb_comms.h +++ b/nx/include/switch/runtime/devices/usb_comms.h @@ -7,6 +7,7 @@ */ #pragma once #include "../../types.h" +#include "../../services/usbds.h" typedef struct { u8 bInterfaceClass; @@ -37,3 +38,9 @@ size_t usbCommsReadEx(void* buffer, size_t size, u32 interface); /// Same as usbCommsWrite except with the specified interface. size_t usbCommsWriteEx(const void* buffer, size_t size, u32 interface); + +/// Gets the raw usbDs data for the default usbComms interface. +Result usbCommsGetInfo(UsbDsInterface ** interface, UsbDsEndpoint ** endpoint_in, UsbDsEndpoint ** endpoint_out); + +/// Same as usbCommsGetInfo except with the specified interface. +Result usbCommsGetInfoEx(UsbDsInterface ** interface, UsbDsEndpoint ** endpoint_in, UsbDsEndpoint ** endpoint_out, u32 interface); \ No newline at end of file diff --git a/nx/source/runtime/devices/usb_comms.c b/nx/source/runtime/devices/usb_comms.c index cadd3f53..9d32d489 100644 --- a/nx/source/runtime/devices/usb_comms.c +++ b/nx/source/runtime/devices/usb_comms.c @@ -599,3 +599,27 @@ size_t usbCommsWrite(const void* buffer, size_t size) return usbCommsWriteEx(buffer, size, 0); } +Result usbCommsGetInfoEx(UsbDsInterface ** interface, UsbDsEndpoint ** endpoint_in, UsbDsEndpoint ** endpoint_out, u32 interface) { + + usbCommsInterface *inter = &g_usbCommsInterfaces[interface]; + Result rc; + + if interface >= TOTAL_INTERFACES || !inter->initialized { + *interface = NULL; + *endpoint_in = NULL; + *endpoint_out = NULL; + rc = MAKERESULT(Module_Libnx, LibnxError_NotInitialized); + } + else { + *interface = inter->interface; + *endpoint_in = inter->endpoint_in; + *endpoint_out = outter->endpoint_out; + rc = 0; + } + + return rc; +} + +Result usbCommsGetInfo(UsbDsInterface ** interface, UsbDsEndpoint ** endpoint_in, UsbDsEndpoint ** endpoint_out) { + return usbCommsGetInfoEx(interface, endpoint_in, endpoint_out, 0); +} \ No newline at end of file