Skip to content

Commit 99c4760

Browse files
committed
PinMode redefined for mbed compatibility
- PinMode is redefined to be compatible with both Arduino and Mbed contexts - DigitalInOut is employed to handle gpio, it now exploits the reconfigure PinMode symbol
1 parent ae51997 commit 99c4760

File tree

6 files changed

+209
-13
lines changed

6 files changed

+209
-13
lines changed

cores/arduino/Arduino.h

+5-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222

2323
#if defined(__cplusplus)
2424
#if !defined(ARDUINO_AS_MBED_LIBRARY)
25-
#define PinMode MbedPinMode
25+
26+
#include "pinmode_arduino.h"
27+
2628
#ifdef F
2729
#define Arduino_F F
2830
#undef F
@@ -33,7 +35,7 @@
3335
#include "mbed/drivers/InterruptIn.h"
3436
#include "mbed/drivers/PwmOut.h"
3537
#include "mbed/drivers/AnalogIn.h"
36-
#undef PinMode
38+
#include "mbed/drivers/DigitalInOut.h"
3739
#undef F
3840
#endif //__cplusplus
3941

@@ -90,7 +92,7 @@ typedef struct _PinDescription
9092
PinName name;
9193
mbed::InterruptIn* irq;
9294
mbed::PwmOut* pwm;
93-
gpio_t* gpio;
95+
mbed::DigitalInOut* gpio;
9496
} PinDescription ;
9597

9698
typedef struct _AnalogPinDescription

cores/arduino/mbed.h

-2
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,13 @@
55

66
#if defined(__cplusplus)
77
#if !defined(ARDUINO_AS_MBED_LIBRARY)
8-
#define PinMode MbedPinMode
98
#ifdef F
109
#define Arduino_F F
1110
#undef F
1211
#endif // F (mbed included after arduino.h)
1312
#define F Mbed_F
1413
#endif // !ARDUINO_AS_MBED_LIBRARY
1514
#include "mbed/mbed.h"
16-
#undef PinMode
1715
#undef F
1816
#endif //__cplusplus
1917

cores/arduino/wiring_digital.cpp

+13-8
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ void pinMode(PinName pin, PinMode mode)
4141
mbed::DigitalIn(pin, PullUp);
4242
break;
4343
case INPUT_PULLDOWN:
44+
default:
4445
mbed::DigitalIn(pin, PullDown);
4546
break;
4647
}
@@ -49,24 +50,28 @@ void pinMode(PinName pin, PinMode mode)
4950

5051
void pinMode(pin_size_t pin, PinMode mode)
5152
{
52-
gpio_t* gpio = digitalPinToGpio(pin);
53+
mbed::DigitalInOut* gpio = digitalPinToGpio(pin);
5354
if (gpio == NULL) {
54-
gpio = new gpio_t();
55+
gpio = new mbed::DigitalInOut(digitalPinToPinName(pin));
5556
digitalPinToGpio(pin) = gpio;
5657
}
5758

5859
switch (mode) {
5960
case INPUT:
60-
gpio_init_in_ex(gpio, digitalPinToPinName(pin), PullNone);
61+
gpio->input();
62+
gpio->mode(PullNone);
6163
break;
6264
case OUTPUT:
63-
gpio_init_out(gpio, digitalPinToPinName(pin));
65+
gpio->output();
6466
break;
6567
case INPUT_PULLUP:
66-
gpio_init_in_ex(gpio, digitalPinToPinName(pin), PullUp);
68+
gpio->input();
69+
gpio->mode(PullUp);
6770
break;
6871
case INPUT_PULLDOWN:
69-
gpio_init_in_ex(gpio, digitalPinToPinName(pin), PullDown);
72+
default:
73+
gpio->input();
74+
gpio->mode(PullDown);
7075
break;
7176
}
7277
}
@@ -86,7 +91,7 @@ void digitalWrite(pin_size_t pin, PinStatus val)
8691
if (pin >= PINS_COUNT) {
8792
return;
8893
}
89-
gpio_write(digitalPinToGpio(pin), (int)val);
94+
digitalPinToGpio(pin)->write(val);
9095
}
9196

9297
PinStatus digitalRead(PinName pin)
@@ -104,5 +109,5 @@ PinStatus digitalRead(pin_size_t pin)
104109
if (pin >= PINS_COUNT) {
105110
return LOW;
106111
}
107-
return (PinStatus)gpio_read(digitalPinToGpio(pin));
112+
return (PinStatus) digitalPinToGpio(pin)->read();
108113
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
2+
/* Define mock symbols to nullify PinMode definitions */
3+
#define PullNone TempPullNone
4+
#define PullDown TempPullDown
5+
#define PullUp TempPullUp
6+
#define PullDefault TempPullDefault
7+
8+
#define INPUT TempINPUT
9+
#define OUTPUT TempOUTPUT
10+
#define INPUT_PULLUP TempINPUT_PULLUP
11+
#define INPUT_PULLDOWN TempINPUT_PULLDOWN
12+
13+
/* Rename symbol PinMode into MbedPinMode for all the file PinNames.h
14+
* Functions using PinMode should be redeclared with the correct PinMode symbol */
15+
#define PinMode MbedPinMode
16+
#include "mbed_config.h"
17+
#include "PinNames.h"
18+
#undef PinMode
19+
20+
/* Rename symbol PinMode into ArduinoPinMode for all the file Common.h
21+
* Functions using PinMode should be redeclared with the correct PinMode symbol */
22+
#define PinMode ArduinoPinMode
23+
#include "api/Common.h"
24+
#undef PinMode
25+
26+
#undef PullNone
27+
#undef PullDown
28+
#undef PullUp
29+
#undef PullDefault
30+
31+
#undef INPUT
32+
#undef OUTPUT
33+
#undef INPUT_PULLUP
34+
#undef INPUT_PULLDOWN
35+
36+
typedef enum {
37+
PullNone = TempPullNone,
38+
PullDown = TempPullDown,
39+
PullUp = TempPullUp,
40+
PullDefault = TempPullDefault,
41+
INPUT = TempINPUT,
42+
OUTPUT = TempOUTPUT,
43+
INPUT_PULLUP = TempINPUT_PULLUP,
44+
INPUT_PULLDOWN = TempINPUT_PULLDOWN
45+
} PinMode;
46+
47+
/* Redeclare Common.h functions with the updated PinMode */
48+
void pinMode(pin_size_t pinNumber, PinMode pinMode);
49+
+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
2+
/* Define mock symbols to nullify PinMode definitions */
3+
#define PullNone TempPullNone
4+
#define PullUp TempPullUp
5+
#define PullDown TempPullDown
6+
#define OpenDrainPullUp TempOpenDrainPullUp
7+
#define OpenDrainNoPull TempOpenDrainNoPull
8+
#define OpenDrainPullDown TempOpenDrainPullDown
9+
#define PushPullNoPull TempPushPullNoPull
10+
#define PushPullPullUp TempPushPullPullUp
11+
#define PushPullPullDown TempPushPullPullDown
12+
#define OpenDrain TempOpenDrain
13+
#define PullDefault TempPullDefault
14+
15+
#define INPUT TempINPUT
16+
#define OUTPUT TempOUTPUT
17+
#define INPUT_PULLUP TempINPUT_PULLUP
18+
#define INPUT_PULLDOWN TempINPUT_PULLDOWN
19+
20+
/* Rename symbol PinMode into MbedPinMode for all the file PinNamesTypes.h
21+
* Functions using PinMode should be redeclared with the correct PinMode symbol */
22+
#define PinMode MbedPinMode
23+
#include "mbed_config.h"
24+
#include "PinNamesTypes.h"
25+
#undef PinMode
26+
27+
/* Rename symbol PinMode into ArduinoPinMode for all the file Common.h
28+
* Functions using PinMode should be redeclared with the correct PinMode symbol */
29+
#define PinMode ArduinoPinMode
30+
#include "api/Common.h"
31+
#undef PinMode
32+
33+
#undef PullNone
34+
#undef PullUp
35+
#undef PullDown
36+
#undef OpenDrainPullUp
37+
#undef OpenDrainNoPull
38+
#undef OpenDrainPullDown
39+
#undef PushPullNoPull
40+
#undef PushPullPullUp
41+
#undef PushPullPullDown
42+
#undef OpenDrain
43+
#undef PullDefault
44+
45+
#undef INPUT
46+
#undef OUTPUT
47+
#undef INPUT_PULLUP
48+
#undef INPUT_PULLDOWN
49+
50+
/* Define the PinName symbol to be used in all the contexts */
51+
typedef enum {
52+
PullNone = TempPullNone,
53+
PullUp = TempPullUp,
54+
PullDown = TempPullDown,
55+
OpenDrainPullUp = TempOpenDrainPullUp,
56+
OpenDrainNoPull = TempOpenDrainNoPull,
57+
OpenDrainPullDown = TempOpenDrainPullDown,
58+
PushPullNoPull = TempPushPullNoPull,
59+
PushPullPullUp = TempPushPullPullUp,
60+
PushPullPullDown = TempPushPullPullDown,
61+
OpenDrain = TempOpenDrain,
62+
PullDefault = TempPullDefault,
63+
INPUT = TempINPUT,
64+
OUTPUT = TempOUTPUT,
65+
INPUT_PULLUP = TempINPUT_PULLUP,
66+
INPUT_PULLDOWN = TempINPUT_PULLDOWN
67+
} PinMode;
68+
69+
/* Redeclare Common.h functions with the updated PinMode */
70+
void pinMode(pin_size_t pinNumber, PinMode pinMode);
71+
+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
2+
/* Define mock symbols to nullify PinMode definitions */
3+
#define PullNone TempPullNone
4+
#define PullUp TempPullUp
5+
#define PullDown TempPullDown
6+
#define OpenDrainPullUp TempOpenDrainPullUp
7+
#define OpenDrainNoPull TempOpenDrainNoPull
8+
#define OpenDrainPullDown TempOpenDrainPullDown
9+
#define PushPullNoPull TempPushPullNoPull
10+
#define PushPullPullUp TempPushPullPullUp
11+
#define PushPullPullDown TempPushPullPullDown
12+
#define OpenDrain TempOpenDrain
13+
#define PullDefault TempPullDefault
14+
15+
#define INPUT TempINPUT
16+
#define OUTPUT TempOUTPUT
17+
#define INPUT_PULLUP TempINPUT_PULLUP
18+
#define INPUT_PULLDOWN TempINPUT_PULLDOWN
19+
20+
/* Rename symbol PinMode into MbedPinMode for all the file PinNamesTypes.h
21+
* Functions using PinMode should be redeclared with the correct PinMode symbol */
22+
#define PinMode MbedPinMode
23+
#include "mbed_config.h"
24+
#include "PinNamesTypes.h"
25+
#undef PinMode
26+
27+
/* Rename symbol PinMode into ArduinoPinMode for all the file Common.h
28+
* Functions using PinMode should be redeclared with the correct PinMode symbol */
29+
#define PinMode ArduinoPinMode
30+
#include "api/Common.h"
31+
#undef PinMode
32+
33+
#undef PullNone
34+
#undef PullUp
35+
#undef PullDown
36+
#undef OpenDrainPullUp
37+
#undef OpenDrainNoPull
38+
#undef OpenDrainPullDown
39+
#undef PushPullNoPull
40+
#undef PushPullPullUp
41+
#undef PushPullPullDown
42+
#undef OpenDrain
43+
#undef PullDefault
44+
45+
#undef INPUT
46+
#undef OUTPUT
47+
#undef INPUT_PULLUP
48+
#undef INPUT_PULLDOWN
49+
50+
/* Define the PinName symbol to be used in all the contexts */
51+
typedef enum {
52+
PullNone = TempPullNone,
53+
PullUp = TempPullUp,
54+
PullDown = TempPullDown,
55+
OpenDrainPullUp = TempOpenDrainPullUp,
56+
OpenDrainNoPull = TempOpenDrainNoPull,
57+
OpenDrainPullDown = TempOpenDrainPullDown,
58+
PushPullNoPull = TempPushPullNoPull,
59+
PushPullPullUp = TempPushPullPullUp,
60+
PushPullPullDown = TempPushPullPullDown,
61+
OpenDrain = TempOpenDrain,
62+
PullDefault = TempPullDefault,
63+
INPUT = TempINPUT,
64+
OUTPUT = TempOUTPUT,
65+
INPUT_PULLUP = TempINPUT_PULLUP,
66+
INPUT_PULLDOWN = TempINPUT_PULLDOWN
67+
} PinMode;
68+
69+
/* Redeclare Common.h functions with the updated PinMode */
70+
void pinMode(pin_size_t pinNumber, PinMode pinMode);
71+

0 commit comments

Comments
 (0)