1 #include "pel_minimal.hpp"
2 
3 #include "stream.hpp"
4 
5 namespace attn
6 {
7 namespace pel
8 {
9 
10 PelMinimal::PelMinimal(std::vector<uint8_t>& data)
11 {
12     initialize(data);
13 }
14 
15 void PelMinimal::initialize(std::vector<uint8_t>& data)
16 {
17     Stream pelData{data};
18 
19     _ph = std::make_unique<PrivateHeader>(pelData);
20     _uh = std::make_unique<UserHeader>(pelData);
21     _ps = std::make_unique<PrimarySrc>(pelData);
22     _eh = std::make_unique<ExtendedUserHeader>(pelData);
23 }
24 
25 void PelMinimal::raw(std::vector<uint8_t>& pelBuffer) const
26 {
27     Stream pelData{pelBuffer};
28 
29     // stream from object to buffer
30     _ph->flatten(pelData);
31     _uh->flatten(pelData);
32     _ps->flatten(pelData);
33     _eh->flatten(pelData);
34 }
35 
36 size_t PelMinimal::size() const
37 {
38     size_t size = 0;
39 
40     // size of private header section
41     if (_ph)
42     {
43         size += _ph->header().size;
44     }
45 
46     // size of user header section
47     if (_uh)
48     {
49         size += _uh->header().size;
50     }
51 
52     // size of primary SRC section
53     if (_ps)
54     {
55         size += _ph->header().size;
56     }
57 
58     // size of extended user section
59     if (_eh)
60     {
61         size += _eh->header().size;
62     }
63 
64     return ((size > _maxPELSize) ? _maxPELSize : size);
65 }
66 
67 void PelMinimal::setSubsystem(uint8_t subsystem)
68 {
69     _uh->setSubsystem(subsystem);
70 }
71 
72 void PelMinimal::setSeverity(uint8_t severity)
73 {
74     _uh->setSeverity(severity);
75 }
76 
77 void PelMinimal::setType(uint8_t type)
78 {
79     _uh->setType(type);
80 }
81 
82 void PelMinimal::setAction(uint16_t action)
83 {
84     _uh->setAction(action);
85 }
86 
87 void PelMinimal::setSrcWords(std::array<uint32_t, numSrcWords> srcWords)
88 {
89     _ps->setSrcWords(srcWords);
90 }
91 
92 void PelMinimal::setAsciiString(std::array<char, asciiStringSize> asciiString)
93 {
94     _ps->setAsciiString(asciiString);
95 }
96 
97 uint8_t PelMinimal::getSectionCount()
98 {
99     return _ph->getSectionCount();
100 }
101 
102 void PelMinimal::setSectionCount(uint8_t sectionCount)
103 {
104     _ph->setSectionCount(sectionCount);
105 }
106 
107 void PelMinimal::setSymptomId(const std::string& symptomId)
108 {
109     _eh->setSymptomId(symptomId);
110 }
111 
112 void PelMinimal::setPlid(uint32_t plid)
113 {
114     _ph->setPlid(plid);
115 }
116 
117 } // namespace pel
118 } // namespace attn
119