62 auto nl_pos = find(m_buff.begin(), m_buff.end(),
'\n');
63 if (nl_pos == m_buff.end()) {
64 return vector<uint8_t>();
66 auto line = vector<uint8_t>(m_buff.begin(), nl_pos);
67 m_buff = vector<uint8_t>(nl_pos + 1, m_buff.end());
82 case State::PrefixWait:
84 if (ch ==
'$' || ch ==
'!') {
87 m_state = State::Data;
93 if (std::isprint(ch)) {
95 if (ch ==
'*') m_state = State::CsDigit1;
97 if (ch == 0x0d || ch == 0x0a) {
99 m_lines.emplace_back(m_line.begin(), m_line.end());
100 m_state = State::PrefixWait;
104 m_state = State::PrefixWait;
107 case State::CsDigit1:
109 if (std::isxdigit(ch)) {
110 m_line.push_back(ch);
111 m_state = State::CsDigit2;
113 m_state = State::PrefixWait;
116 case State::CsDigit2:
118 if (std::isxdigit(ch)) {
119 m_line.push_back(ch);
120 m_lines.emplace_back(m_line.begin(), m_line.end());
122 m_state = State::PrefixWait;