aboutsummaryrefslogtreecommitdiff
path: root/libqcdm/src
diff options
context:
space:
mode:
Diffstat (limited to 'libqcdm/src')
-rw-r--r--libqcdm/src/commands.c32
-rw-r--r--libqcdm/src/error.c4
-rw-r--r--libqcdm/src/error.h4
3 files changed, 39 insertions, 1 deletions
diff --git a/libqcdm/src/commands.c b/libqcdm/src/commands.c
index a3052007..e757cef4 100644
--- a/libqcdm/src/commands.c
+++ b/libqcdm/src/commands.c
@@ -32,7 +32,37 @@ check_command (const char *buf, gsize len, guint8 cmd, gsize min_len, GError **e
return FALSE;
}
- if (buf[0] != (guint8) cmd) {
+ switch (buf[0]) {
+ case DIAG_CMD_BAD_CMD:
+ g_set_error (error, QCDM_COMMAND_ERROR, QCDM_COMMAND_BAD_COMMAND,
+ "DM command %d unknown or unimplemented by the device",
+ cmd);
+ return FALSE;
+ case DIAG_CMD_BAD_PARM:
+ g_set_error (error, QCDM_COMMAND_ERROR, QCDM_COMMAND_BAD_PARAMETER,
+ "DM command %d contained invalid parameter",
+ cmd);
+ return FALSE;
+ case DIAG_CMD_BAD_LEN:
+ g_set_error (error, QCDM_COMMAND_ERROR, QCDM_COMMAND_BAD_LENGTH,
+ "DM command %d was the wrong size",
+ cmd);
+ return FALSE;
+ case DIAG_CMD_BAD_DEV:
+ g_set_error (error, QCDM_COMMAND_ERROR, QCDM_COMMAND_NOT_ACCEPTED,
+ "DM command %d was not accepted by the device",
+ cmd);
+ return FALSE;
+ case DIAG_CMD_BAD_MODE:
+ g_set_error (error, QCDM_COMMAND_ERROR, QCDM_COMMAND_BAD_MODE,
+ "DM command %d not allowed in the current device mode",
+ cmd);
+ return FALSE;
+ default:
+ break;
+ }
+
+ if (buf[0] != cmd) {
g_set_error (error, QCDM_COMMAND_ERROR, QCDM_COMMAND_UNEXPECTED,
"Unexpected DM command response (expected %d, got %d)",
cmd, buf[0]);
diff --git a/libqcdm/src/error.c b/libqcdm/src/error.c
index 695f6a55..bf16b56a 100644
--- a/libqcdm/src/error.c
+++ b/libqcdm/src/error.c
@@ -70,6 +70,10 @@ qcdm_command_error_get_type (void)
ENUM_ENTRY (QCDM_COMMAND_MALFORMED_RESPONSE, "QcdmCommandMalformedResponse"),
ENUM_ENTRY (QCDM_COMMAND_UNEXPECTED, "QcdmCommandUnexpected"),
ENUM_ENTRY (QCDM_COMMAND_BAD_LENGTH, "QcdmCommandBadLength"),
+ ENUM_ENTRY (QCDM_COMMAND_BAD_COMMAND, "QcdmCommandBadCommand"),
+ ENUM_ENTRY (QCDM_COMMAND_BAD_PARAMETER, "QcdmCommandBadParameter"),
+ ENUM_ENTRY (QCDM_COMMAND_NOT_ACCEPTED, "QcdmCommandNotAccepted"),
+ ENUM_ENTRY (QCDM_COMMAND_BAD_MODE, "QcdmCommandBadMode"),
{ 0, 0, 0 }
};
diff --git a/libqcdm/src/error.h b/libqcdm/src/error.h
index 47a55e51..7098fcbe 100644
--- a/libqcdm/src/error.h
+++ b/libqcdm/src/error.h
@@ -36,6 +36,10 @@ enum {
QCDM_COMMAND_MALFORMED_RESPONSE = 0,
QCDM_COMMAND_UNEXPECTED = 1,
QCDM_COMMAND_BAD_LENGTH = 2,
+ QCDM_COMMAND_BAD_COMMAND = 3,
+ QCDM_COMMAND_BAD_PARAMETER = 4,
+ QCDM_COMMAND_NOT_ACCEPTED = 5,
+ QCDM_COMMAND_BAD_MODE = 6
};
#define QCDM_COMMAND_ERROR (qcdm_command_error_quark ())