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/Stream.h"
sahilmgandhi 18:6a4db94011d3 17
sahilmgandhi 18:6a4db94011d3 18 namespace mbed {
sahilmgandhi 18:6a4db94011d3 19
sahilmgandhi 18:6a4db94011d3 20 Stream::Stream(const char *name) : FileLike(name), _file(NULL) {
sahilmgandhi 18:6a4db94011d3 21 // No lock needed in constructor
sahilmgandhi 18:6a4db94011d3 22 /* open ourselves */
sahilmgandhi 18:6a4db94011d3 23 char buf[12]; /* :0x12345678 + null byte */
sahilmgandhi 18:6a4db94011d3 24 std::sprintf(buf, ":%p", this);
sahilmgandhi 18:6a4db94011d3 25 _file = std::fopen(buf, "w+");
sahilmgandhi 18:6a4db94011d3 26 mbed_set_unbuffered_stream(_file);
sahilmgandhi 18:6a4db94011d3 27 }
sahilmgandhi 18:6a4db94011d3 28
sahilmgandhi 18:6a4db94011d3 29 Stream::~Stream() {
sahilmgandhi 18:6a4db94011d3 30 // No lock can be used in destructor
sahilmgandhi 18:6a4db94011d3 31 fclose(_file);
sahilmgandhi 18:6a4db94011d3 32 }
sahilmgandhi 18:6a4db94011d3 33
sahilmgandhi 18:6a4db94011d3 34 int Stream::putc(int c) {
sahilmgandhi 18:6a4db94011d3 35 lock();
sahilmgandhi 18:6a4db94011d3 36 fflush(_file);
sahilmgandhi 18:6a4db94011d3 37 int ret = std::fputc(c, _file);
sahilmgandhi 18:6a4db94011d3 38 unlock();
sahilmgandhi 18:6a4db94011d3 39 return ret;
sahilmgandhi 18:6a4db94011d3 40 }
sahilmgandhi 18:6a4db94011d3 41 int Stream::puts(const char *s) {
sahilmgandhi 18:6a4db94011d3 42 lock();
sahilmgandhi 18:6a4db94011d3 43 fflush(_file);
sahilmgandhi 18:6a4db94011d3 44 int ret = std::fputs(s, _file);
sahilmgandhi 18:6a4db94011d3 45 unlock();
sahilmgandhi 18:6a4db94011d3 46 return ret;
sahilmgandhi 18:6a4db94011d3 47 }
sahilmgandhi 18:6a4db94011d3 48 int Stream::getc() {
sahilmgandhi 18:6a4db94011d3 49 lock();
sahilmgandhi 18:6a4db94011d3 50 fflush(_file);
sahilmgandhi 18:6a4db94011d3 51 int ret = mbed_getc(_file);
sahilmgandhi 18:6a4db94011d3 52 unlock();
sahilmgandhi 18:6a4db94011d3 53 return ret;
sahilmgandhi 18:6a4db94011d3 54 }
sahilmgandhi 18:6a4db94011d3 55 char* Stream::gets(char *s, int size) {
sahilmgandhi 18:6a4db94011d3 56 lock();
sahilmgandhi 18:6a4db94011d3 57 fflush(_file);
sahilmgandhi 18:6a4db94011d3 58 char *ret = mbed_gets(s,size,_file);
sahilmgandhi 18:6a4db94011d3 59 unlock();
sahilmgandhi 18:6a4db94011d3 60 return ret;
sahilmgandhi 18:6a4db94011d3 61 }
sahilmgandhi 18:6a4db94011d3 62
sahilmgandhi 18:6a4db94011d3 63 int Stream::close() {
sahilmgandhi 18:6a4db94011d3 64 return 0;
sahilmgandhi 18:6a4db94011d3 65 }
sahilmgandhi 18:6a4db94011d3 66
sahilmgandhi 18:6a4db94011d3 67 ssize_t Stream::write(const void* buffer, size_t length) {
sahilmgandhi 18:6a4db94011d3 68 const char* ptr = (const char*)buffer;
sahilmgandhi 18:6a4db94011d3 69 const char* end = ptr + length;
sahilmgandhi 18:6a4db94011d3 70
sahilmgandhi 18:6a4db94011d3 71 lock();
sahilmgandhi 18:6a4db94011d3 72 while (ptr != end) {
sahilmgandhi 18:6a4db94011d3 73 if (_putc(*ptr++) == EOF) {
sahilmgandhi 18:6a4db94011d3 74 break;
sahilmgandhi 18:6a4db94011d3 75 }
sahilmgandhi 18:6a4db94011d3 76 }
sahilmgandhi 18:6a4db94011d3 77 unlock();
sahilmgandhi 18:6a4db94011d3 78
sahilmgandhi 18:6a4db94011d3 79 return ptr - (const char*)buffer;
sahilmgandhi 18:6a4db94011d3 80 }
sahilmgandhi 18:6a4db94011d3 81
sahilmgandhi 18:6a4db94011d3 82 ssize_t Stream::read(void* buffer, size_t length) {
sahilmgandhi 18:6a4db94011d3 83 char* ptr = (char*)buffer;
sahilmgandhi 18:6a4db94011d3 84 char* end = ptr + length;
sahilmgandhi 18:6a4db94011d3 85
sahilmgandhi 18:6a4db94011d3 86 lock();
sahilmgandhi 18:6a4db94011d3 87 while (ptr != end) {
sahilmgandhi 18:6a4db94011d3 88 int c = _getc();
sahilmgandhi 18:6a4db94011d3 89 if (c==EOF) break;
sahilmgandhi 18:6a4db94011d3 90 *ptr++ = c;
sahilmgandhi 18:6a4db94011d3 91 }
sahilmgandhi 18:6a4db94011d3 92 unlock();
sahilmgandhi 18:6a4db94011d3 93
sahilmgandhi 18:6a4db94011d3 94 return ptr - (const char*)buffer;
sahilmgandhi 18:6a4db94011d3 95 }
sahilmgandhi 18:6a4db94011d3 96
sahilmgandhi 18:6a4db94011d3 97 off_t Stream::seek(off_t offset, int whence) {
sahilmgandhi 18:6a4db94011d3 98 return 0;
sahilmgandhi 18:6a4db94011d3 99 }
sahilmgandhi 18:6a4db94011d3 100
sahilmgandhi 18:6a4db94011d3 101 off_t Stream::tell() {
sahilmgandhi 18:6a4db94011d3 102 return 0;
sahilmgandhi 18:6a4db94011d3 103 }
sahilmgandhi 18:6a4db94011d3 104
sahilmgandhi 18:6a4db94011d3 105 void Stream::rewind() {
sahilmgandhi 18:6a4db94011d3 106 }
sahilmgandhi 18:6a4db94011d3 107
sahilmgandhi 18:6a4db94011d3 108 int Stream::isatty() {
sahilmgandhi 18:6a4db94011d3 109 return 0;
sahilmgandhi 18:6a4db94011d3 110 }
sahilmgandhi 18:6a4db94011d3 111
sahilmgandhi 18:6a4db94011d3 112 int Stream::sync() {
sahilmgandhi 18:6a4db94011d3 113 return 0;
sahilmgandhi 18:6a4db94011d3 114 }
sahilmgandhi 18:6a4db94011d3 115
sahilmgandhi 18:6a4db94011d3 116 size_t Stream::size() {
sahilmgandhi 18:6a4db94011d3 117 return 0;
sahilmgandhi 18:6a4db94011d3 118 }
sahilmgandhi 18:6a4db94011d3 119
sahilmgandhi 18:6a4db94011d3 120 int Stream::printf(const char* format, ...) {
sahilmgandhi 18:6a4db94011d3 121 lock();
sahilmgandhi 18:6a4db94011d3 122 std::va_list arg;
sahilmgandhi 18:6a4db94011d3 123 va_start(arg, format);
sahilmgandhi 18:6a4db94011d3 124 fflush(_file);
sahilmgandhi 18:6a4db94011d3 125 int r = vfprintf(_file, format, arg);
sahilmgandhi 18:6a4db94011d3 126 va_end(arg);
sahilmgandhi 18:6a4db94011d3 127 unlock();
sahilmgandhi 18:6a4db94011d3 128 return r;
sahilmgandhi 18:6a4db94011d3 129 }
sahilmgandhi 18:6a4db94011d3 130
sahilmgandhi 18:6a4db94011d3 131 int Stream::scanf(const char* format, ...) {
sahilmgandhi 18:6a4db94011d3 132 lock();
sahilmgandhi 18:6a4db94011d3 133 std::va_list arg;
sahilmgandhi 18:6a4db94011d3 134 va_start(arg, format);
sahilmgandhi 18:6a4db94011d3 135 fflush(_file);
sahilmgandhi 18:6a4db94011d3 136 int r = vfscanf(_file, format, arg);
sahilmgandhi 18:6a4db94011d3 137 va_end(arg);
sahilmgandhi 18:6a4db94011d3 138 unlock();
sahilmgandhi 18:6a4db94011d3 139 return r;
sahilmgandhi 18:6a4db94011d3 140 }
sahilmgandhi 18:6a4db94011d3 141
sahilmgandhi 18:6a4db94011d3 142 int Stream::vprintf(const char* format, std::va_list args) {
sahilmgandhi 18:6a4db94011d3 143 lock();
sahilmgandhi 18:6a4db94011d3 144 fflush(_file);
sahilmgandhi 18:6a4db94011d3 145 int r = vfprintf(_file, format, args);
sahilmgandhi 18:6a4db94011d3 146 unlock();
sahilmgandhi 18:6a4db94011d3 147 return r;
sahilmgandhi 18:6a4db94011d3 148 }
sahilmgandhi 18:6a4db94011d3 149
sahilmgandhi 18:6a4db94011d3 150 int Stream::vscanf(const char* format, std::va_list args) {
sahilmgandhi 18:6a4db94011d3 151 lock();
sahilmgandhi 18:6a4db94011d3 152 fflush(_file);
sahilmgandhi 18:6a4db94011d3 153 int r = vfscanf(_file, format, args);
sahilmgandhi 18:6a4db94011d3 154 unlock();
sahilmgandhi 18:6a4db94011d3 155 return r;
sahilmgandhi 18:6a4db94011d3 156 }
sahilmgandhi 18:6a4db94011d3 157
sahilmgandhi 18:6a4db94011d3 158 } // namespace mbed