diff --git a/targets/arduino/HardwareSerial.cpp b/targets/arduino/HardwareSerial.cpp new file mode 100755 index 000000000..be0707a82 --- /dev/null +++ b/targets/arduino/HardwareSerial.cpp @@ -0,0 +1,171 @@ +/* + HarwareSerial.cpp - Hardware serial library for Wiring + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +extern "C" { + #include + #include + #include + #include "Serial.h" +} + +#include "HardwareSerial.h" + +// Constructors //////////////////////////////////////////////////////////////// + +HardwareSerial::HardwareSerial(uint8_t uart) +{ + if(uart == 0){ + _uart = 0; + }else{ + _uart = 1; + } +} + +// Public Methods ////////////////////////////////////////////////////////////// + +void HardwareSerial::begin(long speed) +{ + uart_init(_uart, speed); +} + +uint8_t HardwareSerial::available(void) +{ + return uart_available(_uart); +} + +int HardwareSerial::read(void) +{ + return uart_read(_uart); +} + +void HardwareSerial::print(char c) +{ + uart_write(_uart, &c, 1); +} + +void HardwareSerial::print(char c[]) +{ + uart_write(_uart, c, strlen(c)); +} + +void HardwareSerial::print(uint8_t b) +{ + char c = b; + uart_write(_uart, &c, 1); +} + +void HardwareSerial::print(int n) +{ + print((long) n); +} + +void HardwareSerial::print(long n) +{ + if (n < 0) { + print('-'); + n = -n; + } + printNumber(n, 10); +} + +void HardwareSerial::print(unsigned long n) +{ + printNumber(n, 10); +} + +void HardwareSerial::print(long n, int base) +{ + if (base == 0) + print((char) n); + else if (base == 10) + print(n); + else + printNumber(n, base); +} + +void HardwareSerial::println(void) +{ + print('\n'); +} + +void HardwareSerial::println(char c) +{ + print(c); + println(); +} + +void HardwareSerial::println(char c[]) +{ + uart_write(_uart, c, strlen(c)); + println(); +} + +void HardwareSerial::println(uint8_t b) +{ + print(b); + println(); +} + +void HardwareSerial::println(int n) +{ + println((long) n); +} + +void HardwareSerial::println(long n) +{ + print(n); + println(); +} + +void HardwareSerial::println(unsigned long n) +{ + print(n); + println(); +} + +void HardwareSerial::println(long n, int base) +{ + print(n, base); + println(); +} + +// Private Methods ///////////////////////////////////////////////////////////// + +void HardwareSerial::printNumber(unsigned long n, uint8_t base) +{ + uint8_t buf[8 * sizeof(long)]; // Assumes 8-bit chars. + int i = 0; + if (n == 0) { + print('0'); + return; + } + while (n > 0) { + buf[i++] = n % base; + n /= base; + } + for (i--; i >= 0; i--){ + print((char)(buf[i] < 10 ? '0' + buf[i] : 'A' + buf[i] - 10)); + } +} + +// Preinstantiate Objects ////////////////////////////////////////////////////// + +HardwareSerial Serial = HardwareSerial(0); +//HardwareSerial Serial1 = HardwareSerial(1); + diff --git a/targets/arduino/HardwareSerial.h b/targets/arduino/HardwareSerial.h new file mode 100755 index 000000000..4f459b11e --- /dev/null +++ b/targets/arduino/HardwareSerial.h @@ -0,0 +1,62 @@ +/* + HardwareSerial.h - Hardware serial library for Wiring + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef HardwareSerial_h +#define HardwareSerial_h + +#include + +#define DEC 10 +#define HEX 16 +#define OCT 8 +#define BIN 2 +#define BYTE 0 + +class HardwareSerial +{ + private: + uint8_t _uart; + void printNumber(unsigned long, uint8_t); + public: + HardwareSerial(uint8_t); + void begin(long); + uint8_t available(void); + int read(void); + void print(char); + void print(char[]); + void print(uint8_t); + void print(int); + void print(long); + void print(unsigned long); + void print(long, int); + void println(void); + void println(char); + void println(char[]); + void println(uint8_t); + void println(int); + void println(long); + void println(unsigned long); + void println(long, int); +}; + +extern HardwareSerial Serial; +//extern HardwareSerial Serial1; + +#endif + diff --git a/targets/arduino/Serial.c b/targets/arduino/Serial.c new file mode 100644 index 000000000..528118316 --- /dev/null +++ b/targets/arduino/Serial.c @@ -0,0 +1,45 @@ +/* + Serial.c - Serial library for Wiring + Based on Hernando Barragan's original C implementation + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "Serial.h" +#include "uart.h" + +void uart_init(uint8_t uart, long baudrate) +{ + uartInit(); + uartSetBaudRate(baudrate); +} + +int uart_read(uint8_t uart) +{ + return uartGetByte(); +} + +uint8_t uart_available(uint8_t uart) +{ + return uartGetRxBuffer()->datalength; +} + +void uart_write(uint8_t uart, char *buf, uint8_t len) +{ + int i; + for (i = 0; i < len; i++) + uartSendByte(buf[i]); +} diff --git a/targets/arduino/Serial.h b/targets/arduino/Serial.h new file mode 100755 index 000000000..ae3fc14a2 --- /dev/null +++ b/targets/arduino/Serial.h @@ -0,0 +1,32 @@ +/* + Serial.h - Serial library for Wiring + Based on Hernando Barragan's original C implementation + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef Serial_h +#define Serial_h + +#include + +void uart_init(uint8_t, long); +int uart_read(uint8_t); +uint8_t uart_available(uint8_t); +void uart_write(uint8_t, char*, uint8_t); + +#endif + diff --git a/targets/arduino/WProgram.h b/targets/arduino/WProgram.h index 62168fccf..4ca4ab0d8 100755 --- a/targets/arduino/WProgram.h +++ b/targets/arduino/WProgram.h @@ -1,6 +1,7 @@ #include #include "wiring.h" +#include "HardwareSerial.h" #include #include