00001
00002
00003
00004
00005 #ifndef DAQC_H
00006 #define DAQC_H
00007
00008 #include "channel.h"
00009 #include <sys/types.h>
00010 #include <sys/socket.h>
00011 #include <netinet/in.h>
00012 #include <arpa/inet.h>
00013 #include <netdb.h>
00014
00015 typedef int int4_type;
00016 typedef unsigned int uint4_type;
00017
00018
00019 #define DAQD_PROTOCOL_VERSION 11
00020 #define DAQD_PROTOCOL_REVISION 1
00021
00022 #define DAQD_PORT 8088
00023
00024 struct signal_conv1;
00025 struct daq_block_header;
00026
00061 enum nds_version {
00062 nds_v1 = 1,
00063 nds_v2 = 2
00064 };
00065
00066
00067
00068 #define DAQD_LENGTH_UNKNOWN 0
00069 #define HEADER_LEN 16
00070
00071 typedef struct daq_block_header daq_block_t;
00072
00077 typedef struct {
00080 float signal_gain;
00081
00084 float signal_slope;
00085
00088 float signal_offset;
00089
00092 char signal_units [MAX_CHANNEL_NAME_LENGTH];
00093 } signal_conv_t;
00094
00103 typedef enum chantype {
00104
00106 cUnknown,
00107
00109 cOnline,
00110
00112 cRaw,
00113
00115 cRDS,
00116
00118 cSTrend,
00119
00121 cMTrend,
00122
00124 cTestPoint
00125
00126 } chantype_t;
00127
00134 typedef struct {
00136 char* name;
00137
00139 enum chantype type;
00140
00143 double rate;
00144
00151 daq_data_t data_type;
00152
00155 int offset;
00156
00162 int status;
00163
00166 signal_conv_t s;
00167
00168 } chan_req_t;
00169
00170
00175 typedef struct {
00179 enum nds_version nds_versn;
00180
00185 int sockfd;
00186
00189 struct sockaddr_in srvr_addr;
00190
00191
00192 int datafd;
00193
00196 int num_chan_request;
00197
00200 int num_chan_alloc;
00201
00204 chan_req_t* chan_req_list;
00205
00209 int blocks;
00210
00214 daq_block_t *tb;
00215
00218 int tb_size;
00219
00223 struct signal_conv1 *s;
00224
00228 int s_size;
00229
00232 int rev;
00233 } daq_t;
00234
00240 typedef struct {
00243 char name [MAX_LONG_CHANNEL_NAME_LENGTH + 1];
00244
00248 double rate;
00249
00252 int tpnum;
00253
00259 enum chantype type;
00260
00263 int bps;
00264
00267 int chNum;
00268
00271 daq_data_t data_type;
00272
00275 signal_conv_t s;
00276 } daq_channel_t;
00277
00280 chantype_t cvt_str_chantype(const char* str);
00281
00284 const char* cvt_chantype_str(chantype_t code);
00285
00293 int
00294 daq_clear_channel_list(daq_t* daq);
00295
00309 int
00310 daq_connect(daq_t* daq, const char* host, int port, enum nds_version version);
00311
00318 int
00319 daq_disconnect (daq_t* daq);
00320
00327 char*
00328 daq_get_channel_addr(daq_t *daq, char* channel);
00329
00337 char*
00338 daq_get_channel_data(daq_t *daq, char* channel, char* data);
00339
00346 int
00347 daq_get_data_length(daq_t *daq, char* channel);
00348
00355 chan_req_t*
00356 daq_get_channel_status(daq_t *daq, char* channel);
00357
00370 int
00371 daq_get_scaled_data(daq_t *daq, char* channel, float* data);
00372
00378 int
00379 daq_recv_block_num (daq_t* daq);
00380
00399 int
00400 daq_recv_block (daq_t* daq);
00401
00412 int
00413 daq_recv_next (daq_t* daq);
00414
00421 int
00422 daq_recv_shutdown (daq_t* daq);
00423
00434 int
00435 daq_recv_channels (daq_t* daq, daq_channel_t* channel, int num_channels,
00436 int* num_channels_received);
00437
00459 int
00460 daq_recv_channel_list(daq_t* daq, daq_channel_t* channel, int num_channels,
00461 int* num_channels_received, time_t gps, enum chantype type);
00462
00468 long
00469 daq_recv_id (daq_t *daq);
00470
00482 int
00483 daq_request_channel(daq_t* daq, const char* name, enum chantype type,
00484 double rate);
00485
00493 int
00494 daq_request_channel_from_chanlist(daq_t* daq, daq_channel_t* channel);
00495
00506 int
00507 daq_request_data(daq_t* daq, time_t start, time_t end, time_t dt);
00508
00515 int
00516 daq_request_online(daq_t* daq);
00517
00525 int
00526 daq_send (daq_t* daq, char* command);
00527
00535 #endif