nmxp_chan.h 3.68 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
10
11
12
13
14
 *
 * Author:
 * 	Matteo Quintiliani
 * 	Istituto Nazionale di Geofisica e Vulcanologia - Italy
 *	quintiliani@ingv.it
 *
 */

#ifndef NMXP_CHAN_H
#define NMXP_CHAN_H 1

15
#include <stdint.h>
16
17

/*! \brief The key/name info for one channel */
Matteo Quintiliani's avatar
Matteo Quintiliani committed
18
typedef struct {
19
20
    uint32_t key;
    char name[12];
Matteo Quintiliani's avatar
Matteo Quintiliani committed
21
} NMXP_CHAN_KEY;
22

Matteo Quintiliani's avatar
Matteo Quintiliani committed
23
/*! \brief Max number of channels */
24
#define MAX_N_CHAN 1000
Matteo Quintiliani's avatar
Matteo Quintiliani committed
25
26
27

/*! \brief Channel list */
typedef struct {
28
    uint32_t number;
Matteo Quintiliani's avatar
Matteo Quintiliani committed
29
30
    NMXP_CHAN_KEY channel[MAX_N_CHAN];
} NMXP_CHAN_LIST;
31
32


Matteo Quintiliani's avatar
Matteo Quintiliani committed
33
34
35
36
37
38
39
40
/*! \brief Type of Data */
typedef enum {
    NMXP_DATA_TIMESERIES	= 1,
    NMXP_DATA_SOH		= 2,
    NMXP_DATA_TRANSERIAL	= 6
} NMXP_DATATYPE;


41
42
43
44
/*! \brief Character separator for channel list */
#define sep_chan_list  ','


45
46
47
48
/*! \brief Return type of data from a channel key */
#define getDataTypeFromKey(key) ((key >> 8) & 0xff)


49

50
51
/*! \brief Copy station code and channel code from name
 *
Matteo Quintiliani's avatar
Matteo Quintiliani committed
52
 * \param station_dot_channel string containing STA.CHAN
53
54
55
56
57
58
59
60
61
62
63
64
 * \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);


65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*! \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);



80
/*! \brief Looks up a channel key in the list using the name
81
 *
Matteo Quintiliani's avatar
Matteo Quintiliani committed
82
83
 * \param name Channel name.
 * \param channelList Channel list.
84
 *
Matteo Quintiliani's avatar
Matteo Quintiliani committed
85
 * \return Key of the channel with name. -1 On error.
86
87
 *
 */
Matteo Quintiliani's avatar
Matteo Quintiliani committed
88
int nmxp_chan_lookupKey(char* name, NMXP_CHAN_LIST *channelList);
89

90
91
92
93
94
95
96
97
98
99
100
101

/*! \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.
 *
 */
int nmxp_chan_lookupKeyIndex(uint32_t key, NMXP_CHAN_LIST *channelList);


102
/*! \brief Looks up a channel name in the list using a key
103
 *
Matteo Quintiliani's avatar
Matteo Quintiliani committed
104
105
 * \param key Channel key.
 * \param channelList Channel list.
106
 *
Matteo Quintiliani's avatar
Matteo Quintiliani committed
107
 * \return Name of channel with key. NULL on error.
108
109
 *
 */
Matteo Quintiliani's avatar
Matteo Quintiliani committed
110
char *nmxp_chan_lookupName(uint32_t key, NMXP_CHAN_LIST *channelList);
111

112

113
114
115
116
117
118
119
120
121
122
/*! \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
123
NMXP_CHAN_LIST *nmxp_chan_getType(NMXP_CHAN_LIST *channelList, NMXP_DATATYPE dataType);
124

125

126
127
128
129
/*! \brief Looks up a channel with specified data type.
 *
 * \param channelList Channel list.
 * \param dataType Type of channel.
130
 * \param sta_chan_list String list of item STA.CHAN, separeted by comma.
131
132
133
134
135
136
137
138
139
 *
 * \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);


140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/*! 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);

155
156
157
158
159
160
161
162

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

163
164
#endif