Manh Pham / Mbed OS Nucleo_rtos_basic_ir_controller
Committer:
manhpham
Date:
Sat Apr 07 09:22:54 2018 +0000
Revision:
0:c8673aa96267
Nucleo_rtos_basic_ir_controller

Who changed what in which revision?

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