1 /*
2  * Copyright (c) 2015-2021, The OSKAR Developers.
3  * See the LICENSE file at the top-level directory of this distribution.
4  */
5 
6 #ifndef OSKAR_VIS_HEADER_H_
7 #define OSKAR_VIS_HEADER_H_
8 
9 /**
10  * @file oskar_vis_header.h
11  */
12 
13 /* Public interface. */
14 
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18 
19 struct oskar_VisHeader;
20 #ifndef OSKAR_VIS_HEADER_TYPEDEF_
21 #define OSKAR_VIS_HEADER_TYPEDEF_
22 typedef struct oskar_VisHeader oskar_VisHeader;
23 #endif /* OSKAR_VIS_HEADER_TYPEDEF_ */
24 
25 /* To maintain binary compatibility, do not change the values
26  * in the list below. */
27 enum OSKAR_VIS_HEADER_TAGS
28 {
29     OSKAR_VIS_HEADER_TAG_TELESCOPE_PATH           = 1,
30     OSKAR_VIS_HEADER_TAG_NUM_TAGS_PER_BLOCK       = 2,
31     OSKAR_VIS_HEADER_TAG_WRITE_AUTO_CORRELATIONS  = 3,
32     OSKAR_VIS_HEADER_TAG_WRITE_CROSS_CORRELATIONS = 4,
33     OSKAR_VIS_HEADER_TAG_AMP_TYPE                 = 5,
34     OSKAR_VIS_HEADER_TAG_COORD_PRECISION          = 6,
35     OSKAR_VIS_HEADER_TAG_MAX_TIMES_PER_BLOCK      = 7,
36     OSKAR_VIS_HEADER_TAG_NUM_TIMES_TOTAL          = 8,
37     OSKAR_VIS_HEADER_TAG_MAX_CHANNELS_PER_BLOCK   = 9,
38     OSKAR_VIS_HEADER_TAG_NUM_CHANNELS_TOTAL       = 10,
39     OSKAR_VIS_HEADER_TAG_NUM_STATIONS             = 11,
40     OSKAR_VIS_HEADER_TAG_POL_TYPE                 = 12,
41     /* Tags 13-20 are reserved for future use. */
42     OSKAR_VIS_HEADER_TAG_PHASE_CENTRE_COORD_TYPE  = 21,
43     OSKAR_VIS_HEADER_TAG_PHASE_CENTRE_DEG         = 22,
44     OSKAR_VIS_HEADER_TAG_FREQ_START_HZ            = 23,
45     OSKAR_VIS_HEADER_TAG_FREQ_INC_HZ              = 24,
46     OSKAR_VIS_HEADER_TAG_CHANNEL_BANDWIDTH_HZ     = 25,
47     OSKAR_VIS_HEADER_TAG_TIME_START_MJD_UTC       = 26,
48     OSKAR_VIS_HEADER_TAG_TIME_INC_SEC             = 27,
49     OSKAR_VIS_HEADER_TAG_TIME_AVERAGE_SEC         = 28,
50     OSKAR_VIS_HEADER_TAG_TELESCOPE_REF_LON_DEG    = 29,
51     OSKAR_VIS_HEADER_TAG_TELESCOPE_REF_LAT_DEG    = 30,
52     OSKAR_VIS_HEADER_TAG_TELESCOPE_REF_ALT_M      = 31,
53     OSKAR_VIS_HEADER_TAG_STATION_X_OFFSET_ECEF    = 32,
54     OSKAR_VIS_HEADER_TAG_STATION_Y_OFFSET_ECEF    = 33,
55     OSKAR_VIS_HEADER_TAG_STATION_Z_OFFSET_ECEF    = 34,
56     OSKAR_VIS_HEADER_TAG_ELEMENT_X_ENU            = 35,
57     OSKAR_VIS_HEADER_TAG_ELEMENT_Y_ENU            = 36,
58     OSKAR_VIS_HEADER_TAG_ELEMENT_Z_ENU            = 37
59 };
60 
61 enum OSKAR_VIS_HEADER_POL_TYPE
62 {
63     OSKAR_VIS_POL_TYPE_STOKES_I_Q_U_V     =  0,
64     OSKAR_VIS_POL_TYPE_STOKES_I           =  1,
65     OSKAR_VIS_POL_TYPE_STOKES_Q           =  2,
66     OSKAR_VIS_POL_TYPE_STOKES_U           =  3,
67     OSKAR_VIS_POL_TYPE_STOKES_V           =  4,
68     OSKAR_VIS_POL_TYPE_LINEAR_XX_XY_YX_YY = 10,
69     OSKAR_VIS_POL_TYPE_LINEAR_XX          = 11,
70     OSKAR_VIS_POL_TYPE_LINEAR_XY          = 12,
71     OSKAR_VIS_POL_TYPE_LINEAR_YX          = 13,
72     OSKAR_VIS_POL_TYPE_LINEAR_YY          = 14
73 };
74 
75 #ifdef __cplusplus
76 }
77 #endif
78 
79 #include <vis/oskar_vis_header_accessors.h>
80 #include <vis/oskar_vis_header_create.h>
81 #include <vis/oskar_vis_header_free.h>
82 #include <vis/oskar_vis_header_read.h>
83 #include <vis/oskar_vis_header_write.h>
84 #include <vis/oskar_vis_header_write_ms.h>
85 
86 #endif /* include guard */
87