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/BusIn.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 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) {
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 DigitalIn(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 BusIn::BusIn(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 DigitalIn(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 BusIn::~BusIn() {
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 int BusIn::read() {
vipinranka 12:9a20164dcc47 55 int v = 0;
vipinranka 12:9a20164dcc47 56 lock();
vipinranka 12:9a20164dcc47 57 for (int i=0; i<16; i++) {
vipinranka 12:9a20164dcc47 58 if (_pin[i] != 0) {
vipinranka 12:9a20164dcc47 59 v |= _pin[i]->read() << i;
vipinranka 12:9a20164dcc47 60 }
vipinranka 12:9a20164dcc47 61 }
vipinranka 12:9a20164dcc47 62 unlock();
vipinranka 12:9a20164dcc47 63 return v;
vipinranka 12:9a20164dcc47 64 }
vipinranka 12:9a20164dcc47 65
vipinranka 12:9a20164dcc47 66 void BusIn::mode(PinMode pull) {
vipinranka 12:9a20164dcc47 67 lock();
vipinranka 12:9a20164dcc47 68 for (int i=0; i<16; i++) {
vipinranka 12:9a20164dcc47 69 if (_pin[i] != 0) {
vipinranka 12:9a20164dcc47 70 _pin[i]->mode(pull);
vipinranka 12:9a20164dcc47 71 }
vipinranka 12:9a20164dcc47 72 }
vipinranka 12:9a20164dcc47 73 unlock();
vipinranka 12:9a20164dcc47 74 }
vipinranka 12:9a20164dcc47 75
vipinranka 12:9a20164dcc47 76 void BusIn::lock() {
vipinranka 12:9a20164dcc47 77 _mutex.lock();
vipinranka 12:9a20164dcc47 78 }
vipinranka 12:9a20164dcc47 79
vipinranka 12:9a20164dcc47 80 void BusIn::unlock() {
vipinranka 12:9a20164dcc47 81 _mutex.unlock();
vipinranka 12:9a20164dcc47 82 }
vipinranka 12:9a20164dcc47 83
vipinranka 12:9a20164dcc47 84 BusIn::operator int() {
vipinranka 12:9a20164dcc47 85 // Underlying read is thread safe
vipinranka 12:9a20164dcc47 86 return read();
vipinranka 12:9a20164dcc47 87 }
vipinranka 12:9a20164dcc47 88
vipinranka 12:9a20164dcc47 89 DigitalIn& BusIn::operator[] (int index) {
vipinranka 12:9a20164dcc47 90 // No lock needed since _pin is not modified outside the constructor
vipinranka 12:9a20164dcc47 91 MBED_ASSERT(index >= 0 && index <= 16);
vipinranka 12:9a20164dcc47 92 MBED_ASSERT(_pin[index]);
vipinranka 12:9a20164dcc47 93 return *_pin[index];
vipinranka 12:9a20164dcc47 94 }
vipinranka 12:9a20164dcc47 95
vipinranka 12:9a20164dcc47 96 } // namespace mbed