diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2019-01-22 05:03:54 +0200 |
---|---|---|
committer | Niklas Söderlund <niklas.soderlund@ragnatech.se> | 2019-01-22 14:04:09 +0100 |
commit | f5e48ebf447ec15ba653fa3524e9b9de8e5eb736 (patch) | |
tree | 8b0b926612198fffa218e77a6d557f539aafc44f /src/cam/main.cpp | |
parent | fba3d0460750fb4123d66f55315dbd9b34cc3d90 (diff) |
cam: Extract option parser to separate file
And turn it into an OptionsParser object.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Diffstat (limited to 'src/cam/main.cpp')
-rw-r--r-- | src/cam/main.cpp | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/src/cam/main.cpp b/src/cam/main.cpp new file mode 100644 index 00000000..22211670 --- /dev/null +++ b/src/cam/main.cpp @@ -0,0 +1,85 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * main.cpp - cam - The libcamera swiss army knife + */ + +#include <iostream> +#include <map> +#include <string.h> + +#include <libcamera/libcamera.h> + +#include "options.h" + +using namespace libcamera; + +OptionsParser::Options options; + +enum { + OptCamera = 'c', + OptHelp = 'h', + OptList = 'l', +}; + +static int parseOptions(int argc, char *argv[]) +{ + OptionsParser parser; + + parser.addOption(OptCamera, "Specify which camera to operate on", + "camera", OptionsParser::ArgumentRequired, + "camera"); + parser.addOption(OptHelp, "Display this help message", "help"); + parser.addOption(OptList, "List all cameras", "list"); + + options = std::move(parser.parse(argc, argv)); + if (!options.valid()) + return -EINVAL; + + if (argc == 1 || options.isSet(OptHelp)) { + parser.usage(); + return 1; + } + + return 0; +} + +int main(int argc, char **argv) +{ + int ret; + + ret = parseOptions(argc, argv); + if (ret < 0) + return EXIT_FAILURE; + + CameraManager *cm = CameraManager::instance(); + + ret = cm->start(); + if (ret) { + std::cout << "Failed to start camera manager: " + << strerror(-ret) << std::endl; + return EXIT_FAILURE; + } + + if (options.isSet(OptList)) { + std::cout << "Available cameras:" << std::endl; + for (const std::shared_ptr<Camera> &camera : cm->cameras()) + std::cout << "- " << camera->name() << std::endl; + } + + if (options.isSet(OptCamera)) { + std::shared_ptr<Camera> cam = cm->get(options[OptCamera]); + + if (cam) { + std::cout << "Using camera " << cam->name() << std::endl; + } else { + std::cout << "Camera " << options[OptCamera] + << " not found" << std::endl; + } + } + + cm->stop(); + + return 0; +} |