diff --git a/cmdline.cc b/cmdline.cc new file mode 100644 index 0000000..070bba9 --- /dev/null +++ b/cmdline.cc @@ -0,0 +1,81 @@ +// Copyright (c) 2017 Fredrik Öhrström +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#include"cmdline.h" +#include"util.h" + +using namespace std; + +CommandLine *parseCommandLine(int argc, char **argv) { + + CommandLine * c = new CommandLine; + + int i=1; + if (argc < 2) { + c->need_help = true; + return c; + } + while (argv[i] && argv[i][0] == '-') { + if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "-help") || !strcmp(argv[i], "--help")) { + c->need_help = true; + return c; + } + if (!strcmp(argv[i], "--verbose")) { + c->verbose = true; + i++; + continue; + } + if (!strcmp(argv[i], "--robot")) { + c->robot = true; + i++; + continue; + } + if (!strcmp(argv[i], "--")) { + i++; + break; + } + error("Unknown option \"%s\"\n", argv[i]); + } + + c->usb_device = argv[i]; + i++; + if (!c->usb_device) error("You must supply the usb device to which the wmbus dongle is connected.\n"); + verbose("Using usb device: %s\n", c->usb_device); + + if ((argc-i) % 3 != 0) { + error("For each meter you must supply a: name,id and key.\n"); + } + int num_meters = (argc-i)/3; + verbose("Number of meters: %d\n", num_meters); + + for (int m=0; mmeters.push_back(MeterInfo(name,id,key)); + } + + return c; +} + + diff --git a/cmdline.h b/cmdline.h new file mode 100644 index 0000000..4d1e865 --- /dev/null +++ b/cmdline.h @@ -0,0 +1,47 @@ +// Copyright (c) 2017 Fredrik Öhrström +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#include +#include + +using namespace std; + +struct MeterInfo { + char *name; + char *id; + char *key; + + MeterInfo(char *n, char *i, char *k) { + name = n; + id = i; + key = k; + } +}; + +struct CommandLine { + bool need_help; + bool verbose; + bool robot; + char *usb_device; + vector meters; +}; + +CommandLine *parseCommandLine(int argc, char **argv); +