SPI update, Version bump #22

Merged
meierj merged 52 commits from mueller/spi-com-if-tested into develop 2021-03-04 18:23:43 +01:00
10 changed files with 81 additions and 77 deletions
Showing only changes of commit 101a7696c3 - Show all commits

View File

@ -3,6 +3,7 @@
#include <fsfwconfig/devices/powerSwitcherList.h> #include <fsfwconfig/devices/powerSwitcherList.h>
#include <fsfw/ipc/QueueFactory.h> #include <fsfw/ipc/QueueFactory.h>
#include <devices/gpioIds.h> #include <devices/gpioIds.h>
#include <linux/gpio/GpioCookie.h>
HeaterHandler::HeaterHandler(object_id_t setObjectId_, object_id_t gpioDriverId_, HeaterHandler::HeaterHandler(object_id_t setObjectId_, object_id_t gpioDriverId_,
CookieIF * gpioCookie_, object_id_t mainLineSwitcherObjectId_, uint8_t mainLineSwitch_) : CookieIF * gpioCookie_, object_id_t mainLineSwitcherObjectId_, uint8_t mainLineSwitch_) :
@ -43,7 +44,7 @@ ReturnValue_t HeaterHandler::initialize() {
return ObjectManagerIF::CHILD_INIT_FAILED; return ObjectManagerIF::CHILD_INIT_FAILED;
} }
result = gpioInterface->initialize(gpioCookie); result = gpioInterface->initialize(dynamic_cast<GpioCookie*>(gpioCookie));
if (result != RETURN_OK) { if (result != RETURN_OK) {
sif::error << "HeaterHandler::initialize: Failed to initialize Gpio interface" << std::endl; sif::error << "HeaterHandler::initialize: Failed to initialize Gpio interface" << std::endl;
return ObjectManagerIF::CHILD_INIT_FAILED; return ObjectManagerIF::CHILD_INIT_FAILED;

View File

@ -1,5 +1,5 @@
#ifndef BSP_LINUX_COMIF_COOKIES_CSPCOMIF_H_ #ifndef LINUX_CSP_CSPCOMIF_H_
#define BSP_LINUX_COMIF_COOKIES_CSPCOMIF_H_ #define LINUX_CSP_CSPCOMIF_H_
#include <fsfw/devicehandlers/DeviceCommunicationIF.h> #include <fsfw/devicehandlers/DeviceCommunicationIF.h>
#include <fsfw/objectmanager/SystemObject.h> #include <fsfw/objectmanager/SystemObject.h>
@ -86,4 +86,4 @@ private:
void initiatePingRequest(uint8_t cspAddress, uint16_t querySize); void initiatePingRequest(uint8_t cspAddress, uint16_t querySize);
}; };
#endif /* BSP_LINUX_COMIF_COOKIES_CSPCOMIF_H_ */ #endif /* LINUX_CSP_CSPCOMIF_H_ */

View File

@ -1,5 +1,5 @@
#ifndef BSP_Q7S_COMIF_COOKIES_CSPCOOKIE_H_ #ifndef LINUX_CSP_CSPCOOKIE_H_
#define BSP_Q7S_COMIF_COOKIES_CSPCOOKIE_H_ #define LINUX_CSP_CSPCOOKIE_H_
#include <fsfw/devicehandlers/CookieIF.h> #include <fsfw/devicehandlers/CookieIF.h>
#include <cstdint> #include <cstdint>
@ -24,4 +24,4 @@ private:
uint8_t cspAddress; uint8_t cspAddress;
}; };
#endif /* BSP_Q7S_COMIF_COOKIES_CSPCOOKIE_H_ */ #endif /* LINUX_CSP_CSPCOOKIE_H_ */

View File

@ -1,48 +1,10 @@
#ifndef SAM9G20_COMIF_COOKIES_GPIO_COOKIE_H_ #ifndef LINUX_GPIO_GPIOCOOKIE_H_
#define SAM9G20_COMIF_COOKIES_GPIO_COOKIE_H_ #define LINUX_GPIO_GPIOCOOKIE_H_
#include "GpioIF.h" #include "GpioIF.h"
#include "gpioDefinitions.h"
#include <fsfw/devicehandlers/CookieIF.h> #include <fsfw/devicehandlers/CookieIF.h>
#include <fsfw/returnvalues/HasReturnvaluesIF.h> #include <fsfw/returnvalues/HasReturnvaluesIF.h>
#include <string>
#include <unordered_map>
namespace gpio {
enum Direction {
IN = 0,
OUT = 1
};
}
/**
* @brief Struct containing information about the GPIO to use. This is
* required by the libgpiod to access and drive a GPIO.
* @param chipname String of the chipname specifying the group which contains the GPIO to
* access. E.g. gpiochip0. To detect names of GPIO groups run gpiodetect on
* the linux command line.
* @param lineNum The offset of the GPIO within the GPIO group.
* @param consumer Name of the consumer. Simply a description of the GPIO configuration.
* @param direction Specifies whether the GPIO should be used as in- or output.
* @param initValue Defines the initial state of the GPIO when configured as output.
* Only required for output GPIOs.
* @param lineHandle The handle returned by gpiod_chip_get_line will be later written to this
* pointer.
*/
typedef struct GpioConfig {
GpioConfig(std::string chipname_, int lineNum_, std::string consumer_,
gpio::Direction direction_, int initValue_):
chipname(chipname_), lineNum(lineNum_), consumer(consumer_),
direction(direction_), initValue(initValue_) {}
std::string chipname;
int lineNum;
std::string consumer;
gpio::Direction direction;
int initValue;
struct gpiod_line* lineHandle = nullptr;
} GpioConfig_t;
using GpioMap = std::unordered_map<gpioId_t, GpioConfig_t>;
using GpioMapIter = GpioMap::iterator;
/** /**
* @brief Cookie for the GpioIF. Allows the GpioIF to determine which * @brief Cookie for the GpioIF. Allows the GpioIF to determine which
@ -74,4 +36,4 @@ private:
GpioMap gpioMap; GpioMap gpioMap;
}; };
#endif #endif /* LINUX_GPIO_GPIOCOOKIE_H_ */

View File

@ -1,10 +1,11 @@
#ifndef BSP_Q7S_GPIO_GPIOIF_H_ #ifndef LINUX_GPIO_GPIOIF_H_
#define BSP_Q7S_GPIO_GPIOIF_H_ #define LINUX_GPIO_GPIOIF_H_
#include "gpioDefinitions.h"
#include <fsfw/returnvalues/HasReturnvaluesIF.h> #include <fsfw/returnvalues/HasReturnvaluesIF.h>
#include <fsfw/devicehandlers/CookieIF.h> #include <fsfw/devicehandlers/CookieIF.h>
typedef uint16_t gpioId_t; class GpioCookie;
/** /**
* @brief This class defines the interface for objects requiring the control * @brief This class defines the interface for objects requiring the control
@ -21,7 +22,7 @@ public:
* @param cookie Cookie specifying informations of the GPIOs required * @param cookie Cookie specifying informations of the GPIOs required
* by a object. * by a object.
*/ */
virtual ReturnValue_t initialize(CookieIF* cookie) = 0; virtual ReturnValue_t initialize(GpioCookie* cookie) = 0;
/** /**
* @brief By implementing this function a child must provide the * @brief By implementing this function a child must provide the
@ -49,4 +50,4 @@ public:
virtual ReturnValue_t readGpio(gpioId_t gpioId, int* gpioState) = 0; virtual ReturnValue_t readGpio(gpioId_t gpioId, int* gpioState) = 0;
}; };
#endif /* BSP_Q7S_GPIO_GPIOIF_H_ */ #endif /* LINUX_GPIO_GPIOIF_H_ */

View File

@ -1,4 +1,6 @@
#include "LinuxLibgpioIF.h" #include "LinuxLibgpioIF.h"
#include "GpioCookie.h"
#include <fsfw/serviceinterface/ServiceInterface.h> #include <fsfw/serviceinterface/ServiceInterface.h>
#include <utility> #include <utility>
@ -11,22 +13,14 @@ LinuxLibgpioIF::LinuxLibgpioIF(object_id_t objectId) : SystemObject(objectId) {
LinuxLibgpioIF::~LinuxLibgpioIF() { LinuxLibgpioIF::~LinuxLibgpioIF() {
} }
ReturnValue_t LinuxLibgpioIF::initialize(CookieIF * cookie){ ReturnValue_t LinuxLibgpioIF::initialize(GpioCookie* gpioCookie){
ReturnValue_t result; ReturnValue_t result;
GpioMap mapToAdd; if(gpioCookie == nullptr) {
if(cookie == nullptr) {
sif::error << "LinuxLibgpioIF::initialize: Invalid cookie" << std::endl; sif::error << "LinuxLibgpioIF::initialize: Invalid cookie" << std::endl;
return RETURN_FAILED; return RETURN_FAILED;
} }
GpioCookie* gpioCookie = dynamic_cast<GpioCookie*>(cookie);
if(gpioCookie == nullptr) {
sif::error << "LinuxLibgpioIF: Invalid Gpio Cookie!"
<< std::endl;
return RETURN_FAILED;
}
mapToAdd = gpioCookie->getGpioMap(); GpioMap mapToAdd = gpioCookie->getGpioMap();
result = checkForConflicts(mapToAdd); result = checkForConflicts(mapToAdd);
if (result != RETURN_OK){ if (result != RETURN_OK){

View File

@ -1,11 +1,11 @@
#ifndef BSP_Q7S_GPIO_LINUXLIBGPIOIF_H_ #ifndef LINUX_GPIO_LINUXLIBGPIOIF_H_
#define BSP_Q7S_GPIO_LINUXLIBGPIOIF_H_ #define LINUX_GPIO_LINUXLIBGPIOIF_H_
#include <linux/gpio/GpioIF.h> #include <linux/gpio/GpioIF.h>
#include <linux/gpio/GpioCookie.h>
#include <fsfwconfig/returnvalues/classIds.h> #include <fsfwconfig/returnvalues/classIds.h>
#include <fsfw/objectmanager/SystemObject.h> #include <fsfw/objectmanager/SystemObject.h>
class GpioCookie;
/** /**
* @brief This class implements the GpioIF for a linux based system. The * @brief This class implements the GpioIF for a linux based system. The
* implementation is based on the libgpiod lib which requires linux 4.8 * implementation is based on the libgpiod lib which requires linux 4.8
@ -23,7 +23,7 @@ public:
LinuxLibgpioIF(object_id_t objectId); LinuxLibgpioIF(object_id_t objectId);
virtual ~LinuxLibgpioIF(); virtual ~LinuxLibgpioIF();
ReturnValue_t initialize(CookieIF* gpioCookie) override; ReturnValue_t initialize(GpioCookie* gpioCookie) override;
ReturnValue_t pullHigh(gpioId_t gpioId) override; ReturnValue_t pullHigh(gpioId_t gpioId) override;
ReturnValue_t pullLow(gpioId_t gpioId) override; ReturnValue_t pullLow(gpioId_t gpioId) override;
ReturnValue_t readGpio(gpioId_t gpioId, int* gpioState) override; ReturnValue_t readGpio(gpioId_t gpioId, int* gpioState) override;
@ -58,4 +58,4 @@ private:
ReturnValue_t configureGpios(GpioMap& mapToAdd); ReturnValue_t configureGpios(GpioMap& mapToAdd);
}; };
#endif /* BSP_Q7S_GPIO_LINUXLIBGPIOIF_H_ */ #endif /* LINUX_GPIO_LINUXLIBGPIOIF_H_ */

View File

@ -0,0 +1,46 @@
#ifndef LINUX_GPIO_GPIODEFINITIONS_H_
#define LINUX_GPIO_GPIODEFINITIONS_H_
#include <string>
#include <unordered_map>
using gpioId_t = uint16_t;
namespace gpio {
enum Direction {
IN = 0,
OUT = 1
};
}
/**
* @brief Struct containing information about the GPIO to use. This is
* required by the libgpiod to access and drive a GPIO.
* @param chipname String of the chipname specifying the group which contains the GPIO to
* access. E.g. gpiochip0. To detect names of GPIO groups run gpiodetect on
* the linux command line.
* @param lineNum The offset of the GPIO within the GPIO group.
* @param consumer Name of the consumer. Simply a description of the GPIO configuration.
* @param direction Specifies whether the GPIO should be used as in- or output.
* @param initValue Defines the initial state of the GPIO when configured as output.
* Only required for output GPIOs.
* @param lineHandle The handle returned by gpiod_chip_get_line will be later written to this
* pointer.
*/
typedef struct GpioConfig {
GpioConfig(std::string chipname_, int lineNum_, std::string consumer_,
gpio::Direction direction_, int initValue_):
chipname(chipname_), lineNum(lineNum_), consumer(consumer_),
direction(direction_), initValue(initValue_) {}
std::string chipname;
int lineNum;
std::string consumer;
gpio::Direction direction;
int initValue;
struct gpiod_line* lineHandle = nullptr;
} GpioConfig_t;
using GpioMap = std::unordered_map<gpioId_t, GpioConfig_t>;
using GpioMapIter = GpioMap::iterator;
#endif /* LINUX_GPIO_GPIODEFINITIONS_H_ */

View File

@ -1,5 +1,5 @@
#ifndef BSP_Q7S_COMIF_I2COMIF_H_ #ifndef LINUX_I2C_I2COMIF_H_
#define BSP_Q7S_COMIF_I2COMIF_H_ #define LINUX_I2C_I2COMIF_H_
#include "I2cCookie.h" #include "I2cCookie.h"
#include <fsfw/objectmanager/SystemObject.h> #include <fsfw/objectmanager/SystemObject.h>
@ -56,4 +56,4 @@ private:
address_t i2cAddress, int* fileDescriptor); address_t i2cAddress, int* fileDescriptor);
}; };
#endif /* BSP_Q7S_COMIF_I2COMIF_H_ */ #endif /* LINUX_I2C_I2COMIF_H_ */

View File

@ -1,5 +1,5 @@
#ifndef SAM9G20_COMIF_COOKIES_I2C_COOKIE_H_ #ifndef LINUX_I2C_I2CCOOKIE_H_
#define SAM9G20_COMIF_COOKIES_I2C_COOKIE_H_ #define LINUX_I2C_I2CCOOKIE_H_
#include <fsfw/devicehandlers/CookieIF.h> #include <fsfw/devicehandlers/CookieIF.h>
#include <string> #include <string>
@ -34,4 +34,4 @@ private:
std::string deviceFile; std::string deviceFile;
}; };
#endif #endif /* LINUX_I2C_I2CCOOKIE_H_ */