blob: 7bacbd1188472c65856e26d44634b79761714dcc [file] [log] [blame]
Brian Silvermanbfbbe872019-02-10 18:00:57 -08001#ifndef Y2019_JEVOIS_UART_H_
2#define Y2019_JEVOIS_UART_H_
3
James Kuszmaul3ae42262019-11-08 12:33:41 -08004#include <optional>
Austin Schuhb72be802022-01-02 12:26:28 -08005
6#include "absl/types/span.h"
Philipp Schrader790cb542023-07-05 21:06:52 -07007
Austin Schuhb72be802022-01-02 12:26:28 -08008#include "aos/containers/sized_array.h"
Brian Silverman2eb89762019-02-17 15:16:37 -08009#include "y2019/jevois/cobs.h"
Brian Silvermanbfbbe872019-02-10 18:00:57 -080010#include "y2019/jevois/structures.h"
11
12// This file manages serializing and deserializing the various structures for
13// transport via UART.
14
Stephan Pleinesd99b1ee2024-02-02 20:56:44 -080015namespace frc971::jevois {
Brian Silvermanbfbbe872019-02-10 18:00:57 -080016
Brian Silverman2eb89762019-02-17 15:16:37 -080017constexpr size_t uart_to_teensy_size() {
Brian Silvermana1e4d332019-02-17 22:53:13 -080018 return 1 /* number of targets */ +
19 3 /* targets */ * (sizeof(float) * 4 /* fields */) + 1 /* age */ +
Brian Silverman2eb89762019-02-17 15:16:37 -080020 2 /* CRC-16 */;
Brian Silvermanbfbbe872019-02-10 18:00:57 -080021}
Brian Silverman2eb89762019-02-17 15:16:37 -080022using UartToTeensyBuffer =
23 aos::SizedArray<char, CobsMaxEncodedSize(uart_to_teensy_size())>;
Brian Silvermanbfbbe872019-02-10 18:00:57 -080024
Brian Silverman2eb89762019-02-17 15:16:37 -080025constexpr size_t uart_to_camera_size() {
26 return sizeof(float) * 3 * 4 /* calibration */ +
27 sizeof(int64_t) /* teensy_now */ + sizeof(int64_t) /* realtime_now */ +
28 1 /* camera_command */ + 2 /* CRC-16 */;
29}
30using UartToCameraBuffer =
31 aos::SizedArray<char, CobsMaxEncodedSize(uart_to_camera_size())>;
32
Brian Silvermanc41fb862019-03-02 21:14:46 -080033UartToTeensyBuffer UartPackToTeensy(const CameraFrame &message);
Austin Schuhb72be802022-01-02 12:26:28 -080034std::optional<CameraFrame> UartUnpackToTeensy(absl::Span<const char> buffer);
Brian Silverman2eb89762019-02-17 15:16:37 -080035
36UartToCameraBuffer UartPackToCamera(const CameraCalibration &message);
James Kuszmaul3ae42262019-11-08 12:33:41 -080037std::optional<CameraCalibration> UartUnpackToCamera(
Austin Schuhb72be802022-01-02 12:26:28 -080038 absl::Span<const char> buffer);
Brian Silvermanbfbbe872019-02-10 18:00:57 -080039
Stephan Pleinesd99b1ee2024-02-02 20:56:44 -080040} // namespace frc971::jevois
Brian Silvermanbfbbe872019-02-10 18:00:57 -080041
42#endif // Y2019_JEVOIS_UART_H_