Line data Source code
1 : // Copyright 2024 Accenture. 2 : 3 : #include "util/RoutineControlOptionParser.h" 4 : 5 : #include <etl/unaligned_type.h> 6 : 7 : namespace uds 8 : { 9 : uint8_t 10 1 : RoutineControlOptionParser::getLogicalBlockNumberLength(uint8_t const lengthFormatIdentifier) 11 : { 12 1 : return (lengthFormatIdentifier & 0xF0U) >> 4U; 13 : } 14 : 15 1 : uint8_t RoutineControlOptionParser::getMemoryAddressLength(uint8_t const lengthFormatIdentifier) 16 : { 17 1 : return (lengthFormatIdentifier & 0xF0U) >> 4U; 18 : } 19 : 20 1 : uint8_t RoutineControlOptionParser::getMemorySizeLength(uint8_t const lengthFormatIdentifier) 21 : { 22 1 : return (lengthFormatIdentifier & 0x0FU); 23 : } 24 : 25 : uint32_t 26 5 : RoutineControlOptionParser::parseParameter(uint8_t const* const buffer, uint8_t const length) 27 : { 28 5 : switch (length) 29 : { 30 1 : case 1U: 31 1 : { 32 1 : return static_cast<uint32_t>(*buffer); 33 : } 34 1 : case 2U: 35 1 : { 36 1 : return static_cast<uint32_t>(::etl::be_uint16_t(buffer)); 37 : } 38 1 : case 3U: 39 1 : { 40 1 : return (static_cast<uint32_t>(*buffer) << 16) 41 1 : | static_cast<uint32_t>(::etl::be_uint16_t(buffer + 1)); 42 : } 43 1 : case 4U: 44 1 : { 45 1 : return ::etl::be_uint32_t(buffer); 46 : } 47 : default: 48 : { 49 : return 0U; 50 : } 51 : } 52 : } 53 : 54 : } // namespace uds