blob: fdd6ffe63741cbca343bd87eaf698f4a85e24e80 [file] [log] [blame]
Austin Schuh8d5fff42018-05-30 20:44:12 -07001#include <netdb.h>
2
Alex Perrycb7da4b2019-08-28 19:35:56 -07003#include "aos/events/shm_event_loop.h"
Austin Schuh300f2f62019-05-27 13:49:23 -07004#include "aos/init.h"
John Park33858a32018-09-28 23:05:48 -07005#include "aos/logging/logging.h"
John Park33858a32018-09-28 23:05:48 -07006#include "aos/time/time.h"
Austin Schuh8d5fff42018-05-30 20:44:12 -07007#include "aos/vision/events/udp.h"
8#include "y2018/vision.pb.h"
Alex Perrycb7da4b2019-08-28 19:35:56 -07009#include "y2018/vision/vision_generated.h"
Austin Schuh8d5fff42018-05-30 20:44:12 -070010
11namespace y2018 {
12namespace vision {
13
14using aos::monotonic_clock;
15
16int Main() {
Alex Perrycb7da4b2019-08-28 19:35:56 -070017 aos::FlatbufferDetachedBuffer<aos::Configuration> config =
18 aos::configuration::ReadConfig("config.json");
19
Austin Schuh8d5fff42018-05-30 20:44:12 -070020 ::aos::events::RXUdpSocket video_rx(5001);
21 char data[65507];
22 ::y2018::VisionStatus status;
Alex Perrycb7da4b2019-08-28 19:35:56 -070023
24 ::aos::ShmEventLoop event_loop(&config.message());
25 ::aos::Sender<VisionStatus> vision_status_sender_ =
26 event_loop.MakeSender<VisionStatus>("/superstructure");
Austin Schuh8d5fff42018-05-30 20:44:12 -070027
28 while (true) {
29 const ssize_t rx_size = video_rx.Recv(data, sizeof(data));
30 if (rx_size > 0) {
31 status.ParseFromArray(data, rx_size);
Alex Perrycb7da4b2019-08-28 19:35:56 -070032
33 auto builder = vision_status_sender_.MakeBuilder();
34 VisionStatus::Builder vision_status_builder =
35 builder.MakeBuilder<VisionStatus>();
36 vision_status_builder.add_high_frame_count(status.high_frame_count());
37 vision_status_builder.add_low_frame_count(status.low_frame_count());
38 if (!builder.Send(vision_status_builder.Finish())) {
Austin Schuhf257f3c2019-10-27 21:00:43 -070039 AOS_LOG(ERROR, "Failed to send vision information\n");
Austin Schuh8d5fff42018-05-30 20:44:12 -070040 }
41 }
42 }
43}
44
45} // namespace vision
46} // namespace y2018
47
48int main(int /*argc*/, char ** /*argv*/) {
49 ::aos::InitNRT();
50 ::y2018::vision::Main();
51}