init

Dependencies:   mbed

Committer:
Nathan Yonkee
Date:
Fri Mar 02 07:16:49 2018 -0700
Revision:
10:46a4cf51ee38
Parent:
9:d58e77ebd769
remove mbed-os

Who changed what in which revision?

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