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 : {
32 1 : return static_cast<uint32_t>(*buffer);
33 : }
34 1 : case 2U:
35 : {
36 1 : return static_cast<uint32_t>(::etl::be_uint16_t(buffer));
37 : }
38 1 : case 3U:
39 : {
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 : {
45 1 : return ::etl::be_uint32_t(buffer);
46 : }
47 1 : default:
48 : {
49 1 : return 0U;
50 : }
51 : }
52 : }
53 :
54 : } // namespace uds
|