From 8f75f0299d52c15c79c92883ca61b84886143ca5 Mon Sep 17 00:00:00 2001 From: "David A. Mellis" Date: Wed, 7 May 2008 18:24:49 +0000 Subject: [PATCH] Changing Print class to use regular virtual write() function (instead of my hack ed together version). --- hardware/cores/arduino/HardwareSerial.cpp | 8 -------- hardware/cores/arduino/HardwareSerial.h | 3 +-- hardware/cores/arduino/Print.cpp | 8 +------- hardware/cores/arduino/Print.h | 3 +-- .../libraries/LiquidCrystal/LiquidCrystal.cpp | 18 +++++++++--------- .../libraries/LiquidCrystal/LiquidCrystal.h | 8 ++++---- 6 files changed, 16 insertions(+), 32 deletions(-) diff --git a/hardware/cores/arduino/HardwareSerial.cpp b/hardware/cores/arduino/HardwareSerial.cpp index 76cd9b024..aab7fc538 100755 --- a/hardware/cores/arduino/HardwareSerial.cpp +++ b/hardware/cores/arduino/HardwareSerial.cpp @@ -26,14 +26,6 @@ #include "HardwareSerial.h" -void HardwareSerialWrite(uint8_t value, void *instance) { - ((HardwareSerial *) instance)->write(value); -} - -// Constructors //////////////////////////////////////////////////////////////// - -HardwareSerial::HardwareSerial() : Print(HardwareSerialWrite) {} - // Public Methods ////////////////////////////////////////////////////////////// void HardwareSerial::begin(long speed) diff --git a/hardware/cores/arduino/HardwareSerial.h b/hardware/cores/arduino/HardwareSerial.h index f2c6ce8e9..e4cb96994 100755 --- a/hardware/cores/arduino/HardwareSerial.h +++ b/hardware/cores/arduino/HardwareSerial.h @@ -27,12 +27,11 @@ class HardwareSerial : public Print { public: - HardwareSerial(); void begin(long); uint8_t available(void); int read(void); void flush(void); - void write(uint8_t); + virtual void write(uint8_t); }; extern HardwareSerial Serial; diff --git a/hardware/cores/arduino/Print.cpp b/hardware/cores/arduino/Print.cpp index b8a85a705..d150b750c 100755 --- a/hardware/cores/arduino/Print.cpp +++ b/hardware/cores/arduino/Print.cpp @@ -26,17 +26,11 @@ #include "Print.h" -// Constructors //////////////////////////////////////////////////////////////// - -Print::Print(void (*write)(uint8_t, void *)) { - this->write = write; -} - // Public Methods ////////////////////////////////////////////////////////////// void Print::print(uint8_t b) { - write(b, this); + write(b); } void Print::print(char c) diff --git a/hardware/cores/arduino/Print.h b/hardware/cores/arduino/Print.h index 5cac3f2cb..8cec23567 100755 --- a/hardware/cores/arduino/Print.h +++ b/hardware/cores/arduino/Print.h @@ -32,9 +32,8 @@ class Print { private: void printNumber(unsigned long, uint8_t); - void (*write)(uint8_t, void *); public: - Print(void (*)(uint8_t, void *)); + virtual void write(uint8_t); void print(char); void print(const char[]); void print(uint8_t); diff --git a/hardware/libraries/LiquidCrystal/LiquidCrystal.cpp b/hardware/libraries/LiquidCrystal/LiquidCrystal.cpp index c5acc8568..b5f2cd45a 100755 --- a/hardware/libraries/LiquidCrystal/LiquidCrystal.cpp +++ b/hardware/libraries/LiquidCrystal/LiquidCrystal.cpp @@ -26,7 +26,7 @@ LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) : Print(baseWrite), + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) : _four_bit_mode(0), _rs_pin(rs), _rw_pin(rw), _enable_pin(enable) { _data_pins[0] = d0; @@ -52,7 +52,7 @@ LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, } LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) : Print(baseWrite), + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) : _four_bit_mode(1), _rs_pin(rs), _rw_pin(rw), _enable_pin(enable) { _data_pins[0] = d0; @@ -91,11 +91,15 @@ void LiquidCrystal::setCursor(int col, int row) command(0x80 | (col + row_offsets[row])); } -void LiquidCrystal::command(int value) { - write(value, LOW); +void LiquidCrystal::command(uint8_t value) { + send(value, LOW); } -void LiquidCrystal::write(int value, int mode) { +void LiquidCrystal::write(uint8_t value) { + send(value, HIGH); +} + +void LiquidCrystal::send(uint8_t value, uint8_t mode) { digitalWrite(_rs_pin, mode); digitalWrite(_rw_pin, LOW); @@ -122,7 +126,3 @@ void LiquidCrystal::write(int value, int mode) { digitalWrite(_enable_pin, LOW); } } - -void baseWrite(uint8_t value, void *instance) { - ((LiquidCrystal *) instance)->write(value); -} diff --git a/hardware/libraries/LiquidCrystal/LiquidCrystal.h b/hardware/libraries/LiquidCrystal/LiquidCrystal.h index c4746c59b..a5edc5f78 100755 --- a/hardware/libraries/LiquidCrystal/LiquidCrystal.h +++ b/hardware/libraries/LiquidCrystal/LiquidCrystal.h @@ -16,9 +16,11 @@ public: void shiftDisplayLeft(); void shiftDisplayRight(); */ - void write(int, int = 1); - void command(int); + virtual void write(uint8_t); + void command(uint8_t); private: + void send(uint8_t, uint8_t); + uint8_t _four_bit_mode; uint8_t _rs_pin; // LOW: command. HIGH: character. uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD. @@ -26,6 +28,4 @@ private: uint8_t _data_pins[8]; }; -void baseWrite(uint8_t, void *); - #endif