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)18 const 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