00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00029 #ifndef SFBPINS_H
00030 #define SFBPINS_H
00031
00032 #include "SFBTypes.h"
00033 #include "SFBConstants.h"
00034
00035 #define NOT_A_PIN 99
00036 #define NOT_A_PORT 99
00037
00038
00039 enum {
00040 FACE_D0_PIN = 0,
00041 FACE_D1_PIN = 1,
00042 FACE_D2_PIN = 2,
00043 FACE_D3_PIN = 3,
00044 FACE_RX_PIN = 4,
00045 FACE_TX_PIN = 5,
00046 FACE_VIN_ENABLE_PIN = 6,
00047 FACE_VOUT_ENABLE_PIN = 7,
00048 FACE_ISENSE_PIN = 8,
00049 FACE_LED_PIN = 9,
00050 FACE_SIDE_LED_PIN = 10,
00051 FACE_PIN_COUNT = 11
00052 };
00053
00054
00055
00056
00057
00058
00059 enum {
00060 ARDUINO_RX = 0,
00061 ARDUINO_TX = 1,
00062 ARDUINO_DIGITAL_PIN2 = 2,
00063 ARDUINO_DIGITAL_PIN3 = 3,
00064 ARDUINO_DIGITAL_PIN4 = 4,
00065 ARDUINO_DIGITAL_PIN5 = 5,
00066 ARDUINO_DIGITAL_PIN6 = 6,
00067 ARDUINO_DIGITAL_PIN7 = 7,
00068 ARDUINO_DIGITAL_PIN8 = 8,
00069 ARDUINO_DIGITAL_PIN9 = 9,
00070 ARDUINO_DIGITAL_PIN10 = 10,
00071 ARDUINO_DIGITAL_PIN11 = 11,
00072 ARDUINO_DIGITAL_PIN12 = 12,
00073 ARDUINO_DIGITAL_PIN13 = 13,
00075 ARDUINO_ANALOG_PIN1 = 14,
00076 ARDUINO_ANALOG_PIN2 = 15,
00077 ARDUINO_ANALOG_PIN3 = 16,
00078 ARDUINO_ANALOG_PIN4 = 17,
00079 ARDUINO_ANALOG_PIN5 = 18,
00080 ARDUINO_ANALOG_PIN6 = 19,
00081
00082 NORTH_BASE_PIN = 20,
00083 NORTH_D0_PIN = NORTH_BASE_PIN+FACE_D0_PIN,
00084 NORTH_D1_PIN = NORTH_BASE_PIN+FACE_D1_PIN,
00085 NORTH_D2_PIN = NORTH_BASE_PIN+FACE_D2_PIN,
00086 NORTH_D3_PIN = NORTH_BASE_PIN+FACE_D3_PIN,
00087 NORTH_RX_PIN = NORTH_BASE_PIN+FACE_RX_PIN,
00088 NORTH_TX_PIN = NORTH_BASE_PIN+FACE_TX_PIN,
00089 NORTH_VIN_ENABLE_PIN = NORTH_BASE_PIN+FACE_VIN_ENABLE_PIN,
00090 NORTH_VOUT_ENABLE_PIN = NORTH_BASE_PIN+FACE_VOUT_ENABLE_PIN,
00091 NORTH_ISENSE_PIN = NORTH_BASE_PIN+FACE_ISENSE_PIN,
00092 NORTH_LED_PIN = NORTH_BASE_PIN+FACE_LED_PIN,
00093 NORTH_SIDE_LED_PIN = NORTH_BASE_PIN+FACE_SIDE_LED_PIN,
00095 SOUTH_BASE_PIN = 31,
00096 SOUTH_D0_PIN = SOUTH_BASE_PIN+FACE_D0_PIN,
00097 SOUTH_D1_PIN = SOUTH_BASE_PIN+FACE_D1_PIN,
00098 SOUTH_D2_PIN = SOUTH_BASE_PIN+FACE_D2_PIN,
00099 SOUTH_D3_PIN = SOUTH_BASE_PIN+FACE_D3_PIN,
00100 SOUTH_RX_PIN = SOUTH_BASE_PIN+FACE_RX_PIN,
00101 SOUTH_TX_PIN = SOUTH_BASE_PIN+FACE_TX_PIN,
00102 SOUTH_VIN_ENABLE_PIN = SOUTH_BASE_PIN+FACE_VIN_ENABLE_PIN,
00103 SOUTH_VOUT_ENABLE_PIN = SOUTH_BASE_PIN+FACE_VOUT_ENABLE_PIN,
00104 SOUTH_ISENSE_PIN = SOUTH_BASE_PIN+FACE_ISENSE_PIN,
00105 SOUTH_LED_PIN = SOUTH_BASE_PIN+FACE_LED_PIN,
00106 SOUTH_SIDE_LED_PIN = SOUTH_BASE_PIN+FACE_SIDE_LED_PIN,
00108 EAST_BASE_PIN = 42,
00109 EAST_D0_PIN = EAST_BASE_PIN+FACE_D0_PIN,
00110 EAST_D1_PIN = EAST_BASE_PIN+FACE_D1_PIN,
00111 EAST_D2_PIN = EAST_BASE_PIN+FACE_D2_PIN,
00112 EAST_D3_PIN = EAST_BASE_PIN+FACE_D3_PIN,
00113 EAST_RX_PIN = EAST_BASE_PIN+FACE_RX_PIN,
00114 EAST_TX_PIN = EAST_BASE_PIN+FACE_TX_PIN,
00115 EAST_VIN_ENABLE_PIN = EAST_BASE_PIN+FACE_VIN_ENABLE_PIN,
00116 EAST_VOUT_ENABLE_PIN = EAST_BASE_PIN+FACE_VOUT_ENABLE_PIN,
00117 EAST_ISENSE_PIN = EAST_BASE_PIN+FACE_ISENSE_PIN,
00118 EAST_LED_PIN = EAST_BASE_PIN+FACE_LED_PIN,
00119 EAST_SIDE_LED_PIN = EAST_BASE_PIN+FACE_SIDE_LED_PIN,
00121 WEST_BASE_PIN = 53,
00122 WEST_D0_PIN = WEST_BASE_PIN+FACE_D0_PIN,
00123 WEST_D1_PIN = WEST_BASE_PIN+FACE_D1_PIN,
00124 WEST_D2_PIN = WEST_BASE_PIN+FACE_D2_PIN,
00125 WEST_D3_PIN = WEST_BASE_PIN+FACE_D3_PIN,
00126 WEST_RX_PIN = WEST_BASE_PIN+FACE_RX_PIN,
00127 WEST_TX_PIN = WEST_BASE_PIN+FACE_TX_PIN,
00128 WEST_VIN_ENABLE_PIN = WEST_BASE_PIN+FACE_VIN_ENABLE_PIN,
00129 WEST_VOUT_ENABLE_PIN = WEST_BASE_PIN+FACE_VOUT_ENABLE_PIN,
00130 WEST_ISENSE_PIN = WEST_BASE_PIN+FACE_ISENSE_PIN,
00131 WEST_LED_PIN = WEST_BASE_PIN+FACE_LED_PIN,
00132 WEST_SIDE_LED_PIN = WEST_BASE_PIN+FACE_SIDE_LED_PIN,
00134
00135 BODY_SWITCH0_PIN = 64,
00136 BODY_RGB_RED_PIN = 65,
00137 BODY_RGB_GREEN_PIN = 66,
00138 BODY_RGB_BLUE_PIN = 67,
00140 BODY_EEPROM_SSEL1_PIN = 68,
00141 BODY_EEPROM_SCK1_PIN = 69,
00142 BODY_EEPROM_MISO1_PIN = 70,
00143 BODY_EEPROM_MOSI1_PIN = 71,
00145 BODY_AMUX_READ_PIN = 72,
00146 BODY_AMUX_SELA_PIN = 73,
00147 BODY_AMUX_SELB_PIN = 74,
00148 BODY_AMUX_SELC_PIN = 75,
00150 VIRTUAL_PIN_COUNT = 76,
00151
00152
00153 ALIAS_COUNT=20,
00154 FIRST_SFB_PIN=20
00155 };
00156
00162 struct PinInfo_s {
00163 u8 portNumber;
00164 u8 bitNumber;
00165 u8 aliasMode;
00166 u8 flags;
00167 } __attribute__ ((aligned (4)));
00168
00175 #define SFB_GET_PIN_PORT_AND_MASK(sfbPin,infoVar,portVar,maskVar) \
00176 do { \
00177 (infoVar) = pinInfoMap[sfbPin]; \
00178 if ((infoVar).aliasMode >= ALIAS_COUNT) { \
00179 (sfbPin) = (infoVar).aliasMode; \
00180 (infoVar) = pinInfoMap[sfbPin]; \
00181 } \
00182 (portVar) = (infoVar).portNumber; \
00183 (maskVar) = 1UL<<(infoVar).bitNumber; \
00184 } while (0)
00185
00192 #define SFB_UNALIAS_PIN(sfbPin) \
00193 ((pinInfoMap[sfbPin].aliasMode >= ALIAS_COUNT)?pinInfoMap[sfbPin].aliasMode:(sfbPin))
00194
00204 #define SFB_GET_UNALIASED_PIN_PORT_AND_MASK(sfbPin,portVar,maskVar) \
00205 do { \
00206 (portVar) = pinInfoMap[sfbPin].portNumber; \
00207 (maskVar) = 1UL<<pinInfoMap[sfbPin].bitNumber; \
00208 } while (0)
00209
00210 typedef const struct PinInfo_s PinInfo_t;
00211
00212 extern PinInfo_t pinInfoMap[VIRTUAL_PIN_COUNT];
00213
00214 enum { PIN_SKETCH_MAP_WORDS = (VIRTUAL_PIN_COUNT+31)/32 };
00215
00216 #define GET_SKETCH_FLAG(sfbPin) \
00217 ((pinSketchMap[(sfbPin)>>5]>>((sfbPin)&31))&1)
00218 #define SET_SKETCH_FLAG(sfbPin) \
00219 (pinSketchMap[(sfbPin)>>5] |= 1<<((sfbPin)&31))
00220 #define CLR_SKETCH_FLAG(sfbPin) \
00221 (pinSketchMap[(sfbPin)>>5] &= ~(1<<((sfbPin)&31)))
00222
00223 extern u32 pinSketchMap[PIN_SKETCH_MAP_WORDS];
00224
00250 extern int pinInFace(int facePin, int face);
00251
00304 extern bool isFacePin(int pin, u8 * face = 0, u8 * facePin = 0);
00305
00306 extern void reflexDigitalWrite(int sfbPin, int value);
00307 extern void implDigitalWrite(int sfbPin, int value);
00308
00309 static inline void reflexLedOn(int sfbPin) { reflexDigitalWrite(sfbPin,LOW); }
00310 static inline void reflexLedOff(int sfbPin) { reflexDigitalWrite(sfbPin,HIGH); }
00311 static inline void reflexLedSet(int sfbPin,int on) { reflexDigitalWrite(sfbPin,on?LOW:HIGH); }
00312
00313 extern int reflexDigitalRead(int sfbPin);
00314 extern int implDigitalRead(int sfbPin);
00315
00316 extern void reflexPinMode(int sfbPin, int mode);
00317 extern void implPinMode(int sfbPin, int mode);
00318
00319 extern void pins_startup_initialization();
00320
00328 extern void setPinResistor(int sfbPin, int pullupDownCode);
00329
00330 #define PULLUP_ONLY 0
00331 #define NEITHER_PULLUP_NOR_PULLDOWN 2
00332 #define PULLDOWN_ONLY 3
00334 extern void reflexSetPinResistor(int sfbPin, int pullupDownCode);
00335 extern void implSetPinResistor(int sfbPin, int pullupDownCode);
00336
00337 #include "SFBHWPins.h"
00338
00339 #endif