blob: 61c2fe0d05eca96840f976f3de5c5466df19ac50 [file] [log] [blame]
John Park33858a32018-09-28 23:05:48 -07001#include "aos/controls/control_loop_test.h"
Brian Silverman65e49702014-04-30 17:36:40 -07002
John Park33858a32018-09-28 23:05:48 -07003#include "aos/robot_state/robot_state.q.h"
4#include "aos/logging/queue_logging.h"
Brian Silverman65e49702014-04-30 17:36:40 -07005
6namespace aos {
7namespace testing {
8
Austin Schuh6a6f90c2016-11-25 21:36:42 -08009constexpr ::std::chrono::milliseconds ControlLoopTest::kTimeTick;
10constexpr ::std::chrono::milliseconds ControlLoopTest::kDSPacketTime;
Brian Silvermane6f64ab2015-02-05 17:03:56 -050011
Brian Silverman65e49702014-04-30 17:36:40 -070012ControlLoopTest::ControlLoopTest() {
Brian Silverman699f0cb2015-02-05 19:45:01 -050013 ::aos::joystick_state.Clear();
Brian Silverman65e49702014-04-30 17:36:40 -070014 ::aos::robot_state.Clear();
Brian Silverman65e49702014-04-30 17:36:40 -070015
Austin Schuh6a6f90c2016-11-25 21:36:42 -080016 ::aos::time::EnableMockTime(current_time_);
Brian Silverman65e49702014-04-30 17:36:40 -070017
Brian Silverman699f0cb2015-02-05 19:45:01 -050018 SendMessages(false);
Brian Silverman65e49702014-04-30 17:36:40 -070019}
20
21ControlLoopTest::~ControlLoopTest() {
Brian Silverman699f0cb2015-02-05 19:45:01 -050022 ::aos::joystick_state.Clear();
Brian Silverman65e49702014-04-30 17:36:40 -070023 ::aos::robot_state.Clear();
Brian Silverman65e49702014-04-30 17:36:40 -070024
Austin Schuh6a6f90c2016-11-25 21:36:42 -080025 ::aos::time::DisableMockTime();
Brian Silverman65e49702014-04-30 17:36:40 -070026}
27
Brian Silvermane6f64ab2015-02-05 17:03:56 -050028void ControlLoopTest::SendMessages(bool enabled) {
Austin Schuh6a6f90c2016-11-25 21:36:42 -080029 if (current_time_ >= kDSPacketTime + last_ds_time_ ||
Campbell Crowley152c7cf2016-02-14 21:20:50 -080030 last_enabled_ != enabled) {
Brian Silvermane6f64ab2015-02-05 17:03:56 -050031 last_ds_time_ = current_time_;
Brian Silverman699f0cb2015-02-05 19:45:01 -050032 auto new_state = ::aos::joystick_state.MakeMessage();
33 new_state->fake = true;
34
35 new_state->enabled = enabled;
36 new_state->autonomous = false;
Philipp Schraderf75a8bf2015-02-02 05:30:16 +000037 new_state->team_id = team_id_;
Brian Silverman699f0cb2015-02-05 19:45:01 -050038
39 new_state.Send();
Campbell Crowley152c7cf2016-02-14 21:20:50 -080040 last_enabled_ = enabled;
Brian Silverman65e49702014-04-30 17:36:40 -070041 }
Brian Silverman699f0cb2015-02-05 19:45:01 -050042
43 {
44 auto new_state = ::aos::robot_state.MakeMessage();
45
Brian Silverman57cad222015-02-14 20:46:41 -050046 new_state->reader_pid = reader_pid_;
Brian Silverman699f0cb2015-02-05 19:45:01 -050047 new_state->outputs_enabled = enabled;
48 new_state->browned_out = false;
49
50 new_state->is_3v3_active = true;
51 new_state->is_5v_active = true;
52 new_state->voltage_3v3 = 3.3;
53 new_state->voltage_5v = 5.0;
54
Austin Schuhe5f064d2016-03-05 17:43:51 -080055 new_state->voltage_roborio_in = battery_voltage_;
56 new_state->voltage_battery = battery_voltage_;
Brian Silverman699f0cb2015-02-05 19:45:01 -050057
Austin Schuh61bdc602016-12-04 19:10:10 -080058 LOG_STRUCT(INFO, "robot_state", *new_state);
Brian Silverman699f0cb2015-02-05 19:45:01 -050059 new_state.Send();
Brian Silverman65e49702014-04-30 17:36:40 -070060 }
Brian Silverman65e49702014-04-30 17:36:40 -070061}
62
63} // namespace testing
64} // namespace aos