| #include "libhoth_spi.hpp" |
| |
| #include <fcntl.h> |
| #include <linux/spi/spidev.h> |
| #include <linux/types.h> |
| #include <sys/ioctl.h> |
| #include <unistd.h> |
| |
| #include <cstdint> |
| #include <cstdio> |
| #include <cstdlib> |
| #include <cstring> |
| #include <type_traits> |
| |
| namespace google |
| { |
| namespace hoth |
| { |
| namespace |
| { |
| template <typename T> |
| int convertStatus(T status) |
| { |
| if constexpr (std::is_same_v<std::decay_t<T>, int>) |
| { |
| return status; |
| } |
| else |
| { |
| return static_cast<int>( |
| static_cast<int32_t>(LIBHOTH_ERR_GET_CODE(status))); |
| } |
| } |
| } // namespace |
| |
| int LibHothSpiDevImpl::open(const option* opt, device** dev) |
| { |
| return convertStatus(::libhoth_spi_open(opt, dev)); |
| } |
| |
| int LibHothSpiDevImpl::send(device* dev, const void* request, size_t size) |
| { |
| return convertStatus(dev->send(dev, request, size)); |
| } |
| |
| int LibHothSpiDevImpl::recv(device* dev, void* response, size_t response_size, |
| size_t* actual_size, int timeout_ms) |
| { |
| return convertStatus( |
| dev->receive(dev, response, response_size, actual_size, timeout_ms)); |
| } |
| |
| int LibHothSpiDevImpl::close(device* dev) |
| { |
| return convertStatus(dev->close(dev)); |
| } |
| |
| int LibHothSpiDevImpl::claim(device* dev) |
| { |
| return convertStatus(dev->claim(dev)); |
| } |
| |
| int LibHothSpiDevImpl::release(device* dev) |
| { |
| return convertStatus(dev->release(dev)); |
| } |
| |
| LibHothSpiDevImpl libhoth_spidev; |
| } // namespace hoth |
| |
| } // namespace google |