Brian Silverman | 425492b | 2015-12-30 15:23:55 -0800 | [diff] [blame] | 1 | #include "frc971/wpilib/pdp_fetcher.h" |
| 2 | |
Austin Schuh | 8aec1ed | 2016-05-01 13:29:20 -0700 | [diff] [blame^] | 3 | #include <chrono> |
| 4 | |
Brian Silverman | 425492b | 2015-12-30 15:23:55 -0800 | [diff] [blame] | 5 | #include "aos/common/logging/queue_logging.h" |
| 6 | #include "aos/linux_code/init.h" |
Brian Silverman | 25ff505 | 2016-01-02 14:13:46 -0800 | [diff] [blame] | 7 | #include "aos/common/util/phased_loop.h" |
Brian Silverman | 39b339e | 2016-01-03 13:24:22 -0800 | [diff] [blame] | 8 | #include "frc971/wpilib/pdp_values.q.h" |
Brian Silverman | 425492b | 2015-12-30 15:23:55 -0800 | [diff] [blame] | 9 | |
| 10 | namespace frc971 { |
| 11 | namespace wpilib { |
| 12 | |
Brian Silverman | 425492b | 2015-12-30 15:23:55 -0800 | [diff] [blame] | 13 | void PDPFetcher::operator()() { |
| 14 | ::aos::SetCurrentThreadName("PDPFetcher"); |
Brian Silverman | 39b339e | 2016-01-03 13:24:22 -0800 | [diff] [blame] | 15 | ::std::unique_ptr<PowerDistributionPanel> pdp(new PowerDistributionPanel()); |
Brian Silverman | 25ff505 | 2016-01-02 14:13:46 -0800 | [diff] [blame] | 16 | |
Austin Schuh | 8aec1ed | 2016-05-01 13:29:20 -0700 | [diff] [blame^] | 17 | ::aos::time::PhasedLoop phased_loop(::std::chrono::milliseconds(20), |
| 18 | ::std::chrono::milliseconds(4)); |
Brian Silverman | 25ff505 | 2016-01-02 14:13:46 -0800 | [diff] [blame] | 19 | |
Brian Silverman | 425492b | 2015-12-30 15:23:55 -0800 | [diff] [blame] | 20 | while (true) { |
| 21 | { |
Brian Silverman | 25ff505 | 2016-01-02 14:13:46 -0800 | [diff] [blame] | 22 | const int iterations = phased_loop.SleepUntilNext(); |
| 23 | if (iterations != 1) { |
| 24 | LOG(DEBUG, "PDPFetcher skipped %d iterations\n", iterations - 1); |
| 25 | } |
| 26 | } |
Brian Silverman | 39b339e | 2016-01-03 13:24:22 -0800 | [diff] [blame] | 27 | auto message = pdp_values.MakeMessage(); |
| 28 | message->voltage = pdp->GetVoltage(); |
| 29 | message->temperature = pdp->GetTemperature(); |
| 30 | message->power = pdp->GetTotalPower(); |
Brian Silverman | 425492b | 2015-12-30 15:23:55 -0800 | [diff] [blame] | 31 | for (int i = 0; i < 16; ++i) { |
Brian Silverman | 39b339e | 2016-01-03 13:24:22 -0800 | [diff] [blame] | 32 | message->currents[i] = pdp->GetCurrent(i); |
Brian Silverman | 425492b | 2015-12-30 15:23:55 -0800 | [diff] [blame] | 33 | } |
Brian Silverman | 39b339e | 2016-01-03 13:24:22 -0800 | [diff] [blame] | 34 | LOG_STRUCT(DEBUG, "got", *message); |
| 35 | if (!message.Send()) { |
| 36 | LOG(WARNING, "sending pdp values failed\n"); |
Brian Silverman | 425492b | 2015-12-30 15:23:55 -0800 | [diff] [blame] | 37 | } |
| 38 | } |
| 39 | } |
| 40 | |
| 41 | } // namespace wpilib |
| 42 | } // namespace frc971 |