From patchwork Mon Jul 13 12:11:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Umang Jain X-Patchwork-Id: 8760 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id C01E8BD790 for ; Mon, 13 Jul 2020 12:11:32 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 599E26071A; Mon, 13 Jul 2020 14:11:32 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=uajain.com header.i=@uajain.com header.b="Ue7Rbe0c"; dkim-atps=neutral Received: from o1.f.az.sendgrid.net (o1.f.az.sendgrid.net [208.117.55.132]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 53F7C6048F for ; Mon, 13 Jul 2020 14:11:30 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uajain.com; h=from:subject:mime-version:to:cc:content-transfer-encoding: content-type; s=s1; bh=15jb+7tFkcZa+L9Y5uNpbxI4e4HfLzix6fEBPS2l3J0=; b=Ue7Rbe0cUqUtI4cXGsmqofqxT64OROx3byGh+W7HUowYCLbx94YP6sAyhUYjcHfncoZb lXviRqmY8+sB7ugoLu03WnePFVxH9ltJaAQUXnWhBz1P38yTCNGaDacAtPWmKutFNmclpq W0hxzQo/umZm5HD+bLltwrmeUj3xPRZbo= Received: by filterdrecv-p3las1-7754f7d4cc-kq8b5 with SMTP id filterdrecv-p3las1-7754f7d4cc-kq8b5-18-5F0C4F6F-79 2020-07-13 12:11:28.190442971 +0000 UTC m=+1533475.696335492 Received: from mail.uajain.com (unknown) by ismtpd0003p1maa1.sendgrid.net (SG) with ESMTP id EbRUWEykStWa5s5FnifalQ for ; Mon, 13 Jul 2020 12:11:27.450 +0000 (UTC) From: Umang Jain Date: Mon, 13 Jul 2020 12:11:28 +0000 (UTC) Message-Id: <20200713121122.20000-1-email@uajain.com> Mime-Version: 1.0 X-SG-EID: 1Q40EQ7YGir8a9gjSIAdTjhngY657NMk9ckeo4dbHZDiOpywc/L3L9rFqlwE4KPcsqq2IL5HKct149ShwfIDnrLpgJ1TpMDnQutF1M0l6THp2ymP3WZ1zH9VkJFi4+F/V8g5RwWjqOagWTmqV3rD5defNtbhIe26loe6l+akpCRWMJ6Z0UHvK/ZaYyEeP940YSimZ/ecJ9nijOueNWP5u1Z7/4bU2pSjI/10SYZIlXdHiuZoFyDv5byoBat88Sd+zwD2WbSSKthZzoZcpRl5yw== To: libcamera-devel@lists.libcamera.org Subject: [libcamera-devel] [PATCH] cam: Add --monitor option X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Add --monitor to monitor new hotplug and unplug camera events from the CameraManager. Signed-off-by: Umang Jain Reviewed-by: Niklas Söderlund Reviewed-by: Kieran Bingham --- src/cam/main.cpp | 24 ++++++++++++++++++++++++ src/cam/main.h | 1 + 2 files changed, 25 insertions(+) diff --git a/src/cam/main.cpp b/src/cam/main.cpp index 2512fe9..3488315 100644 --- a/src/cam/main.cpp +++ b/src/cam/main.cpp @@ -36,6 +36,8 @@ public: void quit(); private: + void cameraAdded(std::shared_ptr cam); + void cameraRemoved(std::shared_ptr cam); int parseOptions(int argc, char *argv[]); int prepareConfig(); int listControls(); @@ -115,6 +117,10 @@ int CamApp::init(int argc, char **argv) ret = prepareConfig(); if (ret) return ret; + } else if (options_.isSet(OptMonitor)) { + cm_->cameraAdded.connect(this, &CamApp::cameraAdded); + cm_->cameraRemoved.connect(this, &CamApp::cameraRemoved); + std::cout << "Monitoring new hotplug and unplug events..." << std::endl; } loop_ = new EventLoop(cm_->eventDispatcher()); @@ -179,6 +185,8 @@ int CamApp::parseOptions(int argc, char *argv[]) "list-controls"); parser.addOption(OptListProperties, OptionNone, "List cameras properties", "list-properties"); + parser.addOption(OptMonitor, OptionNone, "Monitor for hotplug and unplug camera events", + "monitor"); options_ = parser.parse(argc, argv); if (!options_.valid()) @@ -293,6 +301,16 @@ int CamApp::infoConfiguration() return 0; } +void CamApp::cameraAdded(std::shared_ptr cam) +{ + std::cout << "Camera Added: " << cam->name() << std::endl; +} + +void CamApp::cameraRemoved(std::shared_ptr cam) +{ + std::cout << "Camera Removed: " << cam->name() << std::endl; +} + int CamApp::run() { int ret; @@ -330,6 +348,12 @@ int CamApp::run() return capture.run(loop_, options_); } + if (options_.isSet(OptMonitor)) { + ret = loop_->exec(); + if (ret) + std::cout << "Failed to run monitor loop" << std::endl; + } + return 0; } diff --git a/src/cam/main.h b/src/cam/main.h index 4a130d8..f61d288 100644 --- a/src/cam/main.h +++ b/src/cam/main.h @@ -15,6 +15,7 @@ enum { OptInfo = 'I', OptList = 'l', OptListProperties = 'p', + OptMonitor = 'm', OptStream = 's', OptListControls = 256, };