1a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak/* 2a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak * v4l-test: Test environment for Video For Linux Two API 3a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak * 4c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak * 18 Apr 2009 0.4 More cleanup in frequency scan test case 5c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak * 28 Mar 2009 0.3 Clean up ret and errno variable names and dprintf() output 645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak * 1 Feb 2009 0.2 Added test cases for VIDIOC_S_FREQUENCY 7a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak * 31 Jan 2009 0.1 First release 8a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak * 9a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak * Written by M�rton N�meth <nm127@freemail.hu> 10a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak * Released under GPL 11a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak */ 12a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 13a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <stdio.h> 14a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <sys/types.h> 15a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <sys/stat.h> 16a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <fcntl.h> 17a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <unistd.h> 18a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <sys/ioctl.h> 19a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <errno.h> 20a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <string.h> 21a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 22a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <linux/videodev2.h> 23a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <linux/errno.h> 24a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 25a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include <CUnit/CUnit.h> 26a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 27a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include "v4l2_test.h" 28a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include "dev_video.h" 29a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include "video_limits.h" 30a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 31a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak#include "test_VIDIOC_FREQUENCY.h" 32a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 33354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_G_FREQUENCY() 34354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{ 35c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak int ret_get, errno_get; 36a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak __u32 tuner; 37a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak struct v4l2_frequency freq; 38a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 39a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak tuner = 0; 40a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 41a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak memset(&freq, 0xff, sizeof(freq)); 42a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak freq.tuner = tuner; 43c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak ret_get = ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, &freq); 44c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak errno_get = errno; 45c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak 46c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak dprintf("\t%s:%u: VIDIOC_G_FREQUENCY, ret_get=%i, errno_get=%i\n", 47c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak __FILE__, __LINE__, ret_get, errno_get); 48a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 49c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak if (ret_get == 0) { 50c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(ret_get, 0); 51a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 52a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak CU_ASSERT_EQUAL(freq.tuner, tuner); 53a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 54a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak //CU_ASSERT(freq.type, ???); 55a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak //CU_ASSERT_EQUAL(freq.frequency, ???); 56a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 57a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak CU_ASSERT_EQUAL(freq.reserved[0], 0); 58a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak CU_ASSERT_EQUAL(freq.reserved[1], 0); 59a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak CU_ASSERT_EQUAL(freq.reserved[2], 0); 60a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak CU_ASSERT_EQUAL(freq.reserved[3], 0); 61a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak CU_ASSERT_EQUAL(freq.reserved[4], 0); 62a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak CU_ASSERT_EQUAL(freq.reserved[5], 0); 63a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak CU_ASSERT_EQUAL(freq.reserved[6], 0); 64a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak CU_ASSERT_EQUAL(freq.reserved[7], 0); 65a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 66a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak dprintf("\tfreq = { " 67a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak ".tuner = %u, " 68a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak ".type = 0x%X, " 69a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak ".frequency = %u " 70a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak ".reserved[]={ 0x%X, 0x%X, 0x%X, 0x%X, 0x%X, 0x%X, 0x%X, 0x%X } }\n", 71a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak freq.tuner, 72a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak freq.type, 73a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak freq.frequency, 74a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak freq.reserved[0], 75a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak freq.reserved[1], 76a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak freq.reserved[2], 77a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak freq.reserved[3], 78a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak freq.reserved[4], 79354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao freq.reserved[5], freq.reserved[6], freq.reserved[7] 80354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ); 81a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak } else { 82c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(ret_get, -1); 83c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(errno_get, EINVAL); 84a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak } 85a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 86a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak} 87a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 88354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_G_FREQUENCY_S32_MAX() 89354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{ 90c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak int ret_get, errno_get; 91a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak __u32 tuner; 92a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak struct v4l2_frequency freq; 93a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 94354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tuner = (__u32) S32_MAX; 95a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 96a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak memset(&tuner, 0xff, sizeof(tuner)); 97a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak freq.tuner = tuner; 98c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak ret_get = ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, &freq); 99c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak errno_get = errno; 100a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 101c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak dprintf("\t%s:%u: VIDIOC_G_FREQUENCY, ret_get=%i, errno_get=%i\n", 102c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak __FILE__, __LINE__, ret_get, errno_get); 103a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 104c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(ret_get, -1); 105c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(errno_get, EINVAL); 106a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak} 107a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 108354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_G_FREQUENCY_S32_MAX_1() 109354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{ 110c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak int ret_get, errno_get; 111a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak __u32 tuner; 112a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak struct v4l2_frequency freq; 113a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 114354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tuner = (__u32) S32_MAX + 1; 115a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 116a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak memset(&tuner, 0xff, sizeof(tuner)); 117a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak freq.tuner = tuner; 118c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak ret_get = ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, &freq); 119c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak errno_get = errno; 120a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 121c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak dprintf("\t%s:%u: VIDIOC_G_FREQUENCY, ret_get=%i, errno_get=%i\n", 122c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak __FILE__, __LINE__, ret_get, errno_get); 123a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 124c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(ret_get, -1); 125c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(errno_get, EINVAL); 126a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak} 127a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 128354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_G_FREQUENCY_U32_MAX() 129354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{ 130c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak int ret_get, errno_get; 131a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak __u32 tuner; 132a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak struct v4l2_frequency freq; 133a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 134a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak tuner = U32_MAX; 135a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 136a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak memset(&tuner, 0xff, sizeof(tuner)); 137a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak freq.tuner = tuner; 138c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak ret_get = ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, &freq); 139c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak errno_get = errno; 140a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 141c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak dprintf("\t%s:%u: VIDIOC_G_FREQUENCY, ret_get=%i, errno_get=%i\n", 142c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak __FILE__, __LINE__, ret_get, errno_get); 143a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 144c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(ret_get, -1); 145c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(errno_get, EINVAL); 146a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak} 147a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 148354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_G_FREQUENCY_NULL() 149354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{ 150c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak int ret_get, errno_get; 151c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak int ret_null, errno_null; 152a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak struct v4l2_frequency freq; 153c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak __u32 tuner; 154c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak 155c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak tuner = 0; 156a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 157a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak memset(&freq, 0xff, sizeof(freq)); 158c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak freq.tuner = tuner; 159c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak freq.type = V4L2_TUNER_ANALOG_TV; 160c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak ret_get = ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, &freq); 161c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak errno_get = errno; 162a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 163c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak dprintf("\t%s:%u: VIDIOC_G_FREQUENCY, ret_get=%i, errno_get=%i\n", 164c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak __FILE__, __LINE__, ret_get, errno_get); 165a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 166c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak ret_null = ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, NULL); 167c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak errno_null = errno; 168a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak 169c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak dprintf("\t%s:%u: VIDIOC_G_FREQUENCY, ret_null=%i, errno_null=%i\n", 170c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak __FILE__, __LINE__, ret_null, errno_null); 171c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak 172c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak /* check if VIDIOC_G_FREQUENCY is supported at all or not */ 173c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak if (ret_get == 0) { 174a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak /* VIDIOC_G_FREQUENCY is supported, the parameter should be checked */ 175c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(ret_null, -1); 176c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(errno_null, EFAULT); 177c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak } else { 178c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak /* VIDIOC_G_FREQUENCY not supported at all, the parameter should not be evaluated */ 179c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(ret_null, -1); 180c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(errno_null, EINVAL); 181a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak } 182a8416d4639a5ea638dc4fc62c3f05512cd91e247subrata_modak} 18345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 184354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_S_FREQUENCY() 185354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{ 186c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak int ret_get, errno_get; 187c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak int ret_set, errno_set; 18845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak __u32 tuner; 18945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak struct v4l2_frequency orig_freq; 19045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak struct v4l2_frequency freq; 19145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak struct v4l2_frequency new_freq; 19245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 19345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak tuner = 0; 19445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 19545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* fetch the current frequency setting */ 19645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&orig_freq, 0xff, sizeof(orig_freq)); 19745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak orig_freq.tuner = tuner; 198c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak ret_get = ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, &orig_freq); 199c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak errno_get = errno; 20045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 201c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak dprintf("\t%s:%u: VIDIOC_G_FREQUENCY, ret_get=%i, errno_get=%i\n", 202c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak __FILE__, __LINE__, ret_get, errno_get); 20345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 204c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak if (ret_get == 0) { 20545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(orig_freq.tuner, tuner); 20645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 20745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* try to set the frequency again to the actual value */ 20845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&freq, 0xff, sizeof(freq)); 20945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.tuner = tuner; 21045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.frequency = orig_freq.frequency; 21145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.type = V4L2_TUNER_ANALOG_TV; 212c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak ret_set = ioctl(get_video_fd(), VIDIOC_S_FREQUENCY, &orig_freq); 213c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak errno_set = errno; 21445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 215354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 216354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: VIDIOC_S_FREQUENCY, ret_set=%i, errno_set=%i\n", 217354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, ret_set, errno_set); 21845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 219c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(ret_set, 0); 220c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak if (ret_set == 0) { 22145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 22245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* check wheteher the frequency has not been changed */ 22345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&new_freq, 0xff, sizeof(new_freq)); 22445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak new_freq.tuner = tuner; 225354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret_get = 226354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, 227354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &new_freq); 228c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak errno_get = errno; 22945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 230354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 231354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: VIDIOC_G_FREQUENCY, ret_get=%i, errno_get=%i\n", 232354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, ret_get, errno_get); 23345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 234c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(ret_get, 0); 235c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak if (ret_get == 0) { 236354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 237354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: current frequency=%u (expected %u)\n", 238354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, new_freq.frequency, 239354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao orig_freq.frequency); 240354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao CU_ASSERT_EQUAL(new_freq.frequency, 241354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao orig_freq.frequency); 24245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 24345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 24445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 24545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 24645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } else { 247c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(ret_get, -1); 248c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(errno_get, EINVAL); 24945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 25045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* VIDIOC_G_FREQUENCY not supported, so shall be VIDIOC_S_FREQUENCY */ 25145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 25245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&freq, 0, sizeof(freq)); 25345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.tuner = tuner; 25445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.type = V4L2_TUNER_ANALOG_TV; 25545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.frequency = 0; 256c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak ret_set = ioctl(get_video_fd(), VIDIOC_S_FREQUENCY, &freq); 257c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak errno_set = errno; 25845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 259354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 260354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: VIDIOC_S_FREQUENCY, ret_set=%i, errno_set=%i\n", 261354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, ret_set, errno_set); 26245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 263c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(ret_set, -1); 264c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(errno_set, EINVAL); 26545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 26645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 26745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 26845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak} 26945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 270354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_S_FREQUENCY_boundaries() 271354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{ 27245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak int ret_g_tuner = 0; 27345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak int ret_g_freq = 0; 27445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak int errno_g_tuner = 0; 27545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak int errno_g_freq = 0; 27645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak int ret; 27745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak __u32 index; 27845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak struct v4l2_frequency orig_freq; 27945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak struct v4l2_frequency freq; 28045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak struct v4l2_frequency new_freq; 28145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak struct v4l2_tuner tuner; 28245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 28345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* this test case depends on working VIDIOC_G_TUNER and VIDIOC_G_FREQUENCY commands */ 28445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 28545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak index = 0; 28645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 28745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* fetch the minimum (tuner.rangelow) and maximum (tuner.rangehigh) frequency */ 28845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&tuner, 0xff, sizeof(tuner)); 28945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak tuner.index = index; 29045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak ret_g_tuner = ioctl(get_video_fd(), VIDIOC_G_TUNER, &tuner); 29145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak errno_g_tuner = errno; 29245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 293354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 294354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: VIDIOC_G_TUNER, ret=%i, tuner.rangelow=%u, tuner.rangehigh=%u\n", 295354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, ret_g_tuner, tuner.rangelow, tuner.rangehigh); 29645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(tuner.index, index); 29745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 29845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* fetch the current frequency setting */ 29945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&orig_freq, 0xff, sizeof(orig_freq)); 30045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak orig_freq.tuner = index; 30145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak ret_g_freq = ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, &orig_freq); 30245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak errno_g_freq = errno; 30345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 304354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 305354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: VIDIOC_G_FREQUENCY, ret_g_freq=%i, orig_freq.frequency=%u\n", 306354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, ret_g_freq, orig_freq.frequency); 30745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(orig_freq.tuner, index); 30845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 30945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret_g_tuner == 0 && ret_g_freq == 0) { 31045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(orig_freq.tuner, index); 31145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 31245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* try to set the frequency to zero */ 31345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&freq, 0xff, sizeof(freq)); 31445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.tuner = index; 31545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.type = orig_freq.type; 31645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.frequency = 0; 31745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak ret = ioctl(get_video_fd(), VIDIOC_S_FREQUENCY, &freq); 318c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak dprintf("\t%s:%u: set to %u: VIDIOC_S_FREQUENCY, ret=%i\n", 319354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, 0, ret); 32045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 32145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(ret, 0); 32245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret == 0) { 32345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 32445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* check wheteher the frequency has been changed to the lowest 32545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak * possible value 32645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak */ 32745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&new_freq, 0xff, sizeof(new_freq)); 32845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak new_freq.tuner = index; 329354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret = 330354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, 331354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &new_freq); 33245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 333354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 334354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: VIDIOC_G_FREQUENCY, ret=%i, new_freq.frequency=%u\n", 335354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, ret, new_freq.frequency); 33645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 33745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(ret, 0); 33845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret == 0) { 339354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao CU_ASSERT_EQUAL(new_freq.frequency, 340354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tuner.rangelow); 34145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 34245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 34345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 34445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* try to set the frequency to tuner.rangelow-1, if applicable */ 34545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (0 < tuner.rangelow) { 34645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&freq, 0xff, sizeof(freq)); 34745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.tuner = index; 34845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.type = orig_freq.type; 349354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao freq.frequency = tuner.rangelow - 1; 35045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak ret = ioctl(get_video_fd(), VIDIOC_S_FREQUENCY, &freq); 35145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 352354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 353354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: set to %u: VIDIOC_S_FREQUENCY, ret=%i\n", 354354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, tuner.rangelow - 1, ret); 35545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 35645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(ret, 0); 35745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret == 0) { 35845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 35945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* check wheteher the frequency has been changed to the lowest 36045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak * possible value 36145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak */ 36245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&new_freq, 0xff, sizeof(new_freq)); 36345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak new_freq.tuner = index; 364354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret = 365354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, 366354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &new_freq); 367354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 368354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 369354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: VIDIOC_G_FREQUENCY, ret=%i, new_freq.frequency=%u\n", 370354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, ret, 371354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao new_freq.frequency); 37245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(ret, 0); 37345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret == 0) { 374354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 375354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: current frequency=%u (expected %u)\n", 376354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, 377354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao new_freq.frequency, 378354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tuner.rangelow); 379354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao CU_ASSERT_EQUAL(new_freq.frequency, 380354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tuner.rangelow); 38145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 38245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 38345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 38445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 38545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* try to set the frequency to tuner.rangelow */ 38645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&freq, 0xff, sizeof(freq)); 38745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.tuner = index; 38845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.type = orig_freq.type; 38945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.frequency = tuner.rangelow; 39045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak ret = ioctl(get_video_fd(), VIDIOC_S_FREQUENCY, &freq); 39145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 392c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak dprintf("\t%s:%u: set to %u: VIDIOC_S_FREQUENCY, ret=%i\n", 393354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, tuner.rangelow, ret); 39445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 39545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(ret, 0); 39645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret == 0) { 39745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 39845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* check wheteher the frequency has been changed to the lowest 39945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak * possible value 40045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak */ 40145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&new_freq, 0xff, sizeof(new_freq)); 40245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak new_freq.tuner = index; 403354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret = 404354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, 405354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &new_freq); 40645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 407354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 408354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: VIDIOC_G_FREQUENCY, ret=%i, new_freq.frequency=%u\n", 409354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, ret, new_freq.frequency); 41045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 41145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(ret, 0); 41245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret == 0) { 413354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 414354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: current frequency=%u (expected %u)\n", 415354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, new_freq.frequency, 416354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tuner.rangelow); 417354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao CU_ASSERT_EQUAL(new_freq.frequency, 418354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tuner.rangelow); 41945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 42045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 42145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 42245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* try to set the frequency to tuner.rangehigh */ 42345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&freq, 0xff, sizeof(freq)); 42445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.tuner = index; 42545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.type = orig_freq.type; 42645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.frequency = tuner.rangehigh; 42745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak ret = ioctl(get_video_fd(), VIDIOC_S_FREQUENCY, &freq); 42845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 429c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak dprintf("\t%s:%u: set to %u: VIDIOC_S_FREQUENCY, ret=%i\n", 430354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, tuner.rangehigh, ret); 43145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 43245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(ret, 0); 43345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret == 0) { 43445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 43545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* check wheteher the frequency has been changed to the highest 43645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak * possible value 43745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak */ 43845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&new_freq, 0xff, sizeof(new_freq)); 43945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak new_freq.tuner = index; 440354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret = 441354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, 442354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &new_freq); 44345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 444354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 445354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: VIDIOC_G_FREQUENCY, ret=%i, new_freq.frequency=%u\n", 446354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, ret, new_freq.frequency); 44745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 44845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(ret, 0); 44945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret == 0) { 450354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 451354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: current frequency=%u (expected %u)\n", 452354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, new_freq.frequency, 453354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tuner.rangehigh); 454354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao CU_ASSERT_EQUAL(new_freq.frequency, 455354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tuner.rangehigh); 45645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 45745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 45845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 45945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* try to set the frequency to tuner.rangehigh+1, if applicable */ 46045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (tuner.rangehigh < U32_MAX) { 46145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&freq, 0xff, sizeof(freq)); 46245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.tuner = index; 46345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.type = orig_freq.type; 464354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao freq.frequency = tuner.rangehigh + 1; 46545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak ret = ioctl(get_video_fd(), VIDIOC_S_FREQUENCY, &freq); 46645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 467354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 468354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: set to %u: VIDIOC_S_FREQUENCY, ret=%i\n", 469354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, tuner.rangehigh + 1, ret); 47045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 47145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(ret, 0); 47245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret == 0) { 47345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 47445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* check wheteher the frequency has been changed to the highest 47545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak * possible value 47645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak */ 47745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&new_freq, 0xff, sizeof(new_freq)); 47845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak new_freq.tuner = index; 479354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret = 480354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, 481354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &new_freq); 48245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 483354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 484354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: VIDIOC_G_FREQUENCY, ret=%i, new_freq.frequency=%u\n", 485354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, ret, 486354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao new_freq.frequency); 48745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 48845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(ret, 0); 48945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret == 0) { 490354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 491354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: current frequency=%u (expected %u)\n", 492354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, 493354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao new_freq.frequency, 494354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tuner.rangehigh); 495354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao CU_ASSERT_EQUAL(new_freq.frequency, 496354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tuner.rangehigh); 49745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 49845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 49945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 50045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 50145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* try to set the frequency to U32_MAX */ 50245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&freq, 0xff, sizeof(freq)); 50345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.tuner = index; 50445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.type = orig_freq.type; 50545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.frequency = U32_MAX; 50645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak ret = ioctl(get_video_fd(), VIDIOC_S_FREQUENCY, &freq); 50745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 508c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak dprintf("\t%s:%u: set to %u: VIDIOC_S_FREQUENCY, ret=%i\n", 509354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, U32_MAX, ret); 51045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(ret, 0); 51145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret == 0) { 51245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 51345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* check wheteher the frequency has been changed to the highest 51445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak * possible value 51545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak */ 51645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&new_freq, 0xff, sizeof(new_freq)); 51745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak new_freq.tuner = index; 518354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret = 519354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, 520354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &new_freq); 52145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 522354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 523354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: VIDIOC_G_FREQUENCY, ret=%i, new_freq.frequency=%u\n", 524354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, ret, new_freq.frequency); 52545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 52645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(ret, 0); 52745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret == 0) { 528354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 529354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: current frequency=%u (expected %u)\n", 530354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, new_freq.frequency, 531354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tuner.rangehigh); 532354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao CU_ASSERT_EQUAL(new_freq.frequency, 533354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tuner.rangehigh); 53445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 53545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 53645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 53745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* try restore the original frequency settings */ 53845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&freq, 0xff, sizeof(freq)); 53945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.tuner = index; 54045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.type = orig_freq.type; 54145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.frequency = orig_freq.frequency; 54245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak ret = ioctl(get_video_fd(), VIDIOC_S_FREQUENCY, &freq); 54345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 544c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak dprintf("\t%s:%u: set to %u: VIDIOC_S_FREQUENCY, ret=%i\n", 545354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, orig_freq.frequency, ret); 54645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 54745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(ret, 0); 54845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret == 0) { 54945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 55045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* check wheteher the frequency has been restored */ 55145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&new_freq, 0xff, sizeof(new_freq)); 55245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak new_freq.tuner = index; 553354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret = 554354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, 555354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &new_freq); 55645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 557354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 558354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: VIDIOC_G_FREQUENCY, ret=%i, new_freq.frequency=%u\n", 559354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, ret, new_freq.frequency); 56045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 56145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(ret, 0); 56245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret == 0) { 563354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 564354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: current frequency=%u (expected %u)\n", 565354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, new_freq.frequency, 566354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao orig_freq.frequency); 567354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao CU_ASSERT_EQUAL(new_freq.frequency, 568354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao orig_freq.frequency); 56945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 57045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 57145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 57245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 57345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret_g_freq != 0) { 574354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf("\t%s:%u: ret_g_freq=%d (expected %d)\n", __FILE__, 575354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __LINE__, ret_g_freq, -1); 576354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf("\t%s:%u: errno_g_freq=%d (expected %d)\n", __FILE__, 577354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __LINE__, errno_g_freq, EINVAL); 57845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(ret_g_freq, -1); 57945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(errno, EINVAL); 58045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 58145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 58245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret_g_tuner != 0) { 583354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf("\t%s:%u: ret_g_tuner=%d (expected %d)\n", __FILE__, 584354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __LINE__, ret_g_tuner, -1); 585354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf("\t%s:%u: errno_g_tuner=%d (expected %d)\n", __FILE__, 586354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __LINE__, errno_g_tuner, EINVAL); 58745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(ret_g_tuner, -1); 58845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(errno, EINVAL); 58945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 59045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 59145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak} 59245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 593354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_S_FREQUENCY_scan() 594354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{ 595c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak int ret_g_tuner, errno_g_tuner; 596c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak int ret_g_freq, errno_g_freq; 597c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak int ret_get, errno_get; 598c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak int ret_set, errno_set; 59945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak __u32 index; 60045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak struct v4l2_frequency orig_freq; 60145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak struct v4l2_frequency freq; 60245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak struct v4l2_frequency new_freq; 60345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak struct v4l2_frequency prev_freq; 60445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak struct v4l2_tuner tuner; 60545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak __u32 i; 60645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 60745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* this test case depends on working VIDIOC_G_FREQUENCY command */ 60845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 60945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak index = 0; 61045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 61145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* fetch the minimum (tuner.rangelow) and maximum (tuner.rangehigh) frequency */ 61245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&tuner, 0xff, sizeof(tuner)); 61345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak tuner.index = index; 61445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak ret_g_tuner = ioctl(get_video_fd(), VIDIOC_G_TUNER, &tuner); 61545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak errno_g_tuner = errno; 61645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 617c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak dprintf("\t%s:%u: VIDIOC_G_TUNER, ret_g_tuner=%i, errno_g_tuner=%i\n", 618c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak __FILE__, __LINE__, ret_g_tuner, errno_g_tuner); 61945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(tuner.index, index); 62045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 62145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* fetch the current frequency setting */ 62245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&orig_freq, 0xff, sizeof(orig_freq)); 62345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak orig_freq.tuner = index; 62445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak ret_g_freq = ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, &orig_freq); 62545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak errno_g_freq = errno; 62645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 627354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 628354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: VIDIOC_G_FREQUENCY, ret_g_freq=%i, errno_g_freq=%i, orig_freq.frequency=%u\n", 629354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, ret_g_freq, errno_g_freq, orig_freq.frequency); 63045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(orig_freq.tuner, index); 63145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 63245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret_g_freq == 0) { 63345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(orig_freq.tuner, index); 63445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 635c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak dprintf("\t%s:%u: tuner.rangelow=%u, tuner.rangehigh=%u\n", 636354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, tuner.rangelow, tuner.rangehigh); 63745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 63845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak i = tuner.rangelow; 63945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak prev_freq.frequency = 0; 64045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak do { 64145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* try to set the frequency */ 64245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&freq, 0xff, sizeof(freq)); 64345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.tuner = index; 64445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.type = orig_freq.type; 64545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 64645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.frequency = i; 647354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret_set = 648354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ioctl(get_video_fd(), VIDIOC_S_FREQUENCY, &freq); 649c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak errno_set = errno; 650354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 651354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: VIDIOC_S_FREQUENCY, ret_set=%i, errno_set=%i, freq.frequency=%u\n", 652354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, ret_set, errno_set, i); 65345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 654c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak CU_ASSERT_EQUAL(ret_set, 0); 655c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak if (ret_set == 0) { 65645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 65745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&new_freq, 0xff, sizeof(new_freq)); 65845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak new_freq.tuner = index; 659354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret_get = 660354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, 661354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &new_freq); 662c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak errno_get = errno; 66345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 664354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 665354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: VIDIOC_G_FREQUENCY, ret_get=%i, errno_get=%i, new_freq.frequency=%u\n", 666354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, ret_get, errno_get, 667354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao new_freq.frequency); 66845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 669c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak CU_ASSERT_EQUAL(ret_get, 0); 670c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak if (ret_get == 0) { 671354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao CU_ASSERT(prev_freq.frequency <= 672354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao new_freq.frequency); 673354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao CU_ASSERT(tuner.rangelow <= 674354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao new_freq.frequency); 675354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao CU_ASSERT(new_freq.frequency <= 676354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tuner.rangehigh); 67745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak prev_freq = new_freq; 67845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 67945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } else { 680354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("\tError %i while setting to %u\n", 681354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno_set, i); 68245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 68345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak i++; 68445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } while (i <= tuner.rangehigh); 68545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 68645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* try restore the original frequency settings */ 68745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&freq, 0xff, sizeof(freq)); 68845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.tuner = index; 68945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.type = orig_freq.type; 69045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak freq.frequency = orig_freq.frequency; 691c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak ret_set = ioctl(get_video_fd(), VIDIOC_S_FREQUENCY, &freq); 692c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak errno_set = errno; 69345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 694354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 695354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: VIDIOC_S_FREQUENCY, ret_set=%i, errno_set=%i\n", 696354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, ret_set, errno_set); 69745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 698c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak CU_ASSERT_EQUAL(ret_set, 0); 699c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak if (ret_set == 0) { 70045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 70145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak /* check wheteher the frequency has been restored */ 70245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak memset(&new_freq, 0xff, sizeof(new_freq)); 70345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak new_freq.tuner = index; 704354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret_get = 705354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, 706354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &new_freq); 707c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak errno_get = errno; 70845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 709354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dprintf 710354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("\t%s:%u: VIDIOC_G_FREQUENCY, ret_get=%i, errno_get=%i, new_freq.frequency=%u\n", 711354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao __FILE__, __LINE__, ret_get, errno_get, 712354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao new_freq.frequency); 71345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 714c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak CU_ASSERT_EQUAL(ret_get, 0); 715c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak if (ret_get == 0) { 716354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao CU_ASSERT_EQUAL(new_freq.frequency, 717354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao orig_freq.frequency); 71845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 71945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 72045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 72145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 72245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret_g_freq != 0) { 72345246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(ret_g_freq, -1); 72445246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(errno, EINVAL); 72545246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 72645246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 72745246f90c20c93f3e3539627e078196af4a0eae2subrata_modak if (ret_g_tuner != 0) { 72845246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(ret_g_tuner, -1); 72945246f90c20c93f3e3539627e078196af4a0eae2subrata_modak CU_ASSERT_EQUAL(errno, EINVAL); 73045246f90c20c93f3e3539627e078196af4a0eae2subrata_modak } 73145246f90c20c93f3e3539627e078196af4a0eae2subrata_modak 73245246f90c20c93f3e3539627e078196af4a0eae2subrata_modak} 733c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak 734354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_S_FREQUENCY_NULL() 735354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{ 736c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak int ret_get, errno_get; 737c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak int ret_set, errno_set; 738c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak int ret_null, errno_null; 739c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak struct v4l2_frequency freq_orig; 740c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak struct v4l2_frequency freq; 741c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak __u32 tuner; 742c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak 743c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak tuner = 0; 744c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak 745c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak memset(&freq_orig, 0, sizeof(freq_orig)); 746c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak freq_orig.tuner = tuner; 747c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak freq_orig.type = V4L2_TUNER_ANALOG_TV; 748c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak ret_get = ioctl(get_video_fd(), VIDIOC_G_FREQUENCY, &freq_orig); 749c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak errno_get = errno; 750c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak 751c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak dprintf("\t%s:%u: VIDIOC_G_FREQUENCY, ret_get=%i, errno_get=%i\n", 752c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak __FILE__, __LINE__, ret_get, errno_get); 753c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak 754c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak memset(&freq, 0, sizeof(freq)); 755c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak freq.tuner = 0; 756c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak freq.type = V4L2_TUNER_ANALOG_TV; 757c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak freq.frequency = freq_orig.frequency; 758c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak ret_set = ioctl(get_video_fd(), VIDIOC_S_FREQUENCY, &freq_orig); 759c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak errno_set = errno; 760c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak 761c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak dprintf("\t%s:%u: VIDIOC_G_FREQUENCY, ret_set=%i, errno_set=%i\n", 762c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak __FILE__, __LINE__, ret_set, errno_set); 763c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak 764c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak ret_null = ioctl(get_video_fd(), VIDIOC_S_FREQUENCY, NULL); 765c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak errno_null = errno; 766c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak 767c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak dprintf("\t%s:%u: VIDIOC_S_FREQUENCY, ret_null=%i, errno_null=%i\n", 768c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak __FILE__, __LINE__, ret_null, errno_null); 769c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak 7702c28215423293e443469a07ae7011135d058b671Garrett Cooper /* Check whether any of VIDIOC_S_FREQUENCY or VIDIOC_G_FREQUENCY 771c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak * is supported at all or not 772c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak */ 773c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak if (ret_get == 0 || ret_set == 0) { 774c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak /* VIDIOC_G_FREQUENCY or VIDIOC_S_FREQUENCY is supported, so 775c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak * the parameter of VIDIOC_S_FREQUENCY should be checked 776c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak */ 777c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(ret_null, -1); 778c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(errno_null, EFAULT); 779c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak } else { 780c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak /* none of VIDIOC_G_FREQUENCY and VIDIOC_S_FREQUENCY is supported, 781c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak * the parameter should not be evaluated 782c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak */ 783c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(ret_get, -1); 784c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(errno_get, EINVAL); 785c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(ret_set, -1); 786c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(errno_set, EINVAL); 787c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(ret_null, -1); 788c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak CU_ASSERT_EQUAL(errno_null, EINVAL); 789c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak } 790c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak 791ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 792