PES4 / Mbed OS Queue_02
Committer:
demayer
Date:
Sat Apr 11 08:15:48 2020 +0000
Revision:
1:b36bbc1c6d27
Parent:
0:6bf0743ece18
IMU-library in .h und .cpp file aufgeteilt

Who changed what in which revision?

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