| 970 | } |
| 971 | |
| 972 | EipStatus CheckElectronicKeyData( |
| 973 | EipUint8 key_format, |
| 974 | void *key_data, |
| 975 | EipUint16 *extended_status |
| 976 | ) { |
| 977 | /* Default return value */ |
| 978 | *extended_status = kConnectionManagerExtendedStatusCodeSuccess; |
| 979 | |
| 980 | /* Check key format */ |
| 981 | if (4 != key_format) { |
| 982 | *extended_status = |
| 983 | kConnectionManagerExtendedStatusCodeErrorInvalidSegmentTypeInPath; |
| 984 | return kEipStatusError; |
| 985 | } |
| 986 | |
| 987 | bool compatiblity_mode = ElectronicKeyFormat4GetMajorRevisionCompatibility( |
| 988 | key_data); |
| 989 | |
| 990 | /* Check VendorID and ProductCode, must match, or 0 */ |
| 991 | if ( ( (ElectronicKeyFormat4GetVendorId(key_data) != vendor_id_) && |
| 992 | (ElectronicKeyFormat4GetVendorId(key_data) != 0) ) |
| 993 | || ( (ElectronicKeyFormat4GetProductCode(key_data) != product_code_) |
| 994 | && (ElectronicKeyFormat4GetProductCode(key_data) != 0) ) ) { |
| 995 | *extended_status = |
| 996 | kConnectionManagerExtendedStatusCodeErrorVendorIdOrProductcodeError; |
| 997 | return kEipStatusError; |
| 998 | } else { |
| 999 | /* VendorID and ProductCode are correct */ |
| 1000 | |
| 1001 | /* Check DeviceType, must match or 0 */ |
| 1002 | if ( (ElectronicKeyFormat4GetDeviceType(key_data) != device_type_) |
| 1003 | && (ElectronicKeyFormat4GetDeviceType(key_data) != 0) ) { |
| 1004 | *extended_status = |
| 1005 | kConnectionManagerExtendedStatusCodeErrorDeviceTypeError; |
| 1006 | return kEipStatusError; |
| 1007 | } else { |
| 1008 | /* VendorID, ProductCode and DeviceType are correct */ |
| 1009 | |
| 1010 | if (false == compatiblity_mode) { |
| 1011 | /* Major = 0 is valid */ |
| 1012 | if (0 == ElectronicKeyFormat4GetMajorRevision(key_data) ) { |
| 1013 | return kEipStatusOk; |
| 1014 | } |
| 1015 | |
| 1016 | /* Check Major / Minor Revision, Major must match, Minor match or 0 */ |
| 1017 | if ( (ElectronicKeyFormat4GetMajorRevision(key_data) != |
| 1018 | revision_.major_revision) |
| 1019 | || ( (ElectronicKeyFormat4GetMinorRevision(key_data) != |
| 1020 | revision_.minor_revision) |
| 1021 | && (ElectronicKeyFormat4GetMinorRevision(key_data) != 0) ) ) { |
| 1022 | *extended_status = |
| 1023 | kConnectionManagerExtendedStatusCodeErrorRevisionMismatch; |
| 1024 | return kEipStatusError; |
| 1025 | } |
| 1026 | } else { |
| 1027 | /* Compatibility mode is set */ |
| 1028 | |
| 1029 | /* Major must match, Minor != 0 and <= MinorRevision */ |
no test coverage detected