Yihui Xiong / BLE_NODE_TEST

Dependencies:   BLE_API nRF51822

Fork of BLE_LoopbackUART by Bluetooth Low Energy

Committer:
yihui
Date:
Thu Nov 27 09:30:36 2014 +0000
Revision:
10:22480ac31879
Parent:
9:05f0b5a3a70a
change to new revision hardware

Who changed what in which revision?

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