blob: 86957855a86743d44407a5dd540364f210153d8e [file] [log] [blame]
Brian Silverman3204dd82013-03-12 18:42:01 -07001#include "frc971/input/sensor_unpacker.h"
2
3#include <arpa/inet.h>
4
5#include "aos/common/inttypes.h"
6
7#include "frc971/control_loops/DriveTrain.q.h"
8
9#define M_PI 3.14159265358979323846
10
11using ::frc971::control_loops::drivetrain;
12
13namespace frc971 {
14namespace {
15
16inline double drivetrain_translate(int32_t in) {
17 // TODO(2013) fix the math
18 return static_cast<double>(in) / (256.0 * 4.0 * 44.0 / 32.0) *
19 (3.5 * 2.54 / 100.0 * M_PI);
20}
21
22} // namespace
23
24SensorUnpacker::SensorUnpacker() {}
25
26void SensorUnpacker::UnpackFrom(sensor_values *values) {
27 for (size_t i = 0; i < sizeof(values->encoders) / sizeof(values->encoders[0]); ++i) {
28 values->encoders[i] = ntohl(values->encoders[i]);
29 }
30
31 // TODO(aschuh): Convert to meters.
Brian Silvermanc6aa51a2013-03-15 17:06:27 -070032 const double left_encoder = drivetrain_translate(
33 values->drive_left_encoder);
34 const double right_encoder = drivetrain_translate(
35 values->drive_right_encoder);
Brian Silverman3204dd82013-03-12 18:42:01 -070036 drivetrain.position.MakeWithBuilder()
37 .left_encoder(left_encoder)
38 .right_encoder(right_encoder)
39 .Send();
40}
41
42} // namespace frc971