blob: 3c2eb0af9ba5dd620584ebe5b37c586a4f8ef214 [file]
#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