ESPHome 2026.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::sml {
11
12using bytes = std::vector<uint8_t>;
13
14class BytesView {
15 public:
16 BytesView() noexcept = default;
17
18 explicit BytesView(const uint8_t *first, size_t count) noexcept : data_{first}, count_{count} {}
19
20 explicit BytesView(const bytes &bytes) noexcept : data_{bytes.data()}, count_{bytes.size()} {}
21
22 size_t size() const noexcept { return count_; }
23
24 uint8_t operator[](size_t index) const noexcept {
25 assert(index < count_);
26 return data_[index];
27 }
28
29 BytesView subview(size_t offset, size_t count) const noexcept {
30 assert(offset + count <= count_);
31 return BytesView{data_ + offset, count};
32 }
33
34 const uint8_t *begin() const noexcept { return data_; }
35
36 const uint8_t *end() const noexcept { return data_ + count_; }
37
38 private:
39 const uint8_t *data_ = nullptr;
40 size_t count_ = 0;
41};
42
43class SmlNode {
44 public:
45 uint8_t type;
47 std::vector<SmlNode> nodes;
48};
49
50class ObisInfo {
51 public:
52 ObisInfo(const BytesView &server_id, const SmlNode &val_list_entry);
56 char unit;
57 char scaler;
59 uint16_t value_type;
60 std::string code_repr() const;
61};
62
63class SmlFile {
64 public:
65 SmlFile(const BytesView &buffer);
66 bool setup_node(SmlNode *node);
67 std::vector<SmlNode> messages;
68 std::vector<ObisInfo> get_obis_info();
69
70 protected:
72 size_t pos_;
73};
74
75std::string bytes_repr(const BytesView &buffer);
76
77uint64_t bytes_to_uint(const BytesView &buffer);
78
79int64_t bytes_to_int(const BytesView &buffer);
80
81std::string bytes_to_string(const BytesView &buffer);
82} // namespace esphome::sml
uint8_t operator[](size_t index) const noexcept
Definition sml_parser.h:24
const uint8_t * begin() const noexcept
Definition sml_parser.h:34
const uint8_t * end() const noexcept
Definition sml_parser.h:36
BytesView subview(size_t offset, size_t count) const noexcept
Definition sml_parser.h:29
BytesView() noexcept=default
BytesView(const bytes &bytes) noexcept
Definition sml_parser.h:20
size_t size() const noexcept
Definition sml_parser.h:22
std::string code_repr() const
ObisInfo(const BytesView &server_id, const SmlNode &val_list_entry)
SmlFile(const BytesView &buffer)
Definition sml_parser.cpp:7
const BytesView buffer_
Definition sml_parser.h:71
std::vector< ObisInfo > get_obis_info()
std::vector< SmlNode > messages
Definition sml_parser.h:67
bool setup_node(SmlNode *node)
std::vector< SmlNode > nodes
Definition sml_parser.h:47
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:12