Accessories
Arduino for motors and lights library.
PortExpander.hpp
1 //-------------------------------------------------------------------
2 #ifndef __portexpander_H__
3 #define __portexpander_H__
4 //-------------------------------------------------------------------
5 
6 #ifndef NO_EXPANDER
7 
12 #define EXPANDER_PIN(expid, pin) (((expid) * 1000) + pin)
13 
14 #define EXPANDER_PORT_PIN(pinnb) ((pinnb) % 1000)
15 
16 #define EXPANDER_PORT_EXPID(pinnb) ((pinnb) / 1000)
17 
22 {
23  private:
24  static PortExpander *pFirstExpander;
25  PortExpander *pNextExpander;
26 
27  inline void SetNextExpander(PortExpander *inExpander) { this->pNextExpander = inExpander; }
28  inline PortExpander *GetNextExpander() const { return this->pNextExpander; }
29  static PortExpander *GetById(int inId);
30 
31  protected:
32  static void Add(PortExpander* inExpander);
33 
34  int id;
35 
40  inline virtual byte begin() { return 0; }
45  virtual void beginPin(int inPin, PIN_TYPE inType) = 0;
50  virtual void digitalWrite(int inPin, int inValue) = 0;
55  virtual void analogWrite(int inPin, int inValue) = 0;
59  inline virtual byte GetPinsNumber() { return 0; }
60 
61  public:
63  PortExpander();
64 
70  static void beginPin(int inPin, int inExpId, PIN_TYPE inType);
76  static void digitalWrite(int inPin, int inExpId, int inValue);
82  static void analogWrite(int inPin, int inExpId, int inValue);
83 
84 
85 #ifdef ACCESSORIES_DEBUG_MODE
86  static void CheckAllExpanderPins();
87  static void CheckExpanderId(int inId);
88 #endif
89 };
90 
91 //-------------------------------------------------------------------
92 #endif
93 #endif
94 //-------------------------------------------------------------------
virtual byte GetPinsNumber()
virtual void analogWrite(int inPin, int inValue) = 0
virtual void digitalWrite(int inPin, int inValue) = 0
virtual void beginPin(int inPin, PIN_TYPE inType) = 0
virtual byte begin()