File indexing completed on 2025-08-02 08:21:07
0001
0002
0003 #include <iostream>
0004 #include <iomanip>
0005 #include <getopt.h>
0006
0007 #include <sstream>
0008 #include "parseargument.h"
0009 #include "rcdaq_rpc.h"
0010 #include "rcdaq_actions.h"
0011
0012 using namespace std;
0013
0014 CLIENT *clnt;
0015
0016
0017 int verbose_flag = 0;
0018
0019 void
0020 rcdaq_client_Init(const char *host, const int servernumber)
0021 {
0022
0023
0024 clnt = clnt_create (host, RCDAQ+servernumber, RCDAQ_VERS, "tcp");
0025 if (clnt == NULL) {
0026 clnt_pcreateerror (host);
0027 exit (1);
0028 }
0029
0030 struct timeval tv;
0031 tv.tv_sec = 1000;
0032 tv.tv_usec = 0;
0033
0034 clnt_control(clnt,CLSET_TIMEOUT , (char *) &tv );
0035
0036
0037
0038 }
0039
0040 void showHelp()
0041 {
0042 std::cout << " help show this help text" << std::endl;
0043 std::cout << " daq_status [-s] [-l] display status [short] [long]" << std::endl;
0044 std::cout << " daq_open enable logging" << std::endl;
0045 std::cout << " daq_set_server hostname [port] choose logging to a SFS server, or \"None\" to choose local file" << std::endl;
0046 std::cout << " daq_begin [run-number] start taking data for run-number, or auto-increment" << std::endl;
0047 std::cout << " daq_end end the run " << std::endl;
0048 std::cout << " daq_close disable logging" << std::endl;
0049 std::cout << " daq_setfilerule file-rule set the file rule default rcdaq-%08d-%04d.evt" << std::endl;
0050 std::cout << std::endl;
0051 std::cout << " daq_list_readlist display the current readout list" << std::endl;
0052 std::cout << " daq_clear_readlist clear the current readout list " << std::endl;
0053 std::cout << std::endl;
0054 std::cout << " daq_define_runtype type file-rule define a run type, such as \"calibration\"" << std::endl;
0055 std::cout << " daq_set_runtype type activate a predefined run type" << std::endl;
0056 std::cout << " daq_get_runtype [-l] list the active runtype (if any)" << std::endl;
0057 std::cout << " daq_list_runtypes [-s] list defined run types" << std::endl;
0058 std::cout << " daq_get_lastfilename return the last file name written, if any" << std::endl;
0059 std::cout << " daq_get_last_event_number return the last event number from the previous run" << std::endl;
0060 std::cout << std::endl;
0061
0062 std::cout << " daq_set_maxevents nevt set automatic end at so many events" << std::endl;
0063 std::cout << " daq_set_maxvolume n_MB set automatic end at n_MB MegaByte" << std::endl;
0064 std::cout << " daq_set_rolloverlimit n_GB set file rollover limit at n_BG GigaByte" << std::endl;
0065 std::cout << " daq_set_eventformat n dynamically switch from standard (0) to legacy header format (1)" << std::endl;
0066 std::cout << " daq_set_compression n enable (1) or disable(0) the file compression" << std::endl;
0067 std::cout << " daq_set_md5enable n enable (1) or disable(0) the md5 calculation (default on)" << std::endl;
0068 std::cout << " daq_allow_md5turnoff n opt in to allow (1) the md5 calculation to be turned off (default no)" << std::endl;
0069 std::cout << " daq_set_nr_threads n adjust the number of compression threads" << std::endl;
0070
0071
0072 std::cout << std::endl;
0073
0074 std::cout << " load shared_library_name load a \"plugin\" shared library" << std::endl;
0075 std::cout << " create_device [device-specific parameters] " << std::endl;
0076 std::cout << std::endl;
0077
0078 std::cout << " daq_setname <string> define an identifying string for this RCDAQ instance" << std::endl;
0079 std::cout << " daq_setrunnumberfile file define a file to maintain the current run number, \"None\" to reset" << std::endl;
0080 std::cout << " daq_setrunnumberApp file define an App that dispenses run numbers, \"None\" to reset" << std::endl;
0081 std::cout << " daq_set_maxbuffersize n_KB adjust the size of buffers written to n KB" << std::endl;
0082 std::cout << " daq_set_adaptivebuffering seconds enable adaptive buffering at n seconds (0 = off)" << std::endl;
0083 std::cout << std::endl;
0084
0085 std::cout << " daq_webcontrol <port number> restart web controls on a new port (default 8080)" << std::endl;
0086 std::cout << std::endl;
0087 #ifdef HAVE_MOSQUITTO_H
0088 std::cout << " daq_set_mqtt_host <host> [port] set up the MQTT host/port for the DB interaction, or \"none\" to remove" << std::endl;
0089 std::cout << " daq_get_mqtt_host <host> [port] retrieve the MQTT host/port for the DB interaction" << std::endl;
0090 #endif
0091
0092
0093 std::cout << std::endl;
0094
0095 std::cout << " daq_set_runcontrolmode n switch to Run Control Mode (1=on, 0=off)" << std::endl;
0096 std::cout << " daq_get_runcontrolmode get the current Run Control Mode setting" << std::endl;
0097 std::cout << std::endl;
0098 std::cout << " daq_set_uservalue n val set the user value n (0..7) to val" << std::endl;
0099 std::cout << " daq_get_uservalue n get the user value n (0..7)" << std::endl;
0100 std::cout << std::endl;
0101
0102 std::cout << " elog elog-server port specify coordinates for an Elog server" << std::endl;
0103 std::cout << std::endl;
0104 std::cout << " daq_shutdown terminate the rcdaq backend" << std::endl;
0105 exit(0);
0106 }
0107
0108
0109
0110 int handle_device( int argc, char **argv, const int optind)
0111 {
0112
0113
0114 struct shortResult *r;
0115 struct deviceblock db;
0116
0117
0118
0119
0120
0121 char **arglist[NSTRINGPAR];
0122
0123
0124 arglist[0] = &db.argv0;
0125 arglist[1] = &db.argv1;
0126 arglist[2] = &db.argv2;
0127 arglist[3] = &db.argv3;
0128 arglist[4] = &db.argv4;
0129 arglist[5] = &db.argv5;
0130 arglist[6] = &db.argv6;
0131 arglist[7] = &db.argv7;
0132 arglist[8] = &db.argv8;
0133 arglist[9] = &db.argv9;
0134 arglist[10] = &db.argv10;
0135 arglist[11] = &db.argv11;
0136 arglist[12] = &db.argv12;
0137 arglist[13] = &db.argv13;
0138
0139 char empty[2] = {' ',0};
0140
0141 int i;
0142 for ( i = 0; i < NSTRINGPAR; i++)
0143 {
0144 *arglist[i] = empty;
0145 }
0146
0147 db.npar=0;
0148
0149 for ( i = optind+1; i < argc; i++)
0150 {
0151
0152
0153
0154 if ( i == optind + 2)
0155 {
0156 if ( *argv[i] == 'B' || *argv[i] == 'b')
0157 {
0158 argv[i] = (char * ) "9";
0159 }
0160 else if ( *argv[i] == 'D' || *argv[i] == 'd')
0161 {
0162 argv[i] = (char *) "1";
0163 }
0164 else if ( *argv[i] == 'E' || *argv[i] == 'e')
0165 {
0166 argv[i] = (char *) "12";
0167 }
0168 else if ( *argv[i] == 'S' || *argv[i] == 's')
0169 {
0170 argv[i] = (char *) "14";
0171 }
0172 }
0173
0174 *arglist[db.npar++] = argv[i];
0175
0176 if ( db.npar >= NSTRINGPAR)
0177 {
0178 cout << "Too many parameters to handle for me" << endl;
0179 break;
0180 }
0181 }
0182
0183 r = r_create_device_1(&db, clnt);
0184 if (r == (shortResult *) NULL)
0185 {
0186 clnt_perror (clnt, "call failed");
0187 }
0188 if ( r->content) std::cout << r->str << std::flush;
0189
0190 return r->status;
0191 }
0192
0193
0194 int command_execute( int argc, char **argv)
0195 {
0196 struct shortResult *r;
0197 struct actionblock ab;
0198
0199 if ( argc <= 1 ) showHelp();
0200
0201 char tempSelection[1024];
0202
0203 char command[512];
0204
0205
0206
0207 int long_flag = 1;
0208 int immediate_flag = 0;
0209
0210 int c;
0211
0212 optind = 0;
0213 int servernumber=0;
0214
0215 while ((c = getopt(argc, argv, "vlsij")) != EOF)
0216 {
0217 switch (c)
0218 {
0219
0220 case 'v':
0221 verbose_flag++;
0222 break;
0223
0224 case 'l':
0225 long_flag++;
0226 break;
0227
0228 case 's':
0229 long_flag=0;
0230 break;
0231
0232 case 'i':
0233 immediate_flag=1;
0234 break;
0235
0236 case 'j':
0237 long_flag=100;
0238 break;
0239
0240 }
0241 }
0242
0243
0244 std::string rcdaqhost;
0245 std::string host = "localhost";
0246
0247 if ( getenv("RCDAQHOST") )
0248 {
0249 rcdaqhost = getenv("RCDAQHOST");
0250 istringstream ss(rcdaqhost);
0251 string token;
0252 if ( std::getline(ss, token, ':'))
0253 {
0254 if ( token.size())
0255 {
0256 host = token;
0257 }
0258 }
0259 if ( std::getline(ss, token, ':') )
0260 {
0261 if ( token.size())
0262 {
0263 servernumber=std::stoi(token);
0264 }
0265 }
0266 }
0267
0268
0269 rcdaq_client_Init (host.c_str(),servernumber);
0270
0271 ab.action = 0;
0272 ab.value = 0;
0273 ab.spare = 0;
0274
0275 int i;
0276 for ( i = 0; i< NIPAR; i++)
0277 {
0278 ab.ipar[i] = 0;
0279 }
0280
0281 char space[] = " ";
0282 ab.spar = space;
0283 ab.spar2 = space;
0284
0285 int convertstatus;
0286
0287 strcpy(command, argv[optind]);
0288
0289 if ( strcasecmp(command,"help") == 0 )
0290 {
0291 showHelp();
0292 }
0293
0294 else if ( strcasecmp(command,"daq_sync") == 0)
0295 {
0296
0297 ab.action = DAQ_SYNC;
0298
0299 r = r_action_1(&ab, clnt);
0300 if (r == (shortResult *) NULL)
0301 {
0302 clnt_perror (clnt, "call failed");
0303 }
0304 if (r->content) std::cout << r->str << std::flush;
0305
0306 }
0307
0308 else if ( strcasecmp(command,"daq_begin") == 0)
0309 {
0310
0311 if (immediate_flag)
0312 {
0313 ab.action = DAQ_BEGIN_IMMEDIATE;
0314 }
0315 else
0316 {
0317 ab.action = DAQ_BEGIN;
0318
0319 }
0320
0321 if ( argc == optind + 2)
0322 {
0323 ab.ipar[0] = get_value(argv[optind + 1]);
0324 }
0325 else
0326 {
0327 ab.ipar[0] = 0;
0328 }
0329 r = r_action_1 (&ab, clnt);
0330 if (r == (shortResult *) NULL)
0331 {
0332 clnt_perror (clnt, "call failed");
0333 }
0334 if (r->content) std::cout << r->str << std::flush;
0335
0336 }
0337
0338
0339 else if ( strcasecmp(command,"daq_end") == 0)
0340 {
0341
0342 if (immediate_flag)
0343 {
0344 ab.action = DAQ_END_IMMEDIATE;
0345 }
0346 else
0347 {
0348 ab.action = DAQ_END;
0349 }
0350
0351 r = r_action_1(&ab, clnt);
0352 if (r == (shortResult *) NULL)
0353 {
0354 clnt_perror (clnt, "call failed");
0355 }
0356 if (r->content) std::cout << r->str << std::flush;
0357
0358 }
0359
0360 else if ( strcasecmp(command,"daq_setfilerule") == 0)
0361 {
0362 if ( argc != optind + 2) return -1;
0363
0364 ab.action = DAQ_SETFILERULE;
0365 ab.spar = argv[optind + 1];
0366 r = r_action_1(&ab, clnt);
0367 if (r == (shortResult *) NULL)
0368 {
0369 clnt_perror (clnt, "call failed");
0370 }
0371 if (r->content) std::cout << r->str << std::flush;
0372
0373 }
0374
0375 else if ( strcasecmp(command,"daq_setrunnumberfile") == 0)
0376 {
0377 if ( argc != optind + 2) return -1;
0378
0379 ab.action = DAQ_RUNNUMBERFILE;
0380 ab.spar = argv[optind + 1];
0381
0382
0383 if ( strcasecmp(argv[optind + 1],"None") == 0) ab.ipar[0] = 1;
0384
0385 r = r_action_1(&ab, clnt);
0386 if (r == (shortResult *) NULL)
0387 {
0388 clnt_perror (clnt, "call failed");
0389 }
0390 if (r->content) std::cout << r->str << std::flush;
0391
0392 }
0393
0394 else if ( strcasecmp(command,"daq_setrunnumberApp") == 0)
0395 {
0396 if ( argc != optind + 2) return -1;
0397
0398 ab.action = DAQ_SETRUNNUMBERAPP;
0399 ab.spar = argv[optind + 1];
0400
0401
0402 if ( strcasecmp(argv[optind + 1],"None") == 0) ab.ipar[0] = 1;
0403
0404 r = r_action_1(&ab, clnt);
0405 if (r == (shortResult *) NULL)
0406 {
0407 clnt_perror (clnt, "call failed");
0408 }
0409 if (r->content) std::cout << r->str << std::flush;
0410
0411 }
0412
0413
0414 else if ( strcasecmp(command,"daq_set_runtype") == 0 || strcasecmp(command,"daq_setruntype") == 0)
0415 {
0416 if ( argc != optind + 2) return -1;
0417
0418 ab.action = DAQ_SETRUNTYPE;
0419 ab.spar = argv[optind + 1];
0420 r = r_action_1(&ab, clnt);
0421 if (r == (shortResult *) NULL)
0422 {
0423 clnt_perror (clnt, "call failed");
0424 }
0425 if (r->content) std::cout << r->str << std::flush;
0426
0427 }
0428
0429 else if ( strcasecmp(command,"daq_get_runtype") == 0)
0430 {
0431
0432 ab.action = DAQ_GETRUNTYPE;
0433 ab.ipar[0] = long_flag;
0434
0435 r = r_action_1(&ab, clnt);
0436 if (r == (shortResult *) NULL)
0437 {
0438 clnt_perror (clnt, "call failed");
0439 }
0440 if (r->content) std::cout << r->str << std::flush;
0441
0442 }
0443
0444 else if ( strcasecmp(command,"daq_define_runtype") == 0)
0445 {
0446 if ( argc != optind + 3) return -1;
0447
0448 ab.action = DAQ_DEFINERUNTYPE;
0449 ab.spar = argv[optind + 1];
0450 ab.spar2 = argv[optind + 2];
0451 r = r_action_1(&ab, clnt);
0452 if (r == (shortResult *) NULL)
0453 {
0454 clnt_perror (clnt, "call failed");
0455 }
0456 if (r->content) std::cout << r->str << std::flush;
0457
0458 }
0459
0460 else if ( strcasecmp(command,"daq_list_runtypes") == 0)
0461 {
0462
0463 ab.action = DAQ_LISTRUNTYPES;
0464 ab.ipar[0] = long_flag;
0465
0466 r = r_action_1(&ab, clnt);
0467 if (r == (shortResult *) NULL)
0468 {
0469 clnt_perror (clnt, "call failed");
0470 }
0471 if (r->content) std::cout << r->str << std::flush;
0472
0473 }
0474
0475 else if ( strcasecmp(command,"daq_setname") == 0)
0476 {
0477 if ( argc != optind + 2) return -1;
0478
0479 ab.action = DAQ_SETNAME;
0480 ab.spar = argv[optind + 1];
0481 r = r_action_1(&ab, clnt);
0482 if (r == (shortResult *) NULL)
0483 {
0484 clnt_perror (clnt, "call failed");
0485 }
0486 if (r->content) std::cout << r->str << std::flush;
0487
0488 }
0489
0490 else if ( strcasecmp(command,"daq_getname") == 0)
0491 {
0492 ab.action = DAQ_GETNAME;
0493 r = r_action_1(&ab, clnt);
0494 if (r == (shortResult *) NULL)
0495 {
0496 clnt_perror (clnt, "call failed");
0497 }
0498 if (r->content) std::cout << r->str << std::flush;
0499
0500 }
0501
0502
0503 else if ( strcasecmp(command,"daq_open") == 0)
0504 {
0505
0506 ab.action = DAQ_OPEN;
0507 r = r_action_1(&ab, clnt);
0508 if (r == (shortResult *) NULL)
0509 {
0510 clnt_perror (clnt, "call failed");
0511 }
0512 if (r->content) std::cout << r->str << std::flush;
0513
0514 }
0515
0516 else if ( strcasecmp(command,"daq_set_server") == 0)
0517 {
0518
0519 if ( argc < optind + 2) return -1;
0520
0521 ab.action = DAQ_SET_SERVER;
0522 ab.spar = argv[optind + 1];
0523 if ( argc == optind + 3)
0524 {
0525 ab.ipar[0] = get_value(argv[optind + 2]);
0526 }
0527 else
0528 {
0529 ab.ipar[0] = 0;
0530 }
0531 r = r_action_1(&ab, clnt);
0532 if (r == (shortResult *) NULL)
0533 {
0534 clnt_perror (clnt, "call failed");
0535 }
0536 if (r->content) std::cout << r->str << std::flush;
0537 }
0538
0539 else if ( strcasecmp(command,"daq_close") == 0)
0540 {
0541
0542 ab.action = DAQ_CLOSE;
0543
0544 r = r_action_1(&ab, clnt);
0545 if (r == (shortResult *) NULL)
0546 {
0547 clnt_perror (clnt, "call failed");
0548 }
0549 if (r->content) std::cout << r->str << std::flush;
0550
0551 }
0552
0553
0554 else if ( strcasecmp(command,"daq_set_compression") == 0)
0555 {
0556 if ( argc < optind + 2) return -1;
0557
0558 ab.action = DAQ_SET_COMPRESSION;
0559 ab.ipar[0] = get_value(argv[optind + 1]);
0560
0561 r = r_action_1(&ab, clnt);
0562 if (r == (shortResult *) NULL)
0563 {
0564 clnt_perror (clnt, "call failed");
0565 }
0566 if (r->content) std::cout << r->str << std::flush;
0567
0568 }
0569
0570 else if ( strcasecmp(command,"daq_set_nr_threads") == 0)
0571 {
0572 if ( argc < optind + 2) return -1;
0573
0574 ab.action = DAQ_SET_NR_THREADS;
0575 ab.ipar[0] = get_value(argv[optind + 1]);
0576
0577 r = r_action_1(&ab, clnt);
0578 if (r == (shortResult *) NULL)
0579 {
0580 clnt_perror (clnt, "call failed");
0581 }
0582 if (r->content) std::cout << r->str << std::flush;
0583
0584 }
0585
0586 else if ( strcasecmp(command,"daq_set_md5enable") == 0)
0587 {
0588 if ( argc < optind + 2) return -1;
0589
0590 ab.action = DAQ_SET_MD5ENABLE;
0591 ab.ipar[0] = get_value(argv[optind + 1]);
0592
0593 r = r_action_1(&ab, clnt);
0594 if (r == (shortResult *) NULL)
0595 {
0596 clnt_perror (clnt, "call failed");
0597 }
0598 if (r->content) std::cout << r->str << std::flush;
0599
0600 }
0601
0602 else if ( strcasecmp(command,"daq_allow_md5turnoff") == 0)
0603 {
0604 if ( argc < optind + 2) return -1;
0605
0606 ab.action = DAQ_SET_MD5ALLOWTURNOFF;
0607 ab.ipar[0] = get_value(argv[optind + 1]);
0608
0609 r = r_action_1(&ab, clnt);
0610 if (r == (shortResult *) NULL)
0611 {
0612 clnt_perror (clnt, "call failed");
0613 }
0614 if (r->content) std::cout << r->str << std::flush;
0615
0616 }
0617
0618 else if ( strcasecmp(command,"daq_fake_trigger") == 0)
0619 {
0620 if ( argc < optind + 2) return -1;
0621
0622 ab.action = DAQ_FAKETRIGGER;
0623 ab.ipar[0] = get_value(argv[optind + 1]);
0624
0625 if ( argc > optind + 2)
0626 {
0627 ab.ipar[1] = get_value(argv[optind + 1]);
0628 }
0629
0630 r = r_action_1(&ab, clnt);
0631 if (r == (shortResult *) NULL)
0632 {
0633 clnt_perror (clnt, "call failed");
0634 }
0635 if (r->content) std::cout << r->str << std::flush;
0636
0637 }
0638
0639 else if ( strcasecmp(command,"daq_list_readlist") == 0)
0640 {
0641
0642 ab.action = DAQ_LISTREADLIST;
0643
0644 r = r_action_1(&ab, clnt);
0645 if (r == (shortResult *) NULL)
0646 {
0647 clnt_perror (clnt, "call failed");
0648 }
0649 if (r->content) std::cout << r->str << std::flush;
0650
0651 }
0652
0653 else if ( strcasecmp(command,"daq_clear_readlist") == 0)
0654 {
0655
0656 ab.action = DAQ_CLEARREADLIST;
0657
0658 r = r_action_1(&ab, clnt);
0659 if (r == (shortResult *) NULL)
0660 {
0661 clnt_perror (clnt, "call failed");
0662 }
0663 if (r->content) std::cout << r->str << std::flush;
0664
0665 }
0666
0667
0668 else if ( strcasecmp(command,"daq_status") == 0)
0669 {
0670
0671 ab.action = DAQ_STATUS;
0672
0673 ab.ipar[0] = long_flag;
0674
0675 r = r_action_1(&ab, clnt);
0676 if (r == (shortResult *) NULL)
0677 {
0678 clnt_perror (clnt, "call failed");
0679 }
0680 if (r->content) std::cout << r->str << std::flush;
0681
0682 }
0683
0684 else if ( strcasecmp(command,"daq_set_maxevents") == 0)
0685 {
0686 if ( argc < optind + 2) return -1;
0687
0688 ab.action = DAQ_SETMAXEVENTS;
0689 ab.ipar[0] = get_value(argv[optind + 1]);
0690
0691 r = r_action_1(&ab, clnt);
0692 if (r == (shortResult *) NULL)
0693 {
0694 clnt_perror (clnt, "call failed");
0695 }
0696 if (r->content) std::cout << r->str << std::flush;
0697
0698 }
0699
0700 else if ( strcasecmp(command,"daq_set_maxvolume") == 0)
0701 {
0702 if ( argc < optind + 2) return -1;
0703
0704 ab.action = DAQ_SETMAXVOLUME;
0705 ab.ipar[0] = get_value(argv[optind + 1]);
0706
0707 r = r_action_1(&ab, clnt);
0708 if (r == (shortResult *) NULL)
0709 {
0710 clnt_perror (clnt, "call failed");
0711 }
0712 if (r->content) std::cout << r->str << std::flush;
0713
0714 }
0715
0716 else if ( strcasecmp(command,"daq_set_rolloverlimit") == 0)
0717 {
0718 if ( argc < optind + 2) return -1;
0719
0720 ab.action = DAQ_ROLLOVERLIMIT;
0721 ab.ipar[0] = get_value(argv[optind + 1]);
0722
0723 r = r_action_1(&ab, clnt);
0724 if (r == (shortResult *) NULL)
0725 {
0726 clnt_perror (clnt, "call failed");
0727 }
0728 if (r->content) std::cout << r->str << std::flush;
0729
0730 }
0731
0732 else if ( strcasecmp(command,"daq_set_maxbuffersize") == 0)
0733 {
0734 if ( argc < optind + 2) return -1;
0735
0736 ab.action = DAQ_SETMAXBUFFERSIZE;
0737 ab.ipar[0] = get_value(argv[optind + 1]);
0738
0739 r = r_action_1(&ab, clnt);
0740 if (r == (shortResult *) NULL)
0741 {
0742 clnt_perror (clnt, "call failed");
0743 }
0744 if (r->content) std::cout << r->str << std::flush;
0745
0746 }
0747
0748
0749 else if ( strcasecmp(command,"daq_set_adaptivebuffering") == 0)
0750 {
0751 if ( argc < optind + 2) return -1;
0752
0753 ab.action = DAQ_SETADAPTIVEBUFFER;
0754 ab.ipar[0] = get_value(argv[optind + 1]);
0755
0756 r = r_action_1(&ab, clnt);
0757 if (r == (shortResult *) NULL)
0758 {
0759 clnt_perror (clnt, "call failed");
0760 }
0761 if (r->content) std::cout << r->str << std::flush;
0762
0763 }
0764
0765 else if ( strcasecmp(command,"daq_webcontrol") == 0)
0766 {
0767
0768 ab.action = DAQ_WEBCONTROL;
0769 if ( argc == optind + 2)
0770 {
0771 ab.ipar[0] = get_value(argv[optind + 1]);
0772 }
0773 else
0774 {
0775 ab.ipar[0] = 0;
0776 }
0777 r = r_action_1 (&ab, clnt);
0778 if (r == (shortResult *) NULL)
0779 {
0780 clnt_perror (clnt, "call failed");
0781 }
0782 if (r->content) std::cout << r->str << std::flush;
0783
0784 }
0785
0786 else if ( strcasecmp(command,"daq_get_lastfilename") == 0)
0787 {
0788
0789 ab.action = DAQ_GETLASTFILENAME;
0790
0791 ab.ipar[0] = 0;
0792
0793 r = r_action_1 (&ab, clnt);
0794 if (r == (shortResult *) NULL)
0795 {
0796 clnt_perror (clnt, "call failed");
0797 }
0798 if (r->content) std::cout << r->str << std::flush;
0799
0800 }
0801
0802 else if ( strcasecmp(command,"daq_get_last_event_number") == 0)
0803 {
0804
0805 ab.action = DAQ_GETLASTEVENTNUMBER;
0806
0807 ab.ipar[0] = 0;
0808
0809 r = r_action_1 (&ab, clnt);
0810 if (r == (shortResult *) NULL)
0811 {
0812 clnt_perror (clnt, "call failed");
0813 }
0814 if (r->content) std::cout << r->str << std::flush;
0815
0816 }
0817
0818 else if ( strcasecmp(command,"daq_set_eventformat") == 0)
0819 {
0820 if ( argc < optind + 2) return -1;
0821
0822 ab.action = DAQ_SETEVENTFORMAT;
0823 ab.ipar[0] = get_value(argv[optind + 1]);
0824
0825 r = r_action_1(&ab, clnt);
0826 if (r == (shortResult *) NULL)
0827 {
0828 clnt_perror (clnt, "call failed");
0829 }
0830 if (r->content) std::cout << r->str << std::flush;
0831
0832 }
0833
0834 else if ( strcasecmp(command,"daq_set_runcontrolmode") == 0)
0835 {
0836 if ( argc < optind + 2) return -1;
0837
0838 ab.action = DAQ_SET_RUNCONTROLMODE;
0839 ab.ipar[0] = get_value(argv[optind + 1]);
0840
0841 r = r_action_1(&ab, clnt);
0842 if (r == (shortResult *) NULL)
0843 {
0844 clnt_perror (clnt, "call failed");
0845 }
0846 if (r->content) std::cout << r->str << std::flush;
0847
0848 }
0849
0850 else if ( strcasecmp(command,"daq_get_runcontrolmode") == 0)
0851 {
0852
0853 ab.action = DAQ_GET_RUNCONTROLMODE;
0854
0855 r = r_action_1(&ab, clnt);
0856 if (r == (shortResult *) NULL)
0857 {
0858 clnt_perror (clnt, "call failed");
0859 }
0860 if (r->content) std::cout << r->str << std::flush;
0861
0862 }
0863
0864 #ifdef HAVE_MOSQUITTO_H
0865 else if ( strcasecmp(command, "daq_set_mqtt_host") == 0)
0866 {
0867 if ( argc < optind + 2) return -1;
0868
0869 ab.action = DAQ_SET_MQTT_HOST;
0870 ab.spar = argv[optind + 1];
0871 if ( argc == optind + 3)
0872 {
0873 ab.ipar[0] = get_value(argv[optind + 2]);
0874 }
0875 else
0876 {
0877 ab.ipar[0] = 1883;
0878 }
0879 r = r_action_1(&ab, clnt);
0880 if (r == (shortResult *) NULL)
0881 {
0882 clnt_perror (clnt, "call failed");
0883 }
0884 if (r->content) std::cout << r->str << std::flush;
0885
0886 }
0887
0888 else if ( strcasecmp(command, "daq_get_mqtt_host") == 0)
0889 {
0890 ab.action = DAQ_GET_MQTT_HOST;
0891
0892 r = r_action_1(&ab, clnt);
0893 if (r == (shortResult *) NULL)
0894 {
0895 clnt_perror (clnt, "call failed");
0896 }
0897 if (r->content) std::cout << r->str << std::flush;
0898
0899 }
0900 #endif
0901
0902
0903 else if ( strcasecmp(command,"elog") == 0)
0904 {
0905
0906 if ( argc != optind + 4) return -1;
0907
0908 ab.action = DAQ_ELOG;
0909 ab.spar = argv[optind + 1];
0910 ab.ipar[0] = get_value(argv[optind + 2]);
0911 ab.spar2 = argv[optind +3];
0912
0913 r = r_action_1(&ab, clnt);
0914 if (r == (shortResult *) NULL)
0915 {
0916 clnt_perror (clnt, "call failed");
0917 }
0918 if (r->content) std::cout << r->str << std::flush;
0919
0920 }
0921
0922
0923 else if ( strcasecmp(command,"load") == 0)
0924 {
0925
0926 if ( argc != optind + 2) return -1;
0927
0928 ab.action = DAQ_LOAD;
0929 ab.spar = argv[optind + 1];
0930
0931 r = r_action_1(&ab, clnt);
0932 if (r == (shortResult *) NULL)
0933 {
0934 clnt_perror (clnt, "call failed");
0935 }
0936 if (r->content) std::cout << r->str << std::flush;
0937
0938 }
0939
0940
0941
0942 else if ( strcasecmp(command,"create_device") == 0)
0943 {
0944 return handle_device ( argc, argv, optind);
0945 }
0946
0947 else if ( strcasecmp(command,"daq_shutdown") == 0)
0948 {
0949
0950 r = r_shutdown_1(0,clnt);
0951 if (r == (shortResult *) NULL)
0952 {
0953 clnt_perror (clnt, "call failed");
0954 return 0;
0955 }
0956 else
0957 {
0958 if (r->content) std::cout << r->str << std::flush;
0959 }
0960 }
0961
0962 else if ( strcasecmp(command,"daq_set_uservalue") == 0)
0963 {
0964 if ( argc < optind + 3) return -1;
0965
0966 ab.action = DAQ_SET_USERVALUE;
0967 ab.ipar[0] = get_value(argv[optind + 1]);
0968 ab.ipar[1] = get_value(argv[optind + 2]);
0969
0970 r = r_action_1(&ab, clnt);
0971 if (r == (shortResult *) NULL)
0972 {
0973 clnt_perror (clnt, "call failed");
0974 }
0975 if (r->content) std::cout << r->str << std::flush;
0976
0977 }
0978
0979 else if ( strcasecmp(command,"daq_get_uservalue") == 0)
0980 {
0981 if ( argc < optind + 2) return -1;
0982
0983 ab.action = DAQ_GET_USERVALUE;
0984 ab.ipar[0] = get_value(argv[optind + 1]);
0985
0986 r = r_action_1(&ab, clnt);
0987 if (r == (shortResult *) NULL)
0988 {
0989 clnt_perror (clnt, "call failed");
0990 }
0991 if (r->content) std::cout << r->str << std::flush;
0992
0993 }
0994
0995
0996
0997
0998 else
0999 {
1000 std::cout << "Unknown Command " << command << std::endl;
1001 return 0;
1002 }
1003
1004 return r->status;
1005 }
1006
1007
1008 int
1009 main (int argc, char *argv[])
1010 {
1011
1012
1013 int status = command_execute( argc, argv);
1014 clnt_destroy (clnt);
1015
1016 if ( status)
1017 {
1018 return 1;
1019 }
1020
1021
1022 return 0;
1023 }