2626
2727void pinMode (PinName pin, PinMode mode)
2828{
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+ }
4247 }
4348}
4449
4550void pinMode (pin_size_t pin, PinMode mode)
4651{
52+ gpio_t * gpio = digitalPinToGpio (pin);
53+ if (gpio == NULL ) {
54+ gpio = new gpio_t ();
55+ digitalPinToGpio (pin) = gpio;
56+ }
57+
4758 switch (mode) {
4859 case INPUT:
49- mbed::DigitalIn ( digitalPinToPinName (pin), PullNone);
60+ gpio_init_in_ex (gpio, digitalPinToPinName (pin), PullNone);
5061 break ;
5162 case OUTPUT:
52- mbed::DigitalOut ( digitalPinToPinName (pin));
63+ gpio_init_out (gpio, digitalPinToPinName (pin));
5364 break ;
5465 case INPUT_PULLUP:
55- mbed::DigitalIn ( digitalPinToPinName (pin), PullUp);
66+ gpio_init_in_ex (gpio, digitalPinToPinName (pin), PullUp);
5667 break ;
5768 case INPUT_PULLDOWN:
58- mbed::DigitalIn ( digitalPinToPinName (pin), PullDown);
69+ gpio_init_in_ex (gpio, digitalPinToPinName (pin), PullDown);
5970 break ;
6071 }
6172}
6273
6374void digitalWrite (PinName pin, PinStatus val)
6475{
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+ }
6682}
6783
6884void digitalWrite (pin_size_t pin, PinStatus val)
6985{
70- mbed::DigitalOut (digitalPinToPinName (pin)).write ((int )val);
86+ if (pin >= PINS_COUNT) {
87+ return ;
88+ }
89+ gpio_write (digitalPinToGpio (pin), (int )val);
7190}
7291
7392PinStatus digitalRead (PinName pin)
7493{
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+ }
76100}
77101
78102PinStatus digitalRead (pin_size_t pin)
79103{
80- return (PinStatus)mbed::DigitalIn (digitalPinToPinName (pin)).read ();
104+ if (pin >= PINS_COUNT) {
105+ return LOW;
106+ }
107+ return (PinStatus)gpio_read (digitalPinToGpio (pin));
81108}
0 commit comments