26
26
27
27
void pinMode (PinName pin, PinMode mode)
28
28
{
29
- switch (mode) {
30
- case INPUT:
31
- mbed::DigitalIn (pin, PullNone);
32
- break ;
33
- case OUTPUT:
34
- mbed::DigitalOut (pin, 0 );
35
- break ;
36
- case INPUT_PULLUP:
37
- mbed::DigitalIn (pin, PullUp);
38
- break ;
39
- case INPUT_PULLDOWN:
40
- mbed::DigitalIn (pin, PullDown);
41
- break ;
29
+ pin_size_t idx = PinNameToIndex (pin);
30
+ if (idx != NOT_A_PIN) {
31
+ pinMode (idx, mode);
32
+ } else {
33
+ switch (mode) {
34
+ case INPUT:
35
+ mbed::DigitalIn (pin, PullNone);
36
+ break ;
37
+ case OUTPUT:
38
+ mbed::DigitalOut (pin, 0 );
39
+ break ;
40
+ case INPUT_PULLUP:
41
+ mbed::DigitalIn (pin, PullUp);
42
+ break ;
43
+ case INPUT_PULLDOWN:
44
+ mbed::DigitalIn (pin, PullDown);
45
+ break ;
46
+ }
42
47
}
43
48
}
44
49
45
50
void pinMode (pin_size_t pin, PinMode mode)
46
51
{
52
+ gpio_t * gpio = digitalPinToGpio (pin);
53
+ if (gpio == NULL ) {
54
+ gpio = new gpio_t ();
55
+ digitalPinToGpio (pin) = gpio;
56
+ }
57
+
47
58
switch (mode) {
48
59
case INPUT:
49
- mbed::DigitalIn ( digitalPinToPinName (pin), PullNone);
60
+ gpio_init_in_ex (gpio, digitalPinToPinName (pin), PullNone);
50
61
break ;
51
62
case OUTPUT:
52
- mbed::DigitalOut ( digitalPinToPinName (pin));
63
+ gpio_init_out (gpio, digitalPinToPinName (pin));
53
64
break ;
54
65
case INPUT_PULLUP:
55
- mbed::DigitalIn ( digitalPinToPinName (pin), PullUp);
66
+ gpio_init_in_ex (gpio, digitalPinToPinName (pin), PullUp);
56
67
break ;
57
68
case INPUT_PULLDOWN:
58
- mbed::DigitalIn ( digitalPinToPinName (pin), PullDown);
69
+ gpio_init_in_ex (gpio, digitalPinToPinName (pin), PullDown);
59
70
break ;
60
71
}
61
72
}
62
73
63
74
void digitalWrite (PinName pin, PinStatus val)
64
75
{
65
- mbed::DigitalOut (pin).write ((int )val);
76
+ pin_size_t idx = PinNameToIndex (pin);
77
+ if (idx != NOT_A_PIN) {
78
+ digitalWrite (idx, val);
79
+ } else {
80
+ mbed::DigitalOut (pin).write ((int )val);
81
+ }
66
82
}
67
83
68
84
void digitalWrite (pin_size_t pin, PinStatus val)
69
85
{
70
- mbed::DigitalOut (digitalPinToPinName (pin)).write ((int )val);
86
+ if (pin >= PINS_COUNT) {
87
+ return ;
88
+ }
89
+ gpio_write (digitalPinToGpio (pin), (int )val);
71
90
}
72
91
73
92
PinStatus digitalRead (PinName pin)
74
93
{
75
- return (PinStatus)mbed::DigitalIn (pin).read ();
94
+ pin_size_t idx = PinNameToIndex (pin);
95
+ if (idx != NOT_A_PIN) {
96
+ return digitalRead (idx);
97
+ } else {
98
+ return (PinStatus)mbed::DigitalIn (pin).read ();
99
+ }
76
100
}
77
101
78
102
PinStatus digitalRead (pin_size_t pin)
79
103
{
80
- return (PinStatus)mbed::DigitalIn (digitalPinToPinName (pin)).read ();
104
+ if (pin >= PINS_COUNT) {
105
+ return LOW;
106
+ }
107
+ return (PinStatus)gpio_read (digitalPinToGpio (pin));
81
108
}
0 commit comments