From ec657d1e8d303151c3b2e093549072fa96420ee7 Mon Sep 17 00:00:00 2001 From: mbanth Date: Wed, 25 Aug 2021 18:13:12 +0100 Subject: [PATCH 1/4] Zero the MSB if given an item of length 1 --- lib_xua/src/hid/hid_report_descriptor.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib_xua/src/hid/hid_report_descriptor.c b/lib_xua/src/hid/hid_report_descriptor.c index a9cb3bab..1b899aaf 100644 --- a/lib_xua/src/hid/hid_report_descriptor.c +++ b/lib_xua/src/hid/hid_report_descriptor.c @@ -241,6 +241,10 @@ unsigned hidSetReportItem( item.data[ dataIdx ] = data[ dataIdx ]; } + for( unsigned dataIdx = bSize; dataIdx < HID_REPORT_ITEM_MAX_SIZE; ++dataIdx ) { + item.data[ dataIdx ] = 0; + } + *hidConfigurableItems[ itemIdx ] = item; retVal = HID_STATUS_GOOD; } else { From 911a82cd839893440177ef53d0ade5e86dff07f9 Mon Sep 17 00:00:00 2001 From: mbanth Date: Wed, 25 Aug 2021 18:16:54 +0100 Subject: [PATCH 2/4] Add test for the case of a modified item that of length 1 that overwrites data of length 2 --- tests/xua_unit_tests/src/test_hid.c | 51 +++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/tests/xua_unit_tests/src/test_hid.c b/tests/xua_unit_tests/src/test_hid.c index 079ca654..e5ddcba4 100644 --- a/tests/xua_unit_tests/src/test_hid.c +++ b/tests/xua_unit_tests/src/test_hid.c @@ -14,6 +14,7 @@ #define CONSUMER_CONTROL_PAGE ( 0x0C ) #define LOUDNESS_CONTROL ( 0xE7 ) +#define AL_CONTROL_PANEL ( 0x019F ) static unsigned construct_usage_header( unsigned size ) { @@ -411,7 +412,7 @@ void test_initial_modification_with_subsequent_preparation( void ) TEST_ASSERT_NOT_NULL( reportDescPtr ); } -void test_initial_modification_with_subsequent_verification( void ) +void test_initial_modification_with_subsequent_verification_1( void ) { const unsigned bit = MIN_VALID_BIT; const unsigned byte = MIN_VALID_BYTE; @@ -432,7 +433,53 @@ void test_initial_modification_with_subsequent_verification( void ) TEST_ASSERT_EQUAL_UINT( get_page, set_page ); TEST_ASSERT_EQUAL_UINT( get_header, set_header ); TEST_ASSERT_EQUAL_UINT( get_data[ 0 ], set_data[ 0 ]); - TEST_ASSERT_EQUAL_UINT( get_data[ 1 ], set_data[ 1 ]); + TEST_ASSERT_EQUAL_UINT( get_data[ 1 ], 0 ); // Should be MSB of data from hidUsageByte0Bit0 in hid_report_descriptor.h +} + +void test_initial_modification_with_subsequent_verification_2( void ) +{ + const unsigned bit = MIN_VALID_BIT; + const unsigned byte = MIN_VALID_BYTE; + + { + unsigned char get_data[ HID_REPORT_ITEM_MAX_SIZE ] = { 0xFF, 0xFF }; + unsigned char get_header = 0xFF; + unsigned char get_page = 0xFF; + + const unsigned char set_data[ 2 ] = {( AL_CONTROL_PANEL & 0x00FF ), (( AL_CONTROL_PANEL & 0xFF00 ) >> 8 )}; + const unsigned char set_header = construct_usage_header( sizeof set_data / sizeof( unsigned char )); + const unsigned char set_page = CONSUMER_CONTROL_PAGE; + + unsigned setRetVal = hidSetReportItem( byte, bit, set_page, set_header, set_data ); + TEST_ASSERT_EQUAL_UINT( HID_STATUS_GOOD, setRetVal ); + + unsigned getRetVal = hidGetReportItem( byte, bit, &get_page, &get_header, get_data ); + TEST_ASSERT_EQUAL_UINT( HID_STATUS_GOOD, getRetVal ); + TEST_ASSERT_EQUAL_UINT( get_page, set_page ); + TEST_ASSERT_EQUAL_UINT( get_header, set_header ); + TEST_ASSERT_EQUAL_UINT( get_data[ 0 ], set_data[ 0 ]); + TEST_ASSERT_EQUAL_UINT( get_data[ 1 ], set_data[ 1 ]); + } + + { + unsigned char get_data[ HID_REPORT_ITEM_MAX_SIZE ] = { 0xFF, 0xFF }; + unsigned char get_header = 0xFF; + unsigned char get_page = 0xFF; + + const unsigned char set_data[ 1 ] = { LOUDNESS_CONTROL }; + const unsigned char set_header = construct_usage_header( sizeof set_data / sizeof( unsigned char )); + const unsigned char set_page = CONSUMER_CONTROL_PAGE; + + unsigned setRetVal = hidSetReportItem( byte, bit, set_page, set_header, set_data ); + TEST_ASSERT_EQUAL_UINT( HID_STATUS_GOOD, setRetVal ); + + unsigned getRetVal = hidGetReportItem( byte, bit, &get_page, &get_header, get_data ); + TEST_ASSERT_EQUAL_UINT( HID_STATUS_GOOD, getRetVal ); + TEST_ASSERT_EQUAL_UINT( get_page, set_page ); + TEST_ASSERT_EQUAL_UINT( get_header, set_header ); + TEST_ASSERT_EQUAL_UINT( get_data[ 0 ], set_data[ 0 ]); + TEST_ASSERT_EQUAL_UINT( get_data[ 1 ], 0 ); // The call to hidSetReportItem with size 1 in the header should return the MSB to zero + } } void test_modification_without_subsequent_preparation( void ) From 15f1d4de59450e73a8ac563e333fa8a6e85fca1d Mon Sep 17 00:00:00 2001 From: mbanth Date: Thu, 26 Aug 2021 16:13:23 +0100 Subject: [PATCH 3/4] Use correct order of expected vs actual results in test assertions --- tests/xua_unit_tests/src/test_hid.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/xua_unit_tests/src/test_hid.c b/tests/xua_unit_tests/src/test_hid.c index e5ddcba4..965c7f90 100644 --- a/tests/xua_unit_tests/src/test_hid.c +++ b/tests/xua_unit_tests/src/test_hid.c @@ -430,10 +430,10 @@ void test_initial_modification_with_subsequent_verification_1( void ) unsigned getRetVal = hidGetReportItem( byte, bit, &get_page, &get_header, get_data ); TEST_ASSERT_EQUAL_UINT( HID_STATUS_GOOD, getRetVal ); - TEST_ASSERT_EQUAL_UINT( get_page, set_page ); - TEST_ASSERT_EQUAL_UINT( get_header, set_header ); - TEST_ASSERT_EQUAL_UINT( get_data[ 0 ], set_data[ 0 ]); - TEST_ASSERT_EQUAL_UINT( get_data[ 1 ], 0 ); // Should be MSB of data from hidUsageByte0Bit0 in hid_report_descriptor.h + TEST_ASSERT_EQUAL_UINT( set_page, get_page ); + TEST_ASSERT_EQUAL_UINT( set_header, get_header ); + TEST_ASSERT_EQUAL_UINT( set_data[ 0 ], get_data[ 0 ]); + TEST_ASSERT_EQUAL_UINT( 0, get_data[ 1 ]); // Should be MSB of data from hidUsageByte0Bit0 in hid_report_descriptor.h } void test_initial_modification_with_subsequent_verification_2( void ) @@ -455,10 +455,10 @@ void test_initial_modification_with_subsequent_verification_2( void ) unsigned getRetVal = hidGetReportItem( byte, bit, &get_page, &get_header, get_data ); TEST_ASSERT_EQUAL_UINT( HID_STATUS_GOOD, getRetVal ); - TEST_ASSERT_EQUAL_UINT( get_page, set_page ); - TEST_ASSERT_EQUAL_UINT( get_header, set_header ); - TEST_ASSERT_EQUAL_UINT( get_data[ 0 ], set_data[ 0 ]); - TEST_ASSERT_EQUAL_UINT( get_data[ 1 ], set_data[ 1 ]); + TEST_ASSERT_EQUAL_UINT( set_page, get_page ); + TEST_ASSERT_EQUAL_UINT( set_header, get_header ); + TEST_ASSERT_EQUAL_UINT( set_data[ 0 ], get_data[ 0 ]); + TEST_ASSERT_EQUAL_UINT( set_data[ 1 ], get_data[ 1 ]); } { @@ -475,10 +475,10 @@ void test_initial_modification_with_subsequent_verification_2( void ) unsigned getRetVal = hidGetReportItem( byte, bit, &get_page, &get_header, get_data ); TEST_ASSERT_EQUAL_UINT( HID_STATUS_GOOD, getRetVal ); - TEST_ASSERT_EQUAL_UINT( get_page, set_page ); - TEST_ASSERT_EQUAL_UINT( get_header, set_header ); - TEST_ASSERT_EQUAL_UINT( get_data[ 0 ], set_data[ 0 ]); - TEST_ASSERT_EQUAL_UINT( get_data[ 1 ], 0 ); // The call to hidSetReportItem with size 1 in the header should return the MSB to zero + TEST_ASSERT_EQUAL_UINT( set_page, get_page ); + TEST_ASSERT_EQUAL_UINT( set_header, get_header ); + TEST_ASSERT_EQUAL_UINT( set_data[ 0 ], get_data[ 0 ]); + TEST_ASSERT_EQUAL_UINT( 0, get_data[ 1 ]); // The call to hidSetReportItem with size 1 in the header should return the MSB to zero } } From 1109e08dd8c6f2d5db651775dfbc43ca18c8557f Mon Sep 17 00:00:00 2001 From: mbanth Date: Thu, 26 Aug 2021 16:25:40 +0100 Subject: [PATCH 4/4] Increment version and add change log entry --- CHANGELOG.rst | 5 +++++ lib_xua/module_build_info | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 565a47f3..7de64616 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,11 @@ lib_xua Change Log ================== +2.1.1 +----- + + * CHANGED: Setting of HID report items + 2.1.0 ----- diff --git a/lib_xua/module_build_info b/lib_xua/module_build_info index ef825e95..39b0476e 100644 --- a/lib_xua/module_build_info +++ b/lib_xua/module_build_info @@ -1,4 +1,4 @@ -VERSION = 2.1.0 +VERSION = 2.1.1 DEPENDENT_MODULES = lib_logging(>=3.0.0) \ lib_xassert(>=4.0.0) \