Commit 40b7a10a authored by Milosz Malczak's avatar Milosz Malczak Committed by Dimitris Lampridis

sw: Implemented functions for error handling from the official API

parent bac1ef78
......@@ -38,6 +38,163 @@ const char *wrtd_get_error_msg(struct wrtd_dev *dev)
return dev->error_msg;
}
extern enum wrtd_status wrtd_get_error(struct wrtd_dev *dev,
enum wrtd_status *error_code,
uint32_t buffer_size,
char *error_description)
{
enum wrtd_status status;
if(dev == NULL){
return wrtd_return_error
(dev, WRTD_ERROR_NOT_INITIALIZED,
"uninitialized wrtd device");
}
char error_message[256];
*error_code = dev->err;
status = wrtd_error_message(dev, *error_code, error_message);
WRTD_RETURN_IF_ERROR(status);
strncpy(error_description, error_message, buffer_size);
strncat(error_description, dev->error_msg, buffer_size - 1 - strlen(error_description));
dev->err = 0;
memset(dev->error_msg, 0, sizeof(dev->error_msg));
return WRTD_SUCCESS;
}
extern enum wrtd_status wrtd_error_message(struct wrtd_dev *dev,
enum wrtd_status err_code,
char *err_message)
{
if(err_message == NULL){
return wrtd_return_error
(dev, WRTD_ERROR_NOT_INITIALIZED,
"error message not initialized");
}
switch(err_code){
case WRTD_SUCCESS:
strcpy(err_message, "WRTD_SUCCESS ");
break;
case WRTD_ERROR_CANNOT_RECOVER:
strcpy(err_message, "WRTD_ERROR_CANNOT_RECOVER ");
break;
case WRTD_ERROR_INVALID_ATTRIBUTE:
strcpy(err_message, "WRTD_ERROR_INVALID_ATTRIBUTE ");
break;
case WRTD_ERROR_ATTR_NOT_WRITEABLE:
strcpy(err_message, "WRTD_ERROR_ATTR_NOT_WRITEABLE ");
break;
case WRTD_ERROR_ATTR_NOT_READABLE:
strcpy(err_message, "WRTD_ERROR_ATTR_NOT_READABLE ");
break;
case WRTD_ERROR_INVALID_VALUE:
strcpy(err_message, "WRTD_ERROR_INVALID_VALUE ");
break;
case WRTD_ERROR_NOT_INITIALIZED:
strcpy(err_message, "WRTD_ERROR_NOT_INITIALIZED ");
break;
case WRTD_ERROR_MISSING_OPTION_NAME:
strcpy(err_message, "WRTD_ERROR_MISSING_OPTION_NAME ");
break;
case WRTD_ERROR_MISSING_OPTION_VALUE:
strcpy(err_message, "WRTD_ERROR_MISSING_OPTION_VALUE ");
break;
case WRTD_ERROR_BAD_OPTION_NAME:
strcpy(err_message, "WRTD_ERROR_BAD_OPTION_NAME ");
break;
case WRTD_ERROR_BAD_OPTION_VALUE:
strcpy(err_message, "WRTD_ERROR_BAD_OPTION_VALUE ");
break;
case WRTD_ERROR_OUT_OF_MEMORY:
strcpy(err_message, "WRTD_ERROR_OUT_OF_MEMORY ");
break;
case WRTD_ERROR_OPERATION_PENDING:
strcpy(err_message, "WRTD_ERROR_OPERATION_PENDING ");
break;
case WRTD_ERROR_NULL_POINTER:
strcpy(err_message, "WRTD_ERROR_NULL_POINTER ");
break;
case WRTD_ERROR_UNEXPECTED_RESPONSE:
strcpy(err_message, "WRTD_ERROR_UNEXPECTED_RESPONSE ");
break;
case WRTD_ERROR_RESET_FAILED:
strcpy(err_message, "WRTD_ERROR_RESET_FAILED ");
break;
case WRTD_ERROR_RESOURCE_UNKNOWN:
strcpy(err_message, "WRTD_ERROR_RESOURCE_UNKNOWN ");
break;
case WRTD_ERROR_RESOURCE_ACTIVE:
strcpy(err_message, "WRTD_ERROR_RESOURCE_ACTIVE ");
break;
case WRTD_ERROR_ATTR_INVALID_REP_CAP:
strcpy(err_message, "WRTD_ERROR_ATTR_INVALID_REP_CAP ");
break;
case WRTD_ERROR_NOT_IMPLEMENTED:
strcpy(err_message, "WRTD_ERROR_NOT_IMPLEMENTED ");
break;
case WRTD_ERROR_BAD_REP_CAP_ID:
strcpy(err_message, "WRTD_ERROR_BAD_REP_CAP_ID ");
break;
case WRTD_ERROR_TIMEOUT:
strcpy(err_message, "WRTD_ERROR_TIMEOUT ");
break;
case WRTD_ERROR_BUFFER_TOO_SHORT:
strcpy(err_message, "WRTD_ERROR_BUFFER_TOO_SHORT ");
break;
case WRTD_ERROR_UNKNOWN_NAME_IN_SELECTOR:
strcpy(err_message, "WRTD_ERROR_UNKNOWN_NAME_IN_SELECTOR ");
break;
case WRTD_ERROR_ALARM_TIME_INVALID:
strcpy(err_message, "WRTD_ERROR_ALARM_TIME_INVALID ");
break;
case WRTD_ERROR_ALARM_EXISTS:
strcpy(err_message, "WRTD_ERROR_ALARM_EXISTS ");
break;
case WRTD_ERROR_ALARM_DOES_NOT_EXIST:
strcpy(err_message, "WRTD_ERROR_ALARM_DOES_NOT_EXIST ");
break;
case WRTD_ERROR_ALARM_OUT_OF_RESOURCES:
strcpy(err_message, "WRTD_ERROR_ALARM_OUT_OF_RESOURCES ");
break;
case WRTD_ERROR_RULE_EXISTS:
strcpy(err_message, "WRTD_ERROR_RULE_EXISTS ");
break;
case WRTD_ERROR_RULE_DOES_NOT_EXIST:
strcpy(err_message, "WRTD_ERROR_RULE_DOES_NOT_EXIST ");
break;
case WRTD_ERROR_RULE_OUT_OF_RESOURCES:
strcpy(err_message, "WRTD_ERROR_RULE_OUT_OF_RESOURCES ");
break;
case WRTD_ERROR_RULE_INVALID:
strcpy(err_message, "WRTD_ERROR_RULE_INVALID ");
break;
case WRTD_ERROR_RULE_ENABLED:
strcpy(err_message, "WRTD_ERROR_RULE_ENABLED ");
break;
case WRTD_ERROR_CANT_REMOVE_RESERVED_REP_CAP:
strcpy(err_message, "WRTD_ERROR_CANT_REMOVE_RESERVED_REP_CAP ");
break;
default:
strcpy(err_message, "WRTD_UNKNOWN_ERROR_CODE ");
break;
}
return WRTD_SUCCESS;
}
enum wrtd_status wrtd_init(const char *resource_name,
bool reset,
const char *options_str,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment