RTC auf true

Committer:
kevman
Date:
Wed Nov 28 15:10:15 2018 +0000
Revision:
0:38ceb79fef03
RTC modified

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kevman 0:38ceb79fef03 1 /* mbed Microcontroller Library
kevman 0:38ceb79fef03 2 * Copyright (c) 2006-2013 ARM Limited
kevman 0:38ceb79fef03 3 *
kevman 0:38ceb79fef03 4 * Licensed under the Apache License, Version 2.0 (the "License");
kevman 0:38ceb79fef03 5 * you may not use this file except in compliance with the License.
kevman 0:38ceb79fef03 6 * You may obtain a copy of the License at
kevman 0:38ceb79fef03 7 *
kevman 0:38ceb79fef03 8 * http://www.apache.org/licenses/LICENSE-2.0
kevman 0:38ceb79fef03 9 *
kevman 0:38ceb79fef03 10 * Unless required by applicable law or agreed to in writing, software
kevman 0:38ceb79fef03 11 * distributed under the License is distributed on an "AS IS" BASIS,
kevman 0:38ceb79fef03 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kevman 0:38ceb79fef03 13 * See the License for the specific language governing permissions and
kevman 0:38ceb79fef03 14 * limitations under the License.
kevman 0:38ceb79fef03 15 */
kevman 0:38ceb79fef03 16 #include "drivers/BusIn.h"
kevman 0:38ceb79fef03 17 #include "platform/mbed_assert.h"
kevman 0:38ceb79fef03 18
kevman 0:38ceb79fef03 19 namespace mbed {
kevman 0:38ceb79fef03 20
kevman 0:38ceb79fef03 21 BusIn::BusIn(PinName p0, PinName p1, PinName p2, PinName p3, PinName p4, PinName p5, PinName p6, PinName p7, PinName p8, PinName p9, PinName p10, PinName p11, PinName p12, PinName p13, PinName p14, PinName p15)
kevman 0:38ceb79fef03 22 {
kevman 0:38ceb79fef03 23 PinName pins[16] = {p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15};
kevman 0:38ceb79fef03 24
kevman 0:38ceb79fef03 25 // No lock needed in the constructor
kevman 0:38ceb79fef03 26 _nc_mask = 0;
kevman 0:38ceb79fef03 27 for (int i = 0; i < 16; i++) {
kevman 0:38ceb79fef03 28 _pin[i] = (pins[i] != NC) ? new DigitalIn(pins[i]) : 0;
kevman 0:38ceb79fef03 29 if (pins[i] != NC) {
kevman 0:38ceb79fef03 30 _nc_mask |= (1 << i);
kevman 0:38ceb79fef03 31 }
kevman 0:38ceb79fef03 32 }
kevman 0:38ceb79fef03 33 }
kevman 0:38ceb79fef03 34
kevman 0:38ceb79fef03 35 BusIn::BusIn(PinName pins[16])
kevman 0:38ceb79fef03 36 {
kevman 0:38ceb79fef03 37 // No lock needed in the constructor
kevman 0:38ceb79fef03 38 _nc_mask = 0;
kevman 0:38ceb79fef03 39 for (int i = 0; i < 16; i++) {
kevman 0:38ceb79fef03 40 _pin[i] = (pins[i] != NC) ? new DigitalIn(pins[i]) : 0;
kevman 0:38ceb79fef03 41 if (pins[i] != NC) {
kevman 0:38ceb79fef03 42 _nc_mask |= (1 << i);
kevman 0:38ceb79fef03 43 }
kevman 0:38ceb79fef03 44 }
kevman 0:38ceb79fef03 45 }
kevman 0:38ceb79fef03 46
kevman 0:38ceb79fef03 47 BusIn::~BusIn()
kevman 0:38ceb79fef03 48 {
kevman 0:38ceb79fef03 49 // No lock needed in the destructor
kevman 0:38ceb79fef03 50 for (int i = 0; i < 16; i++) {
kevman 0:38ceb79fef03 51 if (_pin[i] != 0) {
kevman 0:38ceb79fef03 52 delete _pin[i];
kevman 0:38ceb79fef03 53 }
kevman 0:38ceb79fef03 54 }
kevman 0:38ceb79fef03 55 }
kevman 0:38ceb79fef03 56
kevman 0:38ceb79fef03 57 int BusIn::read()
kevman 0:38ceb79fef03 58 {
kevman 0:38ceb79fef03 59 int v = 0;
kevman 0:38ceb79fef03 60 lock();
kevman 0:38ceb79fef03 61 for (int i = 0; i < 16; i++) {
kevman 0:38ceb79fef03 62 if (_pin[i] != 0) {
kevman 0:38ceb79fef03 63 v |= _pin[i]->read() << i;
kevman 0:38ceb79fef03 64 }
kevman 0:38ceb79fef03 65 }
kevman 0:38ceb79fef03 66 unlock();
kevman 0:38ceb79fef03 67 return v;
kevman 0:38ceb79fef03 68 }
kevman 0:38ceb79fef03 69
kevman 0:38ceb79fef03 70 void BusIn::mode(PinMode pull)
kevman 0:38ceb79fef03 71 {
kevman 0:38ceb79fef03 72 lock();
kevman 0:38ceb79fef03 73 for (int i = 0; i < 16; i++) {
kevman 0:38ceb79fef03 74 if (_pin[i] != 0) {
kevman 0:38ceb79fef03 75 _pin[i]->mode(pull);
kevman 0:38ceb79fef03 76 }
kevman 0:38ceb79fef03 77 }
kevman 0:38ceb79fef03 78 unlock();
kevman 0:38ceb79fef03 79 }
kevman 0:38ceb79fef03 80
kevman 0:38ceb79fef03 81 void BusIn::lock()
kevman 0:38ceb79fef03 82 {
kevman 0:38ceb79fef03 83 _mutex.lock();
kevman 0:38ceb79fef03 84 }
kevman 0:38ceb79fef03 85
kevman 0:38ceb79fef03 86 void BusIn::unlock()
kevman 0:38ceb79fef03 87 {
kevman 0:38ceb79fef03 88 _mutex.unlock();
kevman 0:38ceb79fef03 89 }
kevman 0:38ceb79fef03 90
kevman 0:38ceb79fef03 91 BusIn::operator int()
kevman 0:38ceb79fef03 92 {
kevman 0:38ceb79fef03 93 // Underlying read is thread safe
kevman 0:38ceb79fef03 94 return read();
kevman 0:38ceb79fef03 95 }
kevman 0:38ceb79fef03 96
kevman 0:38ceb79fef03 97 DigitalIn &BusIn::operator[](int index)
kevman 0:38ceb79fef03 98 {
kevman 0:38ceb79fef03 99 // No lock needed since _pin is not modified outside the constructor
kevman 0:38ceb79fef03 100 MBED_ASSERT(index >= 0 && index < 16);
kevman 0:38ceb79fef03 101 MBED_ASSERT(_pin[index]);
kevman 0:38ceb79fef03 102 return *_pin[index];
kevman 0:38ceb79fef03 103 }
kevman 0:38ceb79fef03 104
kevman 0:38ceb79fef03 105 } // namespace mbed