diff --git a/common/gpio/gpioDefinitions.h b/common/gpio/gpioDefinitions.h index b56a476..710b2e2 100644 --- a/common/gpio/gpioDefinitions.h +++ b/common/gpio/gpioDefinitions.h @@ -61,7 +61,7 @@ public: virtual~ GpioBase() {}; - /* Can be used to cast GpioBase to a concrete child implementation */ + // Can be used to cast GpioBase to a concrete child implementation gpio::GpioTypes gpioType = gpio::GpioTypes::NONE; std::string consumer; gpio::Direction direction = gpio::Direction::IN; @@ -70,13 +70,21 @@ public: class GpiodRegular: public GpioBase { public: - GpiodRegular(): GpioBase(gpio::GpioTypes::GPIO_REGULAR, std::string(), - gpio::Direction::IN, 0) {}; + GpiodRegular() : + GpioBase(gpio::GpioTypes::GPIO_REGULAR, std::string(), gpio::Direction::IN, 0) { + } + ; GpiodRegular(std::string chipname_, int lineNum_, std::string consumer_, - gpio::Direction direction_, int initValue_): + gpio::Direction direction_, int initValue_) : GpioBase(gpio::GpioTypes::GPIO_REGULAR, consumer_, direction_, initValue_), - chipname(chipname_), lineNum(lineNum_) {} + chipname(chipname_), lineNum(lineNum_) { + } + + GpiodRegular(std::string chipname_, int lineNum_, std::string consumer_) : + GpioBase(gpio::GpioTypes::GPIO_REGULAR, consumer_, gpio::Direction::IN, 0), + chipname(chipname_), lineNum(lineNum_) { + } std::string chipname; int lineNum = 0; struct gpiod_line* lineHandle = nullptr; diff --git a/linux/gpio/LinuxLibgpioIF.h b/linux/gpio/LinuxLibgpioIF.h index 093e95a..00e1bdf 100644 --- a/linux/gpio/LinuxLibgpioIF.h +++ b/linux/gpio/LinuxLibgpioIF.h @@ -17,7 +17,7 @@ class GpioCookie; class LinuxLibgpioIF : public GpioIF, public SystemObject { public: - static const uint8_t gpioRetvalId = CLASS_ID::LINUX_LIBGPIO_IF; + static const uint8_t gpioRetvalId = CLASS_ID::HAL_GPIO; static constexpr ReturnValue_t UNKNOWN_GPIO_ID = HasReturnvaluesIF::makeReturnCode(gpioRetvalId, 1); diff --git a/linux/i2c/I2cComIF.cpp b/linux/i2c/I2cComIF.cpp index 06adf30..a88b019 100644 --- a/linux/i2c/I2cComIF.cpp +++ b/linux/i2c/I2cComIF.cpp @@ -38,7 +38,7 @@ ReturnValue_t I2cComIF::initializeInterface(CookieIF* cookie) { i2cDeviceMapIter = i2cDeviceMap.find(i2cAddress); if(i2cDeviceMapIter == i2cDeviceMap.end()) { size_t maxReplyLen = i2cCookie->getMaxReplyLen(); - I2cInstance_t i2cInstance = {std::vector(maxReplyLen), 0}; + I2cInstance i2cInstance = {std::vector(maxReplyLen), 0}; auto statusPair = i2cDeviceMap.emplace(i2cAddress, i2cInstance); if (not statusPair.second) { sif::error << "I2cComIF::initializeInterface: Failed to insert device with address " << @@ -146,10 +146,16 @@ ReturnValue_t I2cComIF::requestReceiveMessage(CookieIF *cookie, uint8_t* replyBuffer = i2cDeviceMapIter->second.replyBuffer.data(); - if (read(fd, replyBuffer, requestLen) != static_cast(requestLen)) { + int readLen = read(fd, replyBuffer, requestLen); + + if (readLen != static_cast(requestLen)) { +#if FSFW_VERBOSE_LEVEL >= 1 and FSFW_CPP_OSTREAM_ENABLED == 1 sif::error << "I2cComIF::requestReceiveMessage: Reading from I2C " << "device failed with error code " << errno <<". Description" << " of error: " << strerror(errno) << std::endl; + sif::error << "I2cComIF::requestReceiveMessage: Read only " << readLen << " from " + << requestLen << " bytes" << std::endl; +#endif i2cDeviceMapIter->second.replyLen = 0; return HasReturnvaluesIF::RETURN_FAILED; } diff --git a/linux/i2c/I2cComIF.h b/linux/i2c/I2cComIF.h index 3529bde..0856c9b 100644 --- a/linux/i2c/I2cComIF.h +++ b/linux/i2c/I2cComIF.h @@ -9,8 +9,10 @@ #include /** - * @brief This is the communication interface for i2c devices connected - * to a system running a linux OS. + * @brief This is the communication interface for I2C devices connected + * to a system running a Linux OS. + * + * @note The Xilinx Linux kernel might not support to read more than 255 bytes at once. * * @author J. Meier */ @@ -31,12 +33,12 @@ public: private: - typedef struct I2cInstance { + struct I2cInstance { std::vector replyBuffer; size_t replyLen; - } I2cInstance_t; + }; - using I2cDeviceMap = std::unordered_map; + using I2cDeviceMap = std::unordered_map; using I2cDeviceMapIter = I2cDeviceMap::iterator; /* In this map all i2c devices will be registered with their address and diff --git a/linux/spi/SpiComIF.h b/linux/spi/SpiComIF.h index 60b250e..13f7603 100644 --- a/linux/spi/SpiComIF.h +++ b/linux/spi/SpiComIF.h @@ -22,7 +22,7 @@ class SpiCookie; */ class SpiComIF: public DeviceCommunicationIF, public SystemObject { public: - static constexpr uint8_t spiRetvalId = CLASS_ID::LINUX_SPI_COM_IF; + static constexpr uint8_t spiRetvalId = CLASS_ID::HAL_SPI; static constexpr ReturnValue_t OPENING_FILE_FAILED = HasReturnvaluesIF::makeReturnCode(spiRetvalId, 0); /* Full duplex (ioctl) transfer failure */