t_usbhid.c revision 1.9 1 1.9 jakllsch /* $NetBSD: t_usbhid.c,v 1.9 2016/01/04 22:07:16 jakllsch Exp $ */
2 1.1 jakllsch
3 1.1 jakllsch /*
4 1.1 jakllsch * Copyright (c) 2016 Jonathan A. Kollasch
5 1.1 jakllsch * All rights reserved.
6 1.1 jakllsch *
7 1.1 jakllsch * Redistribution and use in source and binary forms, with or without
8 1.1 jakllsch * modification, are permitted provided that the following conditions
9 1.1 jakllsch * are met:
10 1.1 jakllsch * 1. Redistributions of source code must retain the above copyright
11 1.1 jakllsch * notice, this list of conditions and the following disclaimer.
12 1.1 jakllsch * 2. Redistributions in binary form must reproduce the above copyright
13 1.1 jakllsch * notice, this list of conditions and the following disclaimer in the
14 1.1 jakllsch * documentation and/or other materials provided with the distribution.
15 1.1 jakllsch *
16 1.1 jakllsch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 1.1 jakllsch * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18 1.1 jakllsch * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 1.1 jakllsch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
20 1.1 jakllsch * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21 1.1 jakllsch * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22 1.1 jakllsch * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23 1.1 jakllsch * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 1.1 jakllsch * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25 1.1 jakllsch * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26 1.1 jakllsch * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 1.1 jakllsch */
28 1.1 jakllsch
29 1.1 jakllsch #include <sys/cdefs.h>
30 1.9 jakllsch __RCSID("$NetBSD: t_usbhid.c,v 1.9 2016/01/04 22:07:16 jakllsch Exp $");
31 1.1 jakllsch
32 1.1 jakllsch #include <atf-c.h>
33 1.1 jakllsch
34 1.1 jakllsch #include <inttypes.h>
35 1.1 jakllsch #include <usbhid.h>
36 1.1 jakllsch #include <string.h>
37 1.1 jakllsch
38 1.1 jakllsch #include <stdio.h>
39 1.1 jakllsch #include <stdlib.h>
40 1.1 jakllsch
41 1.1 jakllsch #include <limits.h>
42 1.1 jakllsch
43 1.1 jakllsch ATF_TC(check_hid_logical_range);
44 1.1 jakllsch ATF_TC(check_hid_physical_range);
45 1.1 jakllsch ATF_TC(check_hid_usage);
46 1.1 jakllsch ATF_TC(check_hid_get_data);
47 1.1 jakllsch ATF_TC(check_hid_set_data);
48 1.1 jakllsch
49 1.7 jakllsch #define MYd_ATF_CHECK_EQ(d, v) \
50 1.7 jakllsch ATF_CHECK_EQ_MSG(d, v, "== %d", (d))
51 1.7 jakllsch
52 1.7 jakllsch #define MYu_ATF_CHECK_EQ(d, v) \
53 1.7 jakllsch ATF_CHECK_EQ_MSG(d, v, "== %u", (d))
54 1.7 jakllsch
55 1.7 jakllsch #define MYx_ATF_CHECK_EQ(d, v) \
56 1.7 jakllsch ATF_CHECK_EQ_MSG(d, v, "== 0x%x", (d))
57 1.7 jakllsch
58 1.9 jakllsch #include "hid_test_data.c"
59 1.1 jakllsch
60 1.1 jakllsch ATF_TC_HEAD(check_hid_usage, tc)
61 1.1 jakllsch {
62 1.1 jakllsch
63 1.1 jakllsch atf_tc_set_md_var(tc, "descr", "Test libusbhid usage.c");
64 1.1 jakllsch }
65 1.1 jakllsch
66 1.1 jakllsch ATF_TC_BODY(check_hid_usage, tc)
67 1.1 jakllsch {
68 1.1 jakllsch char usages_path[PATH_MAX];
69 1.1 jakllsch
70 1.1 jakllsch (void)strlcpy(usages_path, atf_tc_get_config_var(tc, "srcdir"),
71 1.1 jakllsch sizeof(usages_path));
72 1.1 jakllsch (void)strlcat(usages_path, "/test_usb_hid_usages",
73 1.1 jakllsch sizeof(usages_path));
74 1.1 jakllsch
75 1.1 jakllsch hid_init(usages_path);
76 1.1 jakllsch
77 1.1 jakllsch ATF_CHECK_STREQ("t_usbhid_page", hid_usage_page(0xff1b));
78 1.1 jakllsch ATF_CHECK_EQ((uint32_t)hid_parse_usage_page("t_usbhid_page"), 0xff1b);
79 1.1 jakllsch
80 1.1 jakllsch ATF_CHECK_STREQ("t_usbhid_usage", hid_usage_in_page(0xff1bff2a));
81 1.1 jakllsch ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page(
82 1.1 jakllsch "t_usbhid_page:t_usbhid_usage"), 0xff1bff2a);
83 1.1 jakllsch
84 1.1 jakllsch ATF_CHECK_STREQ("Quick_zephyrs_blow_vexing_daft_Jim_",
85 1.1 jakllsch hid_usage_page(0xff2a));
86 1.1 jakllsch ATF_CHECK_EQ((uint32_t)hid_parse_usage_page(
87 1.1 jakllsch "Quick_zephyrs_blow_vexing_daft_Jim_"), 0xff2a);
88 1.1 jakllsch
89 1.1 jakllsch ATF_CHECK_STREQ("Usage_ID_Zero_%", hid_usage_in_page(0xff2a0000));
90 1.1 jakllsch ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page(
91 1.1 jakllsch "Quick_zephyrs_blow_vexing_daft_Jim_:Usage_ID_Zero_%"),
92 1.1 jakllsch 0xff2a0000);
93 1.1 jakllsch
94 1.1 jakllsch //ATF_CHECK_STREQ("Usage_ID_0_%", hid_usage_in_page(0xff2a0000));
95 1.1 jakllsch ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page(
96 1.1 jakllsch "Quick_zephyrs_blow_vexing_daft_Jim_:Usage_ID_0_%"), 0xff2a0000);
97 1.1 jakllsch
98 1.1 jakllsch ATF_CHECK_STREQ("Usage_ID_65535_%", hid_usage_in_page(0xff2affff));
99 1.1 jakllsch ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page(
100 1.1 jakllsch "Quick_zephyrs_blow_vexing_daft_Jim_:Usage_ID_65535_%"),
101 1.1 jakllsch 0xff2affff);
102 1.6 jakllsch
103 1.6 jakllsch MYx_ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page("0xff2a:0xff1b"),
104 1.6 jakllsch 0xff2aff1b);
105 1.1 jakllsch }
106 1.1 jakllsch
107 1.1 jakllsch ATF_TC_HEAD(check_hid_logical_range, tc)
108 1.1 jakllsch {
109 1.1 jakllsch
110 1.1 jakllsch atf_tc_set_md_var(tc, "descr", "Test hid_get_item "
111 1.1 jakllsch "Logical Minimum/Maximum results");
112 1.1 jakllsch }
113 1.1 jakllsch
114 1.1 jakllsch ATF_TC_BODY(check_hid_logical_range, tc)
115 1.1 jakllsch {
116 1.1 jakllsch report_desc_t hrd;
117 1.1 jakllsch hid_item_t hi;
118 1.4 jakllsch uint32_t minimum, maximum;
119 1.1 jakllsch
120 1.1 jakllsch atf_tc_expect_fail("only the 32-bit opcode works, "
121 1.1 jakllsch "8 and 16-bit is broken");
122 1.1 jakllsch
123 1.1 jakllsch ATF_REQUIRE((hrd = hid_use_report_desc(range_test_report_descriptor,
124 1.1 jakllsch __arraycount(range_test_report_descriptor))) != NULL);
125 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000001U, hid_input, &hi,
126 1.1 jakllsch NO_REPORT_ID) > 0);
127 1.2 jakllsch MYd_ATF_CHECK_EQ(hi.logical_minimum, -128);
128 1.2 jakllsch MYd_ATF_CHECK_EQ(hi.logical_maximum, 127);
129 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000002U, hid_input, &hi,
130 1.1 jakllsch NO_REPORT_ID) > 0);
131 1.2 jakllsch MYd_ATF_CHECK_EQ(hi.logical_minimum, -32768);
132 1.2 jakllsch MYd_ATF_CHECK_EQ(hi.logical_maximum, 32767);
133 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000003U, hid_input, &hi,
134 1.1 jakllsch NO_REPORT_ID) > 0);
135 1.2 jakllsch MYd_ATF_CHECK_EQ(hi.logical_minimum, -2147483648);
136 1.2 jakllsch MYd_ATF_CHECK_EQ(hi.logical_maximum, 2147483647);
137 1.1 jakllsch
138 1.1 jakllsch hid_dispose_report_desc(hrd);
139 1.1 jakllsch hrd = NULL;
140 1.1 jakllsch
141 1.1 jakllsch ATF_REQUIRE((hrd = hid_use_report_desc(
142 1.1 jakllsch unsigned_range_test_report_descriptor,
143 1.1 jakllsch __arraycount(unsigned_range_test_report_descriptor))) != NULL);
144 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000011U, hid_input, &hi,
145 1.1 jakllsch NO_REPORT_ID) > 0);
146 1.4 jakllsch ATF_CHECK(hi.logical_minimum > hi.logical_maximum);
147 1.4 jakllsch minimum = (uint32_t)hi.logical_minimum & ((1ULL<<hi.report_size)-1);
148 1.4 jakllsch MYu_ATF_CHECK_EQ(minimum, 0);
149 1.4 jakllsch maximum = (uint32_t)hi.logical_maximum & ((1ULL<<hi.report_size)-1);
150 1.4 jakllsch MYu_ATF_CHECK_EQ(maximum, 255);
151 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000012U, hid_input, &hi,
152 1.1 jakllsch NO_REPORT_ID) > 0);
153 1.4 jakllsch ATF_CHECK(hi.logical_minimum > hi.logical_maximum);
154 1.4 jakllsch minimum = hi.logical_minimum & ((1ULL<<hi.report_size)-1);
155 1.4 jakllsch MYu_ATF_CHECK_EQ(minimum, 0);
156 1.4 jakllsch maximum = hi.logical_maximum & ((1ULL<<hi.report_size)-1);
157 1.4 jakllsch MYu_ATF_CHECK_EQ(maximum, 65535);
158 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000013U, hid_input, &hi,
159 1.1 jakllsch NO_REPORT_ID) > 0);
160 1.4 jakllsch ATF_CHECK(hi.logical_minimum > hi.logical_maximum);
161 1.4 jakllsch minimum = hi.logical_minimum & ((1ULL<<hi.report_size)-1);
162 1.4 jakllsch MYu_ATF_CHECK_EQ(minimum, 0);
163 1.4 jakllsch maximum = hi.logical_maximum & ((1ULL<<hi.report_size)-1);
164 1.4 jakllsch MYu_ATF_CHECK_EQ(maximum, 4294967295);
165 1.1 jakllsch
166 1.1 jakllsch hid_dispose_report_desc(hrd);
167 1.1 jakllsch hrd = NULL;
168 1.1 jakllsch }
169 1.1 jakllsch
170 1.1 jakllsch ATF_TC_HEAD(check_hid_physical_range, tc)
171 1.1 jakllsch {
172 1.1 jakllsch
173 1.1 jakllsch atf_tc_set_md_var(tc, "descr", "Test hid_get_item "
174 1.1 jakllsch "Physical Minimum/Maximum results");
175 1.1 jakllsch }
176 1.1 jakllsch
177 1.1 jakllsch ATF_TC_BODY(check_hid_physical_range, tc)
178 1.1 jakllsch {
179 1.1 jakllsch report_desc_t hrd;
180 1.1 jakllsch hid_item_t hi;
181 1.4 jakllsch uint32_t minimum, maximum;
182 1.1 jakllsch
183 1.1 jakllsch atf_tc_expect_fail("only the 32-bit opcode works, "
184 1.1 jakllsch "8 and 16-bit is broken");
185 1.1 jakllsch
186 1.1 jakllsch ATF_REQUIRE((hrd = hid_use_report_desc(range_test_report_descriptor,
187 1.1 jakllsch __arraycount(range_test_report_descriptor))) != NULL);
188 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000001U, hid_input, &hi,
189 1.1 jakllsch NO_REPORT_ID) > 0);
190 1.2 jakllsch MYd_ATF_CHECK_EQ(hi.physical_minimum, -128);
191 1.2 jakllsch MYd_ATF_CHECK_EQ(hi.physical_maximum, 127);
192 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000002U, hid_input, &hi,
193 1.1 jakllsch NO_REPORT_ID) > 0);
194 1.2 jakllsch MYd_ATF_CHECK_EQ(hi.physical_minimum, -32768);
195 1.2 jakllsch MYd_ATF_CHECK_EQ(hi.physical_maximum, 32767);
196 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000003U, hid_input, &hi,
197 1.1 jakllsch NO_REPORT_ID) > 0);
198 1.2 jakllsch MYd_ATF_CHECK_EQ(hi.physical_minimum, -2147483648);
199 1.2 jakllsch MYd_ATF_CHECK_EQ(hi.physical_maximum, 2147483647);
200 1.1 jakllsch
201 1.1 jakllsch hid_dispose_report_desc(hrd);
202 1.1 jakllsch hrd = NULL;
203 1.1 jakllsch
204 1.1 jakllsch ATF_REQUIRE((hrd = hid_use_report_desc(
205 1.1 jakllsch unsigned_range_test_report_descriptor,
206 1.1 jakllsch __arraycount(unsigned_range_test_report_descriptor))) != NULL);
207 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000011U, hid_input, &hi,
208 1.1 jakllsch NO_REPORT_ID) > 0);
209 1.4 jakllsch ATF_CHECK(hi.physical_minimum > hi.physical_maximum);
210 1.4 jakllsch minimum = (uint32_t)hi.physical_minimum & ((1ULL<<hi.report_size)-1);
211 1.4 jakllsch MYu_ATF_CHECK_EQ(minimum, 0);
212 1.4 jakllsch maximum = (uint32_t)hi.physical_maximum & ((1ULL<<hi.report_size)-1);
213 1.4 jakllsch MYu_ATF_CHECK_EQ(maximum, 255);
214 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000012U, hid_input, &hi,
215 1.1 jakllsch NO_REPORT_ID) > 0);
216 1.4 jakllsch ATF_CHECK(hi.physical_minimum > hi.physical_maximum);
217 1.4 jakllsch minimum = hi.physical_minimum & ((1ULL<<hi.report_size)-1);
218 1.4 jakllsch MYu_ATF_CHECK_EQ(minimum, 0);
219 1.4 jakllsch maximum = hi.physical_maximum & ((1ULL<<hi.report_size)-1);
220 1.4 jakllsch MYu_ATF_CHECK_EQ(maximum, 65535);
221 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000013U, hid_input, &hi,
222 1.1 jakllsch NO_REPORT_ID) > 0);
223 1.4 jakllsch ATF_CHECK(hi.physical_minimum > hi.physical_maximum);
224 1.4 jakllsch minimum = hi.physical_minimum & ((1ULL<<hi.report_size)-1);
225 1.4 jakllsch MYu_ATF_CHECK_EQ(minimum, 0);
226 1.4 jakllsch maximum = hi.physical_maximum & ((1ULL<<hi.report_size)-1);
227 1.4 jakllsch MYu_ATF_CHECK_EQ(maximum, 4294967295);
228 1.1 jakllsch
229 1.1 jakllsch hid_dispose_report_desc(hrd);
230 1.1 jakllsch hrd = NULL;
231 1.1 jakllsch }
232 1.1 jakllsch
233 1.1 jakllsch ATF_TC_HEAD(check_hid_get_data, tc)
234 1.1 jakllsch {
235 1.1 jakllsch
236 1.1 jakllsch atf_tc_set_md_var(tc, "descr", "Test hid_get_data results");
237 1.1 jakllsch }
238 1.1 jakllsch
239 1.1 jakllsch ATF_TC_BODY(check_hid_get_data, tc)
240 1.1 jakllsch {
241 1.1 jakllsch report_desc_t hrd;
242 1.1 jakllsch hid_item_t hi;
243 1.1 jakllsch int32_t data;
244 1.1 jakllsch uint32_t udat;
245 1.1 jakllsch
246 1.1 jakllsch ATF_REQUIRE((hrd = hid_use_report_desc(
247 1.1 jakllsch range_test_report_descriptor,
248 1.1 jakllsch __arraycount(range_test_report_descriptor))) != NULL);
249 1.1 jakllsch
250 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000001U, hid_input, &hi,
251 1.1 jakllsch NO_REPORT_ID) > 0);
252 1.1 jakllsch data = hid_get_data(range_test_minimum_report, &hi);
253 1.1 jakllsch MYd_ATF_CHECK_EQ(data, -128);
254 1.1 jakllsch data = hid_get_data(range_test_negative_one_report, &hi);
255 1.1 jakllsch MYd_ATF_CHECK_EQ(data, -1);
256 1.1 jakllsch data = hid_get_data(range_test_positive_one_report, &hi);
257 1.1 jakllsch MYd_ATF_CHECK_EQ(data, 1);
258 1.1 jakllsch data = hid_get_data(range_test_maximum_report, &hi);
259 1.1 jakllsch MYd_ATF_CHECK_EQ(data, 127);
260 1.1 jakllsch
261 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000002U, hid_input, &hi,
262 1.1 jakllsch NO_REPORT_ID) > 0);
263 1.1 jakllsch data = hid_get_data(range_test_minimum_report, &hi);
264 1.1 jakllsch MYd_ATF_CHECK_EQ(data, -32768);
265 1.1 jakllsch data = hid_get_data(range_test_negative_one_report, &hi);
266 1.1 jakllsch MYd_ATF_CHECK_EQ(data, -1);
267 1.1 jakllsch data = hid_get_data(range_test_positive_one_report, &hi);
268 1.1 jakllsch MYd_ATF_CHECK_EQ(data, 1);
269 1.1 jakllsch data = hid_get_data(range_test_maximum_report, &hi);
270 1.1 jakllsch MYd_ATF_CHECK_EQ(data, 32767);
271 1.1 jakllsch
272 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000003U, hid_input, &hi,
273 1.1 jakllsch NO_REPORT_ID) > 0);
274 1.1 jakllsch data = hid_get_data(range_test_minimum_report, &hi);
275 1.1 jakllsch MYd_ATF_CHECK_EQ(data, -2147483648);
276 1.1 jakllsch data = hid_get_data(range_test_negative_one_report, &hi);
277 1.1 jakllsch MYd_ATF_CHECK_EQ(data, -1);
278 1.1 jakllsch data = hid_get_data(range_test_positive_one_report, &hi);
279 1.1 jakllsch MYd_ATF_CHECK_EQ(data, 1);
280 1.1 jakllsch data = hid_get_data(range_test_maximum_report, &hi);
281 1.1 jakllsch MYd_ATF_CHECK_EQ(data, 2147483647);
282 1.1 jakllsch
283 1.1 jakllsch hid_dispose_report_desc(hrd);
284 1.1 jakllsch hrd = NULL;
285 1.1 jakllsch
286 1.1 jakllsch ATF_REQUIRE((hrd = hid_use_report_desc(
287 1.1 jakllsch unsigned_range_test_report_descriptor,
288 1.1 jakllsch __arraycount(unsigned_range_test_report_descriptor))) != NULL);
289 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000011U, hid_input, &hi,
290 1.1 jakllsch NO_REPORT_ID) > 0);
291 1.1 jakllsch udat = hid_get_data(unsigned_range_test_minimum_report, &hi);
292 1.1 jakllsch MYu_ATF_CHECK_EQ(udat, 0);
293 1.1 jakllsch udat = hid_get_data(unsigned_range_test_positive_one_report, &hi);
294 1.1 jakllsch MYu_ATF_CHECK_EQ(udat, 1);
295 1.1 jakllsch udat = hid_get_data(unsigned_range_test_negative_one_report, &hi);
296 1.1 jakllsch MYu_ATF_CHECK_EQ(udat, 254);
297 1.1 jakllsch udat = hid_get_data(unsigned_range_test_maximum_report, &hi);
298 1.1 jakllsch MYu_ATF_CHECK_EQ(udat, 255);
299 1.1 jakllsch
300 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000012U, hid_input, &hi,
301 1.1 jakllsch NO_REPORT_ID) > 0);
302 1.1 jakllsch udat = hid_get_data(unsigned_range_test_minimum_report, &hi);
303 1.1 jakllsch MYu_ATF_CHECK_EQ(udat, 0);
304 1.1 jakllsch udat = hid_get_data(unsigned_range_test_positive_one_report, &hi);
305 1.1 jakllsch MYu_ATF_CHECK_EQ(udat, 1);
306 1.1 jakllsch udat = hid_get_data(unsigned_range_test_negative_one_report, &hi);
307 1.1 jakllsch MYu_ATF_CHECK_EQ(udat, 65534);
308 1.1 jakllsch udat = hid_get_data(unsigned_range_test_maximum_report, &hi);
309 1.1 jakllsch MYu_ATF_CHECK_EQ(udat, 65535);
310 1.1 jakllsch
311 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000013U, hid_input, &hi,
312 1.1 jakllsch NO_REPORT_ID) > 0);
313 1.1 jakllsch udat = hid_get_data(unsigned_range_test_minimum_report, &hi);
314 1.1 jakllsch MYu_ATF_CHECK_EQ(udat, 0);
315 1.1 jakllsch udat = hid_get_data(unsigned_range_test_positive_one_report, &hi);
316 1.1 jakllsch MYu_ATF_CHECK_EQ(udat, 1);
317 1.1 jakllsch udat = hid_get_data(unsigned_range_test_negative_one_report, &hi);
318 1.1 jakllsch MYu_ATF_CHECK_EQ(udat, 4294967294);
319 1.1 jakllsch udat = hid_get_data(unsigned_range_test_maximum_report, &hi);
320 1.1 jakllsch MYu_ATF_CHECK_EQ(udat, 4294967295);
321 1.1 jakllsch
322 1.1 jakllsch hid_dispose_report_desc(hrd);
323 1.1 jakllsch hrd = NULL;
324 1.1 jakllsch }
325 1.1 jakllsch
326 1.1 jakllsch ATF_TC_HEAD(check_hid_set_data, tc)
327 1.1 jakllsch {
328 1.1 jakllsch
329 1.1 jakllsch atf_tc_set_md_var(tc, "descr", "Test hid_set_data results");
330 1.1 jakllsch }
331 1.1 jakllsch
332 1.1 jakllsch ATF_TC_BODY(check_hid_set_data, tc)
333 1.1 jakllsch {
334 1.1 jakllsch report_desc_t hrd;
335 1.1 jakllsch hid_item_t hi;
336 1.1 jakllsch uint8_t test_data_minimum[7];
337 1.1 jakllsch uint8_t test_data_negative_one[7];
338 1.1 jakllsch uint8_t test_data_positive_one[7];
339 1.1 jakllsch uint8_t test_data_maximum[7];
340 1.1 jakllsch
341 1.1 jakllsch ATF_REQUIRE((hrd = hid_use_report_desc(
342 1.1 jakllsch range_test_report_descriptor,
343 1.1 jakllsch __arraycount(range_test_report_descriptor))) != NULL);
344 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000001U, hid_input, &hi,
345 1.1 jakllsch NO_REPORT_ID) > 0);
346 1.1 jakllsch hid_set_data(test_data_minimum, &hi, -128);
347 1.1 jakllsch hid_set_data(test_data_negative_one, &hi, -1);
348 1.1 jakllsch hid_set_data(test_data_positive_one, &hi, 1);
349 1.1 jakllsch hid_set_data(test_data_maximum, &hi, 127);
350 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000002U, hid_input, &hi,
351 1.1 jakllsch NO_REPORT_ID) > 0);
352 1.1 jakllsch hid_set_data(test_data_minimum, &hi, -32768);
353 1.1 jakllsch hid_set_data(test_data_negative_one, &hi, -1);
354 1.1 jakllsch hid_set_data(test_data_positive_one, &hi, 1);
355 1.1 jakllsch hid_set_data(test_data_maximum, &hi, 32767);
356 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000003U, hid_input, &hi,
357 1.1 jakllsch NO_REPORT_ID) > 0);
358 1.1 jakllsch hid_set_data(test_data_minimum, &hi, -2147483648);
359 1.1 jakllsch hid_set_data(test_data_negative_one, &hi, -1);
360 1.1 jakllsch hid_set_data(test_data_positive_one, &hi, 1);
361 1.1 jakllsch hid_set_data(test_data_maximum, &hi, 2147483647);
362 1.1 jakllsch ATF_CHECK(memcmp(test_data_minimum, range_test_minimum_report,
363 1.1 jakllsch sizeof test_data_minimum) == 0);
364 1.1 jakllsch ATF_CHECK(memcmp(test_data_negative_one,
365 1.1 jakllsch range_test_negative_one_report,
366 1.1 jakllsch sizeof test_data_negative_one) == 0);
367 1.1 jakllsch ATF_CHECK(memcmp(test_data_positive_one,
368 1.1 jakllsch range_test_positive_one_report,
369 1.1 jakllsch sizeof test_data_positive_one) == 0);
370 1.1 jakllsch ATF_CHECK(memcmp(test_data_maximum, range_test_maximum_report,
371 1.1 jakllsch sizeof test_data_maximum) == 0);
372 1.1 jakllsch
373 1.1 jakllsch hid_dispose_report_desc(hrd);
374 1.1 jakllsch hrd = NULL;
375 1.1 jakllsch
376 1.1 jakllsch ATF_REQUIRE((hrd = hid_use_report_desc(
377 1.1 jakllsch unsigned_range_test_report_descriptor,
378 1.1 jakllsch __arraycount(range_test_report_descriptor))) != NULL);
379 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000011U, hid_input, &hi,
380 1.1 jakllsch NO_REPORT_ID) > 0);
381 1.1 jakllsch hid_set_data(test_data_minimum, &hi, 0);
382 1.1 jakllsch hid_set_data(test_data_positive_one, &hi, 1);
383 1.1 jakllsch hid_set_data(test_data_negative_one, &hi, 0xfffffffe);
384 1.1 jakllsch hid_set_data(test_data_maximum, &hi, 0xffffffff);
385 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000012U, hid_input, &hi,
386 1.1 jakllsch NO_REPORT_ID) > 0);
387 1.1 jakllsch hid_set_data(test_data_minimum, &hi, 0);
388 1.1 jakllsch hid_set_data(test_data_positive_one, &hi, 1);
389 1.1 jakllsch hid_set_data(test_data_negative_one, &hi, 0xfffe);
390 1.1 jakllsch hid_set_data(test_data_maximum, &hi, 0xffff);
391 1.1 jakllsch ATF_REQUIRE(hid_locate(hrd, 0xff000013U, hid_input, &hi,
392 1.1 jakllsch NO_REPORT_ID) > 0);
393 1.1 jakllsch hid_set_data(test_data_minimum, &hi, 0);
394 1.1 jakllsch hid_set_data(test_data_positive_one, &hi, 1);
395 1.1 jakllsch hid_set_data(test_data_negative_one, &hi, 0xfffffffe);
396 1.1 jakllsch hid_set_data(test_data_maximum, &hi, 0xffffffff);
397 1.1 jakllsch ATF_CHECK(memcmp(test_data_minimum,
398 1.1 jakllsch unsigned_range_test_minimum_report,
399 1.1 jakllsch sizeof test_data_minimum) == 0);
400 1.1 jakllsch ATF_CHECK(memcmp(test_data_negative_one,
401 1.1 jakllsch unsigned_range_test_negative_one_report,
402 1.1 jakllsch sizeof test_data_negative_one) == 0);
403 1.1 jakllsch ATF_CHECK(memcmp(test_data_positive_one,
404 1.1 jakllsch unsigned_range_test_positive_one_report,
405 1.1 jakllsch sizeof test_data_positive_one) == 0);
406 1.1 jakllsch ATF_CHECK(memcmp(test_data_maximum,
407 1.1 jakllsch unsigned_range_test_maximum_report,
408 1.1 jakllsch sizeof test_data_maximum) == 0);
409 1.1 jakllsch
410 1.1 jakllsch hid_dispose_report_desc(hrd);
411 1.1 jakllsch hrd = NULL;
412 1.1 jakllsch }
413 1.1 jakllsch
414 1.1 jakllsch ATF_TP_ADD_TCS(tp)
415 1.1 jakllsch {
416 1.1 jakllsch
417 1.1 jakllsch ATF_TP_ADD_TC(tp, check_hid_logical_range);
418 1.1 jakllsch ATF_TP_ADD_TC(tp, check_hid_physical_range);
419 1.1 jakllsch ATF_TP_ADD_TC(tp, check_hid_usage);
420 1.1 jakllsch ATF_TP_ADD_TC(tp, check_hid_get_data);
421 1.1 jakllsch ATF_TP_ADD_TC(tp, check_hid_set_data);
422 1.1 jakllsch
423 1.1 jakllsch return atf_no_error();
424 1.1 jakllsch }
425