1a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak/*
2a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak * v4l-test: Test environment for Video For Linux Two API
3a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak *
4c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak *  5 Apr 2009  0.3  Test case for NULL parameter reworked
5c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak * 28 Mar 2009  0.2  Clean up ret and errno variable names and dprintf() output
6a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak * 30 Jan 2009  0.1  First release
7a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak *
8a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak * Written by M�rton N�meth <nm127@freemail.hu>
9a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak * Released under GPL
10a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak */
11a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak
12a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <stdio.h>
13a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <sys/types.h>
14a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <sys/stat.h>
15a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <fcntl.h>
16a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <unistd.h>
17a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <sys/ioctl.h>
18a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <errno.h>
19a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <string.h>
20a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak
21a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <linux/videodev2.h>
22a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <linux/errno.h>
23a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak
24a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <CUnit/CUnit.h>
25a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak
26a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include "v4l2_test.h"
27a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include "dev_video.h"
28a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include "video_limits.h"
29a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include "v4l2_validator.h"
30a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak
31a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include "test_VIDIOC_QUERYSTD.h"
32a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak
33354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_QUERYSTD()
34354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
35c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_query, errno_query;
36a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak	v4l2_std_id id;
37a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak
38c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	memset(&id, 0xff, sizeof(id));
39a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak
40c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_query = ioctl(get_video_fd(), VIDIOC_QUERYSTD, &id);
41c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_query = errno;
42a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak
43354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dprintf
44354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    ("\t%s:%u: VIDIOC_QUERYSTD, ret_query=%i, errno_query=%i, id=0x%llx\n",
45354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     __FILE__, __LINE__, ret_query, errno_query, id);
46a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak
47c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	if (ret_query == 0) {
48c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_query, 0);
49a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak		CU_ASSERT(id != 0);
50a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak		CU_ASSERT(valid_v4l2_std_id(id));
51a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak
52c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	} else {
53a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak		/* if this ioctl is not supported, then errno shall be EINVAL */
54c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_query, -1);
55c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_query, EINVAL);
56a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak	}
57a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak
58a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak}
59a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak
60354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_QUERYSTD_NULL()
61354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
62c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_query, errno_query;
63c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_null, errno_null;
64a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak	v4l2_std_id id;
65a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak
66a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak	memset(&id, 0, sizeof(id));
67c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_query = ioctl(get_video_fd(), VIDIOC_QUERYSTD, &id);
68c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_query = errno;
69c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
70c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	dprintf("\t%s:%u: VIDIOC_QUERYSTD: ret_query=%i, errno_query=%i\n",
71c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		__FILE__, __LINE__, ret_query, errno_query);
72c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
73c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_null = ioctl(get_video_fd(), VIDIOC_QUERYSTD, NULL);
74c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_null = errno;
75a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak
76c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	dprintf("\t%s:%u: VIDIOC_G_TUNER: ret_null=%i, errno_null=%i\n",
77c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		__FILE__, __LINE__, ret_null, errno_null);
78a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak
79a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak	/* check if VIDIOC_QUERYSTD is supported at all or not */
80c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	if (ret_query == 0) {
81c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		/* VIDIOC_QUERYSTD is supported, the parameter should be checked */
82c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_query, 0);
83c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_null, -1);
84c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_null, EFAULT);
85c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	} else {
86a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak		/* VIDIOC_QUERYSTD not supported at all, the parameter should not be evaluated */
87c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_query, -1);
88c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_query, EINVAL);
89c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_null, -1);
90c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_null, EINVAL);
91a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak
92a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak	}
93a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak}
94a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak
95ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman/* TODO: check for different input settings */
96