Mouse code for the MacroRat

Dependencies:   ITG3200 QEI

Committer:
sahilmgandhi
Date:
Sat Jun 03 00:22:44 2017 +0000
Revision:
46:b156ef445742
Parent:
18:6a4db94011d3
Final code for internal battlebot competition.

Who changed what in which revision?

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