1 /* 2 * Copyright (c) 2011-2021, The OSKAR Developers. 3 * See the LICENSE file at the top-level directory of this distribution. 4 */ 5 6 #include "utility/oskar_get_error_string.h" 7 #include "binary/oskar_binary.h" 8 #include "settings/oskar_settings_macros.h" 9 10 #ifdef OSKAR_HAVE_CUDA 11 #include <cuda_runtime_api.h> 12 #endif 13 14 #ifdef __cplusplus 15 extern "C" { 16 #endif 17 oskar_get_error_string(int error)18const char* oskar_get_error_string(int error) 19 { 20 /* If the error code is positive, get the CUDA error string 21 * (OSKAR error codes are negative). */ 22 #ifdef OSKAR_HAVE_CUDA 23 if (error > 0) 24 { 25 return cudaGetErrorString((cudaError_t)error); 26 } 27 #endif 28 29 /* Return a string describing the OSKAR error code. */ 30 switch (error) 31 { 32 case OSKAR_ERR_EOF: return "end of file"; 33 case OSKAR_ERR_FILE_IO: return "file I/O error"; 34 case OSKAR_ERR_INVALID_ARGUMENT: return "invalid function argument"; 35 case OSKAR_ERR_FUNCTION_NOT_AVAILABLE: return "functionality not available"; 36 case OSKAR_ERR_OUT_OF_RANGE: return "out of range"; 37 case OSKAR_ERR_MEMORY_ALLOC_FAILURE: return "memory allocation failure"; 38 case OSKAR_ERR_MEMORY_COPY_FAILURE: return "memory copy failure"; 39 case OSKAR_ERR_MEMORY_NOT_ALLOCATED: return "memory not allocated"; 40 case OSKAR_ERR_TYPE_MISMATCH: return "data type mismatch"; 41 case OSKAR_ERR_LOCATION_MISMATCH: return "data location mismatch"; 42 case OSKAR_ERR_DIMENSION_MISMATCH: return "data dimension mismatch"; 43 case OSKAR_ERR_VALUE_MISMATCH: return "coordinate/value mismatch"; 44 case OSKAR_ERR_BAD_DATA_TYPE: return "unsupported data type"; 45 case OSKAR_ERR_BAD_LOCATION: return "unsupported data location"; 46 case OSKAR_ERR_BAD_UNITS: return "invalid units"; 47 case OSKAR_ERR_CUDA_NOT_AVAILABLE: return "CUDA not available"; 48 case OSKAR_ERR_OPENCL_NOT_AVAILABLE: return "OpenCL not available"; 49 case OSKAR_ERR_KERNEL_LAUNCH_FAILURE: return "kernel launch failure"; 50 case OSKAR_ERR_COMPUTE_DEVICES: return "compute device not found"; 51 52 /* The following enumerators are under review... */ 53 case OSKAR_ERR_SPLINE_COEFF_FAIL: return "spline fitting failed"; 54 case OSKAR_ERR_SPLINE_EVAL_FAIL: return "spline evaluation failed"; 55 case OSKAR_ERR_ELLIPSE_FIT_FAILED: return "ellipse fitting failed"; 56 case OSKAR_ERR_SETTINGS_TELESCOPE: return "telescope settings error"; 57 case OSKAR_ERR_SETUP_FAIL: return "set up failed"; 58 case OSKAR_ERR_SETUP_FAIL_SKY: return "sky model set up failed"; 59 case OSKAR_ERR_SETUP_FAIL_TELESCOPE: 60 return "telescope model set up failed"; 61 case OSKAR_ERR_SETUP_FAIL_TELESCOPE_ENTRIES_MISMATCH: 62 return "the number of station directories is inconsistent " 63 "with the telescope layout file"; 64 case OSKAR_ERR_SETUP_FAIL_TELESCOPE_CONFIG_FILE_MISSING: 65 return "a configuration file is missing from the " 66 "telescope model directory tree"; 67 case OSKAR_ERR_BAD_SKY_FILE: return "bad OSKAR sky model file"; 68 case OSKAR_ERR_BAD_POINTING_FILE: return "bad pointing file"; 69 case OSKAR_ERR_BAD_COORD_FILE: return "bad coordinate file"; 70 case OSKAR_ERR_BAD_GSM_FILE: return "bad Global Sky Model file"; 71 case OSKAR_ERR_FFT_FAILED: return "FFT failed"; 72 73 /* OSKAR binary file errors. */ 74 case OSKAR_ERR_BINARY_OPEN_FAIL: return "binary file open failed"; 75 case OSKAR_ERR_BINARY_SEEK_FAIL: return "binary file seek failed"; 76 case OSKAR_ERR_BINARY_READ_FAIL: return "binary file read failed"; 77 case OSKAR_ERR_BINARY_WRITE_FAIL: return "binary file write failed"; 78 case OSKAR_ERR_BINARY_NOT_OPEN_FOR_READ: 79 return "binary file not open for read"; 80 case OSKAR_ERR_BINARY_NOT_OPEN_FOR_WRITE: 81 return "binary file not open for write"; 82 case OSKAR_ERR_BINARY_FILE_INVALID: return "invalid OSKAR binary file"; 83 case OSKAR_ERR_BINARY_FORMAT_BAD: return "incompatible binary format"; 84 case OSKAR_ERR_BINARY_ENDIAN_MISMATCH: return "incompatible byte ordering"; 85 case OSKAR_ERR_BINARY_VERSION_UNKNOWN: return "unknown binary format version"; 86 case OSKAR_ERR_BINARY_TYPE_UNKNOWN: return "unknown binary data type"; 87 case OSKAR_ERR_BINARY_INT_UNKNOWN: return "unknown integer format"; 88 case OSKAR_ERR_BINARY_FLOAT_UNKNOWN: return "unknown float format"; 89 case OSKAR_ERR_BINARY_DOUBLE_UNKNOWN: return "unknown double format"; 90 case OSKAR_ERR_BINARY_MEMORY_NOT_ALLOCATED: 91 return "allocated memory is not big enough for binary chunk"; 92 case OSKAR_ERR_BINARY_TAG_NOT_FOUND: return "data tag not found in file"; 93 case OSKAR_ERR_BINARY_TAG_TOO_LONG: return "binary tag name too long"; 94 case OSKAR_ERR_BINARY_TAG_OUT_OF_RANGE:return "binary tag out of range"; 95 case OSKAR_ERR_BINARY_CRC_FAIL: return "CRC code mismatch"; 96 97 /* OSKAR settings errors. */ 98 case OSKAR_ERR_SETTINGS_NO_VALUE: 99 return "setting not found"; 100 case OSKAR_ERR_SETTINGS_INT_CONVERSION_FAIL: 101 return "settings int conversion failure"; 102 case OSKAR_ERR_SETTINGS_UNSIGNED_INT_CONVERSION_FAIL: 103 return "settings unsigned int conversion failure"; 104 case OSKAR_ERR_SETTINGS_DOUBLE_CONVERSION_FAIL: 105 return "settings double conversion failure"; 106 case OSKAR_ERR_SETTINGS_INT_LIST_CONVERSION_FAIL: 107 return "settings int list conversion failure"; 108 case OSKAR_ERR_SETTINGS_DOUBLE_LIST_CONVERSION_FAIL: 109 return "settings double list conversion failure"; 110 case OSKAR_ERR_SETTINGS_STRING_LIST_CONVERSION_FAIL: 111 return "settings string list conversion failure"; 112 default: 113 break; 114 }; 115 return "unknown error."; 116 } 117 118 #ifdef __cplusplus 119 } 120 #endif 121