diff --git a/driver_library/src/ethosu.cpp b/driver_library/src/ethosu.cpp
index c00f69f..01666d2 100644
--- a/driver_library/src/ethosu.cpp
+++ b/driver_library/src/ethosu.cpp
@@ -42,6 +42,34 @@
     return std::to_string(version.major) + "." + std::to_string(version.minor) + "." + std::to_string(version.patch);
 }
 
+std::string cmdToString(unsigned long cmd) {
+    // Needed for the struct types in the macro expansions
+    using namespace EthosU;
+
+    switch (cmd) {
+    case ETHOSU_IOCTL_PING:
+        return "PING";
+    case ETHOSU_IOCTL_CAPABILITIES_REQ:
+        return "CAPABILITIES_REQ";
+    case ETHOSU_IOCTL_DRIVER_VERSION_GET:
+        return "DRIVER_VERSION_GET";
+    case ETHOSU_IOCTL_BUFFER_CREATE:
+        return "BUFFER_CREATE";
+    case ETHOSU_IOCTL_NETWORK_CREATE:
+        return "NETWORK_CREATE";
+    case ETHOSU_IOCTL_NETWORK_INFO:
+        return "NETWORK_INFO";
+    case ETHOSU_IOCTL_INFERENCE_CREATE:
+        return "INFERENCE_CREATE";
+    case ETHOSU_IOCTL_INFERENCE_STATUS:
+        return "INFERENCE_STATUS";
+    case ETHOSU_IOCTL_INFERENCE_CANCEL:
+        return "INFERENCE_CANCEL";
+    default:
+        return std::string("Unknown command: ").append(to_string(cmd));
+    }
+}
+
 enum class Severity { Error, Warning, Info, Debug };
 
 class Log {
@@ -105,11 +133,10 @@
 __attribute__((weak)) int eioctl(int fd, unsigned long cmd, void *data = nullptr) {
     int ret = ::ioctl(fd, cmd, data);
     if (ret < 0) {
-        throw EthosU::Exception(string("IOCTL cmd=").append(to_string(cmd) + " failed: " + strerror(errno)).c_str());
+        throw EthosU::Exception(string("IOCTL cmd=").append(cmdToString(cmd) + " failed: " + strerror(errno)).c_str());
     }
 
-    Log(Severity::Debug) << "ioctl. fd=" << fd << ", cmd=" << setw(8) << setfill('0') << hex << cmd << ", ret=" << ret
-                         << endl;
+    Log(Severity::Debug) << "ioctl. fd=" << fd << ", cmd=" << cmdToString(cmd) << ", ret=" << ret << endl;
 
     return ret;
 }
diff --git a/tests/run_inference_test.cpp b/tests/run_inference_test.cpp
index 88fc691..5e529e6 100644
--- a/tests/run_inference_test.cpp
+++ b/tests/run_inference_test.cpp
@@ -130,8 +130,7 @@
 }
 
 void testNetworkInvalidType(const Device &device) {
-    const std::string expected_error =
-        std::string("IOCTL cmd=") + std::to_string(ETHOSU_IOCTL_NETWORK_CREATE) + " failed: " + std::strerror(EINVAL);
+    const std::string expected_error = std::string("IOCTL cmd=NETWORK_CREATE") + " failed: " + std::strerror(EINVAL);
     struct ethosu_uapi_network_create net_req = {};
     net_req.type                              = ETHOSU_UAPI_NETWORK_INDEX + 1;
     try {
@@ -144,8 +143,7 @@
 }
 
 void testNetworkInvalidDataPtr(const Device &device) {
-    const std::string expected_error =
-        std::string("IOCTL cmd=") + std::to_string(ETHOSU_IOCTL_NETWORK_CREATE) + " failed: " + std::strerror(EINVAL);
+    const std::string expected_error = std::string("IOCTL cmd=NETWORK_CREATE") + " failed: " + std::strerror(EINVAL);
     struct ethosu_uapi_network_create net_req = {};
     net_req.type                              = ETHOSU_UAPI_NETWORK_USER_BUFFER;
     net_req.network.data_ptr                  = 0U;
@@ -160,8 +158,7 @@
 }
 
 void testNetworkInvalidDataSize(const Device &device) {
-    const std::string expected_error =
-        std::string("IOCTL cmd=") + std::to_string(ETHOSU_IOCTL_NETWORK_CREATE) + " failed: " + std::strerror(EINVAL);
+    const std::string expected_error = std::string("IOCTL cmd=NETWORK_CREATE") + " failed: " + std::strerror(EINVAL);
     struct ethosu_uapi_network_create net_req = {};
     net_req.type                              = ETHOSU_UAPI_NETWORK_USER_BUFFER;
     net_req.network.data_ptr                  = reinterpret_cast<uintptr_t>(networkModelData);
