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