Module Name:    src
Committed By:   jakllsch
Date:           Fri Jan  8 17:34:57 UTC 2016

Modified Files:
        src/tests/dev/usb: t_hid.c

Log Message:
fix test program for hid item checks


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/tests/dev/usb/t_hid.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/dev/usb/t_hid.c
diff -u src/tests/dev/usb/t_hid.c:1.3 src/tests/dev/usb/t_hid.c:1.4
--- src/tests/dev/usb/t_hid.c:1.3	Thu Jan  7 16:10:49 2016
+++ src/tests/dev/usb/t_hid.c	Fri Jan  8 17:34:57 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_hid.c,v 1.3 2016/01/07 16:10:49 jakllsch Exp $	*/
+/*	$NetBSD: t_hid.c,v 1.4 2016/01/08 17:34:57 jakllsch Exp $	*/
 
 /*
  * Copyright (c) 2016 Jonathan A. Kollasch
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: t_hid.c,v 1.3 2016/01/07 16:10:49 jakllsch Exp $");
+__RCSID("$NetBSD: t_hid.c,v 1.4 2016/01/08 17:34:57 jakllsch Exp $");
 
 #include <machine/types.h>
 #include <stdlib.h>
@@ -42,6 +42,8 @@ __RCSID("$NetBSD: t_hid.c,v 1.3 2016/01/
 #define hid_get_data rumpns_hid_get_data
 #define hid_get_udata rumpns_hid_get_udata
 #define uhidevdebug rumpns_uhidevdebug
+#include <usb.h>
+#include <usbhid.h>
 #include <hid.h>
 
 #include "../../lib/libusbhid/hid_test_data.c"
@@ -74,6 +76,29 @@ ATF_TC_HEAD(khid, tc)
         atf_tc_set_md_var(tc, "descr", "check kernel hid.c");
 }
 
+static int
+locate_item(const void *desc, int size, u_int32_t u, u_int8_t id,
+    enum hid_kind k, struct hid_item *hip, u_int32_t *flags)
+{
+	struct hid_data *d;
+	struct hid_item h;
+
+	h.report_ID = 0;
+	for (d = hid_start_parse(desc, size, k); hid_get_item(d, &h); ) {
+		if (h.kind == k && !(h.flags & HIO_CONST) &&
+		    (/*XXX*/uint32_t)h.usage == u && h.report_ID == id) {
+			if (hip != NULL)
+				*hip = h;
+			if (flags != NULL)
+				*flags = h.flags;
+			hid_end_parse(d);
+			return (1);
+		}
+	}
+	hid_end_parse(d);
+	return (0);
+}
+
 ATF_TC_BODY(khid, tc)
 {
 	int ret;
@@ -82,11 +107,9 @@ ATF_TC_BODY(khid, tc)
 
 	uhidevdebug = 0;
 
-	atf_tc_expect_fail("logical/physical range appears broken");
-
-	ret = hid_locate(range_test_report_descriptor,
+	ret = locate_item(range_test_report_descriptor,
 	    sizeof(range_test_report_descriptor), 0xff000003, 0, hid_input,
-	    &hi.loc, &flags);
+	    &hi, &flags);
 	ATF_REQUIRE(ret > 0);
 	MYu_ATF_CHECK_EQ(hi.loc.size, 32);
 	MYu_ATF_CHECK_EQ(hi.loc.count, 1);
@@ -105,9 +128,9 @@ ATF_TC_BODY(khid, tc)
 	MYld_ATF_CHECK_EQ(hid_get_data(range_test_maximum_report,
 	    &hi.loc), 2147483647);
 
-	ret = hid_locate(range_test_report_descriptor,
+	ret = locate_item(range_test_report_descriptor,
 	    sizeof(range_test_report_descriptor), 0xff000002, 0, hid_input,
-	    &hi.loc, &flags);
+	    &hi, &flags);
 	ATF_REQUIRE(ret > 0);
 	MYu_ATF_CHECK_EQ(hi.loc.size, 16);
 	MYu_ATF_CHECK_EQ(hi.loc.count, 1);
@@ -126,9 +149,9 @@ ATF_TC_BODY(khid, tc)
 	MYld_ATF_CHECK_EQ(hid_get_data(range_test_maximum_report,
 	    &hi.loc), 32767);
 
-	ret = hid_locate(range_test_report_descriptor,
+	ret = locate_item(range_test_report_descriptor,
 	    sizeof(range_test_report_descriptor), 0xff000001, 0, hid_input,
-	    &hi.loc, &flags);
+	    &hi, &flags);
 	ATF_REQUIRE(ret > 0);
 	MYu_ATF_CHECK_EQ(hi.loc.size, 8);
 	MYu_ATF_CHECK_EQ(hi.loc.count, 1);
@@ -148,9 +171,9 @@ ATF_TC_BODY(khid, tc)
 	    &hi.loc), 127);
 
 
-	ret = hid_locate(unsigned_range_test_report_descriptor,
+	ret = locate_item(unsigned_range_test_report_descriptor,
 	    sizeof(unsigned_range_test_report_descriptor), 0xff000013, 0,
-	    hid_input, &hi.loc, &flags);
+	    hid_input, &hi, &flags);
 	ATF_REQUIRE(ret > 0);
 	MYu_ATF_CHECK_EQ(hi.loc.size, 32);
 	MYu_ATF_CHECK_EQ(hi.loc.count, 1);
@@ -165,9 +188,9 @@ ATF_TC_BODY(khid, tc)
 	MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_maximum_report,
 	    &hi.loc), 0xffffffff);
 
-	ret = hid_locate(unsigned_range_test_report_descriptor,
+	ret = locate_item(unsigned_range_test_report_descriptor,
 	    sizeof(unsigned_range_test_report_descriptor), 0xff000012, 0,
-	    hid_input, &hi.loc, &flags);
+	    hid_input, &hi, &flags);
 	ATF_REQUIRE(ret > 0);
 	MYu_ATF_CHECK_EQ(hi.loc.size, 16);
 	MYu_ATF_CHECK_EQ(hi.loc.count, 1);
@@ -182,9 +205,9 @@ ATF_TC_BODY(khid, tc)
 	MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_maximum_report,
 	    &hi.loc), 0xffff);
 
-	ret = hid_locate(unsigned_range_test_report_descriptor,
+	ret = locate_item(unsigned_range_test_report_descriptor,
 	    sizeof(unsigned_range_test_report_descriptor), 0xff000011, 0,
-	    hid_input, &hi.loc, &flags);
+	    hid_input, &hi, &flags);
 	ATF_REQUIRE(ret > 0);
 	MYu_ATF_CHECK_EQ(hi.loc.size, 8);
 	MYu_ATF_CHECK_EQ(hi.loc.count, 1);

Reply via email to