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