From 75f170a0f42b3b81c8bd67721d00e40c419550d7 Mon Sep 17 00:00:00 2001
From: "David A. Mellis" <d.mellis@arduino.cc>
Date: Fri, 18 Apr 2008 18:39:02 +0000
Subject: Factored out print() and println() from HardwareSerial to a base
 class for sharing with other things (e.g. LiquidCrystal library), eliminating
 #include's of avr/signal.h (deprecated).  Upping version number and modifying
 to do list.

---
 cores/arduino/HardwareSerial.cpp | 126 +++------------------------------------
 cores/arduino/HardwareSerial.h   |  32 ++--------
 cores/arduino/WInterrupts.c      |   1 -
 cores/arduino/WProgram.h         |   1 -
 cores/arduino/wiring_private.h   |   1 -
 cores/arduino/wiring_serial.c    |  85 +-------------------------
 libraries/Wire/utility/twi.c     |   1 -
 7 files changed, 13 insertions(+), 234 deletions(-)

diff --git a/cores/arduino/HardwareSerial.cpp b/cores/arduino/HardwareSerial.cpp
index 099c261..76cd9b0 100755
--- a/cores/arduino/HardwareSerial.cpp
+++ b/cores/arduino/HardwareSerial.cpp
@@ -26,16 +26,13 @@
 
 #include "HardwareSerial.h"
 
+void HardwareSerialWrite(uint8_t value, void *instance) {
+  ((HardwareSerial *) instance)->write(value);
+}
+
 // Constructors ////////////////////////////////////////////////////////////////
 
-HardwareSerial::HardwareSerial(uint8_t uart)
-{
-  //if(uart == 0){
-  //  _uart = 0;
-  //}else{
-  //  _uart = 1;
-  //}
-}
+HardwareSerial::HardwareSerial() : Print(HardwareSerialWrite) {}
 
 // Public Methods //////////////////////////////////////////////////////////////
 
@@ -59,118 +56,11 @@ void HardwareSerial::flush()
   serialFlush();
 }
 
-void HardwareSerial::print(char c)
-{
-  printByte(c);
-}
-
-void HardwareSerial::print(const char c[])
-{
-  printString(c);
-}
-
-void HardwareSerial::print(uint8_t b)
-{
-  printByte(b);
-}
-
-void HardwareSerial::print(int n)
-{
-  print((long) n);
-}
-
-void HardwareSerial::print(unsigned int n)
-{
-  print((unsigned 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('\r');
-  print('\n');  
-}
-
-void HardwareSerial::println(char c)
-{
-  print(c);
-  println();  
-}
-
-void HardwareSerial::println(const char c[])
-{
-  print(c);
-  println();
-}
-
-void HardwareSerial::println(uint8_t b)
-{
-  print(b);
-  println();
-}
-
-void HardwareSerial::println(int n)
-{
-  print(n);
-  println();
-}
-
-void HardwareSerial::println(unsigned int n)
-{
-  print(n);
-  println();
-}
-
-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)
-{
-  printIntegerInBase(n, base);
+void HardwareSerial::write(uint8_t b) {
+  serialWrite(b);
 }
 
 // Preinstantiate Objects //////////////////////////////////////////////////////
 
-HardwareSerial Serial = HardwareSerial(0);
-//HardwareSerial Serial1 = HardwareSerial(1);
+HardwareSerial Serial = HardwareSerial();
 
diff --git a/cores/arduino/HardwareSerial.h b/cores/arduino/HardwareSerial.h
index 5de9a1f..f2c6ce8 100755
--- a/cores/arduino/HardwareSerial.h
+++ b/cores/arduino/HardwareSerial.h
@@ -22,44 +22,20 @@
 
 #include <inttypes.h>
 
-#define DEC 10
-#define HEX 16
-#define OCT 8
-#define BIN 2
-#define BYTE 0
+#include "Print.h"
 
-class HardwareSerial
+class HardwareSerial : public Print
 {
-  private:
-    //uint8_t _uart;
-    void printNumber(unsigned long, uint8_t);
   public:
-    HardwareSerial(uint8_t);
+    HardwareSerial();
     void begin(long);
     uint8_t available(void);
     int read(void);
     void flush(void);
-    void print(char);
-    void print(const char[]);
-    void print(uint8_t);
-    void print(int);
-    void print(unsigned int);
-    void print(long);
-    void print(unsigned long);
-    void print(long, int);
-    void println(void);
-    void println(char);
-    void println(const char[]);
-    void println(uint8_t);
-    void println(int);
-    void println(unsigned int);
-    void println(long);
-    void println(unsigned long);
-    void println(long, int);
+    void write(uint8_t);
 };
 
 extern HardwareSerial Serial;
-//extern HardwareSerial Serial1;
 
 #endif
 
diff --git a/cores/arduino/WInterrupts.c b/cores/arduino/WInterrupts.c
index 38992ee..21ebe62 100755
--- a/cores/arduino/WInterrupts.c
+++ b/cores/arduino/WInterrupts.c
@@ -26,7 +26,6 @@
 #include <inttypes.h>
 #include <avr/io.h>
 #include <avr/interrupt.h>
-#include <avr/signal.h>
 #include <avr/pgmspace.h>
 #include <stdio.h>
 
diff --git a/cores/arduino/WProgram.h b/cores/arduino/WProgram.h
index 1fba738..5f78de2 100755
--- a/cores/arduino/WProgram.h
+++ b/cores/arduino/WProgram.h
@@ -3,7 +3,6 @@
 #include <math.h>
 
 #include <avr/interrupt.h>
-#include <avr/signal.h>
 
 #include "wiring.h"
 
diff --git a/cores/arduino/wiring_private.h b/cores/arduino/wiring_private.h
index affccd8..b30c1f0 100755
--- a/cores/arduino/wiring_private.h
+++ b/cores/arduino/wiring_private.h
@@ -27,7 +27,6 @@
 
 #include <avr/io.h>
 #include <avr/interrupt.h>
-#include <avr/signal.h>
 #include <avr/delay.h>
 #include <stdio.h>
 #include <stdarg.h>
diff --git a/cores/arduino/wiring_serial.c b/cores/arduino/wiring_serial.c
index 9392a09..4cac891 100755
--- a/cores/arduino/wiring_serial.c
+++ b/cores/arduino/wiring_serial.c
@@ -126,87 +126,4 @@ SIGNAL(SIG_UART_RECV)
 		rx_buffer[rx_buffer_head] = c;
 		rx_buffer_head = i;
 	}
-}
-
-void printMode(int mode)
-{
-	// do nothing, we only support serial printing, not lcd.
-}
-
-void printByte(unsigned char c)
-{
-	serialWrite(c);
-}
-
-void printNewline()
-{
-	printByte('\n');
-}
-
-void printString(const char *s)
-{
-	while (*s)
-		printByte(*s++);
-}
-
-void printIntegerInBase(unsigned long n, unsigned long base)
-{ 
-	unsigned char buf[8 * sizeof(long)]; // Assumes 8-bit chars. 
-	unsigned long i = 0;
-
-	if (n == 0) {
-		printByte('0');
-		return;
-	} 
-
-	while (n > 0) {
-		buf[i++] = n % base;
-		n /= base;
-	}
-
-	for (; i > 0; i--)
-		printByte(buf[i - 1] < 10 ?
-			'0' + buf[i - 1] :
-			'A' + buf[i - 1] - 10);
-}
-
-void printInteger(long n)
-{
-	if (n < 0) {
-		printByte('-');
-		n = -n;
-	}
-
-	printIntegerInBase(n, 10);
-}
-
-void printHex(unsigned long n)
-{
-	printIntegerInBase(n, 16);
-}
-
-void printOctal(unsigned long n)
-{
-	printIntegerInBase(n, 8);
-}
-
-void printBinary(unsigned long n)
-{
-	printIntegerInBase(n, 2);
-}
-
-/* Including print() adds approximately 1500 bytes to the binary size,
- * so we replace it with the smaller and less-confusing printString(),
- * printInteger(), etc.
-void print(const char *format, ...)
-{
-	char buf[256];
-	va_list ap;
-	
-	va_start(ap, format);
-	vsnprintf(buf, 256, format, ap);
-	va_end(ap);
-	
-	printString(buf);
-}
-*/
+}
\ No newline at end of file
diff --git a/libraries/Wire/utility/twi.c b/libraries/Wire/utility/twi.c
index 2235b0b..563b41b 100644
--- a/libraries/Wire/utility/twi.c
+++ b/libraries/Wire/utility/twi.c
@@ -22,7 +22,6 @@
 #include <inttypes.h>
 #include <avr/io.h>
 #include <avr/interrupt.h>
-#include <avr/signal.h>
 #include <compat/twi.h>
 
 #ifndef cbi
-- 
cgit v1.2.3-18-g5258