summaryrefslogtreecommitdiff
path: root/src/lc-compliance/results.cpp
diff options
context:
space:
mode:
authorSebastian Fricke <sebastian.fricke@posteo.net>2021-04-18 17:27:10 +0000
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-04-27 09:54:13 +0300
commit2d95f773ab616d80041f8ae9ece6524e63f47d06 (patch)
tree97af8d687e7ff1f7abe4aab23feed8ce7cf4d8e3 /src/lc-compliance/results.cpp
parentc3ab0fa0ce7831f2c97133755ab7e4690e398f10 (diff)
ipa: cam_helper_imx219: Rework comment
Fix two typos and improve the sentence. Signed-off-by: Sebastian Fricke <sebastian.fricke@posteo.net> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/lc-compliance/results.cpp')
0 files changed, 0 insertions, 0 deletions
id='n110' href='#n110'>110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * Copyright (C) 2019, Google Inc.
 *
 * event.cpp - Event test
 */

#include <iostream>
#include <string.h>
#include <unistd.h>

#include <libcamera/event_dispatcher.h>
#include <libcamera/event_notifier.h>
#include <libcamera/timer.h>

#include "libcamera/internal/thread.h"

#include "test.h"

using namespace std;
using namespace libcamera;

class EventTest : public Test
{
protected:
	void readReady(EventNotifier *notifier)
	{
		size_ = read(notifier->fd(), data_, sizeof(data_));
		notified_ = true;
	}

	int init()
	{
		return pipe(pipefd_);
	}

	int run()
	{
		EventDispatcher *dispatcher = Thread::current()->eventDispatcher();
		std::string data("H2G2");
		Timer timeout;
		ssize_t ret;

		EventNotifier readNotifier(pipefd_[0], EventNotifier::Read);
		readNotifier.activated.connect(this, &EventTest::readReady);

		/* Test read notification with data. */
		memset(data_, 0, sizeof(data_));
		size_ = 0;

		ret = write(pipefd_[1], data.data(), data.size());
		if (ret < 0) {
			cout << "Pipe write failed" << endl;
			return TestFail;
		}

		timeout.start(100);
		dispatcher->processEvents();
		timeout.stop();

		if (static_cast<size_t>(size_) != data.size()) {
			cout << "Event notifier read ready test failed" << endl;
			return TestFail;
		}

		/* Test read notification without data. */
		notified_ = false;

		timeout.start(100);
		dispatcher->processEvents();
		timeout.stop();

		if (notified_) {
			cout << "Event notifier read no ready test failed" << endl;
			return TestFail;
		}

		/* Test read notifier disabling. */
		notified_ = false;
		readNotifier.setEnabled(false);

		ret = write(pipefd_[1], data.data(), data.size());
		if (ret < 0) {
			cout << "Pipe write failed" << endl;
			return TestFail;
		}

		timeout.start(100);
		dispatcher->processEvents();
		timeout.stop();

		if (notified_) {
			cout << "Event notifier read disabling failed" << endl;
			return TestFail;
		}

		/* Test read notifier enabling. */
		notified_ = false;
		readNotifier.setEnabled(true);

		timeout.start(100);
		dispatcher->processEvents();
		timeout.stop();

		if (!notified_) {
			cout << "Event notifier read enabling test failed" << endl;
			return TestFail;
		}

		return TestPass;
	}

	void cleanup()
	{
		close(pipefd_[0]);
		close(pipefd_[1]);
	}

private:
	int pipefd_[2];

	bool notified_;
	char data_[16];
	ssize_t size_;
};

TEST_REGISTER(EventTest)