Vanetza
Loading...
Searching...
No Matches
link_layer_client.hpp
1#pragma once
2#include <kj/async-io.h>
3#include <vanetza/dcc/channel_load.hpp>
4#include <vanetza/net/chunk_packet.hpp>
5#include <vanetza/net/cohesive_packet.hpp>
6#include <vanetza/net/mac_address.hpp>
7#include <cstdint>
8#include <functional>
9#include <memory>
10#include <mutex>
11#include <string>
12
13namespace vanetza
14{
15
16namespace access { class DataRequest; }
17
18namespace rpc
19{
20
21class Logger;
22
23class LinkLayerClient
24{
25public:
26 enum class ErrorCode
27 {
28 Ok,
29 InvalidArgument,
30 Unsupported,
31 InternalError,
32 };
33
34 enum class Technology
35 {
36 Unspecified,
37 ITS_G5,
38 LTE_V2X,
39 };
40
41 struct Indication
42 {
43 Indication(vanetza::ByteBuffer);
44
46 vanetza::MacAddress destination;
48 Technology technology = Technology::Unspecified;
49 };
50
51 struct Identity
52 {
53 std::uint64_t id = 0;
54 std::uint32_t version = 0;
55 std::string info;
56 };
57
58 using IndicationCallback = std::function<void(Indication)>;
59 using ChannelLoadReportCallback = std::function<void(dcc::ChannelLoad)>;
60
61 LinkLayerClient(kj::Timer&, kj::AsyncIoStream&, Logger* = nullptr);
62 ~LinkLayerClient();
63
64 kj::Promise<Identity> identify();
65 void request(const access::DataRequest&, std::unique_ptr<ChunkPacket>);
66 void indicate(IndicationCallback callback);
67 void report_channel_load(ChannelLoadReportCallback callback);
68 kj::Promise<ErrorCode> set_source_address(const MacAddress&);
69
70 void configure(Technology);
71 void add_task(kj::Promise<void>&&);
72
73private:
74 class Context;
75
76 void do_indicate(Indication);
77 void do_report(dcc::ChannelLoad);
78
79 std::unique_ptr<Context> context_;
80 std::mutex callback_mutex_;
81 IndicationCallback indication_callback_;
82 ChannelLoadReportCallback cbr_callback_;
83 Technology technology_ = Technology::Unspecified;
84};
85
86const char* stringify(LinkLayerClient::ErrorCode);
87const char* stringify(LinkLayerClient::Technology);
88
89} // namespace rpc
90} // namespace vanetza