1+ #include <stdint.h>
2+
13#ifdef __cplusplus
24extern "C" {
35#endif
46
57void yield (void );
68
79typedef enum {
8- LOW = 0x0 ,
9- HIGH = 0x1 ,
10- }_pinStatus ;
10+ LOW = 0x0 ,
11+ HIGH = 0x1 ,
12+ }PinStatus ;
1113
1214typedef enum {
13- INPUT = 0x0 ,
14- OUTPUT = 0x1 ,
15- INPUT_PULLUP = 0x2 ,
16- INPUT_PULLDOWN = 0x3 ,
17- }_pinMode ;
15+ IRQ_LOW = 0 ,
16+ IRQ_HIGH = 1 ,
17+ CHANGE = 2 ,
18+ FALLING = 3 ,
19+ RISING = 4 ,
20+ }InterruptMode ;
1821
19- #define PI 3.1415926535897932384626433832795
20- #define HALF_PI 1.5707963267948966192313216916398
21- #define TWO_PI 6.283185307179586476925286766559
22- #define DEG_TO_RAD 0.017453292519943295769236907684886
23- #define RAD_TO_DEG 57.295779513082320876798154814105
24- #define EULER 2.718281828459045235360287471352
22+ typedef enum {
23+ INPUT = 0x0 ,
24+ OUTPUT = 0x1 ,
25+ INPUT_PULLUP = 0x2 ,
26+ INPUT_PULLDOWN = 0x3 ,
27+ } PinMode ;
2528
26- #define SERIAL 0x0
27- #define DISPLAY 0x1
29+ #define PI 3.1415926535897932384626433832795
30+ #define HALF_PI 1.5707963267948966192313216916398
31+ #define TWO_PI 6.283185307179586476925286766559
32+ #define DEG_TO_RAD 0.017453292519943295769236907684886
33+ #define RAD_TO_DEG 57.295779513082320876798154814105
34+ #define EULER 2.718281828459045235360287471352
2835
29- typedef enum {
30- CHANGE = 1 ,
31- FALLING = 2 ,
32- RISING = 3 ,
33- }_interruptMode ;
36+ #define SERIAL 0x0
37+ #define DISPLAY 0x1
3438
3539typedef enum {
3640LSBFIRST = 0 ,
3741MSBFIRST = 1 ,
38- }_spi_bitFirst_mode ;
42+ }BitMode ;
3943
4044#ifndef min
4145#define min (a ,b ) \
@@ -67,6 +71,8 @@ typedef enum {
6771#define sq (x ) ((x)*(x))
6872#endif
6973
74+ typedef void (* voidFuncPtr )(void );
75+
7076// interrupts() / noInterrupts() must be defined by the core
7177
7278#define lowByte (w ) ((uint8_t) ((w) & 0xff))
@@ -77,40 +83,47 @@ typedef enum {
7783#define bitClear (value ,bit ) ((value) &= ~(1UL << (bit)))
7884#define bitWrite (value ,bit ,bitvalue ) (bitvalue ? bitSet(value, bit) : bitClear(value, bit))
7985
80- typedef unsignedint word ;
81-
8286#ifndef bit
8387#define bit (b ) (1UL << (b))
8488#endif
8589
86- typedef bool boolean ;
87- typedef uint8_t byte ;
90+ /* TODO: request for removal */
91+ typedef bool boolean ;
92+ typedef uint8_t byte ;
93+ typedef uint16_t word ;
8894
8995void init (void );
9096void initVariant (void );
9197
9298int atexit (void (* func )()) __attribute__((weak ));
9399int main () __attribute__((weak ));
94100
95- void pinMode (uint8_t pinNumber ,_pinMode pinMode );
96- void digitalWrite (uint8_t pinNumber ,_pinStatus status );
97- _pinStatus digitalRead (uint8_t pinNumber );
98- int analogRead (uint8_t pinNumber );
101+ #ifdef EXTENDED_PIN_MODE
102+ // Platforms who wnat to declare more than 256 pins need to define EXTENDED_PIN_MODE globally
103+ typedef uint32_t pin_size_t ;
104+ #else
105+ typedef uint8_t pin_size_t ;
106+ #endif
107+
108+ void pinMode (pin_size_t pinNumber ,PinMode pinMode );
109+ void digitalWrite (pin_size_t pinNumber ,PinStatus status );
110+ PinStatus digitalRead (pin_size_t pinNumber );
111+ int analogRead (pin_size_t pinNumber );
99112void analogReference (uint8_t mode );
100- void analogWrite (uint8_t pinNumber ,int value );
113+ void analogWrite (pin_size_t pinNumber ,int value );
101114
102115unsigned long millis (void );
103116unsigned long micros (void );
104117void delay (unsigned long );
105118void delayMicroseconds (unsignedint us );
106- unsigned long pulseIn (uint8_t pin ,uint8_t state ,unsigned long timeout );
107- unsigned long pulseInLong (uint8_t pin ,uint8_t state ,unsigned long timeout );
119+ unsigned long pulseIn (pin_size_t pin ,uint8_t state ,unsigned long timeout );
120+ unsigned long pulseInLong (pin_size_t pin ,uint8_t state ,unsigned long timeout );
108121
109- void shiftOut (uint8_t dataPin ,uint8_t clockPin ,uint8_t bitOrder ,uint8_t val );
110- uint8_t shiftIn (uint8_t dataPin ,uint8_t clockPin ,uint8_t bitOrder );
122+ void shiftOut (pin_size_t dataPin ,pin_size_t clockPin ,uint8_t bitOrder ,uint8_t val );
123+ pin_size_t shiftIn (pin_size_t dataPin ,pin_size_t clockPin ,uint8_t bitOrder );
111124
112- void attachInterrupt (uint8_t interruptNumber ,void ( * callback )( void ), _interruptMode mode );
113- void detachInterrupt (uint8_t interruptNumber );
125+ void attachInterrupt (pin_size_t interruptNumber ,voidFuncPtr callback , InterruptMode mode );
126+ void detachInterrupt (pin_size_t interruptNumber );
114127
115128void setup (void );
116129void loop (void );