Committer:
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4
Date:
Tue Jun 14 09:21:18 2022 +0000
Revision:
0:bdf663c61a82
lib

Who changed what in which revision?

UserRevisionLine numberNew contents of line
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 1 /* mbed Microcontroller Library
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 2 * Copyright (c) 2006-2013 ARM Limited
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 3 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 4 * Licensed under the Apache License, Version 2.0 (the "License");
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 5 * you may not use this file except in compliance with the License.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 6 * You may obtain a copy of the License at
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 7 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 8 * http://www.apache.org/licenses/LICENSE-2.0
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 9 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 10 * Unless required by applicable law or agreed to in writing, software
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 11 * distributed under the License is distributed on an "AS IS" BASIS,
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 13 * See the License for the specific language governing permissions and
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 14 * limitations under the License.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 15 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 16 #ifndef MBED_BUSIN_H
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 17 #define MBED_BUSIN_H
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 18
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 19 #include "platform/platform.h"
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 20 #include "drivers/DigitalIn.h"
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 21 #include "platform/PlatformMutex.h"
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 22 #include "platform/NonCopyable.h"
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 23
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 24 namespace mbed {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 25 /** \addtogroup drivers */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 26
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 27 /** A digital input bus, used for reading the state of a collection of pins
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 28 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 29 * @note Synchronization level: Thread safe
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 30 * @ingroup drivers
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 31 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 32 class BusIn : private NonCopyable<BusIn> {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 33
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 34 public:
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 35 /* Group: Configuration Methods */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 36
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 37 /** Create an BusIn, connected to the specified pins
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 38 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 39 * @param p0 DigitalIn pin to connect to bus bit
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 40 * @param p1 DigitalIn pin to connect to bus bit
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 41 * @param p2 DigitalIn pin to connect to bus bit
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 42 * @param p3 DigitalIn pin to connect to bus bit
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 43 * @param p4 DigitalIn pin to connect to bus bit
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 44 * @param p5 DigitalIn pin to connect to bus bit
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 45 * @param p6 DigitalIn pin to connect to bus bit
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 46 * @param p7 DigitalIn pin to connect to bus bit
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 47 * @param p8 DigitalIn pin to connect to bus bit
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 48 * @param p9 DigitalIn pin to connect to bus bit
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 49 * @param p10 DigitalIn pin to connect to bus bit
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 50 * @param p11 DigitalIn pin to connect to bus bit
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 51 * @param p12 DigitalIn pin to connect to bus bit
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 52 * @param p13 DigitalIn pin to connect to bus bit
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 53 * @param p14 DigitalIn pin to connect to bus bit
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 54 * @param p15 DigitalIn pin to connect to bus bit
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 55 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 56 * @note
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 57 * It is only required to specify as many pin variables as is required
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 58 * for the bus; the rest will default to NC (not connected)
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 59 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 60 BusIn(PinName p0, PinName p1 = NC, PinName p2 = NC, PinName p3 = NC,
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 61 PinName p4 = NC, PinName p5 = NC, PinName p6 = NC, PinName p7 = NC,
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 62 PinName p8 = NC, PinName p9 = NC, PinName p10 = NC, PinName p11 = NC,
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 63 PinName p12 = NC, PinName p13 = NC, PinName p14 = NC, PinName p15 = NC);
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 64
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 65
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 66 /** Create an BusIn, connected to the specified pins
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 67 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 68 * @param pins An array of pins to connect to bus bit
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 69 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 70 BusIn(PinName pins[16]);
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 71
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 72 virtual ~BusIn();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 73
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 74 /** Read the value of the input bus
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 75 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 76 * @returns
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 77 * An integer with each bit corresponding to the value read from the associated DigitalIn pin
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 78 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 79 int read();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 80
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 81 /** Set the input pin mode
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 82 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 83 * @param pull PullUp, PullDown, PullNone
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 84 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 85 void mode(PinMode pull);
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 86
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 87 /** Binary mask of bus pins connected to actual pins (not NC pins)
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 88 * If bus pin is in NC state make corresponding bit will be cleared (set to 0), else bit will be set to 1
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 89 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 90 * @returns
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 91 * Binary mask of connected pins
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 92 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 93 int mask() {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 94 // No lock needed since _nc_mask is not modified outside the constructor
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 95 return _nc_mask;
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 96 }
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 97
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 98 /** A shorthand for read()
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 99 * \sa DigitalIn::read()
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 100 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 101 operator int();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 102
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 103 /** Access to particular bit in random-iterator fashion
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 104 * @param index Position of bit
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 105 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 106 DigitalIn & operator[] (int index);
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 107
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 108 protected:
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 109 DigitalIn* _pin[16];
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 110
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 111 /* Mask of bus's NC pins
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 112 * If bit[n] is set to 1 - pin is connected
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 113 * if bit[n] is cleared - pin is not connected (NC)
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 114 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 115 int _nc_mask;
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 116
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 117 PlatformMutex _mutex;
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 118
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 119 private:
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 120 virtual void lock();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 121 virtual void unlock();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 122 };
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 123
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 124 } // namespace mbed
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 125
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 126 #endif
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 127
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 128