blob: db783f69975302d0307c8b6559924ccb87de0fbd [file] [log] [blame]
Brian Silverman425492b2015-12-30 15:23:55 -08001#ifndef FRC971_WPILIB_PDP_FETCHER_H_
2#define FRC971_WPILIB_PDP_FETCHER_H_
3
Brian Silverman425492b2015-12-30 15:23:55 -08004#include <atomic>
Parker Schuhd3b7a8872018-02-19 16:42:27 -08005#include <memory>
Brian Silverman425492b2015-12-30 15:23:55 -08006
Austin Schuh0b545432019-05-12 15:46:12 -07007#include "aos/events/event-loop.h"
8#include "frc971/wpilib/pdp_values.q.h"
9
Brian Silverman425492b2015-12-30 15:23:55 -080010namespace frc971 {
11namespace wpilib {
12
13// Handles fetching values from the PDP. This is slow, so it has to happen in a
14// separate thread.
15class PDPFetcher {
16 public:
Austin Schuh0b545432019-05-12 15:46:12 -070017 PDPFetcher(::aos::EventLoop *event_loop)
18 : event_loop_(event_loop),
19 pdp_values_sender_(event_loop_->MakeSender<::frc971::PDPValues>(
20 ".frc971.pdp_values")) {}
21
Brian Silverman425492b2015-12-30 15:23:55 -080022 void Quit() { run_ = false; }
23
Brian Silverman425492b2015-12-30 15:23:55 -080024 // To be called by a ::std::thread.
25 void operator()();
26
27 private:
Austin Schuh0b545432019-05-12 15:46:12 -070028 ::aos::EventLoop *event_loop_;
29
30 ::aos::Sender<::frc971::PDPValues> pdp_values_sender_;
31
Brian Silverman425492b2015-12-30 15:23:55 -080032 ::std::atomic<bool> run_{true};
33};
34
35} // namespace wpilib
36} // namespace frc971
37
38#endif // FRC971_WPILIB_PDP_FETCHER_H_