Nathan Yonkee
/
Nucleo_sinewave_output_copy
init
mbed-os/drivers/BusIn.cpp@10:46a4cf51ee38, 2018-03-02 (annotated)
- 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?
User | Revision | Line number | New 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 |