SysIo  1.9.0
Embedded Library and tools
gpiopin.h
1 
8 #ifndef _SYSIO_GPIO_PIN_H_
9 #define _SYSIO_GPIO_PIN_H_
10 
11 #include <string>
12 #include <vector>
13 #include <map>
14 #include <memory>
15 #include <atomic>
16 #include <thread>
17 #include <mutex>
18 
19 namespace Sysio {
20 
21  class Gpio;
22  class Device;
23  class Connector;
24 
38  enum AccessLayer {
39  AccessLayerAuto = 0, //< Choix automatique (à utiliser la plupart du temps), c'est la plateforme qui choisit par le GpioDevice
40  AccessLayerIoMap = 0x0001,
41  AccessLayerSysFs = 0x0002,
43  };
59  class Pin {
60 
61  public:
62  friend class Connector;
63 
68  enum Mode {
69  ModeInput = 0,
83  ModeUnknown = -1
84  };
85 
90  enum Pull {
91  PullOff = 0,
94  PullUnknown = -1
95  };
96 
101  enum Edge {
102  EdgeNone = 0,
106  EdgeUnknown = -1
107  };
108 
113  enum Numbering {
117  NumberingUnknown = -1
118  };
119 
124  enum Type {
125  TypeGpio = 0,
131  TypeUnknown = -1
132  };
133 
140  class Number {
141  public:
142  int logical;
143  int mcu;
144  int system;
145  int row;
146  int column;
147  };
148 
155  class Descriptor {
156  public:
159  std::map<Mode, std::string> name;
160  };
161 
162 
163  //------------------------------------------------------------------------
164  // Opérations
165  //------------------------------------------------------------------------
166 
173  Mode mode();
174 
184  void setMode (Mode mode);
185 
192  Pull pull();
193 
204  void setPull (Pull pull);
205 
212  Edge edge();
213 
223  void setEdge (Edge edge);
224 
233  void write (bool value);
234 
243  void toggle();
244 
254  bool read() const;
255 
265  void release();
266 
289  void waitForInterrupt (Edge edge, int timeout_ms = -1);
290 
296  typedef void (* Isr) (void);
297 
307  void attachInterrupt (Isr isr, Edge edge);
308 
314  void detachInterrupt();
315 
316  //------------------------------------------------------------------------
317  // Propriétés
318  //------------------------------------------------------------------------
319 
323  Type type() const;
324 
332  int logicalNumber () const;
333 
341  int mcuNumber () const;
342 
350  int systemNumber () const;
351 
359  int physicalNumber () const;
360 
370  int number (Numbering numbering) const;
371 
377  int row() const;
378 
384  int column() const;
385 
393  const std::string & name();
394 
398  bool useSysFs() const;
399 
406  bool forceUseSysFs (bool enable);
407 
411  Connector * connector() const;
412 
416  Gpio * gpio() const;
417 
421  AccessLayer accessLayer() const;
422 
426  bool isOpen() const;
427 
431  bool isDebug() const;
432 
439  void setDebug (bool enable);
440 
448  const std::string & name (Mode mode) const;
449 
453  const std::string & modeName();
454 
458  const std::string & modeName (Mode mode) const;
459 
463  const std::string & pullName ();
464 
468  static const std::string & pullName (Pull n);
469 
473  const std::string & typeName() const;
474 
478  static const std::string & typeName (Type t);
479 
483  static const std::string & numberingName (Numbering n);
484 
488  static const std::string & edgeName (Edge e);
489 
495  const std::map<Mode, std::string> & modes () const;
496 
502  static const std::map<Pull, std::string> & pulls ();
503 
509  static const std::map<Type, std::string> & types ();
510 
516  static const std::map<Numbering, std::string> & numberings ();
517 
523  static const std::map<Edge, std::string> & edges ();
524 
533  Pin (Connector * parent, const Descriptor * desc);
534 
538  virtual ~Pin();
539 
540  protected:
544  Device * device() const;
545 
550  bool open();
551 
555  void close();
556 
557  private:
558  bool _isopen;
559  Connector * _parent;
560  const Descriptor * _descriptor;
561  Mode _holdMode;
562  Pull _holdPull;
563  bool _holdState;
564  bool _useSysFs;
565  int _valueFd;
566  bool _firstPolling;
567 
568  Edge _edge;
569  Mode _mode;
570  Pull _pull;
571 
572  std::atomic<int> _run; // indique au thread de continuer
573  std::thread _thread;
574 
575  static const std::map<Pull, std::string> _pulls;
576  static const std::map<Type, std::string> _types;
577  static const std::map<Numbering, std::string> _numberings;
578  static const std::map<Mode, std::string> _sysfsmodes;
579  static const std::map<Edge, std::string> _edges;
580  static const std::map<std::string, Edge> _str2edge;
581  static const std::map<std::string, Mode> _str2mode;
582  static std::string _syspath;
583 
584  static bool directoryExist (const std::string & dname);
585  static void * irqThread (std::atomic<int> & run, int fd, Isr isr);
586 
587  void holdMode();
588  void holdPull();
589  void readPull ();
590  void writePull();
591  void readMode();
592  void writeMode ();
593  void readEdge();
594  void writeEdge ();
595 
596  bool sysFsEnable (bool enable);
597  void sysFsExport (bool enable);
598  bool sysFsIsExport () const;
599  bool sysFsOpen();
600  void sysFsClose();
601 
602  void sysFsGetEdge();
603  void sysFsSetEdge ();
604  void sysFsGetMode();
605  void sysFsSetMode ();
606 
607  static int sysFsPoll (int fd, int timeout_ms = -1);
608  static int sysFsRead (int fd);
609  static int sysFsWrite (int fd, bool value);
610 
611  void sysFsWriteFile (const char * n, const std::string & v);
612  std::string sysFsReadFile (const char * n) const;
613  bool sysFsFileExist (const char * n) const;
614  };
615 }
620 /* ========================================================================== */
621 #endif /*_SYSIO_GPIO_PIN_H_ defined */
Front montant.
Definition: gpiopin.h:103
void setEdge(Edge edge)
Modification du front de déclenchement.
Fonction alternative 9.
Definition: gpiopin.h:82
Pin(Connector *parent, const Descriptor *desc)
Constructeur.
void release()
Restaure le mode et la résistance de pull-up d&#39;une broche de type GPIO.
int system
Numéro dans numérotation du système d&#39;exploitation (commence à 0)
Definition: gpiopin.h:144
Device * device() const
Accès à la couche matérielle.
AccessLayer
Choix de la façon d&#39;accéder aux broches du GPIO.
Definition: gpiopin.h:38
Fonction alternative 6.
Definition: gpiopin.h:79
Mode
Mode de fonctionnement d&#39;une broche.
Definition: gpiopin.h:68
Pull
Type de résistances de tirage d&#39;une broche.
Definition: gpiopin.h:90
static const std::map< Edge, std::string > & edges()
Listes des fronts posibles avec leurs noms.
bool open()
Ouverture.
Broche GPIO.
Definition: gpiopin.h:125
const std::string & pullName()
Nom de la résistance de tirage actuelle.
static const std::string & edgeName(Edge e)
Nom d&#39;un front.
bool useSysFs() const
Indique si la broche utilise SysFs.
Numéro de broche.
Definition: gpiopin.h:140
Type type() const
Type de broche.
sortie PWM
Definition: gpiopin.h:72
Résistance désactivée.
Definition: gpiopin.h:91
int logicalNumber() const
Numéro de la broche dans la numérotation logique NumberingLogical.
int mcu
Numéro dans numérotation du microcontrôleur (commence à 0)
Definition: gpiopin.h:143
Fonction alternative 5.
Definition: gpiopin.h:78
Fonction alternative 3.
Definition: gpiopin.h:76
void attachInterrupt(Isr isr, Edge edge)
Installe une routine d&#39;interruption (Isr)
Le mieux, toutes les fonctions sont disponibles.
Definition: gpiopin.h:42
void toggle()
Bascule de l&#39;état binaire d&#39;une sortie.
Classe Gpio.
Definition: gpio.h:53
int physicalNumber() const
Numéro de la broche dans son connecteur.
bool isOpen() const
Indique si ouvert.
Front montant et descendant.
Definition: gpiopin.h:105
int mcuNumber() const
Numéro de la broche dans la numérotation microcontrôleur NumberingMcu.
int systemNumber() const
Numéro de la broche dans la numérotation système NumberingSystem.
Pull pull()
Résistance de tirage d&#39;une broche de type GPIO.
Accès par l&#39;interface "utilisateur" dans /sys/class/gpio, la plus générique.
Definition: gpiopin.h:41
void waitForInterrupt(Edge edge, int timeout_ms=-1)
Attente passive d&#39;un front.
int logical
Numéro dans numérotation logique (commence à 0)
Definition: gpiopin.h:142
Connector * connector() const
Accès au connecteur parent.
Numérotation logique (défaut), débute à 0.
Definition: gpiopin.h:114
Edge edge()
Front de déclenchement.
bool read() const
Lecture de l&#39;état binaire d&#39;une broche de type GPIO.
static const std::map< Pull, std::string > & pulls()
Listes des résistances de tirage avec leurs noms.
Type type
Type de broche.
Definition: gpiopin.h:157
Front Descendant.
Definition: gpiopin.h:104
Broche d&#39;un connecteur.
Definition: gpiopin.h:59
const std::string & modeName()
Nom du mode actuel.
void setMode(Mode mode)
Modification du mode d&#39;une broche de type GPIO.
int number(Numbering numbering) const
Numéro de la broche dans la numérotation demandé.
Broche d&#39;alimentation.
Definition: gpiopin.h:126
int column
Numéro de colonne dans la connecteur (commence à 1)
Definition: gpiopin.h:146
Edge
Front de déclenchement d&#39;une broche.
Definition: gpiopin.h:101
static const std::string & numberingName(Numbering n)
Nom d&#39;une numérotation.
static const std::map< Numbering, std::string > & numberings()
Listes des numérotations avec leurs noms.
Fonction alternative 7.
Definition: gpiopin.h:80
bool isDebug() const
Indique si le mode mise au point est actif.
Broche audio.
Definition: gpiopin.h:128
Gpio * gpio() const
Accès au GPIO parent.
Fonction alternative 1.
Definition: gpiopin.h:74
Connecteur.
Definition: gpioconnector.h:30
Résistance de tirage à l&#39;état bas.
Definition: gpiopin.h:92
Accès par les registres du SOC, la plus performante mais il faut être sûr que cela est disponible sur...
Definition: gpiopin.h:40
void setPull(Pull pull)
Modification de la résistance de tirage d&#39;une broche de type GPIO.
Broche désactivée.
Definition: gpiopin.h:71
Fonction alternative 4.
Definition: gpiopin.h:77
Pas de détection.
Definition: gpiopin.h:102
Mode mode()
Mode actuel d&#39;une broche de type GPIO.
void close()
Fermeture du GPIO.
std::map< Mode, std::string > name
Noms.
Definition: gpiopin.h:159
Fonction alternative 2.
Definition: gpiopin.h:75
void(* Isr)(void)
Routine d&#39;interruption.
Definition: gpiopin.h:296
void detachInterrupt()
Désinstalle la routine d&#39;interruption.
Fonction alternative 8.
Definition: gpiopin.h:81
Definition: clock.h:18
Broche non conectée.
Definition: gpiopin.h:130
virtual ~Pin()
Desctructeur.
Numérotation du microcontroleur, débute à 0.
Definition: gpiopin.h:115
void setDebug(bool enable)
Active le mode mise au point.
Broche video.
Definition: gpiopin.h:129
int row
Numéro de ligne dans la connecteur (commence à 1)
Definition: gpiopin.h:145
Fonction alternative 0.
Definition: gpiopin.h:73
Numérotation du système d&#39;exploitation, débute à 0.
Definition: gpiopin.h:116
void write(bool value)
Modification de l&#39;état binaire d&#39;une sortie.
Résistance de tirage à l&#39;état haut.
Definition: gpiopin.h:93
Descripteur d&#39;une broche.
Definition: gpiopin.h:155
static const std::map< Type, std::string > & types()
Listes des types avec leurs noms.
Number num
Numéros.
Definition: gpiopin.h:158
Broche port USB.
Definition: gpiopin.h:127
Numbering
Numérotation des broches utilisées par le GPIO.
Definition: gpiopin.h:113
Type
Types de broches d&#39;un connecteur.
Definition: gpiopin.h:124
bool forceUseSysFs(bool enable)
Force ou non l&#39;utilisation de SysFs.
const std::string & name()
Nom de la broche.
const std::map< Mode, std::string > & modes() const
Listes des modes avec leurs noms.
const std::string & typeName() const
Nom du type de la broche.
AccessLayer accessLayer() const
Couches d&#39;accès autorisées.