]> git.donarmstrong.com Git - qmk_firmware.git/blob - tool/mbed/mbed-sdk/libraries/mbed/api/PortInOut.h
Squashed 'tmk_core/' changes from 7967731..b9e0ea0
[qmk_firmware.git] / tool / mbed / mbed-sdk / libraries / mbed / api / PortInOut.h
1 /* mbed Microcontroller Library
2  * Copyright (c) 2006-2013 ARM Limited
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #ifndef MBED_PORTINOUT_H
17 #define MBED_PORTINOUT_H
18
19 #include "platform.h"
20
21 #if DEVICE_PORTINOUT
22
23 #include "port_api.h"
24
25 namespace mbed {
26
27 /** A multiple pin digital in/out used to set/read multiple bi-directional pins
28  */
29 class PortInOut {
30 public:
31
32     /** Create an PortInOut, connected to the specified port
33      *
34      *  @param port Port to connect to (Port0-Port5)
35      *  @param mask A bitmask to identify which bits in the port should be included (0 - ignore)
36      */
37     PortInOut(PortName port, int mask = 0xFFFFFFFF) {
38         port_init(&_port, port, mask, PIN_INPUT);
39     }
40
41     /** Write the value to the output port
42      *
43      *  @param value An integer specifying a bit to write for every corresponding port pin
44      */
45     void write(int value) {
46         port_write(&_port, value);
47     }
48
49     /** Read the value currently output on the port
50      *
51      *  @returns
52      *    An integer with each bit corresponding to associated port pin setting
53      */
54     int read() {
55         return port_read(&_port);
56     }
57
58     /** Set as an output
59      */
60     void output() {
61         port_dir(&_port, PIN_OUTPUT);
62     }
63
64     /** Set as an input
65      */
66     void input() {
67         port_dir(&_port, PIN_INPUT);
68     }
69
70     /** Set the input pin mode
71      *
72      *  @param mode PullUp, PullDown, PullNone, OpenDrain
73      */
74     void mode(PinMode mode) {
75         port_mode(&_port, mode);
76     }
77
78     /** A shorthand for write()
79      */
80     PortInOut& operator= (int value) {
81         write(value);
82         return *this;
83     }
84
85     PortInOut& operator= (PortInOut& rhs) {
86         write(rhs.read());
87         return *this;
88     }
89
90     /** A shorthand for read()
91      */
92     operator int() {
93         return read();
94     }
95
96 private:
97     port_t _port;
98 };
99
100 } // namespace mbed
101
102 #endif
103
104 #endif