Kenji Arai / mbed-os_TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers BusOut.h Source File

BusOut.h

00001 /* mbed Microcontroller Library
00002  * Copyright (c) 2006-2013 ARM Limited
00003  * SPDX-License-Identifier: Apache-2.0
00004  *
00005  * Licensed under the Apache License, Version 2.0 (the "License");
00006  * you may not use this file except in compliance with the License.
00007  * You may obtain a copy of the License at
00008  *
00009  *     http://www.apache.org/licenses/LICENSE-2.0
00010  *
00011  * Unless required by applicable law or agreed to in writing, software
00012  * distributed under the License is distributed on an "AS IS" BASIS,
00013  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00014  * See the License for the specific language governing permissions and
00015  * limitations under the License.
00016  */
00017 #ifndef MBED_BUSOUT_H
00018 #define MBED_BUSOUT_H
00019 
00020 #include "drivers/DigitalOut.h"
00021 #include "platform/PlatformMutex.h"
00022 #include "platform/NonCopyable.h"
00023 
00024 namespace mbed {
00025 /**
00026  * \defgroup drivers_BusOut BusOut class
00027  * \ingroup drivers-public-api-gpio
00028  * @{
00029  */
00030 
00031 /** A digital output bus, used for setting the state of a collection of pins
00032  */
00033 class BusOut : private NonCopyable<BusOut> {
00034 
00035 public:
00036 
00037     /** Create an BusOut, connected to the specified pins
00038      *
00039      *  @param p0 DigitalOut pin to connect to bus bit
00040      *  @param p1 DigitalOut pin to connect to bus bit
00041      *  @param p2 DigitalOut pin to connect to bus bit
00042      *  @param p3 DigitalOut pin to connect to bus bit
00043      *  @param p4 DigitalOut pin to connect to bus bit
00044      *  @param p5 DigitalOut pin to connect to bus bit
00045      *  @param p6 DigitalOut pin to connect to bus bit
00046      *  @param p7 DigitalOut pin to connect to bus bit
00047      *  @param p8 DigitalOut pin to connect to bus bit
00048      *  @param p9 DigitalOut pin to connect to bus bit
00049      *  @param p10 DigitalOut pin to connect to bus bit
00050      *  @param p11 DigitalOut pin to connect to bus bit
00051      *  @param p12 DigitalOut pin to connect to bus bit
00052      *  @param p13 DigitalOut pin to connect to bus bit
00053      *  @param p14 DigitalOut pin to connect to bus bit
00054      *  @param p15 DigitalOut pin to connect to bus bit
00055      *
00056      *  @note Synchronization level: Thread safe
00057      *
00058      *  @note
00059      *  It is only required to specify as many pin variables as is required
00060      *  for the bus; the rest will default to NC (not connected)
00061      */
00062     BusOut(PinName p0, PinName p1 = NC, PinName p2 = NC, PinName p3 = NC,
00063            PinName p4 = NC, PinName p5 = NC, PinName p6 = NC, PinName p7 = NC,
00064            PinName p8 = NC, PinName p9 = NC, PinName p10 = NC, PinName p11 = NC,
00065            PinName p12 = NC, PinName p13 = NC, PinName p14 = NC, PinName p15 = NC);
00066 
00067     /** Create an BusOut, connected to the specified pins
00068      *
00069      *  @param pins An array of pins to connect to bus the bit
00070      */
00071     BusOut(PinName pins[16]);
00072 
00073     virtual ~BusOut();
00074 
00075     /** Write the value to the output bus
00076      *
00077      *  @param value An integer specifying a bit to write for every corresponding DigitalOut pin
00078      */
00079     void write(int value);
00080 
00081     /** Read the value currently output on the bus
00082      *
00083      *  @returns
00084      *    An integer with each bit corresponding to associated DigitalOut pin setting
00085      */
00086     int read();
00087 
00088     /** Binary mask of bus pins connected to actual pins (not NC pins)
00089      *  If bus pin is in NC state make corresponding bit will be cleared (set to 0), else bit will be set to 1
00090      *
00091      *  @returns
00092      *    Binary mask of connected pins
00093      */
00094     int mask()
00095     {
00096         // No lock needed since _nc_mask is not modified outside the constructor
00097         return _nc_mask;
00098     }
00099 
00100     /** A shorthand for write()
00101      * \sa BusOut::write()
00102      */
00103     BusOut &operator= (int v);
00104     BusOut &operator= (BusOut &rhs);
00105 
00106     /** Access to particular bit in random-iterator fashion
00107      * @param index  Bit Position
00108      */
00109     DigitalOut &operator[](int index);
00110 
00111     /** A shorthand for read()
00112      * \sa BusOut::read()
00113      */
00114     operator int();
00115 #if !defined(DOXYGEN_ONLY)
00116 protected:
00117     virtual void lock();
00118     virtual void unlock();
00119     DigitalOut *_pin[16];
00120 
00121     /* Mask of bus's NC pins
00122      * If bit[n] is set to 1 - pin is connected
00123      * if bit[n] is cleared - pin is not connected (NC)
00124      */
00125     int _nc_mask;
00126 
00127     PlatformMutex _mutex;
00128 #endif
00129 };
00130 
00131 /** @}*/
00132 
00133 } // namespace mbed
00134 
00135 #endif