aboutsummaryrefslogtreecommitdiff
path: root/core/libraries/SoftwareSerial/SoftwareSerial.cpp
diff options
context:
space:
mode:
authorDavid A. Mellis <d.mellis@arduino.cc>2007-10-06 13:04:46 +0000
committerDavid A. Mellis <d.mellis@arduino.cc>2007-10-06 13:04:46 +0000
commit9e48dfc4fd53a2bc53367568077fbea44f88eda2 (patch)
tree356854e8239e0f0676bcf6105b7ea6a53cb9a880 /core/libraries/SoftwareSerial/SoftwareSerial.cpp
parent179fcdbda432ff33a921a70994087b08b2a79caa (diff)
Moving libraries out from inside targets and creating bootloaders directory.
Diffstat (limited to 'core/libraries/SoftwareSerial/SoftwareSerial.cpp')
-rwxr-xr-xcore/libraries/SoftwareSerial/SoftwareSerial.cpp227
1 files changed, 0 insertions, 227 deletions
diff --git a/core/libraries/SoftwareSerial/SoftwareSerial.cpp b/core/libraries/SoftwareSerial/SoftwareSerial.cpp
deleted file mode 100755
index 6df04d2..0000000
--- a/core/libraries/SoftwareSerial/SoftwareSerial.cpp
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- SoftwareSerial.cpp - Software serial library
- Copyright (c) 2006 David A. Mellis. 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
-*/
-
-/******************************************************************************
- * Includes
- ******************************************************************************/
-
-#include "WConstants.h"
-#include "SoftwareSerial.h"
-
-/******************************************************************************
- * Definitions
- ******************************************************************************/
-
-/******************************************************************************
- * Constructors
- ******************************************************************************/
-
-SoftwareSerial::SoftwareSerial(uint8_t receivePin, uint8_t transmitPin)
-{
- _receivePin = receivePin;
- _transmitPin = transmitPin;
- _baudRate = 0;
-}
-
-/******************************************************************************
- * User API
- ******************************************************************************/
-
-void SoftwareSerial::begin(long speed)
-{
- _baudRate = speed;
- _bitPeriod = 1000000 / _baudRate;
-
- digitalWrite(_transmitPin, HIGH);
- delayMicroseconds( _bitPeriod); // if we were low this establishes the end
-}
-
-int SoftwareSerial::read()
-{
- int val = 0;
- int bitDelay = _bitPeriod - clockCyclesToMicroseconds(50);
-
- // one byte of serial data (LSB first)
- // ...--\ /--\/--\/--\/--\/--\/--\/--\/--\/--...
- // \--/\--/\--/\--/\--/\--/\--/\--/\--/
- // start 0 1 2 3 4 5 6 7 stop
-
- while (digitalRead(_receivePin));
-
- // confirm that this is a real start bit, not line noise
- if (digitalRead(_receivePin) == LOW) {
- // frame start indicated by a falling edge and low start bit
- // jump to the middle of the low start bit
- delayMicroseconds(bitDelay / 2 - clockCyclesToMicroseconds(50));
-
- // offset of the bit in the byte: from 0 (LSB) to 7 (MSB)
- for (int offset = 0; offset < 8; offset++) {
- // jump to middle of next bit
- delayMicroseconds(bitDelay);
-
- // read bit
- val |= digitalRead(_receivePin) << offset;
- }
-
- delayMicroseconds(_bitPeriod);
-
- return val;
- }
-
- return -1;
-}
-
-void SoftwareSerial::print(uint8_t b)
-{
- if (_baudRate == 0)
- return;
-
- int bitDelay = _bitPeriod - clockCyclesToMicroseconds(50); // a digitalWrite is about 50 cycles
- byte mask;
-
- digitalWrite(_transmitPin, LOW);
- delayMicroseconds(bitDelay);
-
- for (mask = 0x01; mask; mask <<= 1) {
- if (b & mask){ // choose bit
- digitalWrite(_transmitPin,HIGH); // send 1
- }
- else{
- digitalWrite(_transmitPin,LOW); // send 1
- }
- delayMicroseconds(bitDelay);
- }
-
- digitalWrite(_transmitPin, HIGH);
- delayMicroseconds(bitDelay);
-}
-
-void SoftwareSerial::print(const char *s)
-{
- while (*s)
- print(*s++);
-}
-
-void SoftwareSerial::print(char c)
-{
- print((uint8_t) c);
-}
-
-void SoftwareSerial::print(int n)
-{
- print((long) n);
-}
-
-void SoftwareSerial::print(unsigned int n)
-{
- print((unsigned long) n);
-}
-
-void SoftwareSerial::print(long n)
-{
- if (n < 0) {
- print('-');
- n = -n;
- }
- printNumber(n, 10);
-}
-
-void SoftwareSerial::print(unsigned long n)
-{
- printNumber(n, 10);
-}
-
-void SoftwareSerial::print(long n, int base)
-{
- if (base == 0)
- print((char) n);
- else if (base == 10)
- print(n);
- else
- printNumber(n, base);
-}
-
-void SoftwareSerial::println(void)
-{
- print('\r');
- print('\n');
-}
-
-void SoftwareSerial::println(char c)
-{
- print(c);
- println();
-}
-
-void SoftwareSerial::println(const char c[])
-{
- print(c);
- println();
-}
-
-void SoftwareSerial::println(uint8_t b)
-{
- print(b);
- println();
-}
-
-void SoftwareSerial::println(int n)
-{
- print(n);
- println();
-}
-
-void SoftwareSerial::println(long n)
-{
- print(n);
- println();
-}
-
-void SoftwareSerial::println(unsigned long n)
-{
- print(n);
- println();
-}
-
-void SoftwareSerial::println(long n, int base)
-{
- print(n, base);
- println();
-}
-
-// Private Methods /////////////////////////////////////////////////////////////
-
-void SoftwareSerial::printNumber(unsigned long n, uint8_t base)
-{
- unsigned char buf[8 * sizeof(long)]; // Assumes 8-bit chars.
- unsigned long i = 0;
-
- if (n == 0) {
- print('0');
- return;
- }
-
- while (n > 0) {
- buf[i++] = n % base;
- n /= base;
- }
-
- for (; i > 0; i--)
- print((char) (buf[i - 1] < 10 ? '0' + buf[i - 1] : 'A' + buf[i - 1] - 10));
-}