UAVX Multicopter Flight Controller.

Dependencies:   mbed

Committer:
gke
Date:
Fri Feb 18 22:28:05 2011 +0000
Revision:
0:62a1c91a859a
First release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gke 0:62a1c91a859a 1 /*
gke 0:62a1c91a859a 2 Copyright (c) 2010 Andy Kirkham
gke 0:62a1c91a859a 3
gke 0:62a1c91a859a 4 Permission is hereby granted, free of charge, to any person obtaining a copy
gke 0:62a1c91a859a 5 of this software and associated documentation files (the "Software"), to deal
gke 0:62a1c91a859a 6 in the Software without restriction, including without limitation the rights
gke 0:62a1c91a859a 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
gke 0:62a1c91a859a 8 copies of the Software, and to permit persons to whom the Software is
gke 0:62a1c91a859a 9 furnished to do so, subject to the following conditions:
gke 0:62a1c91a859a 10
gke 0:62a1c91a859a 11 The above copyright notice and this permission notice shall be included in
gke 0:62a1c91a859a 12 all copies or substantial portions of the Software.
gke 0:62a1c91a859a 13
gke 0:62a1c91a859a 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
gke 0:62a1c91a859a 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
gke 0:62a1c91a859a 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
gke 0:62a1c91a859a 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
gke 0:62a1c91a859a 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
gke 0:62a1c91a859a 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
gke 0:62a1c91a859a 20 THE SOFTWARE.
gke 0:62a1c91a859a 21 */
gke 0:62a1c91a859a 22
gke 0:62a1c91a859a 23 #include "../SerialBuffered.h"
gke 0:62a1c91a859a 24 #include "../sb_globals.h"
gke 0:62a1c91a859a 25
gke 0:62a1c91a859a 26 int SerialBuffered::putc(int c, bool blocking) {
gke 0:62a1c91a859a 27 if ((GET_REGISTER(SERIALBUFFERED_LSR) & 0x20) && (_tx_buffer_in[uart_number] == _tx_buffer_out[uart_number] && !_tx_buffer_full[uart_number])) {
gke 0:62a1c91a859a 28 SET_REGISTER(SERIALBUFFERED_THR, (uint8_t)c);
gke 0:62a1c91a859a 29 }
gke 0:62a1c91a859a 30 else {
gke 0:62a1c91a859a 31 if (_tx_buffer_full[uart_number]) {
gke 0:62a1c91a859a 32 if (blocking) while (_tx_buffer_full[uart_number]) ; /* Blocks!!! */
gke 0:62a1c91a859a 33 else {
gke 0:62a1c91a859a 34 _tx_buffer_overflow[uart_number] = true;
gke 0:62a1c91a859a 35 return -1;
gke 0:62a1c91a859a 36 }
gke 0:62a1c91a859a 37 }
gke 0:62a1c91a859a 38 _tx_buffer[uart_number][_tx_buffer_in[uart_number]++] = (char)c;
gke 0:62a1c91a859a 39 if (_tx_buffer_in[uart_number] >= _tx_buffer_size[uart_number]) {
gke 0:62a1c91a859a 40 _tx_buffer_in[uart_number] = 0;
gke 0:62a1c91a859a 41 }
gke 0:62a1c91a859a 42 if (_tx_buffer_in[uart_number] == _tx_buffer_out[uart_number] && !_tx_buffer_full[uart_number]) _tx_buffer_full[uart_number] = true;
gke 0:62a1c91a859a 43 SET_REGISTER(SERIALBUFFERED_IER, 0x3);
gke 0:62a1c91a859a 44 }
gke 0:62a1c91a859a 45 return 0;
gke 0:62a1c91a859a 46 }
gke 0:62a1c91a859a 47
gke 0:62a1c91a859a 48 /** putc
gke 0:62a1c91a859a 49 */
gke 0:62a1c91a859a 50 int SerialBuffered::putc(int c) {
gke 0:62a1c91a859a 51 return putc(c, true);
gke 0:62a1c91a859a 52 }
gke 0:62a1c91a859a 53
gke 0:62a1c91a859a 54 int SerialBuffered::writeable(void) {
gke 0:62a1c91a859a 55 return (!_tx_buffer_full[uart_number] && !_tx_buffer_overflow[uart_number]) ? 1 : 0;
gke 0:62a1c91a859a 56 }