ESPHome 2025.5.0
Loading...
Searching...
No Matches
sml_parser.h
Go to the documentation of this file.
1#pragma once
2
3#include <cassert>
4#include <cstdint>
5#include <cstdio>
6#include <string>
7#include <vector>
8#include "constants.h"
9
10namespace esphome {
11namespace sml {
12
13using bytes = std::vector<uint8_t>;
14
15class BytesView {
16 public:
17 BytesView() noexcept = default;
18
19 explicit BytesView(const uint8_t *first, size_t count) noexcept : data_{first}, count_{count} {}
20
21 explicit BytesView(const bytes &bytes) noexcept : data_{bytes.data()}, count_{bytes.size()} {}
22
23 size_t size() const noexcept { return count_; }
24
25 uint8_t operator[](size_t index) const noexcept {
26 assert(index < count_);
27 return data_[index];
28 }
29
30 BytesView subview(size_t offset, size_t count) const noexcept {
31 assert(offset + count <= count_);
32 return BytesView{data_ + offset, count};
33 }
34
35 const uint8_t *begin() const noexcept { return data_; }
36
37 const uint8_t *end() const noexcept { return data_ + count_; }
38
39 private:
40 const uint8_t *data_ = nullptr;
41 size_t count_ = 0;
42};
43
44class SmlNode {
45 public:
46 uint8_t type;
48 std::vector<SmlNode> nodes;
49};
50
51class ObisInfo {
52 public:
53 ObisInfo(const BytesView &server_id, const SmlNode &val_list_entry);
57 char unit;
58 char scaler;
60 uint16_t value_type;
61 std::string code_repr() const;
62};
63
64class SmlFile {
65 public:
66 SmlFile(const BytesView &buffer);
67 bool setup_node(SmlNode *node);
68 std::vector<SmlNode> messages;
69 std::vector<ObisInfo> get_obis_info();
70
71 protected:
73 size_t pos_;
74};
75
76std::string bytes_repr(const BytesView &buffer);
77
78uint64_t bytes_to_uint(const BytesView &buffer);
79
80int64_t bytes_to_int(const BytesView &buffer);
81
82std::string bytes_to_string(const BytesView &buffer);
83} // namespace sml
84} // namespace esphome
uint8_t operator[](size_t index) const noexcept
Definition sml_parser.h:25
const uint8_t * begin() const noexcept
Definition sml_parser.h:35
const uint8_t * end() const noexcept
Definition sml_parser.h:37
BytesView subview(size_t offset, size_t count) const noexcept
Definition sml_parser.h:30
BytesView() noexcept=default
BytesView(const bytes &bytes) noexcept
Definition sml_parser.h:21
size_t size() const noexcept
Definition sml_parser.h:23
std::string code_repr() const
ObisInfo(const BytesView &server_id, const SmlNode &val_list_entry)
SmlFile(const BytesView &buffer)
Definition sml_parser.cpp:8
const BytesView buffer_
Definition sml_parser.h:72
std::vector< ObisInfo > get_obis_info()
std::vector< SmlNode > messages
Definition sml_parser.h:68
bool setup_node(SmlNode *node)
std::vector< SmlNode > nodes
Definition sml_parser.h:48
std::string bytes_repr(const BytesView &buffer)
int64_t bytes_to_int(const BytesView &buffer)
std::string bytes_to_string(const BytesView &buffer)
uint64_t bytes_to_uint(const BytesView &buffer)
std::vector< uint8_t > bytes
Definition sml_parser.h:13
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7