This is the final version of Mini Gateway for Automation and Security desgined for Renesas GR Peach Design Contest

Dependencies:   GR-PEACH_video GraphicsFramework HTTPServer R_BSP mbed-rpc mbed-rtos Socket lwip-eth lwip-sys lwip FATFileSystem

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

Committer:
vipinranka
Date:
Wed Jan 11 11:41:30 2017 +0000
Revision:
12:9a20164dcc47
This is the final version MGAS Project for Renesas GR Peach Design Contest

Who changed what in which revision?

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