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 4
00021
00022 #define DAQD_PORT 31200
00023
00024 struct signal_conv1;
00025 struct daq_block_header;
00026
00129 enum nds_version {
00130
00132 nds_try = 0,
00133
00135 nds_v1 = 1,
00136
00138 nds_v2 = 2
00139 };
00140
00141
00142
00145 #define HEADER_LEN 16
00146
00149 typedef struct daq_block_header daq_block_t;
00150
00155 typedef struct {
00158 float signal_gain;
00159
00162 float signal_slope;
00163
00166 float signal_offset;
00167
00170 char signal_units [MAX_CHANNEL_NAME_LENGTH];
00171 } signal_conv_t;
00172
00179 typedef struct {
00181 char* name;
00182
00184 enum chantype type;
00185
00188 double rate;
00189
00196 daq_data_t data_type;
00197
00200 uint4_type offset;
00201
00207 int status;
00208
00211 signal_conv_t s;
00212
00213 } chan_req_t;
00214
00215
00220 typedef struct {
00224 enum nds_version nds_versn;
00225
00230 int sockfd;
00231
00234 struct sockaddr_in srvr_addr;
00235
00238 int datafd;
00239
00242 uint4_type num_chan_request;
00243
00246 uint4_type num_chan_alloc;
00247
00250 chan_req_t* chan_req_list;
00251
00255 int blocks;
00256
00260 daq_block_t *tb;
00261
00264 size_t tb_size;
00265
00269 struct signal_conv1 *s;
00270
00274 int s_size;
00275
00278 int rev;
00279
00282 void* auth_ctx;
00283
00286 int err_num;
00287 } daq_t;
00288
00294 typedef struct {
00297 char name [MAX_LONG_CHANNEL_NAME_LENGTH + 1];
00298
00302 double rate;
00303
00306 int tpnum;
00307
00313 enum chantype type;
00314
00317 int bps;
00318
00321 int chNum;
00322
00325 daq_data_t data_type;
00326
00329 signal_conv_t s;
00330 } daq_channel_t;
00331
00339 int
00340 daq_clear_channel_list(daq_t* daq);
00341
00355 int
00356 daq_connect(daq_t* daq, const char* host, int port, enum nds_version version);
00357
00364 int
00365 daq_disconnect (daq_t* daq);
00366
00379 const char*
00380 daq_get_channel_addr(daq_t *daq, const char* channel);
00381
00392 char*
00393 daq_get_channel_data(daq_t *daq, const char* channel, char* data);
00394
00401 int
00402 daq_get_data_length(daq_t *daq, const char* channel);
00403
00410 chan_req_t*
00411 daq_get_channel_status(daq_t *daq, const char* channel);
00412
00425 int
00426 daq_get_scaled_data(daq_t *daq, const char* channel, float* data);
00427
00442 void
00443 daq_init_channel(daq_channel_t* chan, const char* name, enum chantype ctype,
00444 double rate, daq_data_t dtype);
00445
00451 int
00452 daq_recv_block_num (daq_t* daq);
00453
00472 int
00473 daq_recv_block (daq_t* daq);
00474
00485 int
00486 daq_recv_next (daq_t* daq);
00487
00494 int
00495 daq_recv_shutdown (daq_t* daq);
00496
00510 int
00511 daq_recv_channels (daq_t* daq, daq_channel_t* channel, int num_channels,
00512 int* num_channels_received);
00513
00541 int
00542 daq_recv_channel_list(daq_t* daq, daq_channel_t* channel, int num_channels,
00543 int* num_channels_received, time_t gps, enum chantype type);
00544
00550 long
00551 daq_recv_id (daq_t *daq);
00552
00565 int
00566 daq_recv_source_list(daq_t* daq, char* sources, size_t max_len,
00567 time_t gps, long* str_len);
00568
00581 int
00582 daq_request_channel(daq_t* daq, const char* name, enum chantype type,
00583 double rate);
00584
00592 int
00593 daq_request_channel_from_chanlist(daq_t* daq, daq_channel_t* channel);
00594
00610 int
00611 daq_request_data(daq_t* daq, time_t start, time_t end, time_t dt);
00612
00620 int
00621 daq_send (daq_t* daq, const char* command);
00622
00627 int
00628 daq_startup(void);
00629
00635 const char*
00636 daq_strerror(int errornum);
00637
00645 #endif