blob: 98da7615c27b985fca0945f1e4c5bb62dd1d69b4 [file] [log] [blame]
Brian Silverman425492b2015-12-30 15:23:55 -08001#include "frc971/wpilib/pdp_fetcher.h"
2
Austin Schuh8aec1ed2016-05-01 13:29:20 -07003#include <chrono>
4
Austin Schuh0b545432019-05-12 15:46:12 -07005#include "aos/events/event-loop.h"
John Park398c74a2018-10-20 21:17:39 -07006#include "aos/init.h"
Austin Schuh0b545432019-05-12 15:46:12 -07007#include "aos/logging/queue_logging.h"
Parker Schuhd3b7a8872018-02-19 16:42:27 -08008#include "frc971/wpilib/ahal/PowerDistributionPanel.h"
Brian Silverman39b339e2016-01-03 13:24:22 -08009#include "frc971/wpilib/pdp_values.q.h"
Brian Silverman425492b2015-12-30 15:23:55 -080010
11namespace frc971 {
12namespace wpilib {
13
Austin Schuhbd1fe9c2019-06-29 16:35:48 -070014namespace chrono = ::std::chrono;
Brian Silverman25ff5052016-01-02 14:13:46 -080015
Austin Schuhbd1fe9c2019-06-29 16:35:48 -070016PDPFetcher::PDPFetcher(::aos::EventLoop *event_loop)
17 : event_loop_(event_loop),
18 pdp_values_sender_(
19 event_loop_->MakeSender<::frc971::PDPValues>(".frc971.pdp_values")),
20 pdp_(new frc::PowerDistributionPanel()) {
21 event_loop_->set_name("PDPFetcher");
Brian Silverman25ff5052016-01-02 14:13:46 -080022
Austin Schuhbd1fe9c2019-06-29 16:35:48 -070023 // SCHED_OTHER on purpose.
24 event_loop_->AddPhasedLoop([this](int iterations) { Loop(iterations); },
25 chrono::milliseconds(20), chrono::milliseconds(4));
26}
27
28PDPFetcher::~PDPFetcher() {}
29
30void PDPFetcher::Loop(int iterations) {
31 if (iterations != 1) {
32 LOG(DEBUG, "PDPFetcher skipped %d iterations\n", iterations - 1);
33 }
34 auto message = pdp_values_sender_.MakeMessage();
35 message->voltage = pdp_->GetVoltage();
36 message->temperature = pdp_->GetTemperature();
37 message->power = pdp_->GetTotalPower();
38 for (int i = 0; i < 16; ++i) {
39 message->currents[i] = pdp_->GetCurrent(i);
40 }
41 LOG_STRUCT(DEBUG, "got", *message);
42 if (!message.Send()) {
43 LOG(WARNING, "sending pdp values failed\n");
Brian Silverman425492b2015-12-30 15:23:55 -080044 }
45}
46
47} // namespace wpilib
48} // namespace frc971