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