nmxp_chan.h 5.7 KB
Newer Older
1
2
/*! \file
 *
Matteo Quintiliani's avatar
Matteo Quintiliani committed
3
 * \brief Channels for Nanometrics Protocol Library
4
5
6
7
8
9
 *
 * Author:
 * 	Matteo Quintiliani
 * 	Istituto Nazionale di Geofisica e Vulcanologia - Italy
 *	quintiliani@ingv.it
 *
Matteo Quintiliani's avatar
Matteo Quintiliani committed
10
11
 * $Id: nmxp_chan.h,v 1.20 2007-09-07 07:08:30 mtheo Exp $
 *
12
13
14
15
16
 */

#ifndef NMXP_CHAN_H
#define NMXP_CHAN_H 1

17
#include <stdint.h>
18

Matteo Quintiliani's avatar
Matteo Quintiliani committed
19
20
21
22
23
24
25
26
27
28
/*! \brief Channel list */
typedef struct NMXP_META_CHAN_LIST {
    int32_t key;
    char name[12];
    int32_t start_time;
    int32_t end_time;
    char network[12];
    struct NMXP_META_CHAN_LIST *next;
} NMXP_META_CHAN_LIST;

29
30
31
32
33
34
35
typedef enum {
    NMXP_META_SORT_KEY = 1,
    NMXP_META_SORT_NAME,
    NMXP_META_SORT_START_TIME,
    NMXP_META_SORT_END_TIME
} NMXP_META_CHAN_LIST_SORT_TYPE;

36

37
/*! \brief The key/name info for one channel */
Matteo Quintiliani's avatar
Matteo Quintiliani committed
38
typedef struct {
Matteo Quintiliani's avatar
Matteo Quintiliani committed
39
    int32_t key;
40
    char name[12];
Matteo Quintiliani's avatar
Matteo Quintiliani committed
41
} NMXP_CHAN_KEY;
42

Matteo Quintiliani's avatar
Matteo Quintiliani committed
43
/*! \brief Max number of channels */
44
#define MAX_N_CHAN 1000
Matteo Quintiliani's avatar
Matteo Quintiliani committed
45
46
47

/*! \brief Channel list */
typedef struct {
48
    int32_t number;
Matteo Quintiliani's avatar
Matteo Quintiliani committed
49
50
    NMXP_CHAN_KEY channel[MAX_N_CHAN];
} NMXP_CHAN_LIST;
51

52
53
/*! \brief Precis Channel item */
typedef struct {
Matteo Quintiliani's avatar
Matteo Quintiliani committed
54
    int32_t key;
55
    char name[12];
56
57
    int32_t start_time;
    int32_t end_time;
58
59
60
61
} NMXP_CHAN_PRECISITEM;

/*! \brief Precis Channel list */
typedef struct {
62
    int32_t number;
63
64
    NMXP_CHAN_PRECISITEM channel[MAX_N_CHAN];
} NMXP_CHAN_PRECISLIST;
65

Matteo Quintiliani's avatar
Matteo Quintiliani committed
66
67
68
69
70
71
72
73
/*! \brief Type of Data */
typedef enum {
    NMXP_DATA_TIMESERIES	= 1,
    NMXP_DATA_SOH		= 2,
    NMXP_DATA_TRANSERIAL	= 6
} NMXP_DATATYPE;

/*! \brief Precis list request body */
74
75
76
77
typedef struct {
    int32_t instr_id;
    NMXP_DATATYPE datatype;
    int32_t type_of_channel;
Matteo Quintiliani's avatar
Matteo Quintiliani committed
78
} NMXP_MSGBODY_PRECISLISTREQUEST;
Matteo Quintiliani's avatar
Matteo Quintiliani committed
79

Matteo Quintiliani's avatar
Matteo Quintiliani committed
80
81
82
83
84
85
86
87
88
89
90
91
92
/*! \brief Channel info request body */
typedef struct {
    int32_t key;
    char name[12];
    char network[12];
} NMXP_MSGBODY_CHANNELINFORESPONSE;

/*! \brief Channel info request body */
typedef struct {
    int32_t key;
    int32_t ignored;
} NMXP_MSGBODY_CHANNELINFOREQUEST;

Matteo Quintiliani's avatar
Matteo Quintiliani committed
93

94
95
96
97
/*! \brief Character separator for channel list */
#define sep_chan_list  ','


98
99
100
/*! \brief Return type of data from a channel key */
#define getDataTypeFromKey(key) ((key >> 8) & 0xff)

Matteo Quintiliani's avatar
Matteo Quintiliani committed
101
102
103
/*! \brief Return channel number from a channel key */
#define getChannelNumberFromKey(key) ((key) & 0x000f)

104

105

106
107
/*! \brief Copy station code and channel code from name
 *
Matteo Quintiliani's avatar
Matteo Quintiliani committed
108
 * \param station_dot_channel string containing STA.CHAN
109
110
111
112
113
114
115
116
117
118
119
120
 * \param[out] station_code Pointer to string for station code
 * \param[out] channel_code Pointer to string for char code
 *
 * \warning Parametes can not be NULL!
 *
 * \retval 1 on success
 * \retval 0 on error
 *
 */
int nmxp_chan_cpy_sta_chan(const char *station_dot_channel, char *station_code, char *channel_code);


121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/*! \brief Match station_dot_channel against pattern, treating errors as no match.
 *
 * \param station_dot_channel STA.CHAN format
 * \param pattern STA.?HZ or STA.H?Z or STA.HH? or STA.?H? or ....
 *
 * \retval 1 for match
 * \retval 0 for no match
 * \retval -1 on error for invalid pattern
 * \retval -2 on error for invalid station_dot_channel
 *
 */
int nmxp_chan_match(const char *station_dot_channel, char *pattern);



136
/*! \brief Looks up a channel key in the list using the name
137
 *
Matteo Quintiliani's avatar
Matteo Quintiliani committed
138
139
 * \param name Channel name.
 * \param channelList Channel list.
140
 *
Matteo Quintiliani's avatar
Matteo Quintiliani committed
141
 * \return Key of the channel with name. -1 On error.
142
143
 *
 */
Matteo Quintiliani's avatar
Matteo Quintiliani committed
144
int nmxp_chan_lookupKey(char* name, NMXP_CHAN_LIST *channelList);
145

146
147
148
149
150
151
152
153
154

/*! \brief Looks up a channel name in the list using a key
 *
 * \param key Channel key.
 * \param channelList Channel list.
 *
 * \return Index of channel with key. -1 on error.
 *
 */
Matteo Quintiliani's avatar
Matteo Quintiliani committed
155
int nmxp_chan_lookupKeyIndex(int32_t key, NMXP_CHAN_LIST *channelList);
156
157


158
/*! \brief Looks up a channel name in the list using a key
159
 *
Matteo Quintiliani's avatar
Matteo Quintiliani committed
160
161
 * \param key Channel key.
 * \param channelList Channel list.
162
 *
Matteo Quintiliani's avatar
Matteo Quintiliani committed
163
 * \return Name of channel with key. NULL on error.
164
165
 *
 */
Matteo Quintiliani's avatar
Matteo Quintiliani committed
166
char *nmxp_chan_lookupName(int32_t key, NMXP_CHAN_LIST *channelList);
167

168

169
170
171
172
173
174
175
176
177
178
/*! \brief Looks up a channel with specified data type.
 *
 * \param channelList Channel list.
 * \param dataType Type of channel.
 *
 * \return Channel list with specified dataType. It will need to be freed!
 *
 * \warning Returned value will need to be freed!
 *
 */
Matteo Quintiliani's avatar
Matteo Quintiliani committed
179
NMXP_CHAN_LIST *nmxp_chan_getType(NMXP_CHAN_LIST *channelList, NMXP_DATATYPE dataType);
180

181

182
183
184
185
/*! \brief Looks up a channel with specified data type.
 *
 * \param channelList Channel list.
 * \param dataType Type of channel.
186
 * \param sta_chan_list String list of item STA.CHAN, separeted by comma.
187
188
189
190
191
192
193
194
195
 *
 * \return Channel list with specified dataType. It will need to be freed!
 *
 * \warning Returned value will need to be freed!
 *
 */
NMXP_CHAN_LIST *nmxp_chan_subset(NMXP_CHAN_LIST *channelList, NMXP_DATATYPE dataType, char *sta_chan_list);


196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
/*! Sort list by channel key
 *
 * \param channelList Channel List
 *
 */
void nmxp_chan_sortByKey(NMXP_CHAN_LIST *channelList);


/*! Sort list by channel name
 *
 * \param channelList Channel List
 *
 */
void nmxp_chan_sortByName(NMXP_CHAN_LIST *channelList);

211
212
213
214
215
216
217
218

/*! Print channel information
 *
 * \param channelList Channel List
 *
 */
void nmxp_chan_print_channelList(NMXP_CHAN_LIST *channelList);

Matteo Quintiliani's avatar
Matteo Quintiliani committed
219
220
221

void nmxp_meta_chan_free(NMXP_META_CHAN_LIST **chan_list);

222
NMXP_META_CHAN_LIST *nmxp_meta_chan_add(NMXP_META_CHAN_LIST **chan_list, int32_t key, char *name, int32_t start_time, int32_t end_time, char *network, NMXP_META_CHAN_LIST_SORT_TYPE sorttype);
Matteo Quintiliani's avatar
Matteo Quintiliani committed
223
224
225
226
227
228
229
230
231
232
233

NMXP_META_CHAN_LIST *nmxp_meta_chan_search_key(NMXP_META_CHAN_LIST *chan_list, int32_t key);

NMXP_META_CHAN_LIST *nmxp_meta_chan_set_name(NMXP_META_CHAN_LIST *chan_list, int32_t key, char *name);

NMXP_META_CHAN_LIST *nmxp_meta_chan_set_times(NMXP_META_CHAN_LIST *chan_list, int32_t key, int32_t start_time, int32_t end_time);

NMXP_META_CHAN_LIST *nmxp_meta_chan_set_network(NMXP_META_CHAN_LIST *chan_list, int32_t key, char *network);

void nmxp_meta_chan_print(NMXP_META_CHAN_LIST *chan_list);

234
235
#endif