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 | |
| 4 | #include <stdint.h> |
| 5 | |
| 6 | #include <array> |
| 7 | |
Brian Silverman | a10b87e | 2019-02-24 15:20:07 -0800 | [diff] [blame] | 8 | #include "third_party/GSL/include/gsl/gsl" |
James Kuszmaul | 3ae4226 | 2019-11-08 12:33:41 -0800 | [diff] [blame^] | 9 | #include <optional> |
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 | |
| 17 | namespace frc971 { |
| 18 | namespace jevois { |
| 19 | |
| 20 | constexpr size_t spi_transfer_size() { |
| 21 | // The teensy->RoboRIO side is way bigger, so just calculate that. |
| 22 | return 3 /* 3 frames */ * |
| 23 | (1 /* age */ + 3 /* targets */ * 4 /* target size */) + |
| 24 | 2 /* CRC-16 */; |
| 25 | } |
| 26 | static_assert(spi_transfer_size() == 41, "hand math is wrong"); |
| 27 | using SpiTransfer = std::array<char, spi_transfer_size()>; |
| 28 | |
| 29 | SpiTransfer SpiPackToRoborio(const TeensyToRoborio &message); |
James Kuszmaul | 3ae4226 | 2019-11-08 12:33:41 -0800 | [diff] [blame^] | 30 | std::optional<TeensyToRoborio> SpiUnpackToRoborio( |
Brian Silverman | a10b87e | 2019-02-24 15:20:07 -0800 | [diff] [blame] | 31 | gsl::span<const char, spi_transfer_size()> transfer); |
| 32 | SpiTransfer SpiPackToTeensy(const RoborioToTeensy &message); |
James Kuszmaul | 3ae4226 | 2019-11-08 12:33:41 -0800 | [diff] [blame^] | 33 | std::optional<RoborioToTeensy> SpiUnpackToTeensy( |
Brian Silverman | a10b87e | 2019-02-24 15:20:07 -0800 | [diff] [blame] | 34 | gsl::span<const char, spi_transfer_size()> transfer); |
Brian Silverman | 246cb22 | 2019-02-02 16:38:18 -0800 | [diff] [blame] | 35 | |
| 36 | } // namespace jevois |
| 37 | } // namespace frc971 |
| 38 | |
| 39 | #endif // Y2019_JEVOIS_SPI_H_ |