summaryrefslogtreecommitdiff
path: root/src/cam/main.cpp
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-01-22 05:03:54 +0200
committerNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-01-22 14:04:09 +0100
commitf5e48ebf447ec15ba653fa3524e9b9de8e5eb736 (patch)
tree8b0b926612198fffa218e77a6d557f539aafc44f /src/cam/main.cpp
parentfba3d0460750fb4123d66f55315dbd9b34cc3d90 (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.cpp85
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;
+}