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;
56 
57  public:
59  PortExpander();
60 
66  static void beginPin(int inPin, int inExpId, PIN_TYPE inType);
72  static void digitalWrite(int inPin, int inExpId, int inValue);
78  static void analogWrite(int inPin, int inExpId, int inValue);
79 
80 #ifdef ACCESSORIES_DEBUG_MODE
81  static void CheckExpanderId(int inId);
82 #endif
83 };
84 
85 //-------------------------------------------------------------------
86 #endif
87 #endif
88 //-------------------------------------------------------------------
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()