Fork of Smoothie to port to mbed non-LPC targets.

Dependencies:   mbed

Fork of Smoothie by Stéphane Cachat

Committer:
Bigcheese
Date:
Sun Mar 02 06:33:08 2014 +0000
Revision:
3:f151d08d335c
Parent:
2:1df0b61d3b5a
Bunch of stuff. Need to locally merge in updated USB changes.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Michael J. Spencer 2:1df0b61d3b5a 1 #include "Pin.h"
Michael J. Spencer 2:1df0b61d3b5a 2
Michael J. Spencer 2:1df0b61d3b5a 3 #include "utils.h"
Bigcheese 3:f151d08d335c 4 #include "Targets/Target.h"
Michael J. Spencer 2:1df0b61d3b5a 5
Michael J. Spencer 2:1df0b61d3b5a 6 Pin::Pin(){
Michael J. Spencer 2:1df0b61d3b5a 7 this->inverting= false;
Michael J. Spencer 2:1df0b61d3b5a 8 }
Michael J. Spencer 2:1df0b61d3b5a 9
Michael J. Spencer 2:1df0b61d3b5a 10 // Make a new pin object from a string
Michael J. Spencer 2:1df0b61d3b5a 11 Pin* Pin::from_string(std::string value){
Bigcheese 3:f151d08d335c 12 // Find the end of the pin name.
Bigcheese 3:f151d08d335c 13 std::string::size_type e = value.find_first_of("!o^V-@\n\r\t ");
Bigcheese 3:f151d08d335c 14 name = pin_name_from_string(value.substr(0, e));
Bigcheese 3:f151d08d335c 15 if (name == NC)
Bigcheese 3:f151d08d335c 16 return this;
Bigcheese 3:f151d08d335c 17
Bigcheese 3:f151d08d335c 18 gpio_init(&pin, name, PIN_INPUT);
Bigcheese 3:f151d08d335c 19
Bigcheese 3:f151d08d335c 20 // The current position in the string
Bigcheese 3:f151d08d335c 21 const char* cn = value.c_str() + e;
Michael J. Spencer 2:1df0b61d3b5a 22
Bigcheese 3:f151d08d335c 23 for (;*cn;cn++) {
Bigcheese 3:f151d08d335c 24 switch(*cn) {
Bigcheese 3:f151d08d335c 25 case '!':
Bigcheese 3:f151d08d335c 26 this->inverting = true;
Bigcheese 3:f151d08d335c 27 break;
Bigcheese 3:f151d08d335c 28 case 'o':
Bigcheese 3:f151d08d335c 29 as_open_drain();
Bigcheese 3:f151d08d335c 30 break;
Bigcheese 3:f151d08d335c 31 case '^':
Bigcheese 3:f151d08d335c 32 pull_up();
Bigcheese 3:f151d08d335c 33 break;
Bigcheese 3:f151d08d335c 34 case 'v':
Bigcheese 3:f151d08d335c 35 pull_down();
Bigcheese 3:f151d08d335c 36 break;
Bigcheese 3:f151d08d335c 37 case '-':
Bigcheese 3:f151d08d335c 38 pull_none();
Bigcheese 3:f151d08d335c 39 break;
Bigcheese 3:f151d08d335c 40 case '@':
Bigcheese 3:f151d08d335c 41 as_repeater();
Bigcheese 3:f151d08d335c 42 break;
Bigcheese 3:f151d08d335c 43 default:
Bigcheese 3:f151d08d335c 44 // skip any whitespace following the pin index
Bigcheese 3:f151d08d335c 45 if (!is_whitespace(*cn))
Bigcheese 3:f151d08d335c 46 return this;
Michael J. Spencer 2:1df0b61d3b5a 47 }
Michael J. Spencer 2:1df0b61d3b5a 48 }
Michael J. Spencer 2:1df0b61d3b5a 49
Michael J. Spencer 2:1df0b61d3b5a 50 // from_string failed. TODO: some sort of error
Michael J. Spencer 2:1df0b61d3b5a 51 inverting = false;
Michael J. Spencer 2:1df0b61d3b5a 52 return this;
Michael J. Spencer 2:1df0b61d3b5a 53 }
Michael J. Spencer 2:1df0b61d3b5a 54
Michael J. Spencer 2:1df0b61d3b5a 55 // Configure this pin as OD
Michael J. Spencer 2:1df0b61d3b5a 56 Pin* Pin::as_open_drain(){
Bigcheese 3:f151d08d335c 57 if (!connected()) return this;
Bigcheese 3:f151d08d335c 58 gpio_mode(&pin, OpenDrain);
Michael J. Spencer 2:1df0b61d3b5a 59 pull_none(); // no pull up by default
Michael J. Spencer 2:1df0b61d3b5a 60 return this;
Michael J. Spencer 2:1df0b61d3b5a 61 }
Michael J. Spencer 2:1df0b61d3b5a 62
Michael J. Spencer 2:1df0b61d3b5a 63
Michael J. Spencer 2:1df0b61d3b5a 64 // Configure this pin as a repeater
Michael J. Spencer 2:1df0b61d3b5a 65 Pin* Pin::as_repeater(){
Bigcheese 3:f151d08d335c 66 if (!connected()) return this;
Bigcheese 3:f151d08d335c 67 // ?
Michael J. Spencer 2:1df0b61d3b5a 68 return this;
Michael J. Spencer 2:1df0b61d3b5a 69 }
Michael J. Spencer 2:1df0b61d3b5a 70
Michael J. Spencer 2:1df0b61d3b5a 71 // Configure this pin as no pullup or pulldown
Michael J. Spencer 2:1df0b61d3b5a 72 Pin* Pin::pull_none(){
Bigcheese 3:f151d08d335c 73 if (!connected()) return this;
Bigcheese 3:f151d08d335c 74 gpio_mode(&pin, PullNone);
Michael J. Spencer 2:1df0b61d3b5a 75 return this;
Michael J. Spencer 2:1df0b61d3b5a 76 }
Michael J. Spencer 2:1df0b61d3b5a 77
Michael J. Spencer 2:1df0b61d3b5a 78 // Configure this pin as a pullup
Michael J. Spencer 2:1df0b61d3b5a 79 Pin* Pin::pull_up(){
Bigcheese 3:f151d08d335c 80 if (!connected()) return this;
Bigcheese 3:f151d08d335c 81 gpio_mode(&pin, PullUp);
Michael J. Spencer 2:1df0b61d3b5a 82 return this;
Michael J. Spencer 2:1df0b61d3b5a 83 }
Michael J. Spencer 2:1df0b61d3b5a 84
Michael J. Spencer 2:1df0b61d3b5a 85 // Configure this pin as a pulldown
Michael J. Spencer 2:1df0b61d3b5a 86 Pin* Pin::pull_down(){
Bigcheese 3:f151d08d335c 87 if (!connected()) return this;
Bigcheese 3:f151d08d335c 88 gpio_mode(&pin, PullDown);
Michael J. Spencer 2:1df0b61d3b5a 89 return this;
Michael J. Spencer 2:1df0b61d3b5a 90 }