blob: b71aa3a87c534717aa904ab9030ad9db350d74dc [file] [log] [blame]
Brian Silverman65e49702014-04-30 17:36:40 -07001#include "aos/common/controls/control_loop_test.h"
2
3#include "aos/common/messages/robot_state.q.h"
Brian Silverman65e49702014-04-30 17:36:40 -07004
5namespace aos {
6namespace testing {
7
Austin Schuh6a6f90c2016-11-25 21:36:42 -08008constexpr ::std::chrono::milliseconds ControlLoopTest::kTimeTick;
9constexpr ::std::chrono::milliseconds ControlLoopTest::kDSPacketTime;
Brian Silvermane6f64ab2015-02-05 17:03:56 -050010
Brian Silverman65e49702014-04-30 17:36:40 -070011ControlLoopTest::ControlLoopTest() {
Brian Silverman699f0cb2015-02-05 19:45:01 -050012 ::aos::joystick_state.Clear();
Brian Silverman65e49702014-04-30 17:36:40 -070013 ::aos::robot_state.Clear();
Brian Silverman65e49702014-04-30 17:36:40 -070014
Austin Schuh6a6f90c2016-11-25 21:36:42 -080015 ::aos::time::EnableMockTime(current_time_);
Brian Silverman65e49702014-04-30 17:36:40 -070016
Brian Silverman699f0cb2015-02-05 19:45:01 -050017 SendMessages(false);
Brian Silverman65e49702014-04-30 17:36:40 -070018}
19
20ControlLoopTest::~ControlLoopTest() {
Brian Silverman699f0cb2015-02-05 19:45:01 -050021 ::aos::joystick_state.Clear();
Brian Silverman65e49702014-04-30 17:36:40 -070022 ::aos::robot_state.Clear();
Brian Silverman65e49702014-04-30 17:36:40 -070023
Austin Schuh6a6f90c2016-11-25 21:36:42 -080024 ::aos::time::DisableMockTime();
Brian Silverman65e49702014-04-30 17:36:40 -070025}
26
Brian Silvermane6f64ab2015-02-05 17:03:56 -050027void ControlLoopTest::SendMessages(bool enabled) {
Austin Schuh6a6f90c2016-11-25 21:36:42 -080028 if (current_time_ >= kDSPacketTime + last_ds_time_ ||
Campbell Crowley152c7cf2016-02-14 21:20:50 -080029 last_enabled_ != enabled) {
Brian Silvermane6f64ab2015-02-05 17:03:56 -050030 last_ds_time_ = current_time_;
Brian Silverman699f0cb2015-02-05 19:45:01 -050031 auto new_state = ::aos::joystick_state.MakeMessage();
32 new_state->fake = true;
33
34 new_state->enabled = enabled;
35 new_state->autonomous = false;
Philipp Schraderf75a8bf2015-02-02 05:30:16 +000036 new_state->team_id = team_id_;
Brian Silverman699f0cb2015-02-05 19:45:01 -050037
38 new_state.Send();
Campbell Crowley152c7cf2016-02-14 21:20:50 -080039 last_enabled_ = enabled;
Brian Silverman65e49702014-04-30 17:36:40 -070040 }
Brian Silverman699f0cb2015-02-05 19:45:01 -050041
42 {
43 auto new_state = ::aos::robot_state.MakeMessage();
44
Brian Silverman57cad222015-02-14 20:46:41 -050045 new_state->reader_pid = reader_pid_;
Brian Silverman699f0cb2015-02-05 19:45:01 -050046 new_state->outputs_enabled = enabled;
47 new_state->browned_out = false;
48
49 new_state->is_3v3_active = true;
50 new_state->is_5v_active = true;
51 new_state->voltage_3v3 = 3.3;
52 new_state->voltage_5v = 5.0;
53
Austin Schuhe5f064d2016-03-05 17:43:51 -080054 new_state->voltage_roborio_in = battery_voltage_;
55 new_state->voltage_battery = battery_voltage_;
Brian Silverman699f0cb2015-02-05 19:45:01 -050056
57 new_state.Send();
Brian Silverman65e49702014-04-30 17:36:40 -070058 }
Brian Silverman65e49702014-04-30 17:36:40 -070059}
60
61} // namespace testing
62} // namespace aos