Not sure on which features are being requested, but to be sure, the utility tools installation contains the USB Terminal application. It supports sending and receiving data with a WinUSB device. It can be downloaded from the Downloads page.
The USBWorkbench application is only for the original USBPort component that was built upon HID. It also had the ability to generate code (both PC and device software) based upon a defined message structure. The HID implementation contained an extra layer within the device that encoded messages (SLIP protocol), since the HID packets were all fixed sized transfers. With the WinUSB implementation, any size messages can be transferred and the message is terminated with a short packet. Thus, since everything is more simple, we didn't want to muddy up this new implementation or create any limitations.
Within the device, a message could be defined and received as follows:
/* Defines the maximum number of data bytes per message */
#define CFG_MAXUSBMSGSIZE 256
/* A common usb message */
typedef struct USBMSG {
UINT32 cmd;
BYTE data[CFG_MAXUSBMSGSIZE];
} USBMSG;
void APP_USBThread(void* arg)
{
static USBMSG msg;
UINT32 len;
STATUS status;
status = USBD_Read(&eprx, /* Receive a USB message */
&msg, /* Message to be filled */
CFG_MAXUSBMSGSIZE, /* Max message size */
&len, /* Variable to get num received */
INFINITE); /* Wait until a message arrives */
if (status == SUCCESS) { /* Received a message */
assert(len == 4); /* A message should be at least 4-bytes */
switch (msg.cmd) { /* Lookup by command number */
case 0:
break;
case 1:
break;
default:
break;
}
}
}
The code above blocks until a message is received. Upon receiption, it parses based upon the first 32-bit word, called cmd. There are several ways that the message data could be accessed per command, either using a union within the USBMSG structure, or by using a pointer with a custom type defintion.
The C# side works the same as the device. When a message arrives, it is the size that was sent by the device and can be parsed however it needs to be.
I hope that sheds some light. I'm curious to know more about the functionality you would like to see that was within the original USBWorkbench.
-Tyler