mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-18 15:57:13 +02:00
* commands code generation (#803) * commands code generation for only frames command * fix cmake file and add Caller files * working exptime, fully extended commands file and its variants * start adding template commands * add INT_CMD_VEC_ID template * add list command, generate multiple bins, format code * reach 208 commands using the cpp macros * add tests for command parser * start adding tests for commands parser * fix typo to use commands.yaml * add more tests for command_parser * add all template functions (up to 218 commands) * finish template functions and add more CmdProxy.cpp functions (250+) * 257 commands * 300 commands the rest are very special commands * add special commands without generation * separate special functions from generated c++ file * implementing one command for put and get (buggy) * add infer action in a separate file * generate header for special commands from yaml * allow only 0 or 1 for bool inputs * group all commands in gen_commands.py * add help to gen_commands.py * add autocomplete bash script * autocompletion: add support for module levels and help * remove debugging line * add autocompletion, help to commands, change int [0,1] to bool * copy tests for Caller.cpp. Tests pass * update with the new developer branch changes * fix errors after merging (there is problems with tests) * fixed port/stopport in yaml (intput typo), added '_caller' to the test dac and test on chip dac command in global test for cmdcaller * undo previous test simulator debug change * add documentation for the generated code * reducing the comment to be replaced in length so formatting does not split into 2 lines * removed formatting specific style of C++11 in gen_commands.py to keep with the top level clang format of the project * regeneratign code for commands * automation generated * Redirect deprecated commands (#872) * working implementation, need to fix dac * fixed deprecation redirect for dac command * Detector specific autocomplete (#873) * working implementation, need to fix dac * fixed deprecation redirect for dac command * detector specific completion for dac * added autocomplete using detector specific * fixed error when autocompleting partial words * Generate commands/fix commands (#875) * fix vm_a, im_a etc have deg Celsius suffix, also help missing or changed in some places * dac: require det id for all, arg0 to be printed at output, help for onchip dac and dac, onchipdac: spacing * getscan detid and blocking trigger help * udp_Dstlist det_id fixed, but rx_id invalid * cmdApp in line with cmdLineApp (missing version, receiver_id, not creating det object in help action * added set_command to differentiate between check_det_id and require_det_id (mixed up), args: -1 needs to check for at least one argument * reordering * reordering and checked till integer_command_hex * fixed a lot more commands * fix caller tests for eiger * changes to tests after Bechir left * changing .cmd to .cmdcall for the caller commands * fixed tests for caller, still warning for setexptime about cast input * autocomplete ran * add moench test * regenerating autocomplete and commands * fixing other things from merge conflicts (renaming slsDetectorDefs to defs in commands.yaml) * formatting * added code injection to help (#876) * updated 3 commands to have get output that can be put into put (#877) * updated some commands to have get output that can be put into put * fix tests for clkdiv * adding help to free (#878) * removing old commands and renaming them, (also making it work for parameters command as it was still calling cmdproxy) (#879) * More helpful error messages for unsupported actions (#880) * removing old commands and renaming them, (also making it work for parameters command as it was still calling cmdproxy) * Added specific help for unsupported actions * fixed a vetofile get special exception message. more specific warning for special exception message instead of no function warning * added condition checking true in exceptions for special message --------- Co-authored-by: Bechir Brahem <bachbrahem@gmail.com> Co-authored-by: Erik Frojdh <erik.frojdh@gmail.com> Co-authored-by: Dhanya Thattil <dhanya.thattil@psi.ch>
85 lines
2.4 KiB
C++
85 lines
2.4 KiB
C++
#include "Caller.h"
|
|
#include "CmdParser.h"
|
|
#include "inferAction.h"
|
|
#include "sls/Detector.h"
|
|
#include "sls/logger.h"
|
|
#include "sls/versionAPI.h"
|
|
|
|
#include <iostream>
|
|
int main(int argc, char *argv[]) {
|
|
// To genereate sepereate binaries for put, get, acquire and help
|
|
#ifdef PUT
|
|
int action = slsDetectorDefs::PUT_ACTION;
|
|
#endif
|
|
|
|
#ifdef GET
|
|
int action = slsDetectorDefs::GET_ACTION;
|
|
#endif
|
|
|
|
#ifdef READOUT
|
|
int action = slsDetectorDefs::READOUT_ACTION;
|
|
#endif
|
|
|
|
#ifdef HELP
|
|
int action = slsDetectorDefs::HELP_ACTION;
|
|
#endif
|
|
#ifdef INFER
|
|
int action = -1;
|
|
#endif
|
|
|
|
// Check for --version in the arguments
|
|
for (int i = 1; i < argc; ++i) {
|
|
if (!(strcmp(argv[i], "--version")) || !(strcmp(argv[i], "-v"))) {
|
|
std::cout << argv[0] << " " << APILIB << std::endl;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
sls::CmdParser parser;
|
|
parser.Parse(argc, argv);
|
|
|
|
if (action == slsDetectorDefs::READOUT_ACTION)
|
|
parser.setCommand("acquire");
|
|
|
|
if (parser.isHelp())
|
|
action = slsDetectorDefs::HELP_ACTION;
|
|
else {
|
|
// Free shared memory should work also without a detector
|
|
// if we have an option for verify in the detector constructor
|
|
// we could avoid this but clutter the code
|
|
if (parser.command() == "free") {
|
|
if (parser.detector_id() != -1)
|
|
std::cout << "Cannot free shared memory of sub-detector\n";
|
|
else
|
|
sls::freeSharedMemory(parser.multi_id());
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
if (parser.command() == "config" && action == slsDetectorDefs::PUT_ACTION) {
|
|
sls::freeSharedMemory(parser.multi_id());
|
|
}
|
|
|
|
sls::InferAction inferAction = sls::InferAction();
|
|
|
|
try {
|
|
if (action == -1) {
|
|
action = inferAction.infer(parser);
|
|
std::string actionString =
|
|
(action == slsDetectorDefs::GET_ACTION) ? "GET" : "PUT";
|
|
std::cout << "inferred action: " << actionString << std::endl;
|
|
}
|
|
|
|
std::unique_ptr<sls::Detector> d{nullptr};
|
|
if (action != slsDetectorDefs::HELP_ACTION) {
|
|
d = sls::make_unique<sls::Detector>(parser.multi_id());
|
|
}
|
|
sls::Caller c(d.get());
|
|
|
|
c.call(parser.command(), parser.arguments(), parser.detector_id(),
|
|
action, std::cout, parser.receiver_id());
|
|
} catch (sls::RuntimeError &e) {
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
exit(EXIT_SUCCESS);
|
|
} |