qcdm: handle more command error responses

This commit is contained in:
Dan Williams
2010-02-22 11:06:50 -08:00
parent 0f9d4d2a1a
commit 10e5e6561f
3 changed files with 39 additions and 1 deletions

View File

@@ -32,7 +32,37 @@ check_command (const char *buf, gsize len, guint8 cmd, gsize min_len, GError **e
return FALSE; 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, g_set_error (error, QCDM_COMMAND_ERROR, QCDM_COMMAND_UNEXPECTED,
"Unexpected DM command response (expected %d, got %d)", "Unexpected DM command response (expected %d, got %d)",
cmd, buf[0]); cmd, buf[0]);

View File

@@ -70,6 +70,10 @@ qcdm_command_error_get_type (void)
ENUM_ENTRY (QCDM_COMMAND_MALFORMED_RESPONSE, "QcdmCommandMalformedResponse"), ENUM_ENTRY (QCDM_COMMAND_MALFORMED_RESPONSE, "QcdmCommandMalformedResponse"),
ENUM_ENTRY (QCDM_COMMAND_UNEXPECTED, "QcdmCommandUnexpected"), ENUM_ENTRY (QCDM_COMMAND_UNEXPECTED, "QcdmCommandUnexpected"),
ENUM_ENTRY (QCDM_COMMAND_BAD_LENGTH, "QcdmCommandBadLength"), 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 } { 0, 0, 0 }
}; };

View File

@@ -36,6 +36,10 @@ enum {
QCDM_COMMAND_MALFORMED_RESPONSE = 0, QCDM_COMMAND_MALFORMED_RESPONSE = 0,
QCDM_COMMAND_UNEXPECTED = 1, QCDM_COMMAND_UNEXPECTED = 1,
QCDM_COMMAND_BAD_LENGTH = 2, 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 ()) #define QCDM_COMMAND_ERROR (qcdm_command_error_quark ())