blob: d3eebeeab7601d220ec7ace99691f416c99c7811 [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
15namespace frc971 {
16namespace jevois {
17
Brian Silverman2eb89762019-02-17 15:16:37 -080018constexpr size_t uart_to_teensy_size() {
Brian Silvermana1e4d332019-02-17 22:53:13 -080019 return 1 /* number of targets */ +
20 3 /* targets */ * (sizeof(float) * 4 /* fields */) + 1 /* age */ +
Brian Silverman2eb89762019-02-17 15:16:37 -080021 2 /* CRC-16 */;
Brian Silvermanbfbbe872019-02-10 18:00:57 -080022}
Brian Silverman2eb89762019-02-17 15:16:37 -080023using UartToTeensyBuffer =
24 aos::SizedArray<char, CobsMaxEncodedSize(uart_to_teensy_size())>;
Brian Silvermanbfbbe872019-02-10 18:00:57 -080025
Brian Silverman2eb89762019-02-17 15:16:37 -080026constexpr size_t uart_to_camera_size() {
27 return sizeof(float) * 3 * 4 /* calibration */ +
28 sizeof(int64_t) /* teensy_now */ + sizeof(int64_t) /* realtime_now */ +
29 1 /* camera_command */ + 2 /* CRC-16 */;
30}
31using UartToCameraBuffer =
32 aos::SizedArray<char, CobsMaxEncodedSize(uart_to_camera_size())>;
33
Brian Silvermanc41fb862019-03-02 21:14:46 -080034UartToTeensyBuffer UartPackToTeensy(const CameraFrame &message);
Austin Schuhb72be802022-01-02 12:26:28 -080035std::optional<CameraFrame> UartUnpackToTeensy(absl::Span<const char> buffer);
Brian Silverman2eb89762019-02-17 15:16:37 -080036
37UartToCameraBuffer UartPackToCamera(const CameraCalibration &message);
James Kuszmaul3ae42262019-11-08 12:33:41 -080038std::optional<CameraCalibration> UartUnpackToCamera(
Austin Schuhb72be802022-01-02 12:26:28 -080039 absl::Span<const char> buffer);
Brian Silvermanbfbbe872019-02-10 18:00:57 -080040
41} // namespace jevois
42} // namespace frc971
43
44#endif // Y2019_JEVOIS_UART_H_