1 /**
2  * Copyright 2017 Google Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include "lpcsnoop/snoop_listen.hpp"
18 
19 #include <cinttypes>
20 #include <cstdio>
21 #include <iostream>
22 #include <memory>
23 
24 /* Example PostCode handler which simply prints them */
printPostcode(FILE *,postcode_t postcode)25 static void printPostcode(FILE*, postcode_t postcode)
26 {
27     /* Print output to verify the example program is receiving values. */
28     auto code = std::get<0>(postcode);
29     std::string hexCode;
30     hexCode.reserve(2 * code.size());
31     for (const auto& byte : code)
32     {
33         hexCode += std::format("{:02x}", byte);
34     }
35     std::printf("recv: 0x%s\n", hexCode.c_str());
36 }
37 
38 /*
39  * One can also specify custom handler that operates on
40  * sdbusplus::message_t type and pass them to constructor.
41  * e.g.
42  *
43  * static void PrintMessageMap(sdbusplus::message_t& m)
44  * {
45  *     std::string messageBusName;
46  *     std::map<std::string, std::variant<uint64_t>> messageData;
47  *
48  *     m.read(messageBusName, messageData);
49  *
50  *     std::cout << "Got message from " << messageBusName << std::endl;
51  *     for (const auto& kv : messageData)
52  *     {
53  *         std::cout << "Key: " << kv.first << std::endl;
54  *         std::cout << "Value: " << get<uint64_t>(kv.second) << std::endl;
55  *     }
56  * }
57  *
58  * lpcsnoop::SnoopListen snoop(ListenBus, PrintMessageMap);
59  */
60 
61 /*
62  * This is the entry point for the application.
63  *
64  * This application simply creates an object that registers for incoming value
65  * updates for the POST code dbus object.
66  */
main()67 int main()
68 {
69     auto ListenBus = sdbusplus::bus::new_default();
70     lpcsnoop::SnoopListen snoop(ListenBus, printPostcode);
71 
72     while (true)
73     {
74         ListenBus.process_discard();
75         ListenBus.wait();
76     }
77 
78     return 0;
79 }
80