Line data Source code
1 : // Copyright 2024 Accenture. 2 : 3 : #include "util/RoutineControlOptionParser.h" 4 : 5 : #include <estd/big_endian.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>(::estd::read_be<uint16_t>(buffer)); 37 : } 38 1 : case 3U: 39 1 : { 40 1 : return ::estd::read_be_24(buffer); 41 : } 42 1 : case 4U: 43 1 : { 44 1 : return ::estd::read_be<uint32_t>(buffer); 45 : } 46 : default: 47 : { 48 : return 0U; 49 : } 50 : } 51 : } 52 : 53 : } // namespace uds