Brian Silverman | 246cb22 | 2019-02-02 16:38:18 -0800 | [diff] [blame] | 1 | #ifndef Y2019_JEVOIS_SPI_H_ |
| 2 | #define Y2019_JEVOIS_SPI_H_ |
| 3 | |
Brian Silverman | 246cb22 | 2019-02-02 16:38:18 -0800 | [diff] [blame] | 4 | #include <array> |
Tyler Chatow | bf0609c | 2021-07-31 16:13:27 -0700 | [diff] [blame] | 5 | #include <cstdint> |
| 6 | #include <optional> |
Brian Silverman | 246cb22 | 2019-02-02 16:38:18 -0800 | [diff] [blame] | 7 | |
Austin Schuh | b72be80 | 2022-01-02 12:26:28 -0800 | [diff] [blame] | 8 | #include "absl/types/span.h" |
Philipp Schrader | 790cb54 | 2023-07-05 21:06:52 -0700 | [diff] [blame] | 9 | |
Brian Silverman | 246cb22 | 2019-02-02 16:38:18 -0800 | [diff] [blame] | 10 | #include "y2019/jevois/structures.h" |
| 11 | |
| 12 | // This file manages serializing and deserializing the various structures for |
| 13 | // transport via SPI. |
| 14 | // |
| 15 | // Our SPI transfers are fixed-size to simplify everything. |
| 16 | |
Stephan Pleines | d99b1ee | 2024-02-02 20:56:44 -0800 | [diff] [blame] | 17 | namespace frc971::jevois { |
Brian Silverman | 246cb22 | 2019-02-02 16:38:18 -0800 | [diff] [blame] | 18 | |
| 19 | constexpr size_t spi_transfer_size() { |
| 20 | // The teensy->RoboRIO side is way bigger, so just calculate that. |
| 21 | return 3 /* 3 frames */ * |
| 22 | (1 /* age */ + 3 /* targets */ * 4 /* target size */) + |
| 23 | 2 /* CRC-16 */; |
| 24 | } |
| 25 | static_assert(spi_transfer_size() == 41, "hand math is wrong"); |
| 26 | using SpiTransfer = std::array<char, spi_transfer_size()>; |
| 27 | |
| 28 | SpiTransfer SpiPackToRoborio(const TeensyToRoborio &message); |
James Kuszmaul | 3ae4226 | 2019-11-08 12:33:41 -0800 | [diff] [blame] | 29 | std::optional<TeensyToRoborio> SpiUnpackToRoborio( |
Austin Schuh | b72be80 | 2022-01-02 12:26:28 -0800 | [diff] [blame] | 30 | absl::Span<const char> transfer); |
Brian Silverman | a10b87e | 2019-02-24 15:20:07 -0800 | [diff] [blame] | 31 | SpiTransfer SpiPackToTeensy(const RoborioToTeensy &message); |
James Kuszmaul | 3ae4226 | 2019-11-08 12:33:41 -0800 | [diff] [blame] | 32 | std::optional<RoborioToTeensy> SpiUnpackToTeensy( |
Austin Schuh | b72be80 | 2022-01-02 12:26:28 -0800 | [diff] [blame] | 33 | absl::Span<const char> transfer); |
Brian Silverman | 246cb22 | 2019-02-02 16:38:18 -0800 | [diff] [blame] | 34 | |
Stephan Pleines | d99b1ee | 2024-02-02 20:56:44 -0800 | [diff] [blame] | 35 | } // namespace frc971::jevois |
Brian Silverman | 246cb22 | 2019-02-02 16:38:18 -0800 | [diff] [blame] | 36 | |
| 37 | #endif // Y2019_JEVOIS_SPI_H_ |