From b1eaaeca6fdcb38d9a247e2deabe1da788a1e1f0 Mon Sep 17 00:00:00 2001 From: Harsh Sharma Date: Thu, 3 Mar 2022 14:44:44 -0600 Subject: LoRa updates with MTAC-003 --- src/MtsIoSysfs.cpp | 261 ++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 208 insertions(+), 53 deletions(-) (limited to 'src/MtsIoSysfs.cpp') diff --git a/src/MtsIoSysfs.cpp b/src/MtsIoSysfs.cpp index 390db47..c7e892a 100644 --- a/src/MtsIoSysfs.cpp +++ b/src/MtsIoSysfs.cpp @@ -1,75 +1,230 @@ /********************************************************************** -* COPYRIGHT 2020 MULTI-TECH SYSTEMS, INC. -* -* ALL RIGHTS RESERVED BY AND FOR THE EXCLUSIVE BENEFIT OF -* MULTI-TECH SYSTEMS, INC. -* -* MULTI-TECH SYSTEMS, INC. - CONFIDENTIAL AND PROPRIETARY -* INFORMATION AND/OR TRADE SECRET. -* -* NOTICE: ALL CODE, PROGRAM, INFORMATION, SCRIPT, INSTRUCTION, -* DATA, AND COMMENT HEREIN IS AND SHALL REMAIN THE CONFIDENTIAL -* INFORMATION AND PROPERTY OF MULTI-TECH SYSTEMS, INC. -* USE AND DISCLOSURE THEREOF, EXCEPT AS STRICTLY AUTHORIZED IN A -* WRITTEN AGREEMENT SIGNED BY MULTI-TECH SYSTEMS, INC. IS PROHIBITED. -* -***********************************************************************/ + * COPYRIGHT 2020 MULTI-TECH SYSTEMS, INC. + * + * ALL RIGHTS RESERVED BY AND FOR THE EXCLUSIVE BENEFIT OF + * MULTI-TECH SYSTEMS, INC. + * + * MULTI-TECH SYSTEMS, INC. - CONFIDENTIAL AND PROPRIETARY + * INFORMATION AND/OR TRADE SECRET. + * + * NOTICE: ALL CODE, PROGRAM, INFORMATION, SCRIPT, INSTRUCTION, + * DATA, AND COMMENT HEREIN IS AND SHALL REMAIN THE CONFIDENTIAL + * INFORMATION AND PROPERTY OF MULTI-TECH SYSTEMS, INC. + * USE AND DISCLOSURE THEREOF, EXCEPT AS STRICTLY AUTHORIZED IN A + * WRITTEN AGREEMENT SIGNED BY MULTI-TECH SYSTEMS, INC. IS PROHIBITED. + * + ***********************************************************************/ #include "Device.h" -int main(int argc, char const* const argv[]) { +#define COMMMAND_EXTRA "--" +#define COMMMAND_INIT "init" +#define COMMMAND_JSON "json" +#define COMMMAND_LOAD_FPGA "load-fpga" +#define COMMMAND_SHOW "show" +#define COMMMAND_SHOW_TRIGGER "show-trigger" +#define COMMMAND_STORE "store" +#define COMMMAND_STORE_TRIGGER "store-trigger" +#define COMMMAND_VERSION "version" + +enum action_code { + ACTION_NONE, + ACTION_VERSION, + ACTION_INIT, + ACTION_JSON, + ACTION_LOAD_FPGA, + ACTION_SHOW, + ACTION_SHOW_TRIGGER, + ACTION_STORE, + ACTION_STORE_TRIGGER, +}; + +static enum action_code action; + +int main(int argc, char **argv) { Device m; + action = ACTION_NONE; if (argc < 2) { m.printUsage(argv[0]); } + std::string fpgaFilePath = ""; + std::string forcedAP = ""; + std::string name = ""; + std::string data = ""; - for (int i = 1; i < argc; i++) { - if (argv[i][0] == '-') { - std::string parameter = &argv[i][1]; - if (parameter == "-version") { - m.printVersion(argv[0]); - } else if (parameter == "-help") { - m.printUsage(argv[0]); - } else if (parameter == "-verbose") { - m.Verbose(true); - } + MTS::Logger::setPrintLevel(MTS::Logger::PrintLevel::INFO_LEVEL, true); + int c; + static struct option long_options[] = { + {"help", no_argument, nullptr, 'h'}, + {"data", required_argument, nullptr, 'd'}, + {"input", required_argument, nullptr, 'i'}, + {"init", no_argument, nullptr, 'I'}, + {"json", no_argument, nullptr, 'j'}, + {"load-fpga", optional_argument, nullptr, 'l'}, + {"path", required_argument, nullptr, 'p'}, + {"show", required_argument, nullptr, 's'}, + {"show-trigger", required_argument, nullptr, 'S'}, + {"store", required_argument, nullptr, 't'}, + {"show-trigger", required_argument, nullptr, 'T'}, + {"version", no_argument, nullptr, 'v'}, + {"verbose", no_argument, nullptr, 'V'}, + {nullptr, no_argument, nullptr, 0}}; + + for (;;) { + int option_index = 0; + + c = getopt_long(argc, argv, "d:hi:Ijl:p:s:St:T:vV", long_options, + &option_index); + if (c == -1) + break; + switch (c) { + case 'v': { + action = ACTION_VERSION; + break; + } + case 'V': { + MTS::Logger::setPrintLevel(MTS::Logger::PrintLevel::DEBUG_LEVEL, + true); + break; + } + case 'd': { + data = optarg; + break; + } + case 'i': { + fpgaFilePath = optarg; + break; + } + case 'p': { + forcedAP = optarg; + break; + } + case 'I': { + action = ACTION_INIT; + break; + } + case 'j': { + action = ACTION_JSON; + break; + } + case 's': { + action = ACTION_SHOW; + name = optarg; + break; + } + case 'S': { + action = ACTION_SHOW_TRIGGER; + name = optarg; + break; + } + case 't': { + action = ACTION_STORE; + name = optarg; + break; + } + case 'T': { + action = ACTION_STORE_TRIGGER; + name = optarg; + break; + } + case 'L': { + action = ACTION_LOAD_FPGA; + break; + } + case '?': { + printError("%s option requires arguement", optopt); + break; + } + case 'h': + default: + m.printUsage(argv[0]); + exit(0); } } - for (int i = 1; i < argc; i++) { - std::string parameter = argv[i]; - if (parameter == "init") { - m.init(); - } else if (parameter == "json") { - m.json(); - } else if (parameter == "show") { - if (argv[i + 1] && !argv[i + 2]) { - m.show(argv[i + 1]); + + /* Handle old non POSIX compliant command names. */ + int index; + for (index = optind; index < argc; index++) { + if (strcmp(argv[index], COMMMAND_INIT) == 0) { + action = ACTION_INIT; + } else if (strcmp(argv[index], COMMMAND_JSON) == 0) { + action = ACTION_JSON; + } else if (strcmp(argv[index], COMMMAND_SHOW) == 0) { + if (argv[index + 1]) { + action = ACTION_SHOW; + name = argv[index + 1]; } else { - m.logError("show name"); - exitHandler(99); + action = ACTION_NONE; } - } else if (parameter == "show-trigger") { - if (argv[i + 1] && !argv[i + 2]) { - m.showTrigger(std::string(argv[i + 1])); + } else if (strcmp(argv[index], COMMMAND_STORE) == 0) { + if (argv[index + 1]) { + action = ACTION_STORE; + name = argv[index + 1]; + if (argv[index + 2]) { + data = argv[index + 2]; + } } else { - m.logError("show-trigger name"); - exitHandler(99); + action = ACTION_NONE; } - } else if (parameter == "store") { - if (argv[i + 1] && argv[i + 2] && !argv[i + 3]) { - m.store(std::string(argv[i + 1]), std::string(argv[i + 2])); + } else if (strcmp(argv[index], COMMMAND_SHOW_TRIGGER) == 0) { + if (argv[index + 1]) { + action = ACTION_SHOW_TRIGGER; + name = argv[index + 1]; } else { - m.logError("store name value"); - exitHandler(99); + action = ACTION_NONE; } - } else if (parameter == "store-trigger") { - if (argv[i + 1] && argv[i + 2] && !argv[i + 3]) { - m.storeTrigger(std::string(argv[i + 1]), std::string(argv[i + 2])); + } else if (strcmp(argv[index], COMMMAND_STORE_TRIGGER) == 0) { + if (argv[index + 1]) { + action = ACTION_STORE_TRIGGER; + name = argv[index + 1]; + if (argv[index + 2]) { + data = argv[index + 2]; + } } else { - m.logError("store name value"); - exitHandler(99); + action = ACTION_NONE; + } + } else if (strcmp(argv[index], COMMMAND_LOAD_FPGA) == 0) { + action = ACTION_LOAD_FPGA; + } else if (strcmp(argv[index], COMMMAND_VERSION) == 0) { + action = ACTION_VERSION; + } else if (strcmp(argv[index], COMMMAND_EXTRA) == 0) { + if (argv[index + 1]) { + data = argv[index + 1]; } } } - m.printUsage(argv[0]); + + switch (action) { + case ACTION_NONE: { + m.printUsage(argv[0]); + } + case ACTION_SHOW: { + m.show(name); + } + case ACTION_SHOW_TRIGGER: { + m.showTrigger(name); + } + case ACTION_STORE: { + m.store(name, data); + } + case ACTION_STORE_TRIGGER: { + m.storeTrigger(name, data); + } + case ACTION_INIT: { + m.init(); + } + case ACTION_JSON: { + m.json(); + } + case ACTION_LOAD_FPGA: { + Mtac15Fpga mtac15Fpga(fpgaFilePath, forcedAP); + return mtac15Fpga.upgradeFpga(); + } + case ACTION_VERSION: { + m.printVersion(argv[0]); + } + default: { m.printUsage(argv[0]); } + } + + return 0; } -- cgit v1.2.3