00001
00014 #ifndef NMXP_DATA_H
00015 #define NMXP_DATA_H 1
00016
00017 #include <stdint.h>
00018 #include <stdio.h>
00019 #include <time.h>
00020
00021
00023 typedef struct {
00024 struct tm t;
00025 uint32_t d;
00026 } NMXP_TM_T;
00027
00028
00029
00031 #define NMX_SIGNATURE 0x7abcde0f
00032
00034 #define NMXP_DATA_IS_LEAP(yr) ( yr%400==0 || (yr%4==0 && yr%100!=0) )
00035
00036
00038 typedef enum {
00039 NMXP_SHUTDOWN_NORMAL = 1,
00040 NMXP_SHUTDOWN_ERROR = 2,
00041 NMXP_SHUTDOWN_TIMEOUT = 3
00042 } NMXP_SHUTDOWN_REASON;
00043
00045 typedef enum {
00046 NMXP_MSG_CONNECT = 100,
00047 NMXP_MSG_REQUESTPENDING = 110,
00048 NMXP_MSG_CANCELREQUEST = 205,
00049 NMXP_MSG_TERMINATESUBSCRIPTION = 200,
00050
00051 NMXP_MSG_ADDTIMESERIESCHANNELS = 120,
00052 NMXP_MSG_ADDSOHCHANNELS = 121,
00053 NMXP_MSG_ADDSERIALCHANNELS = 124,
00054 NMXP_MSG_ADDTRIGGERCHANNELS = 122,
00055 NMXP_MSG_ADDEVENTS = 123,
00056
00057 NMXP_MSG_REMOVETIMESERIESCHANNELS = 130,
00058 NMXP_MSG_REMOVESOHCHANNELS = 131,
00059 NMXP_MSG_REMOVESERIALCHANNELS = 134,
00060 NMXP_MSG_REMOVETRIGGERCHANNELS = 132,
00061 NMXP_MSG_REMOVEEVENTS = 133,
00062
00063 NMXP_MSG_CONNECTREQUEST = 206,
00064 NMXP_MSG_CHANNELLISTREQUEST = 209,
00065 NMXP_MSG_PRECISLISTREQUEST = 203,
00066 NMXP_MSG_CHANNELINFOREQUEST = 226,
00067 NMXP_MSG_DATASIZEREQUEST = 229,
00068 NMXP_MSG_DATAREQUEST = 227,
00069 NMXP_MSG_TRIGGERREQUEST = 231,
00070 NMXP_MSG_EVENTREQUEST = 232
00071
00072 } NMXP_MSG_CLIENT;
00073
00075 typedef enum {
00076 NMXP_MSG_CHANNELLIST = 150,
00077 NMXP_MSG_ERROR = 190,
00078 NMXP_MSG_COMPRESSED = 1,
00079 NMXP_MSG_DECOMPRESSED = 4,
00080 NMXP_MSG_TRIGGER = 5,
00081 NMXP_MSG_EVENT = 6,
00082
00083 NMXP_MSG_READY = 208,
00084 NMXP_MSG_PRECISLIST = 253,
00085 NMXP_MSG_CHANNELHEADER = 256,
00086 NMXP_MSG_DATASIZE = 257,
00087 NMXP_MSG_NAQSEVENT = 260,
00088 NMXP_MSG_NAQSTRIGGER = 259
00089
00090 } NMXP_MSG_SERVER;
00091
00092
00094 typedef struct {
00095 int32_t signature;
00096 int32_t type;
00097 int32_t length;
00098 } NMXP_MESSAGE_HEADER;
00099
00100 #define NMXP_MAX_LENGTH_DATA_BUFFER (4092 * 2)
00101
00102 #define NMXP_DATA_MAX_SIZE_DATE 200
00103
00105 #define NMXP_DATA_NETWORK_LENGTH 10
00106
00108 #define NMXP_DATA_STATION_LENGTH 10
00109
00111 #define NMXP_DATA_CHANNEL_LENGTH 10
00112
00114 typedef struct {
00115 int32_t key;
00116 char network[NMXP_DATA_NETWORK_LENGTH];
00117 char station[NMXP_DATA_STATION_LENGTH];
00118 char channel[NMXP_DATA_CHANNEL_LENGTH];
00119 int32_t packet_type;
00120 int32_t x0;
00121 int32_t xn;
00122 int32_t x0n_significant;
00123 int32_t oldest_seq_no;
00124 int32_t seq_no;
00125 double time;
00126 int *pDataPtr;
00127 int32_t nSamp;
00128 int32_t sampRate;
00129 int timing_quality;
00130 } NMXP_DATA_PROCESS;
00131
00132
00134 typedef enum {
00135 NMXP_TYPE_WRITESEED_SDS = 0,
00136 NMXP_TYPE_WRITESEED_BUD
00137 } NMXP_DATA_SEED_TYPEWRITE;
00138
00139 #define NMXP_DATA_MAX_SIZE_FILENAME 1024
00140 #define NMXP_DATA_MAX_NUM_OPENED_FILE 200
00141
00142 typedef struct {
00143 int n_open_files;
00144 int last_open_file;
00145 int cur_open_file;
00146 int err_general;
00147 int err_outfile_mseed[NMXP_DATA_MAX_NUM_OPENED_FILE];
00148 FILE *outfile_mseed[NMXP_DATA_MAX_NUM_OPENED_FILE];
00149 char filename_mseed[NMXP_DATA_MAX_NUM_OPENED_FILE][NMXP_DATA_MAX_SIZE_FILENAME];
00150 char outdirseed[NMXP_DATA_MAX_SIZE_FILENAME];
00151 char default_network[5];
00152 NMXP_DATA_SEED_TYPEWRITE type_writeseed;
00153 NMXP_DATA_PROCESS *pd;
00154 } NMXP_DATA_SEED;
00155
00161 int nmxp_data_init(NMXP_DATA_PROCESS *pd);
00162
00163
00177 int nmxp_data_unpack_bundle (int32_t *outdata, unsigned char *indata, int32_t *prev);
00178
00179
00180
00181 #define NMXP_DATA_TRIM_EXCLUDE_FIRST 2
00182
00183
00184 #define NMXP_DATA_TRIM_EXCLUDE_LAST 4
00185
00188 int nmxp_data_to_str(char *out_str, double time_d);
00189
00190
00193 int nmxp_data_year_from_epoch(double time_d);
00194
00195
00198 int nmxp_data_yday_from_epoch(double time_d);
00199
00200
00213 int nmxp_data_trim(NMXP_DATA_PROCESS *pd, double trim_start_time, double trim_end_time, unsigned char exclude_bitmap);
00214
00215
00219 time_t nmxp_data_gmtime_now();
00220
00221
00227 double nmxp_data_latency(NMXP_DATA_PROCESS *pd);
00228
00229
00236 int nmxp_data_log(NMXP_DATA_PROCESS *pd, int flag_sample);
00237
00238
00243 int nmxp_data_parse_date(const char *pstr_date, NMXP_TM_T *ret_tmt);
00244
00245
00250 double nmxp_data_tm_to_time(NMXP_TM_T *tmt);
00251
00252
00257 char *nmxp_data_gnu_getcwd ();
00258
00259
00264 int nmxp_data_dir_exists (char *dirname);
00265
00266
00271 char *nmxp_data_dir_abspath (char *dirname);
00272
00273
00277 int nmxp_data_mkdir(const char *dirname);
00278
00279
00282 int nmxp_data_mkdirp(const char *filename);
00283
00284
00293 int nmxp_data_seed_init(NMXP_DATA_SEED *data_seed, char *default_network, char *outdirseed, NMXP_DATA_SEED_TYPEWRITE type_writeseed);
00294
00302 int nmxp_data_seed_fopen(NMXP_DATA_SEED *data_seed);
00303
00310 int nmxp_data_seed_fclose(NMXP_DATA_SEED *data_seed, int i);
00311
00317 int nmxp_data_seed_fclose_all(NMXP_DATA_SEED *data_seed);
00318
00319
00323 int nmxp_data_get_filename_ms(NMXP_DATA_SEED *data_seed, char *dirseedchan, char *filenameseed);
00324
00325
00337 int nmxp_data_msr_pack(NMXP_DATA_PROCESS *pd, NMXP_DATA_SEED *data_seed, void *pmsr);
00338
00339
00345 void nmxp_data_swap_2b (int16_t *in);
00346
00347
00353 void nmxp_data_swap_3b (unsigned char *in);
00354
00355
00361 void nmxp_data_swap_4b (int32_t *in);
00362
00363
00369 void nmxp_data_swap_8b (double *in);
00370
00371
00380 int nmxp_data_bigendianhost ();
00381
00382
00383 #endif
00384