Alex Borisevich
/
OpenBCI
PlatformUart.cpp
- Committer:
- akpc806a
- Date:
- 2017-01-22
- Revision:
- 1:4683702d7ad8
- Parent:
- 0:2cb59ea20ace
File content as of revision 1:4683702d7ad8:
// interface for SPI implemented with mbed framework #include "PlatformUart.h" #include "mbed.h" #include "SerialBuffered.h" //Serial uart(PA_9, PA_10, 115200); // Serial(PinName tx, PinName rx, const char *name=NULL, int baud = MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE); SerialBuffered uart( 256, PA_9, PA_10, 115200 ); int platformUart::write(int data) { return uart.putc(data); } /* int platformUart::write(char* str) { return uart.puts(str); } */ size_t platformUart::println(void) { return uart.puts("\r\n"); } size_t platformUart::print(const char str[]) { return uart.puts(str); } size_t platformUart::print(char c) { return uart.putc(c); } size_t platformUart::print(unsigned char b, int base) { return print((unsigned long) b, base); } size_t platformUart::print(int n, int base) { return print((long) n, base); } size_t platformUart::print(unsigned int n, int base) { return print((unsigned long) n, base); } size_t platformUart::print(long n, int base) { if (base == 0) { return write(n); } else if (base == 10) { if (n < 0) { int t = print('-'); n = -n; return printNumber(n, 10) + t; } return printNumber(n, 10); } else { return printNumber(n, base); } } size_t platformUart::print(unsigned long n, int base) { if (base == 0) return write(n); else return printNumber(n, base); } size_t platformUart::print(double n, int digits) { return printFloat(n, digits); } size_t platformUart::println(const char c[]) { size_t n = print(c); n += println(); return n; } size_t platformUart::println(char c) { size_t n = print(c); n += println(); return n; } size_t platformUart::println(unsigned char b, int base) { size_t n = print(b, base); n += println(); return n; } size_t platformUart::println(int num, int base) { size_t n = print(num, base); n += println(); return n; } size_t platformUart::println(unsigned int num, int base) { size_t n = print(num, base); n += println(); return n; } size_t platformUart::println(long num, int base) { size_t n = print(num, base); n += println(); return n; } size_t platformUart::println(unsigned long num, int base) { size_t n = print(num, base); n += println(); return n; } size_t platformUart::println(double num, int digits) { size_t n = print(num, digits); n += println(); return n; } // Private Methods ///////////////////////////////////////////////////////////// size_t platformUart::printNumber(unsigned long n, uint8_t base) { char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte. char *str = &buf[sizeof(buf) - 1]; *str = '\0'; // prevent crash if called with base == 1 if (base < 2) base = 10; do { unsigned long m = n; n /= base; char c = m - base * n; *--str = c < 10 ? c + '0' : c + 'A' - 10; } while(n); return uart.puts(str); } size_t platformUart::printFloat(double number, uint8_t digits) { size_t n = 0; if (isnan(number)) return print("nan"); if (isinf(number)) return print("inf"); if (number > 4294967040.0) return print ("ovf"); // constant determined empirically if (number <-4294967040.0) return print ("ovf"); // constant determined empirically // Handle negative numbers if (number < 0.0) { n += print('-'); number = -number; } // Round correctly so that print(1.999, 2) prints as "2.00" double rounding = 0.5; for (uint8_t i=0; i<digits; ++i) rounding /= 10.0; number += rounding; // Extract the integer part of the number and print it unsigned long int_part = (unsigned long)number; double remainder = number - (double)int_part; n += print(int_part); // platformUart the decimal point, but only if there are digits beyond if (digits > 0) { n += print("."); } // Extract digits from the remainder one at a time while (digits-- > 0) { remainder *= 10.0; int toPrint = int(remainder); n += print(toPrint); remainder -= toPrint; } return n; } unsigned char rx_data; // Interupt Routine to read in data from serial port void Rx_interrupt() { //while (uart.readable()) { rx_data = uart.getc(); //byteQueue_Put(&rxQueue, rx_data); } } platformUart::platformUart() { //byteQueue_Init(&rxQueue); //uart.attach(&Rx_interrupt, Serial::RxIrq); } unsigned char platformUart::available() { return uart.readable(); //!(byteQueue_IsEmpty(&rxQueue)); } unsigned char platformUart::read() { return uart.getc(); //byteQueue_Get(&rxQueue); } platformUart Serial0; platformUart_Dummy Serial1;