Files
djhackersdev_bemanitools/src/main/ezusb-emu/util.c
T

87 lines
2.2 KiB
C

#define LOG_MODULE "ezusb-emu-util"
#include <windows.h>
#include <setupapi.h>
#include <stdio.h>
#include <usb100.h>
#include "ezusb-emu/util.h"
#include "util/hex.h"
#include "util/log.h"
enum ezusb_pipe {
/* This is just the NT driver API. Add 1 to get the actual EP number. */
EZUSB_PIPE_INTERRUPT_OUT = 0,
EZUSB_PIPE_INTERRUPT_IN = 1,
EZUSB_PIPE_BULK_OUT = 2,
EZUSB_PIPE_BULK_IN = 3
};
void ezusb_emu_util_log_usb_msg(
const char *prefix,
uint32_t ctl_code,
const BULK_TRANSFER_CONTROL *ctl,
uint32_t ctl_size,
void *header,
uint32_t header_bytes,
void *data,
uint32_t data_bytes)
{
char header_str[4096];
char data_str[4096];
const char *ctl_code_str;
switch (ctl_code) {
case IOCTL_Ezusb_GET_DEVICE_DESCRIPTOR:
ctl_code_str = "GET_DEVICE_DESCRIPTOR";
break;
case IOCTL_Ezusb_VENDOR_REQUEST:
ctl_code_str = "VENDOR_REQUEST";
break;
case IOCTL_EZUSB_ANCHOR_DOWNLOAD:
ctl_code_str = "ANCHOR_DOWNLOAD";
break;
case IOCTL_EZUSB_BULK_READ:
if (ctl->pipeNum == EZUSB_PIPE_INTERRUPT_IN) {
ctl_code_str = "INT_READ";
} else if (ctl->pipeNum == EZUSB_PIPE_BULK_IN) {
ctl_code_str = "BULK_READ";
} else {
ctl_code_str = "INVALID_READ";
}
break;
case IOCTL_EZUSB_BULK_WRITE:
if (ctl->pipeNum == EZUSB_PIPE_INTERRUPT_OUT) {
ctl_code_str = "INT_WRITE";
} else if (ctl->pipeNum == EZUSB_PIPE_BULK_OUT) {
ctl_code_str = "BULK_WRITE";
} else {
ctl_code_str = "INVALID_WRITE";
}
break;
default:
ctl_code_str = "UNKNOWN";
break;
}
hex_encode_uc(header, header_bytes, header_str, sizeof(header_str));
hex_encode_uc(data, data_bytes, data_str, sizeof(data_str));
log_warning(
"[EZUSB DUMP %s][%s] header(%d) %s |||| data(%d) %s",
prefix,
ctl_code_str,
header_bytes,
header_str,
data_bytes,
data_str);
}