Index: uspace/lib/usbvirt/ids.h
===================================================================
--- uspace/lib/usbvirt/ids.h	(revision 7a7bfeb30fdd348b34bb92383e98a63c4fff1346)
+++ uspace/lib/usbvirt/ids.h	(revision 355f7c27fa96297800cdc913cb419e414d5da68d)
@@ -50,4 +50,5 @@
 } usbvirt_transaction_type_t;
 
+const char *usbvirt_str_transaction_type(usbvirt_transaction_type_t type);
 
 #endif
Index: uspace/lib/usbvirt/transaction.c
===================================================================
--- uspace/lib/usbvirt/transaction.c	(revision 7a7bfeb30fdd348b34bb92383e98a63c4fff1346)
+++ uspace/lib/usbvirt/transaction.c	(revision 355f7c27fa96297800cdc913cb419e414d5da68d)
@@ -38,8 +38,25 @@
 #include <mem.h>
 
+#include "ids.h"
 #include "private.h"
 
 static usb_direction_t setup_transaction_direction(usb_endpoint_t, void *, size_t);
 static void process_control_transfer(usb_endpoint_t, usbvirt_control_transfer_t *);
+
+/** Convert virtual USB transaction type to string.
+ */
+const char *usbvirt_str_transaction_type(usbvirt_transaction_type_t type)
+{
+	switch (type) {
+		case USBVIRT_TRANSACTION_SETUP:
+			return "setup";
+		case USBVIRT_TRANSACTION_IN:
+			return "in";
+		case USBVIRT_TRANSACTION_OUT:
+			return "out";
+		default:
+			return "unknown";
+	}
+}
 
 int transaction_setup(usbvirt_device_t *device, usb_endpoint_t endpoint,
