blob: fd14df435fbfad142a493446d5d86bd6aa52bdff [file] [log] [blame]
brians343bc112013-02-10 01:53:46 +00001#define __STDC_LIMIT_MACROS
2
3#include <arpa/inet.h>
4
5#include "aos/aos_core.h"
6#include "aos/common/inttypes.h"
7#include "aos/common/input/SensorInput.h"
8
9#include "frc971/control_loops/DriveTrain.q.h"
10#include "frc971/queues/sensor_values.h"
11
12#define M_PI 3.14159265358979323846
13
14using ::frc971::control_loops::drivetrain;
15
16namespace frc971 {
17
18namespace {
19inline double drivetrain_translate(int32_t in) {
20 // TODO(2013) fix the math
21 return static_cast<double>(in) / (256.0 * 4.0 * 44.0 / 32.0) *
22 (3.5 * 2.54 / 100.0 * M_PI);
23}
24} // namespace
25
26class SensorReader : public aos::SensorInput<sensor_values> {
27 virtual void RunIteration(sensor_values &sensors) {
28 for (size_t i = 0; i < sizeof(sensors.encoders) / sizeof(sensors.encoders[0]); ++i) {
29 sensors.encoders[i] = ntohl(sensors.encoders[i]);
30 }
31
32 // TODO(aschuh): Convert to meters.
33 const double left_encoder = drivetrain_translate(sensors.lencoder);
34 const double right_encoder = drivetrain_translate(sensors.rencoder);
35 drivetrain.position.MakeWithBuilder()
36 .left_encoder(left_encoder)
37 .right_encoder(right_encoder)
38 .Send();
39 }
40};
41
42} // namespace frc971
43
44AOS_RUN(frc971::SensorReader)