#include "RtemsBasic.h"


ReturnValue_t RtemsBasic::convertReturnCode(rtems_status_code inValue) {
	if (inValue == RTEMS_SUCCESSFUL) {
		return HasReturnvaluesIF::RETURN_OK;
	} else {
		switch(inValue){
		case RTEMS_SUCCESSFUL:
			return OperatingSystemIF::SUCCESSFUL;
		case RTEMS_TASK_EXITTED:
			return OperatingSystemIF::TASK_EXITTED;
		case RTEMS_MP_NOT_CONFIGURED:
			return OperatingSystemIF::MP_NOT_CONFIGURED;
		case RTEMS_INVALID_NAME:
			return OperatingSystemIF::INVALID_NAME;
		case  RTEMS_INVALID_ID:
			return OperatingSystemIF::INVALID_ID;
		case RTEMS_TOO_MANY:
			return OperatingSystemIF::TOO_MANY;
		case RTEMS_TIMEOUT:
			return OperatingSystemIF::TIMEOUT;
		case RTEMS_OBJECT_WAS_DELETED:
			return OperatingSystemIF::OBJECT_WAS_DELETED;
		case RTEMS_INVALID_SIZE:
			return OperatingSystemIF::INVALID_SIZE;
		case RTEMS_INVALID_ADDRESS:
			return OperatingSystemIF::INVALID_ADDRESS;
		case RTEMS_INVALID_NUMBER:
			return OperatingSystemIF::INVALID_NUMBER;
		case RTEMS_NOT_DEFINED:
			return OperatingSystemIF::NOT_DEFINED;
		case RTEMS_RESOURCE_IN_USE:
			return OperatingSystemIF::RESOURCE_IN_USE;
		//TODO RTEMS_UNSATISFIED is double mapped for FLP so it will only return Queue_empty and not unsatisfied
		case RTEMS_UNSATISFIED:
			return OperatingSystemIF::QUEUE_EMPTY;
		case RTEMS_INCORRECT_STATE:
			return OperatingSystemIF::INCORRECT_STATE;
		case RTEMS_ALREADY_SUSPENDED:
			return OperatingSystemIF::ALREADY_SUSPENDED;
		case RTEMS_ILLEGAL_ON_SELF:
			return OperatingSystemIF::ILLEGAL_ON_SELF;
		case RTEMS_ILLEGAL_ON_REMOTE_OBJECT:
			return  OperatingSystemIF::ILLEGAL_ON_REMOTE_OBJECT;
		case RTEMS_CALLED_FROM_ISR:
			return OperatingSystemIF::CALLED_FROM_ISR;
		case RTEMS_INVALID_PRIORITY:
			return OperatingSystemIF::INVALID_PRIORITY;
		case RTEMS_INVALID_CLOCK:
			return OperatingSystemIF::INVALID_CLOCK;
		case RTEMS_INVALID_NODE:
			return OperatingSystemIF::INVALID_NODE;
		case RTEMS_NOT_CONFIGURED:
			return OperatingSystemIF::NOT_CONFIGURED;
		case RTEMS_NOT_OWNER_OF_RESOURCE:
			return OperatingSystemIF::NOT_OWNER_OF_RESOURCE;
		case RTEMS_NOT_IMPLEMENTED:
			return OperatingSystemIF::NOT_IMPLEMENTED;
		case RTEMS_INTERNAL_ERROR:
			return OperatingSystemIF::INTERNAL_ERROR;
		case RTEMS_NO_MEMORY:
			return OperatingSystemIF::NO_MEMORY;
		case RTEMS_IO_ERROR:
			return OperatingSystemIF::IO_ERROR;
		default:
			return HasReturnvaluesIF::RETURN_FAILED;
		}
	}
}