Select Git revision
IntrfGpio.h
-
RobertPatzke authoredRobertPatzke authored
IntrfGpio.h 3.55 KiB
//-----------------------------------------------------------------------------
// Thema: Social Manufacturing Network / Development Environment
// Datei: IntrfGpio.h
// Editor: Robert Patzke
// URI/URL: www.mfp-portal.de
//-----------------------------------------------------------------------------
// Lizenz: CC-BY-SA (wikipedia: Creative Commons)
// Datum: 04. April 2022
//
// Eine Schnittstelle zu den unterschiedlichen Ports in Mikrocontrollern
//
#ifndef IntrfGpio_h
#define IntrfGpio_h
// ----------------------------------------------------------------------------
#include "arduinoDefs.h"
typedef enum _ifPortNumber
{
ifPort0,
ifPort1,
ifPort2,
ifPort3,
ifPort4,
ifPort5,
ifPort6,
ifPort7,
ifPort8,
ifPort9
} ifPortNumber;
// Fehler bei der Parameterübergabe (Konfiguration)
//
typedef enum
{
GEnoError, // Kein Fehler
GEcdictPar // Widersprüchliche Parameter
} GpioError;
typedef struct _GpioMask
{
dword port;
dword pins;
} GpioMask, *GpioMaskPtr;
typedef struct _GpioExtMask
{
dword port;
dword pins;
_GpioExtMask *next;
} GpioExtMask, *GpioExtMaskPtr;
typedef struct _GpioRef
{
dword *ioPtr;
dword pins;
} GpioRef, *GpioRefPtr;
typedef struct _GpioExtRef
{
dword *ioPtr;
dword pins;
_GpioExtRef *next;
} GpioExtRef, *GpioExtRefPtr;
typedef struct _GpioExtVal
{
dword value;
_GpioExtVal *next;
} GpioExtVal, *GpioExtValPtr;
// Spezifikation der Schnittstellentreiber (Konfiguration)
//
#define IfDrvInput 0x0000 // Pin ist ein Eingang (Default)
#define IfDrvOutput 0x0001 // Pin ist ein Ausgnag
#define IfDrvStrongHigh 0x0002 // Großer Strom bei High (VCC)
#define IfDrvStrongLow 0x0004 // Großer Strom bei Low (0)
#define IfDrvOpenDrain 0x0008 // Open-Drain-Anschluss
#define IfDrvOpenSource 0x0010 // Open-Source-Anschluss
#define IfDrvPullUp 0x0020 // Pull-Up-Widerstand aktiv
#define IfDrvPullDown 0x0040 // Pull-Down-Widerstand aktiv
#define IfDrvPullStrong 0x0080 // Niederohmige Pull-Widerstände
typedef enum
{
ArdD2D5,
ArdA0A3,
ArdA4A5,
ArdA0A5,
ArdA4A7,
ArdA0A7
} ArdMask;
class IntrfGpio
{
public:
//virtual ~IntrfGpio();
// --------------------------------------------------------------------------
// Konfigurationen
// --------------------------------------------------------------------------
//
virtual GpioError config(int nr, unsigned int cnfBits, GpioExtRefPtr refPtr);
virtual GpioError config(int nrFrom, int nrTo, unsigned int cnfBits, GpioExtRefPtr refPtr);
virtual GpioError config(GpioExtMaskPtr maskPtr, unsigned int cnfBits, GpioExtRefPtr refPtr);
virtual GpioError configArd(ArdMask ardMask, unsigned int cnfBits);
// --------------------------------------------------------------------------
// Anwendungsfunktionen
// --------------------------------------------------------------------------
//
virtual bool isSet(GpioExtRefPtr refPtr);
virtual bool allSet(GpioExtRefPtr refPtr);
virtual bool anySet(GpioExtRefPtr refPtr);
virtual void read(GpioExtRefPtr refPtr, GpioExtValPtr valPtr);
virtual dword readArd(ArdMask ardMask);
virtual void write(GpioExtRefPtr refPtr, GpioExtValPtr valPtr);
virtual void writeArd(ArdMask ardMask, dword value);
virtual void set(GpioExtRefPtr refPtr);
virtual void clr(GpioExtRefPtr refPtr);
};
// ----------------------------------------------------------------------------
#endif //IntrfGpio_h