mbed library for slider v2

Dependents:   kl46z_slider_v2

Committer:
mturner5
Date:
Wed Sep 14 07:04:27 2016 +0000
Revision:
0:b7116bd48af6
Tried to use the timer.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mturner5 0:b7116bd48af6 1 /* mbed Microcontroller Library
mturner5 0:b7116bd48af6 2 * Copyright (c) 2006-2013 ARM Limited
mturner5 0:b7116bd48af6 3 *
mturner5 0:b7116bd48af6 4 * Licensed under the Apache License, Version 2.0 (the "License");
mturner5 0:b7116bd48af6 5 * you may not use this file except in compliance with the License.
mturner5 0:b7116bd48af6 6 * You may obtain a copy of the License at
mturner5 0:b7116bd48af6 7 *
mturner5 0:b7116bd48af6 8 * http://www.apache.org/licenses/LICENSE-2.0
mturner5 0:b7116bd48af6 9 *
mturner5 0:b7116bd48af6 10 * Unless required by applicable law or agreed to in writing, software
mturner5 0:b7116bd48af6 11 * distributed under the License is distributed on an "AS IS" BASIS,
mturner5 0:b7116bd48af6 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mturner5 0:b7116bd48af6 13 * See the License for the specific language governing permissions and
mturner5 0:b7116bd48af6 14 * limitations under the License.
mturner5 0:b7116bd48af6 15 */
mturner5 0:b7116bd48af6 16 #ifndef MBED_DIGITALINOUT_H
mturner5 0:b7116bd48af6 17 #define MBED_DIGITALINOUT_H
mturner5 0:b7116bd48af6 18
mturner5 0:b7116bd48af6 19 #include "platform.h"
mturner5 0:b7116bd48af6 20
mturner5 0:b7116bd48af6 21 #include "gpio_api.h"
mturner5 0:b7116bd48af6 22 #include "critical.h"
mturner5 0:b7116bd48af6 23
mturner5 0:b7116bd48af6 24 namespace mbed {
mturner5 0:b7116bd48af6 25
mturner5 0:b7116bd48af6 26 /** A digital input/output, used for setting or reading a bi-directional pin
mturner5 0:b7116bd48af6 27 *
mturner5 0:b7116bd48af6 28 * @Note Synchronization level: Interrupt safe
mturner5 0:b7116bd48af6 29 */
mturner5 0:b7116bd48af6 30 class DigitalInOut {
mturner5 0:b7116bd48af6 31
mturner5 0:b7116bd48af6 32 public:
mturner5 0:b7116bd48af6 33 /** Create a DigitalInOut connected to the specified pin
mturner5 0:b7116bd48af6 34 *
mturner5 0:b7116bd48af6 35 * @param pin DigitalInOut pin to connect to
mturner5 0:b7116bd48af6 36 */
mturner5 0:b7116bd48af6 37 DigitalInOut(PinName pin) : gpio() {
mturner5 0:b7116bd48af6 38 // No lock needed in the constructor
mturner5 0:b7116bd48af6 39 gpio_init_in(&gpio, pin);
mturner5 0:b7116bd48af6 40 }
mturner5 0:b7116bd48af6 41
mturner5 0:b7116bd48af6 42 /** Create a DigitalInOut connected to the specified pin
mturner5 0:b7116bd48af6 43 *
mturner5 0:b7116bd48af6 44 * @param pin DigitalInOut pin to connect to
mturner5 0:b7116bd48af6 45 * @param direction the initial direction of the pin
mturner5 0:b7116bd48af6 46 * @param mode the initial mode of the pin
mturner5 0:b7116bd48af6 47 * @param value the initial value of the pin if is an output
mturner5 0:b7116bd48af6 48 */
mturner5 0:b7116bd48af6 49 DigitalInOut(PinName pin, PinDirection direction, PinMode mode, int value) : gpio() {
mturner5 0:b7116bd48af6 50 // No lock needed in the constructor
mturner5 0:b7116bd48af6 51 gpio_init_inout(&gpio, pin, direction, mode, value);
mturner5 0:b7116bd48af6 52 }
mturner5 0:b7116bd48af6 53
mturner5 0:b7116bd48af6 54 /** Set the output, specified as 0 or 1 (int)
mturner5 0:b7116bd48af6 55 *
mturner5 0:b7116bd48af6 56 * @param value An integer specifying the pin output value,
mturner5 0:b7116bd48af6 57 * 0 for logical 0, 1 (or any other non-zero value) for logical 1
mturner5 0:b7116bd48af6 58 */
mturner5 0:b7116bd48af6 59 void write(int value) {
mturner5 0:b7116bd48af6 60 // Thread safe / atomic HAL call
mturner5 0:b7116bd48af6 61 gpio_write(&gpio, value);
mturner5 0:b7116bd48af6 62 }
mturner5 0:b7116bd48af6 63
mturner5 0:b7116bd48af6 64 /** Return the output setting, represented as 0 or 1 (int)
mturner5 0:b7116bd48af6 65 *
mturner5 0:b7116bd48af6 66 * @returns
mturner5 0:b7116bd48af6 67 * an integer representing the output setting of the pin if it is an output,
mturner5 0:b7116bd48af6 68 * or read the input if set as an input
mturner5 0:b7116bd48af6 69 */
mturner5 0:b7116bd48af6 70 int read() {
mturner5 0:b7116bd48af6 71 // Thread safe / atomic HAL call
mturner5 0:b7116bd48af6 72 return gpio_read(&gpio);
mturner5 0:b7116bd48af6 73 }
mturner5 0:b7116bd48af6 74
mturner5 0:b7116bd48af6 75 /** Set as an output
mturner5 0:b7116bd48af6 76 */
mturner5 0:b7116bd48af6 77 void output() {
mturner5 0:b7116bd48af6 78 core_util_critical_section_enter();
mturner5 0:b7116bd48af6 79 gpio_dir(&gpio, PIN_OUTPUT);
mturner5 0:b7116bd48af6 80 core_util_critical_section_exit();
mturner5 0:b7116bd48af6 81 }
mturner5 0:b7116bd48af6 82
mturner5 0:b7116bd48af6 83 /** Set as an input
mturner5 0:b7116bd48af6 84 */
mturner5 0:b7116bd48af6 85 void input() {
mturner5 0:b7116bd48af6 86 core_util_critical_section_enter();
mturner5 0:b7116bd48af6 87 gpio_dir(&gpio, PIN_INPUT);
mturner5 0:b7116bd48af6 88 core_util_critical_section_exit();
mturner5 0:b7116bd48af6 89 }
mturner5 0:b7116bd48af6 90
mturner5 0:b7116bd48af6 91 /** Set the input pin mode
mturner5 0:b7116bd48af6 92 *
mturner5 0:b7116bd48af6 93 * @param mode PullUp, PullDown, PullNone, OpenDrain
mturner5 0:b7116bd48af6 94 */
mturner5 0:b7116bd48af6 95 void mode(PinMode pull) {
mturner5 0:b7116bd48af6 96 core_util_critical_section_enter();
mturner5 0:b7116bd48af6 97 gpio_mode(&gpio, pull);
mturner5 0:b7116bd48af6 98 core_util_critical_section_exit();
mturner5 0:b7116bd48af6 99 }
mturner5 0:b7116bd48af6 100
mturner5 0:b7116bd48af6 101 /** Return the output setting, represented as 0 or 1 (int)
mturner5 0:b7116bd48af6 102 *
mturner5 0:b7116bd48af6 103 * @returns
mturner5 0:b7116bd48af6 104 * Non zero value if pin is connected to uc GPIO
mturner5 0:b7116bd48af6 105 * 0 if gpio object was initialized with NC
mturner5 0:b7116bd48af6 106 */
mturner5 0:b7116bd48af6 107 int is_connected() {
mturner5 0:b7116bd48af6 108 // Thread safe / atomic HAL call
mturner5 0:b7116bd48af6 109 return gpio_is_connected(&gpio);
mturner5 0:b7116bd48af6 110 }
mturner5 0:b7116bd48af6 111
mturner5 0:b7116bd48af6 112 /** A shorthand for write()
mturner5 0:b7116bd48af6 113 */
mturner5 0:b7116bd48af6 114 DigitalInOut& operator= (int value) {
mturner5 0:b7116bd48af6 115 // Underlying write is thread safe
mturner5 0:b7116bd48af6 116 write(value);
mturner5 0:b7116bd48af6 117 return *this;
mturner5 0:b7116bd48af6 118 }
mturner5 0:b7116bd48af6 119
mturner5 0:b7116bd48af6 120 DigitalInOut& operator= (DigitalInOut& rhs) {
mturner5 0:b7116bd48af6 121 core_util_critical_section_enter();
mturner5 0:b7116bd48af6 122 write(rhs.read());
mturner5 0:b7116bd48af6 123 core_util_critical_section_exit();
mturner5 0:b7116bd48af6 124 return *this;
mturner5 0:b7116bd48af6 125 }
mturner5 0:b7116bd48af6 126
mturner5 0:b7116bd48af6 127 /** A shorthand for read()
mturner5 0:b7116bd48af6 128 */
mturner5 0:b7116bd48af6 129 operator int() {
mturner5 0:b7116bd48af6 130 // Underlying call is thread safe
mturner5 0:b7116bd48af6 131 return read();
mturner5 0:b7116bd48af6 132 }
mturner5 0:b7116bd48af6 133
mturner5 0:b7116bd48af6 134 protected:
mturner5 0:b7116bd48af6 135 gpio_t gpio;
mturner5 0:b7116bd48af6 136 };
mturner5 0:b7116bd48af6 137
mturner5 0:b7116bd48af6 138 } // namespace mbed
mturner5 0:b7116bd48af6 139
mturner5 0:b7116bd48af6 140 #endif