Fork of Smoothie to port to mbed non-LPC targets.
Fork of Smoothie by
libs/Pin.cpp@3:f151d08d335c, 2014-03-02 (annotated)
- 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?
User | Revision | Line number | New 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 | } |