eBoard ①⑧⑨
Written for SIA 2017/2018
eagle_Checks.h
Go to the documentation of this file.
1 #ifndef EAGLE_EBOARD_HELPLIB_CHECKS
2  #define EAGLE_EBOARD_HELPLIB_CHECKS
3 
12 //=====================================================================================================================================================
13 // Checker
14 //=====================================================================================================================================================
15 
16  /* you don't know... */
17 
18  using namespace eagle_impl;
19 
20  //-------------------------------------------------------------------------------------------------------------------------------------------------
21  // check index
22  //-------------------------------------------------------------------------------------------------------------------------------------------------
23 
30  void checkIdx(optVAL_t idx);
31 
33  void checkIdx(optVAL_t idx){
34  #if EBOARD_DEBUG_MODE > 0x0
35  assert(idx>=0x0 && idx < PIN_MAX); //changed pins? change me! (didn't want to use macros)
36  assert(idx!=PIN_BLUETOOTH_RX&&idx!=PIN_BLUETOOTH_TX);
37  #endif
38  }
40 
41  #if EBOARD_CHECK_PINS_PWM > 0x0
42 
43  //-------------------------------------------------------------------------------------------------------------------------------------------------
44  // count SET bit
45  //-------------------------------------------------------------------------------------------------------------------------------------------------
46 
53  optVAL_t countSetBits (optVAL_t x);
54 
56  optVAL_t countSetBits (optVAL_t x) {
57  optVAL_t count; //dont't want to overuse global space^^
58  for (count = 0; x; count++)
59  x &= x - 1;
60  return count;
61  }
63  #endif
64 
65  #if EBOARD_CHECK_PINS > 0x0
66 
67  //-------------------------------------------------------------------------------------------------------------------------------------------------
68  // variables
69  //-------------------------------------------------------------------------------------------------------------------------------------------------
70 
76  #if defined(__AVR_ATmega328P__) && not defined(__AVR_ATmega2560__)
77  uint16_t pin_out = 0x0;
78  #elif defined(__AVR_ATmega2560__)
79  uint64_t pin_out = 0x0;
80  #endif
81 
84  #if defined(__AVR_ATmega328P__) && not defined(__AVR_ATmega2560__)
85  uint16_t pin_in = 0x0;
86  #elif defined(__AVR_ATmega2560__)
87  uint64_t pin_in = 0x0;
88  #endif
89 
90  //-------------------------------------------------------------------------------------------------------------------------------------------------
91  // pin check
92  //-------------------------------------------------------------------------------------------------------------------------------------------------
93 
104  bool checkPin(optVAL_t idx, optVAL_t mode = OUTPUT);
105 
107  bool checkPin(optVAL_t idx, optVAL_t mode){
108  checkIdx(idx);
109  return (mode == OUTPUT)? ((pin_out & (1<<idx))>0x0):((pin_in & (1<<idx))>0x0);
110  }
112 
113  #endif
114 
115  //-------------------------------------------------------------------------------------------------------------------------------------------------
116  // set pins
117  //-------------------------------------------------------------------------------------------------------------------------------------------------
118 
124  void setPin(optVAL_t idx, optVAL_t mode = OUTPUT);
125 
127  void setPin(optVAL_t idx, optVAL_t mode){
128  #if EBOARD_CHECK_PINS > 0x0
129  checkIdx(idx);
130  if(checkPin(idx,mode)) return;
131  if(mode==OUTPUT) { //possible to read from OUTPUT digital ... we won't do it
132  pin_out |= (1<<idx);
133  pin_in &= ~(1<<idx);
134  }
135  else {
136  pin_in |= (1<<idx);
137  pin_out &= ~(1<<idx);
138  }
139  #endif
140  pinMode(idx, mode);
141  }
143 
144  #endif
145 
void checkIdx(optVAL_t idx)
[DEBUG_MODE] used to check if a pin index is in bounds
#define PIN_MAX
Definition: eBoard.h:185
void setPin(optVAL_t idx, optVAL_t mode=OUTPUT)
[COPY&PASTE] set a pin to a certain mode => checkPin() will return true then
this namespace contains all the don&#39;t use manually classes ;)
#define PIN_BLUETOOTH_RX
Definition: eBoard.h:544
#define PIN_BLUETOOTH_TX
Definition: eBoard.h:555
int optVAL_t
Definition: eBoard.h:137