102 lines
3.1 KiB
C
102 lines
3.1 KiB
C
#pragma once
|
|
|
|
#include "model.h"
|
|
#include "tusb.h"
|
|
#if SWITCH2_PROBE_HUB
|
|
#include "usb/native_hub/native_hub.h"
|
|
#endif
|
|
|
|
// Application instances are controllers, never native hub device slots.
|
|
// Only control transfers retain the transport's rhport/device-slot argument.
|
|
static inline bool probe_transport_mounted(uint8_t instance) {
|
|
#if SWITCH2_PROBE_HUB
|
|
return native_hub_mounted(instance);
|
|
#else
|
|
(void)instance;
|
|
return tud_mounted();
|
|
#endif
|
|
}
|
|
|
|
static inline bool probe_transport_suspended(uint8_t instance) {
|
|
#if SWITCH2_PROBE_HUB
|
|
return native_hub_suspended(instance);
|
|
#else
|
|
(void)instance;
|
|
return tud_suspended();
|
|
#endif
|
|
}
|
|
|
|
static inline bool probe_transport_hid_ready(uint8_t instance) {
|
|
#if SWITCH2_PROBE_HUB
|
|
return native_hub_hid_ready(instance);
|
|
#else
|
|
return tud_hid_n_ready(instance);
|
|
#endif
|
|
}
|
|
|
|
static inline bool probe_transport_hid_report(uint8_t instance, uint8_t report_id,
|
|
const void* data, uint16_t length) {
|
|
#if SWITCH2_PROBE_HUB
|
|
return native_hub_hid_report(instance, report_id, data, length);
|
|
#else
|
|
return tud_hid_n_report(instance, report_id, data, length);
|
|
#endif
|
|
}
|
|
|
|
static inline uint32_t probe_transport_vendor_write_available(uint8_t instance) {
|
|
#if SWITCH2_PROBE_HUB
|
|
return native_hub_vendor_write_available(instance);
|
|
#else
|
|
return tud_vendor_n_write_available(instance);
|
|
#endif
|
|
}
|
|
|
|
static inline uint32_t probe_transport_vendor_write(uint8_t instance,
|
|
const void* data, uint32_t length) {
|
|
#if SWITCH2_PROBE_HUB
|
|
return native_hub_vendor_write(instance, data, length);
|
|
#else
|
|
return tud_vendor_n_write(instance, data, length);
|
|
#endif
|
|
}
|
|
|
|
static inline uint32_t probe_transport_vendor_write_flush(uint8_t instance) {
|
|
#if SWITCH2_PROBE_HUB
|
|
return native_hub_vendor_write_flush(instance);
|
|
#else
|
|
return tud_vendor_n_write_flush(instance);
|
|
#endif
|
|
}
|
|
|
|
static inline void probe_transport_vendor_discard_received(uint8_t instance) {
|
|
#if SWITCH2_PROBE_HUB
|
|
// Native RX supplies the actual packet once, with no second receive FIFO.
|
|
(void)instance;
|
|
#else
|
|
// The application consumes the raw callback packet, not this duplicate.
|
|
uint8_t discarded[64];
|
|
while (tud_vendor_n_available(instance)) {
|
|
if (!tud_vendor_n_read(instance, discarded, sizeof(discarded))) break;
|
|
}
|
|
#endif
|
|
}
|
|
|
|
static inline bool probe_transport_control_xfer(uint8_t rhport,
|
|
const tusb_control_request_t* request,
|
|
void* buffer, uint16_t length) {
|
|
#if SWITCH2_PROBE_HUB
|
|
return native_hub_control_xfer(rhport, request, buffer, length,
|
|
(request->bmRequestType & 0x80u) != 0);
|
|
#else
|
|
return tud_control_xfer(rhport, request, buffer, length);
|
|
#endif
|
|
}
|
|
|
|
static inline bool probe_transport_control_status(uint8_t rhport,
|
|
const tusb_control_request_t* request) {
|
|
#if SWITCH2_PROBE_HUB
|
|
return native_hub_control_status(rhport, request);
|
|
#else
|
|
return tud_control_status(rhport, request);
|
|
#endif
|
|
}
|