Home | History | Annotate | Line # | Download | only in libusbhid
      1  1.12  jakllsch /*	$NetBSD: t_usbhid.c,v 1.12 2016/08/17 12:10:42 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.12  jakllsch __RCSID("$NetBSD: t_usbhid.c,v 1.12 2016/08/17 12:10:42 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.10  jakllsch ATF_TC(check_parse_just_pop);
     49   1.1  jakllsch 
     50   1.7  jakllsch #define MYd_ATF_CHECK_EQ(d, v) \
     51   1.7  jakllsch 	ATF_CHECK_EQ_MSG(d, v, "== %d", (d))
     52   1.7  jakllsch 
     53   1.7  jakllsch #define MYu_ATF_CHECK_EQ(d, v) \
     54   1.7  jakllsch 	ATF_CHECK_EQ_MSG(d, v, "== %u", (d))
     55   1.7  jakllsch 
     56   1.7  jakllsch #define MYx_ATF_CHECK_EQ(d, v) \
     57   1.7  jakllsch 	ATF_CHECK_EQ_MSG(d, v, "== 0x%x", (d))
     58   1.7  jakllsch 
     59   1.9  jakllsch #include "hid_test_data.c"
     60   1.1  jakllsch 
     61   1.1  jakllsch ATF_TC_HEAD(check_hid_usage, tc)
     62   1.1  jakllsch {
     63   1.1  jakllsch 
     64   1.1  jakllsch 	atf_tc_set_md_var(tc, "descr", "Test libusbhid usage.c");
     65   1.1  jakllsch }
     66   1.1  jakllsch 
     67   1.1  jakllsch ATF_TC_BODY(check_hid_usage, tc)
     68   1.1  jakllsch {
     69   1.1  jakllsch 	char usages_path[PATH_MAX];
     70   1.1  jakllsch 
     71   1.1  jakllsch 	(void)strlcpy(usages_path, atf_tc_get_config_var(tc, "srcdir"),
     72   1.1  jakllsch 	    sizeof(usages_path));
     73   1.1  jakllsch 	(void)strlcat(usages_path, "/test_usb_hid_usages",
     74   1.1  jakllsch 	    sizeof(usages_path));
     75   1.1  jakllsch 
     76   1.1  jakllsch 	hid_init(usages_path);
     77   1.1  jakllsch 
     78   1.1  jakllsch 	ATF_CHECK_STREQ("t_usbhid_page", hid_usage_page(0xff1b));
     79   1.1  jakllsch 	ATF_CHECK_EQ((uint32_t)hid_parse_usage_page("t_usbhid_page"), 0xff1b);
     80   1.1  jakllsch 
     81   1.1  jakllsch 	ATF_CHECK_STREQ("t_usbhid_usage", hid_usage_in_page(0xff1bff2a));
     82   1.1  jakllsch 	ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page(
     83   1.1  jakllsch 	    "t_usbhid_page:t_usbhid_usage"), 0xff1bff2a);
     84   1.1  jakllsch 
     85   1.1  jakllsch 	ATF_CHECK_STREQ("Quick_zephyrs_blow_vexing_daft_Jim_",
     86   1.1  jakllsch 	    hid_usage_page(0xff2a));
     87   1.1  jakllsch 	ATF_CHECK_EQ((uint32_t)hid_parse_usage_page(
     88   1.1  jakllsch 	    "Quick_zephyrs_blow_vexing_daft_Jim_"), 0xff2a);
     89   1.1  jakllsch 
     90   1.1  jakllsch 	ATF_CHECK_STREQ("Usage_ID_Zero_%", hid_usage_in_page(0xff2a0000));
     91   1.1  jakllsch 	ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page(
     92   1.1  jakllsch 	    "Quick_zephyrs_blow_vexing_daft_Jim_:Usage_ID_Zero_%"),
     93   1.1  jakllsch 	    0xff2a0000);
     94   1.1  jakllsch 
     95   1.1  jakllsch 	//ATF_CHECK_STREQ("Usage_ID_0_%", hid_usage_in_page(0xff2a0000));
     96   1.1  jakllsch 	ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page(
     97   1.1  jakllsch 	    "Quick_zephyrs_blow_vexing_daft_Jim_:Usage_ID_0_%"), 0xff2a0000);
     98   1.1  jakllsch 
     99   1.1  jakllsch 	ATF_CHECK_STREQ("Usage_ID_65535_%", hid_usage_in_page(0xff2affff));
    100   1.1  jakllsch 	ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page(
    101   1.1  jakllsch 	    "Quick_zephyrs_blow_vexing_daft_Jim_:Usage_ID_65535_%"),
    102   1.1  jakllsch 	    0xff2affff);
    103   1.6  jakllsch 
    104   1.6  jakllsch 	MYx_ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page("0xff2a:0xff1b"),
    105   1.6  jakllsch 	    0xff2aff1b);
    106   1.1  jakllsch }
    107   1.1  jakllsch 
    108   1.1  jakllsch ATF_TC_HEAD(check_hid_logical_range, tc)
    109   1.1  jakllsch {
    110   1.1  jakllsch 
    111   1.1  jakllsch 	atf_tc_set_md_var(tc, "descr", "Test hid_get_item "
    112   1.1  jakllsch 	    "Logical Minimum/Maximum results");
    113   1.1  jakllsch }
    114   1.1  jakllsch 
    115   1.1  jakllsch ATF_TC_BODY(check_hid_logical_range, tc)
    116   1.1  jakllsch {
    117   1.1  jakllsch 	report_desc_t hrd;
    118   1.1  jakllsch 	hid_item_t hi;
    119   1.4  jakllsch 	uint32_t minimum, maximum;
    120   1.1  jakllsch 
    121   1.1  jakllsch 	atf_tc_expect_fail("only the 32-bit opcode works, "
    122   1.1  jakllsch 	    "8 and 16-bit is broken");
    123   1.1  jakllsch 
    124   1.1  jakllsch 	ATF_REQUIRE((hrd = hid_use_report_desc(range_test_report_descriptor,
    125   1.1  jakllsch 	    __arraycount(range_test_report_descriptor))) != NULL);
    126   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000001U, hid_input, &hi,
    127   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    128   1.2  jakllsch 	MYd_ATF_CHECK_EQ(hi.logical_minimum, -128);
    129   1.2  jakllsch 	MYd_ATF_CHECK_EQ(hi.logical_maximum, 127);
    130   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000002U, hid_input, &hi,
    131   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    132   1.2  jakllsch 	MYd_ATF_CHECK_EQ(hi.logical_minimum, -32768);
    133   1.2  jakllsch 	MYd_ATF_CHECK_EQ(hi.logical_maximum, 32767);
    134   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000003U, hid_input, &hi,
    135   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    136   1.2  jakllsch 	MYd_ATF_CHECK_EQ(hi.logical_minimum, -2147483648);
    137   1.2  jakllsch 	MYd_ATF_CHECK_EQ(hi.logical_maximum, 2147483647);
    138   1.1  jakllsch 
    139   1.1  jakllsch 	hid_dispose_report_desc(hrd);
    140   1.1  jakllsch 	hrd = NULL;
    141   1.1  jakllsch 
    142   1.1  jakllsch 	ATF_REQUIRE((hrd = hid_use_report_desc(
    143   1.1  jakllsch 	    unsigned_range_test_report_descriptor,
    144   1.1  jakllsch 	    __arraycount(unsigned_range_test_report_descriptor))) != NULL);
    145   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000011U, hid_input, &hi,
    146   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    147   1.4  jakllsch 	ATF_CHECK(hi.logical_minimum > hi.logical_maximum);
    148   1.4  jakllsch 	minimum = (uint32_t)hi.logical_minimum & ((1ULL<<hi.report_size)-1);
    149   1.4  jakllsch 	MYu_ATF_CHECK_EQ(minimum, 0);
    150   1.4  jakllsch 	maximum = (uint32_t)hi.logical_maximum & ((1ULL<<hi.report_size)-1);
    151   1.4  jakllsch 	MYu_ATF_CHECK_EQ(maximum, 255);
    152   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000012U, hid_input, &hi,
    153   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    154   1.4  jakllsch 	ATF_CHECK(hi.logical_minimum > hi.logical_maximum);
    155   1.4  jakllsch 	minimum = hi.logical_minimum & ((1ULL<<hi.report_size)-1);
    156   1.4  jakllsch 	MYu_ATF_CHECK_EQ(minimum, 0);
    157   1.4  jakllsch 	maximum = hi.logical_maximum & ((1ULL<<hi.report_size)-1);
    158   1.4  jakllsch 	MYu_ATF_CHECK_EQ(maximum, 65535);
    159   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000013U, hid_input, &hi,
    160   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    161   1.4  jakllsch 	ATF_CHECK(hi.logical_minimum > hi.logical_maximum);
    162   1.4  jakllsch 	minimum = hi.logical_minimum & ((1ULL<<hi.report_size)-1);
    163   1.4  jakllsch 	MYu_ATF_CHECK_EQ(minimum, 0);
    164   1.4  jakllsch 	maximum = hi.logical_maximum & ((1ULL<<hi.report_size)-1);
    165   1.4  jakllsch 	MYu_ATF_CHECK_EQ(maximum, 4294967295);
    166   1.1  jakllsch 
    167   1.1  jakllsch 	hid_dispose_report_desc(hrd);
    168   1.1  jakllsch 	hrd = NULL;
    169   1.1  jakllsch }
    170   1.1  jakllsch 
    171   1.1  jakllsch ATF_TC_HEAD(check_hid_physical_range, tc)
    172   1.1  jakllsch {
    173   1.1  jakllsch 
    174   1.1  jakllsch 	atf_tc_set_md_var(tc, "descr", "Test hid_get_item "
    175   1.1  jakllsch 	    "Physical Minimum/Maximum results");
    176   1.1  jakllsch }
    177   1.1  jakllsch 
    178   1.1  jakllsch ATF_TC_BODY(check_hid_physical_range, tc)
    179   1.1  jakllsch {
    180   1.1  jakllsch 	report_desc_t hrd;
    181   1.1  jakllsch 	hid_item_t hi;
    182   1.4  jakllsch 	uint32_t minimum, maximum;
    183   1.1  jakllsch 
    184   1.1  jakllsch 	atf_tc_expect_fail("only the 32-bit opcode works, "
    185   1.1  jakllsch 	    "8 and 16-bit is broken");
    186   1.1  jakllsch 
    187   1.1  jakllsch 	ATF_REQUIRE((hrd = hid_use_report_desc(range_test_report_descriptor,
    188   1.1  jakllsch 	    __arraycount(range_test_report_descriptor))) != NULL);
    189   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000001U, hid_input, &hi,
    190   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    191   1.2  jakllsch 	MYd_ATF_CHECK_EQ(hi.physical_minimum, -128);
    192   1.2  jakllsch 	MYd_ATF_CHECK_EQ(hi.physical_maximum, 127);
    193   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000002U, hid_input, &hi,
    194   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    195   1.2  jakllsch 	MYd_ATF_CHECK_EQ(hi.physical_minimum, -32768);
    196   1.2  jakllsch 	MYd_ATF_CHECK_EQ(hi.physical_maximum, 32767);
    197   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000003U, hid_input, &hi,
    198   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    199   1.2  jakllsch 	MYd_ATF_CHECK_EQ(hi.physical_minimum, -2147483648);
    200   1.2  jakllsch 	MYd_ATF_CHECK_EQ(hi.physical_maximum, 2147483647);
    201   1.1  jakllsch 
    202   1.1  jakllsch 	hid_dispose_report_desc(hrd);
    203   1.1  jakllsch 	hrd = NULL;
    204   1.1  jakllsch 
    205   1.1  jakllsch 	ATF_REQUIRE((hrd = hid_use_report_desc(
    206   1.1  jakllsch 	    unsigned_range_test_report_descriptor,
    207   1.1  jakllsch 	    __arraycount(unsigned_range_test_report_descriptor))) != NULL);
    208   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000011U, hid_input, &hi,
    209   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    210   1.4  jakllsch 	ATF_CHECK(hi.physical_minimum > hi.physical_maximum);
    211   1.4  jakllsch 	minimum = (uint32_t)hi.physical_minimum & ((1ULL<<hi.report_size)-1);
    212   1.4  jakllsch 	MYu_ATF_CHECK_EQ(minimum, 0);
    213   1.4  jakllsch 	maximum = (uint32_t)hi.physical_maximum & ((1ULL<<hi.report_size)-1);
    214   1.4  jakllsch 	MYu_ATF_CHECK_EQ(maximum, 255);
    215   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000012U, hid_input, &hi,
    216   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    217   1.4  jakllsch 	ATF_CHECK(hi.physical_minimum > hi.physical_maximum);
    218   1.4  jakllsch 	minimum = hi.physical_minimum & ((1ULL<<hi.report_size)-1);
    219   1.4  jakllsch 	MYu_ATF_CHECK_EQ(minimum, 0);
    220   1.4  jakllsch 	maximum = hi.physical_maximum & ((1ULL<<hi.report_size)-1);
    221   1.4  jakllsch 	MYu_ATF_CHECK_EQ(maximum, 65535);
    222   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000013U, hid_input, &hi,
    223   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    224   1.4  jakllsch 	ATF_CHECK(hi.physical_minimum > hi.physical_maximum);
    225   1.4  jakllsch 	minimum = hi.physical_minimum & ((1ULL<<hi.report_size)-1);
    226   1.4  jakllsch 	MYu_ATF_CHECK_EQ(minimum, 0);
    227   1.4  jakllsch 	maximum = hi.physical_maximum & ((1ULL<<hi.report_size)-1);
    228   1.4  jakllsch 	MYu_ATF_CHECK_EQ(maximum, 4294967295);
    229   1.1  jakllsch 
    230   1.1  jakllsch 	hid_dispose_report_desc(hrd);
    231   1.1  jakllsch 	hrd = NULL;
    232   1.1  jakllsch }
    233   1.1  jakllsch 
    234   1.1  jakllsch ATF_TC_HEAD(check_hid_get_data, tc)
    235   1.1  jakllsch {
    236   1.1  jakllsch 
    237   1.1  jakllsch 	atf_tc_set_md_var(tc, "descr", "Test hid_get_data results");
    238   1.1  jakllsch }
    239   1.1  jakllsch 
    240   1.1  jakllsch ATF_TC_BODY(check_hid_get_data, tc)
    241   1.1  jakllsch {
    242   1.1  jakllsch 	report_desc_t hrd;
    243   1.1  jakllsch 	hid_item_t hi;
    244   1.1  jakllsch 	int32_t data;
    245   1.1  jakllsch 	uint32_t udat;
    246   1.1  jakllsch 
    247  1.12  jakllsch 	atf_tc_expect_fail("only the 32-bit opcode works, "
    248  1.12  jakllsch 	    "8 and 16-bit is broken");
    249  1.12  jakllsch 
    250   1.1  jakllsch 	ATF_REQUIRE((hrd = hid_use_report_desc(
    251   1.1  jakllsch 	    range_test_report_descriptor,
    252   1.1  jakllsch 	    __arraycount(range_test_report_descriptor))) != NULL);
    253   1.1  jakllsch 
    254   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000001U, hid_input, &hi,
    255   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    256   1.1  jakllsch 	data = hid_get_data(range_test_minimum_report, &hi);
    257   1.1  jakllsch 	MYd_ATF_CHECK_EQ(data, -128);
    258   1.1  jakllsch 	data = hid_get_data(range_test_negative_one_report, &hi);
    259   1.1  jakllsch 	MYd_ATF_CHECK_EQ(data, -1);
    260   1.1  jakllsch 	data = hid_get_data(range_test_positive_one_report, &hi);
    261   1.1  jakllsch 	MYd_ATF_CHECK_EQ(data, 1);
    262   1.1  jakllsch 	data = hid_get_data(range_test_maximum_report, &hi);
    263   1.1  jakllsch 	MYd_ATF_CHECK_EQ(data, 127);
    264   1.1  jakllsch 
    265   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000002U, hid_input, &hi,
    266   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    267   1.1  jakllsch 	data = hid_get_data(range_test_minimum_report, &hi);
    268   1.1  jakllsch 	MYd_ATF_CHECK_EQ(data, -32768);
    269   1.1  jakllsch 	data = hid_get_data(range_test_negative_one_report, &hi);
    270   1.1  jakllsch 	MYd_ATF_CHECK_EQ(data, -1);
    271   1.1  jakllsch 	data = hid_get_data(range_test_positive_one_report, &hi);
    272   1.1  jakllsch 	MYd_ATF_CHECK_EQ(data, 1);
    273   1.1  jakllsch 	data = hid_get_data(range_test_maximum_report, &hi);
    274   1.1  jakllsch 	MYd_ATF_CHECK_EQ(data, 32767);
    275   1.1  jakllsch 
    276   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000003U, hid_input, &hi,
    277   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    278   1.1  jakllsch 	data = hid_get_data(range_test_minimum_report, &hi);
    279   1.1  jakllsch 	MYd_ATF_CHECK_EQ(data, -2147483648);
    280   1.1  jakllsch 	data = hid_get_data(range_test_negative_one_report, &hi);
    281   1.1  jakllsch 	MYd_ATF_CHECK_EQ(data, -1);
    282   1.1  jakllsch 	data = hid_get_data(range_test_positive_one_report, &hi);
    283   1.1  jakllsch 	MYd_ATF_CHECK_EQ(data, 1);
    284   1.1  jakllsch 	data = hid_get_data(range_test_maximum_report, &hi);
    285   1.1  jakllsch 	MYd_ATF_CHECK_EQ(data, 2147483647);
    286   1.1  jakllsch 
    287   1.1  jakllsch 	hid_dispose_report_desc(hrd);
    288   1.1  jakllsch 	hrd = NULL;
    289   1.1  jakllsch 
    290   1.1  jakllsch 	ATF_REQUIRE((hrd = hid_use_report_desc(
    291   1.1  jakllsch 	    unsigned_range_test_report_descriptor,
    292   1.1  jakllsch 	    __arraycount(unsigned_range_test_report_descriptor))) != NULL);
    293   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000011U, hid_input, &hi,
    294   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    295   1.1  jakllsch 	udat = hid_get_data(unsigned_range_test_minimum_report, &hi);
    296   1.1  jakllsch 	MYu_ATF_CHECK_EQ(udat, 0);
    297   1.1  jakllsch 	udat = hid_get_data(unsigned_range_test_positive_one_report, &hi);
    298   1.1  jakllsch 	MYu_ATF_CHECK_EQ(udat, 1);
    299   1.1  jakllsch 	udat = hid_get_data(unsigned_range_test_negative_one_report, &hi);
    300   1.1  jakllsch 	MYu_ATF_CHECK_EQ(udat, 254);
    301   1.1  jakllsch 	udat = hid_get_data(unsigned_range_test_maximum_report, &hi);
    302   1.1  jakllsch 	MYu_ATF_CHECK_EQ(udat, 255);
    303   1.1  jakllsch 
    304   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000012U, hid_input, &hi,
    305   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    306   1.1  jakllsch 	udat = hid_get_data(unsigned_range_test_minimum_report, &hi);
    307   1.1  jakllsch 	MYu_ATF_CHECK_EQ(udat, 0);
    308   1.1  jakllsch 	udat = hid_get_data(unsigned_range_test_positive_one_report, &hi);
    309   1.1  jakllsch 	MYu_ATF_CHECK_EQ(udat, 1);
    310   1.1  jakllsch 	udat = hid_get_data(unsigned_range_test_negative_one_report, &hi);
    311   1.1  jakllsch 	MYu_ATF_CHECK_EQ(udat, 65534);
    312   1.1  jakllsch 	udat = hid_get_data(unsigned_range_test_maximum_report, &hi);
    313   1.1  jakllsch 	MYu_ATF_CHECK_EQ(udat, 65535);
    314   1.1  jakllsch 
    315   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000013U, hid_input, &hi,
    316   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    317   1.1  jakllsch 	udat = hid_get_data(unsigned_range_test_minimum_report, &hi);
    318   1.1  jakllsch 	MYu_ATF_CHECK_EQ(udat, 0);
    319   1.1  jakllsch 	udat = hid_get_data(unsigned_range_test_positive_one_report, &hi);
    320   1.1  jakllsch 	MYu_ATF_CHECK_EQ(udat, 1);
    321   1.1  jakllsch 	udat = hid_get_data(unsigned_range_test_negative_one_report, &hi);
    322   1.1  jakllsch 	MYu_ATF_CHECK_EQ(udat, 4294967294);
    323   1.1  jakllsch 	udat = hid_get_data(unsigned_range_test_maximum_report, &hi);
    324   1.1  jakllsch 	MYu_ATF_CHECK_EQ(udat, 4294967295);
    325   1.1  jakllsch 
    326   1.1  jakllsch 	hid_dispose_report_desc(hrd);
    327   1.1  jakllsch 	hrd = NULL;
    328   1.1  jakllsch }
    329   1.1  jakllsch 
    330   1.1  jakllsch ATF_TC_HEAD(check_hid_set_data, tc)
    331   1.1  jakllsch {
    332   1.1  jakllsch 
    333   1.1  jakllsch 	atf_tc_set_md_var(tc, "descr", "Test hid_set_data results");
    334   1.1  jakllsch }
    335   1.1  jakllsch 
    336   1.1  jakllsch ATF_TC_BODY(check_hid_set_data, tc)
    337   1.1  jakllsch {
    338   1.1  jakllsch 	report_desc_t hrd;
    339   1.1  jakllsch 	hid_item_t hi;
    340   1.1  jakllsch 	uint8_t test_data_minimum[7];
    341   1.1  jakllsch 	uint8_t test_data_negative_one[7];
    342   1.1  jakllsch 	uint8_t test_data_positive_one[7];
    343   1.1  jakllsch 	uint8_t test_data_maximum[7];
    344   1.1  jakllsch 
    345   1.1  jakllsch 	ATF_REQUIRE((hrd = hid_use_report_desc(
    346   1.1  jakllsch 	    range_test_report_descriptor,
    347   1.1  jakllsch 	    __arraycount(range_test_report_descriptor))) != NULL);
    348   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000001U, hid_input, &hi,
    349   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    350   1.1  jakllsch 	hid_set_data(test_data_minimum, &hi, -128);
    351   1.1  jakllsch 	hid_set_data(test_data_negative_one, &hi, -1);
    352   1.1  jakllsch 	hid_set_data(test_data_positive_one, &hi, 1);
    353   1.1  jakllsch 	hid_set_data(test_data_maximum, &hi, 127);
    354   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000002U, hid_input, &hi,
    355   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    356   1.1  jakllsch 	hid_set_data(test_data_minimum, &hi, -32768);
    357   1.1  jakllsch 	hid_set_data(test_data_negative_one, &hi, -1);
    358   1.1  jakllsch 	hid_set_data(test_data_positive_one, &hi, 1);
    359   1.1  jakllsch 	hid_set_data(test_data_maximum, &hi, 32767);
    360   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000003U, hid_input, &hi,
    361   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    362   1.1  jakllsch 	hid_set_data(test_data_minimum, &hi, -2147483648);
    363   1.1  jakllsch 	hid_set_data(test_data_negative_one, &hi, -1);
    364   1.1  jakllsch 	hid_set_data(test_data_positive_one, &hi, 1);
    365   1.1  jakllsch 	hid_set_data(test_data_maximum, &hi, 2147483647);
    366   1.1  jakllsch 	ATF_CHECK(memcmp(test_data_minimum, range_test_minimum_report,
    367   1.1  jakllsch 	    sizeof test_data_minimum) == 0);
    368   1.1  jakllsch 	ATF_CHECK(memcmp(test_data_negative_one,
    369   1.1  jakllsch 	    range_test_negative_one_report,
    370   1.1  jakllsch 	    sizeof test_data_negative_one) == 0);
    371   1.1  jakllsch 	ATF_CHECK(memcmp(test_data_positive_one,
    372   1.1  jakllsch 	    range_test_positive_one_report,
    373   1.1  jakllsch 	    sizeof test_data_positive_one) == 0);
    374   1.1  jakllsch 	ATF_CHECK(memcmp(test_data_maximum, range_test_maximum_report,
    375   1.1  jakllsch 	    sizeof test_data_maximum) == 0);
    376   1.1  jakllsch 
    377   1.1  jakllsch 	hid_dispose_report_desc(hrd);
    378   1.1  jakllsch 	hrd = NULL;
    379   1.1  jakllsch 
    380   1.1  jakllsch 	ATF_REQUIRE((hrd = hid_use_report_desc(
    381   1.1  jakllsch 	    unsigned_range_test_report_descriptor,
    382   1.1  jakllsch 	    __arraycount(range_test_report_descriptor))) != NULL);
    383   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000011U, hid_input, &hi,
    384   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    385   1.1  jakllsch 	hid_set_data(test_data_minimum, &hi, 0);
    386   1.1  jakllsch 	hid_set_data(test_data_positive_one, &hi, 1);
    387   1.1  jakllsch 	hid_set_data(test_data_negative_one, &hi, 0xfffffffe);
    388   1.1  jakllsch 	hid_set_data(test_data_maximum, &hi, 0xffffffff);
    389   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000012U, hid_input, &hi,
    390   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    391   1.1  jakllsch 	hid_set_data(test_data_minimum, &hi, 0);
    392   1.1  jakllsch 	hid_set_data(test_data_positive_one, &hi, 1);
    393   1.1  jakllsch 	hid_set_data(test_data_negative_one, &hi, 0xfffe);
    394   1.1  jakllsch 	hid_set_data(test_data_maximum, &hi, 0xffff);
    395   1.1  jakllsch 	ATF_REQUIRE(hid_locate(hrd, 0xff000013U, hid_input, &hi,
    396   1.1  jakllsch 	    NO_REPORT_ID) > 0);
    397   1.1  jakllsch 	hid_set_data(test_data_minimum, &hi, 0);
    398   1.1  jakllsch 	hid_set_data(test_data_positive_one, &hi, 1);
    399   1.1  jakllsch 	hid_set_data(test_data_negative_one, &hi, 0xfffffffe);
    400   1.1  jakllsch 	hid_set_data(test_data_maximum, &hi, 0xffffffff);
    401   1.1  jakllsch 	ATF_CHECK(memcmp(test_data_minimum,
    402   1.1  jakllsch 	    unsigned_range_test_minimum_report,
    403   1.1  jakllsch 	    sizeof test_data_minimum) == 0);
    404   1.1  jakllsch 	ATF_CHECK(memcmp(test_data_negative_one,
    405   1.1  jakllsch 	    unsigned_range_test_negative_one_report,
    406   1.1  jakllsch 	    sizeof test_data_negative_one) == 0);
    407   1.1  jakllsch 	ATF_CHECK(memcmp(test_data_positive_one,
    408   1.1  jakllsch 	    unsigned_range_test_positive_one_report,
    409   1.1  jakllsch 	    sizeof test_data_positive_one) == 0);
    410   1.1  jakllsch 	ATF_CHECK(memcmp(test_data_maximum,
    411   1.1  jakllsch 	    unsigned_range_test_maximum_report,
    412   1.1  jakllsch 	    sizeof test_data_maximum) == 0);
    413   1.1  jakllsch 
    414   1.1  jakllsch 	hid_dispose_report_desc(hrd);
    415   1.1  jakllsch 	hrd = NULL;
    416   1.1  jakllsch }
    417   1.1  jakllsch 
    418  1.10  jakllsch ATF_TC_HEAD(check_parse_just_pop, tc)
    419  1.10  jakllsch {
    420  1.10  jakllsch 
    421  1.10  jakllsch 	atf_tc_set_md_var(tc, "descr", "check Pop on empty stack bug");
    422  1.10  jakllsch }
    423  1.10  jakllsch 
    424  1.10  jakllsch ATF_TC_BODY(check_parse_just_pop, tc)
    425  1.10  jakllsch {
    426  1.10  jakllsch 	report_desc_t hrd;
    427  1.10  jakllsch 	hid_data_t hd;
    428  1.10  jakllsch 	hid_item_t hi;
    429  1.10  jakllsch 
    430  1.10  jakllsch 	ATF_REQUIRE((hrd = hid_use_report_desc(
    431  1.10  jakllsch 	    just_pop_report_descriptor,
    432  1.10  jakllsch 	    sizeof just_pop_report_descriptor)) != NULL);
    433  1.10  jakllsch 	hd = hid_start_parse(hrd, 0, NO_REPORT_ID);
    434  1.10  jakllsch 	while (hid_get_item(hd, &hi) > 0) {
    435  1.10  jakllsch 	}
    436  1.10  jakllsch 	hid_end_parse(hd);
    437  1.10  jakllsch 	hid_dispose_report_desc(hrd);
    438  1.10  jakllsch 	hrd = NULL;
    439  1.10  jakllsch }
    440  1.10  jakllsch 
    441   1.1  jakllsch ATF_TP_ADD_TCS(tp)
    442   1.1  jakllsch {
    443   1.1  jakllsch 
    444   1.1  jakllsch 	ATF_TP_ADD_TC(tp, check_hid_logical_range);
    445   1.1  jakllsch 	ATF_TP_ADD_TC(tp, check_hid_physical_range);
    446   1.1  jakllsch 	ATF_TP_ADD_TC(tp, check_hid_usage);
    447   1.1  jakllsch 	ATF_TP_ADD_TC(tp, check_hid_get_data);
    448   1.1  jakllsch 	ATF_TP_ADD_TC(tp, check_hid_set_data);
    449  1.10  jakllsch 	ATF_TP_ADD_TC(tp, check_parse_just_pop);
    450   1.1  jakllsch 
    451   1.1  jakllsch 	return atf_no_error();
    452   1.1  jakllsch }
    453