PokittoLib is the library needed for programming the Pokitto DIY game console (www.pokitto.com)

Dependents:   Sensitive

Fork of PokittoLib by Jonne Valola

Committer:
Pokitto
Date:
Wed Oct 11 20:35:27 2017 +0000
Revision:
6:ea7377f3d1af
Fixed PokittoLib. Includes a working custom mbed-src

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Pokitto 6:ea7377f3d1af 1 /* mbed Microcontroller Library
Pokitto 6:ea7377f3d1af 2 * Copyright (c) 2006-2013 ARM Limited
Pokitto 6:ea7377f3d1af 3 *
Pokitto 6:ea7377f3d1af 4 * Licensed under the Apache License, Version 2.0 (the "License");
Pokitto 6:ea7377f3d1af 5 * you may not use this file except in compliance with the License.
Pokitto 6:ea7377f3d1af 6 * You may obtain a copy of the License at
Pokitto 6:ea7377f3d1af 7 *
Pokitto 6:ea7377f3d1af 8 * http://www.apache.org/licenses/LICENSE-2.0
Pokitto 6:ea7377f3d1af 9 *
Pokitto 6:ea7377f3d1af 10 * Unless required by applicable law or agreed to in writing, software
Pokitto 6:ea7377f3d1af 11 * distributed under the License is distributed on an "AS IS" BASIS,
Pokitto 6:ea7377f3d1af 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Pokitto 6:ea7377f3d1af 13 * See the License for the specific language governing permissions and
Pokitto 6:ea7377f3d1af 14 * limitations under the License.
Pokitto 6:ea7377f3d1af 15 */
Pokitto 6:ea7377f3d1af 16 #include "Stream.h"
Pokitto 6:ea7377f3d1af 17
Pokitto 6:ea7377f3d1af 18 #include <cstdarg>
Pokitto 6:ea7377f3d1af 19
Pokitto 6:ea7377f3d1af 20 namespace mbed {
Pokitto 6:ea7377f3d1af 21
Pokitto 6:ea7377f3d1af 22 Stream::Stream(const char *name) : FileLike(name), _file(NULL) {
Pokitto 6:ea7377f3d1af 23 /* open ourselves */
Pokitto 6:ea7377f3d1af 24 char buf[12]; /* :0x12345678 + null byte */
Pokitto 6:ea7377f3d1af 25 std::sprintf(buf, ":%p", this);
Pokitto 6:ea7377f3d1af 26 _file = std::fopen(buf, "w+");
Pokitto 6:ea7377f3d1af 27 mbed_set_unbuffered_stream(_file);
Pokitto 6:ea7377f3d1af 28 }
Pokitto 6:ea7377f3d1af 29
Pokitto 6:ea7377f3d1af 30 Stream::~Stream() {
Pokitto 6:ea7377f3d1af 31 fclose(_file);
Pokitto 6:ea7377f3d1af 32 }
Pokitto 6:ea7377f3d1af 33
Pokitto 6:ea7377f3d1af 34 int Stream::putc(int c) {
Pokitto 6:ea7377f3d1af 35 fflush(_file);
Pokitto 6:ea7377f3d1af 36 return std::fputc(c, _file);
Pokitto 6:ea7377f3d1af 37 }
Pokitto 6:ea7377f3d1af 38 int Stream::puts(const char *s) {
Pokitto 6:ea7377f3d1af 39 fflush(_file);
Pokitto 6:ea7377f3d1af 40 return std::fputs(s, _file);
Pokitto 6:ea7377f3d1af 41 }
Pokitto 6:ea7377f3d1af 42 int Stream::getc() {
Pokitto 6:ea7377f3d1af 43 fflush(_file);
Pokitto 6:ea7377f3d1af 44 return mbed_getc(_file);
Pokitto 6:ea7377f3d1af 45 }
Pokitto 6:ea7377f3d1af 46 char* Stream::gets(char *s, int size) {
Pokitto 6:ea7377f3d1af 47 fflush(_file);
Pokitto 6:ea7377f3d1af 48 return mbed_gets(s,size,_file);
Pokitto 6:ea7377f3d1af 49 }
Pokitto 6:ea7377f3d1af 50
Pokitto 6:ea7377f3d1af 51 int Stream::close() {
Pokitto 6:ea7377f3d1af 52 return 0;
Pokitto 6:ea7377f3d1af 53 }
Pokitto 6:ea7377f3d1af 54
Pokitto 6:ea7377f3d1af 55 ssize_t Stream::write(const void* buffer, size_t length) {
Pokitto 6:ea7377f3d1af 56 const char* ptr = (const char*)buffer;
Pokitto 6:ea7377f3d1af 57 const char* end = ptr + length;
Pokitto 6:ea7377f3d1af 58 while (ptr != end) {
Pokitto 6:ea7377f3d1af 59 if (_putc(*ptr++) == EOF) {
Pokitto 6:ea7377f3d1af 60 break;
Pokitto 6:ea7377f3d1af 61 }
Pokitto 6:ea7377f3d1af 62 }
Pokitto 6:ea7377f3d1af 63 return ptr - (const char*)buffer;
Pokitto 6:ea7377f3d1af 64 }
Pokitto 6:ea7377f3d1af 65
Pokitto 6:ea7377f3d1af 66 ssize_t Stream::read(void* buffer, size_t length) {
Pokitto 6:ea7377f3d1af 67 char* ptr = (char*)buffer;
Pokitto 6:ea7377f3d1af 68 char* end = ptr + length;
Pokitto 6:ea7377f3d1af 69 while (ptr != end) {
Pokitto 6:ea7377f3d1af 70 int c = _getc();
Pokitto 6:ea7377f3d1af 71 if (c==EOF) break;
Pokitto 6:ea7377f3d1af 72 *ptr++ = c;
Pokitto 6:ea7377f3d1af 73 }
Pokitto 6:ea7377f3d1af 74 return ptr - (const char*)buffer;
Pokitto 6:ea7377f3d1af 75 }
Pokitto 6:ea7377f3d1af 76
Pokitto 6:ea7377f3d1af 77 off_t Stream::lseek(off_t offset, int whence) {
Pokitto 6:ea7377f3d1af 78 return 0;
Pokitto 6:ea7377f3d1af 79 }
Pokitto 6:ea7377f3d1af 80
Pokitto 6:ea7377f3d1af 81 int Stream::isatty() {
Pokitto 6:ea7377f3d1af 82 return 0;
Pokitto 6:ea7377f3d1af 83 }
Pokitto 6:ea7377f3d1af 84
Pokitto 6:ea7377f3d1af 85 int Stream::fsync() {
Pokitto 6:ea7377f3d1af 86 return 0;
Pokitto 6:ea7377f3d1af 87 }
Pokitto 6:ea7377f3d1af 88
Pokitto 6:ea7377f3d1af 89 off_t Stream::flen() {
Pokitto 6:ea7377f3d1af 90 return 0;
Pokitto 6:ea7377f3d1af 91 }
Pokitto 6:ea7377f3d1af 92
Pokitto 6:ea7377f3d1af 93 int Stream::printf(const char* format, ...) {
Pokitto 6:ea7377f3d1af 94 std::va_list arg;
Pokitto 6:ea7377f3d1af 95 va_start(arg, format);
Pokitto 6:ea7377f3d1af 96 fflush(_file);
Pokitto 6:ea7377f3d1af 97 int r = vfprintf(_file, format, arg);
Pokitto 6:ea7377f3d1af 98 va_end(arg);
Pokitto 6:ea7377f3d1af 99 return r;
Pokitto 6:ea7377f3d1af 100 }
Pokitto 6:ea7377f3d1af 101
Pokitto 6:ea7377f3d1af 102 int Stream::scanf(const char* format, ...) {
Pokitto 6:ea7377f3d1af 103 std::va_list arg;
Pokitto 6:ea7377f3d1af 104 va_start(arg, format);
Pokitto 6:ea7377f3d1af 105 fflush(_file);
Pokitto 6:ea7377f3d1af 106 int r = vfscanf(_file, format, arg);
Pokitto 6:ea7377f3d1af 107 va_end(arg);
Pokitto 6:ea7377f3d1af 108 return r;
Pokitto 6:ea7377f3d1af 109 }
Pokitto 6:ea7377f3d1af 110
Pokitto 6:ea7377f3d1af 111 } // namespace mbed