diff --git a/README.md b/README.md index 00b0592..3dfd55d 100644 --- a/README.md +++ b/README.md @@ -142,9 +142,9 @@ Type `can_test --help` to display all program options. #### Debian "bookworm" (12.5) -- Debian 6.1.90-1 (2024-05-03) x86_64 GNU/Linux +- Debian 6.1.99-1 (2024-07-15) x86_64 GNU/Linux - gcc (Debian 12.2.0-14) 12.2.0 -- PCAN Driver and Library for Linux v8.17 +- PCAN Driver and Library for Linux v8.18 ### Required PCBUSB Library diff --git a/Sources/Wrapper/can_api.c b/Sources/Wrapper/can_api.c index 7827526..14aff35 100755 --- a/Sources/Wrapper/can_api.c +++ b/Sources/Wrapper/can_api.c @@ -1390,9 +1390,26 @@ static TPCANStatus pcan_reset_filter(int handle) assert(IS_HANDLE_VALID(handle)); // just to make sure +#if defined(__linux__) + UINT64 value = 0x0ull; // PCAN filter value + + // note: it seems that the hardware filter is not resetted by 'PCAN_MESSAGE_FILTER' := 'PCAN_FILTER_OPEN' + switch (can[handle].filter.mode) { + case FILTER_STD: // 11-bit identifier + value = (FILTER_RESET_VALUE ^ FILTER_STD_XOR_MASK); // SJA100 has inverted masks bits! + (void)CAN_SetValue(can[handle].board, PCAN_ACCEPTANCE_FILTER_11BIT, (void*)&value, sizeof(value)); + break; + case FILTER_XTD: // 29-bit identifier + value = (FILTER_RESET_VALUE ^ FILTER_XTD_XOR_MASK); // SJA100 has inverted masks bits! + (void)CAN_SetValue(can[handle].board, PCAN_ACCEPTANCE_FILTER_29BIT, (void*)&value, sizeof(value)); + break; + default: // no filtering + break; + } +#endif // reset the filter value to device if ((sts = CAN_SetValue(can[handle].board, (BYTE)PCAN_MESSAGE_FILTER, - (void*)&filter, (DWORD)sizeof(uint8_t))) == PCAN_ERROR_OK) { + (void*)&filter, (DWORD)sizeof(uint8_t))) == PCAN_ERROR_OK) { can[handle].filter.mode = FILTER_OFF; } return sts; diff --git a/Tests/CANAPI/Driver.h b/Tests/CANAPI/Driver.h index eae33ea..02ba3be 100644 --- a/Tests/CANAPI/Driver.h +++ b/Tests/CANAPI/Driver.h @@ -104,6 +104,9 @@ typedef CPeakCAN CCanDriver; #ifdef __linux__ #define TC04_15_ISSUE_PCBUSB_WARNING_LEVEL WORKAROUND_ENABLED // 2023-09-13: no warning level from device (Linux) #define TC09_9_ISSUE_PCBUSB_WARNING_LEVEL WORKAROUND_ENABLED // 2023-09-13: no warning level from device (Linux) +#define TC23_X_ISSUE_PCBUSB_FILTER_CODE WORKAROUND_ENABLED // 2024-07-31: code is bit-wise ANDed with mask (Linux) +#define TC25_X_ISSUE_PCBUSB_FILTER_CODE WORKAROUND_ENABLED // 2024-07-31: code is bit-wise ANDed with mask (Linux) +#define TC27_X_ISSUE_PCBUSB_FILTER_CODE WORKAROUND_ENABLED // 2024-07-31: code is bit-wise ANDed with mask (Linux) #endif //#define TC0x_y_ISSUE_ WORKAROUND_ENABLED #endif diff --git a/Tests/CANAPI/GoogleTest/Linux/lib/libgtest.a b/Tests/CANAPI/GoogleTest/Linux/lib/libgtest.a index 6835c40..d78d10e 100644 Binary files a/Tests/CANAPI/GoogleTest/Linux/lib/libgtest.a and b/Tests/CANAPI/GoogleTest/Linux/lib/libgtest.a differ diff --git a/Tests/CANAPI/GoogleTest/Linux/lib/libgtest_main.a b/Tests/CANAPI/GoogleTest/Linux/lib/libgtest_main.a index ecfb2c8..3becc87 100644 Binary files a/Tests/CANAPI/GoogleTest/Linux/lib/libgtest_main.a and b/Tests/CANAPI/GoogleTest/Linux/lib/libgtest_main.a differ diff --git a/Tests/CANAPI/Testcases/TC23_SetFilter11Bit.cc b/Tests/CANAPI/Testcases/TC23_SetFilter11Bit.cc index e559191..cb3aa60 100644 --- a/Tests/CANAPI/Testcases/TC23_SetFilter11Bit.cc +++ b/Tests/CANAPI/Testcases/TC23_SetFilter11Bit.cc @@ -196,7 +196,12 @@ TEST_F(SetFilter11Bit, GTEST_TESTCASE(SunnydayScenario, GTEST_SUNNYDAY)) { codeGet = 0xFFFFFFFFU; maskGet = 0xFFFFFFFFU; retVal = dut1.GetFilter11Bit(codeGet, maskGet); EXPECT_EQ(CCanApi::NoError, retVal); +#if (TC23_X_ISSUE_PCBUSB_FILTER_CODE != WORKAROUND_ENABLED) EXPECT_EQ(codeSet, codeGet); +#else + // @ issue(PCBUSB): code is bit-wise ANDed with mask (Linux) + EXPECT_EQ(codeSet & maskSet, codeGet); +#endif EXPECT_EQ(maskGet, maskGet); // @- reset acceptance filter // @ note: SJA100 has only one filter for 11-bit and 29-bit identifier! @@ -336,7 +341,12 @@ TEST_F(SetFilter11Bit, GTEST_TESTCASE(IfControllerNotStarted, GTEST_ENABLED)) { codeGet = 0xFFFFFFFFU; maskGet = 0xFFFFFFFFU; retVal = dut1.GetFilter11Bit(codeGet, maskGet); EXPECT_EQ(CCanApi::NoError, retVal); +#if (TC23_X_ISSUE_PCBUSB_FILTER_CODE != WORKAROUND_ENABLED) EXPECT_EQ(codeSet, codeGet); +#else + // @ issue(PCBUSB): code is bit-wise ANDed with mask (Linux) + EXPECT_EQ(codeSet & maskSet, codeGet); +#endif EXPECT_EQ(maskGet, maskGet); // @- reset acceptance filter // @ note: SJA100 has only one filter for 11-bit and 29-bit identifier! @@ -497,7 +507,12 @@ TEST_F(SetFilter11Bit, GTEST_TESTCASE(IfControllerStopped, GTEST_ENABLED)) { codeGet = 0xFFFFFFFFU; maskGet = 0xFFFFFFFFU; retVal = dut1.GetFilter11Bit(codeGet, maskGet); EXPECT_EQ(CCanApi::NoError, retVal); +#if (TC23_X_ISSUE_PCBUSB_FILTER_CODE != WORKAROUND_ENABLED) EXPECT_EQ(codeSet, codeGet); +#else + // @ issue(PCBUSB): code is bit-wise ANDed with mask (Linux) + EXPECT_EQ(codeSet & maskSet, codeGet); +#endif EXPECT_EQ(maskGet, maskGet); // @- reset acceptance filter // @ note: SJA100 has only one filter for 11-bit and 29-bit identifier! @@ -637,7 +652,12 @@ TEST_F(SetFilter11Bit, GTEST_TESTCASE(WithValidValues, GTEST_ENABLED)) { codeGet = 0xFFFFFFFFU; maskGet = 0xFFFFFFFFU; retVal = dut1.GetFilter11Bit(codeGet, maskGet); EXPECT_EQ(CCanApi::NoError, retVal); +#if (TC23_X_ISSUE_PCBUSB_FILTER_CODE != WORKAROUND_ENABLED) EXPECT_EQ(codeSet[i], codeGet); +#else + // @ issue(PCBUSB): code is bit-wise ANDed with mask (Linux) + EXPECT_EQ(codeSet[i] & maskSet[j], codeGet); +#endif EXPECT_EQ(maskSet[j], maskGet); // @-- start DUT1 with configured bit-rate settings retVal = dut1.StartController(); @@ -769,4 +789,4 @@ TEST_F(SetFilter11Bit, GTEST_TESTCASE(WithInvalidValues, GTEST_ENABLED)) { #endif // FEATURE_FILTERING != FEATURE_UNSUPPORTED -// $Id: TC23_SetFilter11Bit.cc 1272 2024-04-16 19:55:27Z makemake $ Copyright (c) UV Software, Berlin. +// $Id: TC23_SetFilter11Bit.cc 1373 2024-07-31 18:55:39Z gonggong $ Copyright (c) UV Software, Berlin. diff --git a/Tests/CANAPI/Testcases/TC25_SetFilter29Bit.cc b/Tests/CANAPI/Testcases/TC25_SetFilter29Bit.cc index b036890..35fc4a1 100644 --- a/Tests/CANAPI/Testcases/TC25_SetFilter29Bit.cc +++ b/Tests/CANAPI/Testcases/TC25_SetFilter29Bit.cc @@ -196,7 +196,12 @@ TEST_F(SetFilter29Bit, GTEST_TESTCASE(SunnydayScenario, GTEST_SUNNYDAY)) { codeGet = 0xFFFFFFFFU; maskGet = 0xFFFFFFFFU; retVal = dut1.GetFilter29Bit(codeGet, maskGet); EXPECT_EQ(CCanApi::NoError, retVal); +#if (TC25_X_ISSUE_PCBUSB_FILTER_CODE != WORKAROUND_ENABLED) EXPECT_EQ(codeSet, codeGet); +#else + // @ issue(PCBUSB): code is bit-wise ANDed with mask (Linux) + EXPECT_EQ(codeSet & maskSet, codeGet); +#endif EXPECT_EQ(maskGet, maskGet); // @- reset acceptance filter // @ note: SJA100 has only one filter for 11-bit and 29-bit identifier! @@ -337,7 +342,12 @@ TEST_F(SetFilter29Bit, GTEST_TESTCASE(IfControllerNotStarted, GTEST_ENABLED)) { codeGet = 0xFFFFFFFFU; maskGet = 0xFFFFFFFFU; retVal = dut1.GetFilter29Bit(codeGet, maskGet); EXPECT_EQ(CCanApi::NoError, retVal); +#if (TC25_X_ISSUE_PCBUSB_FILTER_CODE != WORKAROUND_ENABLED) EXPECT_EQ(codeSet, codeGet); +#else + // @ issue(PCBUSB): code is bit-wise ANDed with mask (Linux) + EXPECT_EQ(codeSet & maskSet, codeGet); +#endif EXPECT_EQ(maskGet, maskGet); // @- reset acceptance filter // @ note: SJA100 has only one filter for 11-bit and 29-bit identifier! @@ -498,7 +508,12 @@ TEST_F(SetFilter29Bit, GTEST_TESTCASE(IfControllerStopped, GTEST_ENABLED)) { codeGet = 0xFFFFFFFFU; maskGet = 0xFFFFFFFFU; retVal = dut1.GetFilter29Bit(codeGet, maskGet); EXPECT_EQ(CCanApi::NoError, retVal); +#if (TC25_X_ISSUE_PCBUSB_FILTER_CODE != WORKAROUND_ENABLED) EXPECT_EQ(codeSet, codeGet); +#else + // @ issue(PCBUSB): code is bit-wise ANDed with mask (Linux) + EXPECT_EQ(codeSet & maskSet, codeGet); +#endif EXPECT_EQ(maskGet, maskGet); // @- reset acceptance filter // @ note: SJA100 has only one filter for 11-bit and 29-bit identifier! @@ -638,7 +653,12 @@ TEST_F(SetFilter29Bit, GTEST_TESTCASE(WithValidValues, GTEST_ENABLED)) { codeGet = 0xFFFFFFFFU; maskGet = 0xFFFFFFFFU; retVal = dut1.GetFilter29Bit(codeGet, maskGet); EXPECT_EQ(CCanApi::NoError, retVal); +#if (TC25_X_ISSUE_PCBUSB_FILTER_CODE != WORKAROUND_ENABLED) EXPECT_EQ(codeSet[i], codeGet); +#else + // @ issue(PCBUSB): code is bit-wise ANDed with mask (Linux) + EXPECT_EQ(codeSet[i] & maskSet[j], codeGet); +#endif EXPECT_EQ(maskSet[j], maskGet); // @-- start DUT1 with configured bit-rate settings retVal = dut1.StartController(); @@ -838,4 +858,4 @@ TEST_F(SetFilter29Bit, GTEST_TESTCASE(IfXtdFramesSuppressed, GTEST_ENABLED)) { #endif // FEATURE_FILTERING != FEATURE_UNSUPPORTED -// $Id: TC25_SetFilter29Bit.cc 1272 2024-04-16 19:55:27Z makemake $ Copyright (c) UV Software, Berlin. +// $Id: TC25_SetFilter29Bit.cc 1373 2024-07-31 18:55:39Z gonggong $ Copyright (c) UV Software, Berlin. diff --git a/Tests/CANAPI/Testcases/TC27_ResetFilter.cc b/Tests/CANAPI/Testcases/TC27_ResetFilter.cc index 9358939..df67fa3 100644 --- a/Tests/CANAPI/Testcases/TC27_ResetFilter.cc +++ b/Tests/CANAPI/Testcases/TC27_ResetFilter.cc @@ -112,7 +112,12 @@ TEST_F(ResetFilter, GTEST_TESTCASE(SunnydayScenario, GTEST_SUNNYDAY)) { codeGet = 0xFFFFFFFFU; maskGet = 0xFFFFFFFFU; retVal = dut1.GetFilter11Bit(codeGet, maskGet); EXPECT_EQ(CCanApi::NoError, retVal); +#if (TC27_X_ISSUE_PCBUSB_FILTER_CODE != WORKAROUND_ENABLED) EXPECT_EQ(codeSet, codeGet); +#else + // @ issue(PCBUSB): code is bit-wise ANDed with mask (Linux) + EXPECT_EQ(codeSet & maskSet, codeGet); +#endif EXPECT_EQ(maskGet, maskGet); // @- reset acceptance filter // @ note: SJA100 has only one filter for 11-bit and 29-bit identifier! @@ -139,8 +144,13 @@ TEST_F(ResetFilter, GTEST_TESTCASE(SunnydayScenario, GTEST_SUNNYDAY)) { codeGet = 0xFFFFFFFFU; maskGet = 0xFFFFFFFFU; retVal = dut1.GetFilter29Bit(codeGet, maskGet); EXPECT_EQ(CCanApi::NoError, retVal); +#if (TC27_X_ISSUE_PCBUSB_FILTER_CODE != WORKAROUND_ENABLED) EXPECT_EQ(codeSet, codeGet); - EXPECT_EQ(maskGet, maskGet); +#else + // @ issue(PCBUSB): code is bit-wise ANDed with mask (Linux) + EXPECT_EQ(codeSet & maskSet, codeGet); +#endif + EXPECT_EQ(maskGet, maskGet); // @- reset acceptance filter // @ note: SJA100 has only one filter for 11-bit and 29-bit identifier! retVal = dut1.ResetFilters(); @@ -270,7 +280,12 @@ TEST_F(ResetFilter, GTEST_TESTCASE(IfControllerNotStarted, GTEST_ENABLED)) { codeGet = 0xFFFFFFFFU; maskGet = 0xFFFFFFFFU; retVal = dut1.GetFilter11Bit(codeGet, maskGet); EXPECT_EQ(CCanApi::NoError, retVal); +#if (TC27_X_ISSUE_PCBUSB_FILTER_CODE != WORKAROUND_ENABLED) EXPECT_EQ(codeSet, codeGet); +#else + // @ issue(PCBUSB): code is bit-wise ANDed with mask (Linux) + EXPECT_EQ(codeSet & maskSet, codeGet); +#endif EXPECT_EQ(maskGet, maskGet); // @- reset acceptance filter // @ note: SJA100 has only one filter for 11-bit and 29-bit identifier! @@ -297,7 +312,12 @@ TEST_F(ResetFilter, GTEST_TESTCASE(IfControllerNotStarted, GTEST_ENABLED)) { codeGet = 0xFFFFFFFFU; maskGet = 0xFFFFFFFFU; retVal = dut1.GetFilter29Bit(codeGet, maskGet); EXPECT_EQ(CCanApi::NoError, retVal); +#if (TC27_X_ISSUE_PCBUSB_FILTER_CODE != WORKAROUND_ENABLED) EXPECT_EQ(codeSet, codeGet); +#else + // @ issue(PCBUSB): code is bit-wise ANDed with mask (Linux) + EXPECT_EQ(codeSet & maskSet, codeGet); +#endif EXPECT_EQ(maskGet, maskGet); // @- reset acceptance filter // @ note: SJA100 has only one filter for 11-bit and 29-bit identifier! @@ -478,7 +498,12 @@ TEST_F(ResetFilter, GTEST_TESTCASE(IfControllerStopped, GTEST_ENABLED)) { codeGet = 0xFFFFFFFFU; maskGet = 0xFFFFFFFFU; retVal = dut1.GetFilter11Bit(codeGet, maskGet); EXPECT_EQ(CCanApi::NoError, retVal); +#if (TC27_X_ISSUE_PCBUSB_FILTER_CODE != WORKAROUND_ENABLED) EXPECT_EQ(codeSet, codeGet); +#else + // @ issue(PCBUSB): code is bit-wise ANDed with mask (Linux) + EXPECT_EQ(codeSet & maskSet, codeGet); +#endif EXPECT_EQ(maskGet, maskGet); // @- reset acceptance filter // @ note: SJA100 has only one filter for 11-bit and 29-bit identifier! @@ -505,7 +530,12 @@ TEST_F(ResetFilter, GTEST_TESTCASE(IfControllerStopped, GTEST_ENABLED)) { codeGet = 0xFFFFFFFFU; maskGet = 0xFFFFFFFFU; retVal = dut1.GetFilter29Bit(codeGet, maskGet); EXPECT_EQ(CCanApi::NoError, retVal); +#if (TC27_X_ISSUE_PCBUSB_FILTER_CODE != WORKAROUND_ENABLED) EXPECT_EQ(codeSet, codeGet); +#else + // @ issue(PCBUSB): code is bit-wise ANDed with mask (Linux) + EXPECT_EQ(codeSet & maskSet, codeGet); +#endif EXPECT_EQ(maskGet, maskGet); // @- reset acceptance filter // @ note: SJA100 has only one filter for 11-bit and 29-bit identifier! @@ -598,4 +628,4 @@ TEST_F(ResetFilter, GTEST_TESTCASE(IfChannelTornDown, GTEST_ENABLED)) { #endif // FEATURE_FILTERING != FEATURE_UNSUPPORTED -// $Id: TC27_ResetFilter.cc 1272 2024-04-16 19:55:27Z makemake $ Copyright (c) UV Software, Berlin. +// $Id: TC27_ResetFilter.cc 1373 2024-07-31 18:55:39Z gonggong $ Copyright (c) UV Software, Berlin. diff --git a/Tests/CANAPI/Version.h b/Tests/CANAPI/Version.h index ee8b390..7bf8818 100644 --- a/Tests/CANAPI/Version.h +++ b/Tests/CANAPI/Version.h @@ -47,8 +47,8 @@ // #ifndef VERSION_H_INCLUDED #define VERSION_H_INCLUDED -// SVN revision number (update with each commit: XXVI) -#define REVISION_NO "$Rev: 1370 $" +// SVN revision number (update with each commit: XXVII) +#define REVISION_NO "$Rev: 1373 $" #endif // VERSION_H_INCLUDED -// $Id: Version.h 1370 2024-07-17 19:00:47Z quaoar $ Copyright (c) UV Software, Berlin // +// $Id: Version.h 1373 2024-07-31 18:55:39Z gonggong $ Copyright (c) UV Software, Berlin //