6565#include " andino/app/app.h"
6666
6767#include < stdio.h>
68+ #include < stdlib.h>
69+ #include < string.h>
6870
6971#include < Adafruit_BNO055.h>
7072#include < Adafruit_Sensor.h>
7880namespace andino {
7981
8082void App::setup () {
81- // Required by Arduino libraries to work.
82- init ();
83-
8483 serial_stream_.begin (Constants::kBaudrate );
8584
8685 left_encoder_.begin ();
@@ -96,7 +95,7 @@ void App::setup() {
9695
9796 // Initialize command shell.
9897 shell_.set_serial_stream (&serial_stream_);
99- shell_.set_default_callback (cmd_unknown_cb);
98+ shell_.set_default_callback (cmd_unknown_cb, this );
10099 shell_.register_command (Commands::kReadAnalogGpio , cmd_read_analog_gpio_cb, this );
101100 shell_.register_command (Commands::kReadDigitalGpio , cmd_read_digital_gpio_cb, this );
102101 shell_.register_command (Commands::kReadEncoders , cmd_read_encoders_cb, this );
@@ -129,40 +128,38 @@ void App::loop() {
129128 last_set_motors_speed_cmd_ = clock_.millis ();
130129 stop_motors ();
131130 }
132-
133- // Required by Arduino libraries to work.
134- if (serialEventRun) {
135- serialEventRun ();
136- }
137131}
138132
139- void App::cmd_unknown_cb (void *, int , char **) {
140- Serial.println (" Unknown command." );
133+ void App::cmd_unknown_cb (void * context, int , char **) {
134+ App* app = static_cast <App*>(context);
135+ app->serial_stream_ .println (" Unknown command." );
141136}
142137
143- void App::cmd_read_analog_gpio_cb (void *, int argc, char ** argv) {
138+ void App::cmd_read_analog_gpio_cb (void * context , int argc, char ** argv) {
144139 if (argc < 2 ) {
145140 return ;
146141 }
147142
143+ App* app = static_cast <App*>(context);
148144 const int pin = atoi (argv[1 ]);
149- Serial .println (analogRead (pin));
145+ app-> serial_stream_ .println (analogRead (pin));
150146}
151147
152- void App::cmd_read_digital_gpio_cb (void *, int argc, char ** argv) {
148+ void App::cmd_read_digital_gpio_cb (void * context , int argc, char ** argv) {
153149 if (argc < 2 ) {
154150 return ;
155151 }
156152
153+ App* app = static_cast <App*>(context);
157154 const int pin = atoi (argv[1 ]);
158- Serial .println (digitalRead (pin));
155+ app-> serial_stream_ .println (digitalRead (pin));
159156}
160157
161158void App::cmd_read_encoders_cb (void * context, int , char **) {
162159 App* app = static_cast <App*>(context);
163- Serial .print (app->left_encoder_ .read ());
164- Serial .print (" " );
165- Serial .println (app->right_encoder_ .read ());
160+ app-> serial_stream_ .print (app->left_encoder_ .read ());
161+ app-> serial_stream_ .print (" " );
162+ app-> serial_stream_ .println (app->right_encoder_ .read ());
166163}
167164
168165void App::cmd_reset_encoders_cb (void * context, int , char **) {
@@ -171,7 +168,7 @@ void App::cmd_reset_encoders_cb(void* context, int, char**) {
171168 app->right_encoder_ .reset ();
172169 app->left_pid_controller_ .reset (app->left_encoder_ .read ());
173170 app->right_pid_controller_ .reset (app->right_encoder_ .read ());
174- Serial .println (" OK" );
171+ app-> serial_stream_ .println (" OK" );
175172}
176173
177174void App::cmd_set_motors_speed_cb (void * context, int argc, char ** argv) {
@@ -201,7 +198,7 @@ void App::cmd_set_motors_speed_cb(void* context, int argc, char** argv) {
201198 // Constants::kPidRate.
202199 app->left_pid_controller_ .set_setpoint (left_motor_speed / Constants::kPidRate );
203200 app->right_pid_controller_ .set_setpoint (right_motor_speed / Constants::kPidRate );
204- Serial .println (" OK" );
201+ app-> serial_stream_ .println (" OK" );
205202}
206203
207204void App::cmd_set_motors_pwm_cb (void * context, int argc, char ** argv) {
@@ -224,7 +221,7 @@ void App::cmd_set_motors_pwm_cb(void* context, int argc, char** argv) {
224221
225222 app->left_motor_ .set_speed (left_motor_pwm);
226223 app->right_motor_ .set_speed (right_motor_pwm);
227- Serial .println (" OK" );
224+ app-> serial_stream_ .println (" OK" );
228225}
229226
230227void App::cmd_set_pid_tuning_gains_cb (void * context, int argc, char ** argv) {
@@ -249,63 +246,63 @@ void App::cmd_set_pid_tuning_gains_cb(void* context, int argc, char** argv) {
249246 }
250247 app->left_pid_controller_ .set_tunings (pid_args[0 ], pid_args[1 ], pid_args[2 ], pid_args[3 ]);
251248 app->right_pid_controller_ .set_tunings (pid_args[0 ], pid_args[1 ], pid_args[2 ], pid_args[3 ]);
252- Serial .print (" PID Updated: " );
253- Serial .print (pid_args[0 ]);
254- Serial .print (" " );
255- Serial .print (pid_args[1 ]);
256- Serial .print (" " );
257- Serial .print (pid_args[2 ]);
258- Serial .print (" " );
259- Serial .println (pid_args[3 ]);
260- Serial .println (" OK" );
249+ app-> serial_stream_ .print (" PID Updated: " );
250+ app-> serial_stream_ .print (pid_args[0 ]);
251+ app-> serial_stream_ .print (" " );
252+ app-> serial_stream_ .print (pid_args[1 ]);
253+ app-> serial_stream_ .print (" " );
254+ app-> serial_stream_ .print (pid_args[2 ]);
255+ app-> serial_stream_ .print (" " );
256+ app-> serial_stream_ .println (pid_args[3 ]);
257+ app-> serial_stream_ .println (" OK" );
261258}
262259
263260void App::cmd_get_is_imu_connected_cb (void * context, int , char **) {
264261 App* app = static_cast <App*>(context);
265- Serial .println (app->is_imu_connected );
262+ app-> serial_stream_ .println (app->is_imu_connected );
266263}
267264
268265void App::cmd_read_encoders_and_imu_cb (void * context, int , char **) {
269266 App* app = static_cast <App*>(context);
270- Serial .print (app->left_encoder_ .read ());
271- Serial .print (" " );
272- Serial .print (app->right_encoder_ .read ());
273- Serial .print (" " );
267+ app-> serial_stream_ .print (app->left_encoder_ .read ());
268+ app-> serial_stream_ .print (" " );
269+ app-> serial_stream_ .print (app->right_encoder_ .read ());
270+ app-> serial_stream_ .print (" " );
274271
275272 // Retrieve absolute orientation (quaternion). See
276273 // https://learn.adafruit.com/adafruit-bno055-absolute-orientation-sensor/overview for further
277274 // information.
278275 imu::Quaternion orientation = app->bno055_imu_ .getQuat ();
279- Serial .print (orientation.x (), 4 );
280- Serial .print (" " );
281- Serial .print (orientation.y (), 4 );
282- Serial .print (" " );
283- Serial .print (orientation.z (), 4 );
284- Serial .print (" " );
285- Serial .print (orientation.w (), 4 );
286- Serial .print (" " );
276+ app-> serial_stream_ .print (orientation.x (), 4 );
277+ app-> serial_stream_ .print (" " );
278+ app-> serial_stream_ .print (orientation.y (), 4 );
279+ app-> serial_stream_ .print (" " );
280+ app-> serial_stream_ .print (orientation.z (), 4 );
281+ app-> serial_stream_ .print (" " );
282+ app-> serial_stream_ .print (orientation.w (), 4 );
283+ app-> serial_stream_ .print (" " );
287284
288285 // Retrieve angular velocity (rad/s). See
289286 // https://learn.adafruit.com/adafruit-bno055-absolute-orientation-sensor/overview for further
290287 // information.
291288 imu::Vector<3 > angular_velocity = app->bno055_imu_ .getVector (Adafruit_BNO055::VECTOR_GYROSCOPE );
292- Serial .print (angular_velocity.x ());
293- Serial .print (" " );
294- Serial .print (angular_velocity.y ());
295- Serial .print (" " );
296- Serial .print (angular_velocity.z ());
297- Serial .print (" " );
289+ app-> serial_stream_ .print (angular_velocity.x ());
290+ app-> serial_stream_ .print (" " );
291+ app-> serial_stream_ .print (angular_velocity.y ());
292+ app-> serial_stream_ .print (" " );
293+ app-> serial_stream_ .print (angular_velocity.z ());
294+ app-> serial_stream_ .print (" " );
298295
299296 // Retrieve linear acceleration (m/s^2). See
300297 // https://learn.adafruit.com/adafruit-bno055-absolute-orientation-sensor/overview for further
301298 // information.
302299 imu::Vector<3 > linear_acceleration =
303300 app->bno055_imu_ .getVector (Adafruit_BNO055::VECTOR_LINEARACCEL );
304- Serial .print (linear_acceleration.x ());
305- Serial .print (" " );
306- Serial .print (linear_acceleration.y ());
307- Serial .print (" " );
308- Serial .print (linear_acceleration.z ());
301+ app-> serial_stream_ .print (linear_acceleration.x ());
302+ app-> serial_stream_ .print (" " );
303+ app-> serial_stream_ .print (linear_acceleration.y ());
304+ app-> serial_stream_ .print (" " );
305+ app-> serial_stream_ .print (linear_acceleration.z ());
309306}
310307
311308void App::adjust_motors_speed () {
0 commit comments