Brian Silverman | bfbbe87 | 2019-02-10 18:00:57 -0800 | [diff] [blame] | 1 | #ifndef Y2019_JEVOIS_UART_H_ |
| 2 | #define Y2019_JEVOIS_UART_H_ |
| 3 | |
James Kuszmaul | 3ae4226 | 2019-11-08 12:33:41 -0800 | [diff] [blame] | 4 | #include <optional> |
Austin Schuh | b72be80 | 2022-01-02 12:26:28 -0800 | [diff] [blame^] | 5 | |
| 6 | #include "absl/types/span.h" |
| 7 | #include "aos/containers/sized_array.h" |
Brian Silverman | 2eb8976 | 2019-02-17 15:16:37 -0800 | [diff] [blame] | 8 | #include "y2019/jevois/cobs.h" |
Brian Silverman | bfbbe87 | 2019-02-10 18:00:57 -0800 | [diff] [blame] | 9 | #include "y2019/jevois/structures.h" |
| 10 | |
| 11 | // This file manages serializing and deserializing the various structures for |
| 12 | // transport via UART. |
| 13 | |
| 14 | namespace frc971 { |
| 15 | namespace jevois { |
| 16 | |
Brian Silverman | 2eb8976 | 2019-02-17 15:16:37 -0800 | [diff] [blame] | 17 | constexpr size_t uart_to_teensy_size() { |
Brian Silverman | a1e4d33 | 2019-02-17 22:53:13 -0800 | [diff] [blame] | 18 | return 1 /* number of targets */ + |
| 19 | 3 /* targets */ * (sizeof(float) * 4 /* fields */) + 1 /* age */ + |
Brian Silverman | 2eb8976 | 2019-02-17 15:16:37 -0800 | [diff] [blame] | 20 | 2 /* CRC-16 */; |
Brian Silverman | bfbbe87 | 2019-02-10 18:00:57 -0800 | [diff] [blame] | 21 | } |
Brian Silverman | 2eb8976 | 2019-02-17 15:16:37 -0800 | [diff] [blame] | 22 | using UartToTeensyBuffer = |
| 23 | aos::SizedArray<char, CobsMaxEncodedSize(uart_to_teensy_size())>; |
Brian Silverman | bfbbe87 | 2019-02-10 18:00:57 -0800 | [diff] [blame] | 24 | |
Brian Silverman | 2eb8976 | 2019-02-17 15:16:37 -0800 | [diff] [blame] | 25 | constexpr 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 | } |
| 30 | using UartToCameraBuffer = |
| 31 | aos::SizedArray<char, CobsMaxEncodedSize(uart_to_camera_size())>; |
| 32 | |
Brian Silverman | c41fb86 | 2019-03-02 21:14:46 -0800 | [diff] [blame] | 33 | UartToTeensyBuffer UartPackToTeensy(const CameraFrame &message); |
Austin Schuh | b72be80 | 2022-01-02 12:26:28 -0800 | [diff] [blame^] | 34 | std::optional<CameraFrame> UartUnpackToTeensy(absl::Span<const char> buffer); |
Brian Silverman | 2eb8976 | 2019-02-17 15:16:37 -0800 | [diff] [blame] | 35 | |
| 36 | UartToCameraBuffer UartPackToCamera(const CameraCalibration &message); |
James Kuszmaul | 3ae4226 | 2019-11-08 12:33:41 -0800 | [diff] [blame] | 37 | std::optional<CameraCalibration> UartUnpackToCamera( |
Austin Schuh | b72be80 | 2022-01-02 12:26:28 -0800 | [diff] [blame^] | 38 | absl::Span<const char> buffer); |
Brian Silverman | bfbbe87 | 2019-02-10 18:00:57 -0800 | [diff] [blame] | 39 | |
| 40 | } // namespace jevois |
| 41 | } // namespace frc971 |
| 42 | |
| 43 | #endif // Y2019_JEVOIS_UART_H_ |