IDE 1.66 Core and Serial LCD Library

Previously i have developed several projects utilizing the IDE 1.0+ and the NKC SerialLCD library.

This utilizes a function which overload the print function.

class SerialLCD : public Print {


  SerialLCD(int num_lines,int num_col,int i2c_address,int interface);
  void command(int value);
  void init();
  virtual size_t write(uint8_t);
  void clear();
  void home();
  void on();
  void off();
  void cursorOn();
  void cursorOff();
  void blinkOn();
  void blinkOff();
  void left();
  void right();
  void backspace();
  void shiftLeft();
  void shiftRight();
  void displayVersion();
  void displayBaudRate();
  void displayI2CAddress();
  void changeBaudRate(unsigned char baud);
  void changeI2CAddress(unsigned char addr);
  void selectLine(int num);
  void clearLine(int num);
  // Overload the Print class function for strings because
  // the base class implementation causes problems by doing
  // an I2C I/O for every character
  void printstr(const char[]);
  void setCursor(int line_num, int x);
  void createChar(unsigned char char_num, unsigned char *rows);
  void setBacklightBrightness(unsigned char new_val);
  void setContrast(unsigned char new_val);


Now with the IDE1.66 core (using UNO R3) this overload no longer works.

Any idea why not?



Issue was caused by the modification of the Print.cpp core files:

Modified 03 August 2015 by Chuck Todd

// Public Methods //////////////////////////////////////////////////////////////

/* default implementation: may be overridden */
size_t Print::write(const uint8_t *buffer, size_t size)
  size_t n = 0;
  while (size--) {
    n += write(*buffer++); //if (write(*buffer++)) n++;
    //+else break;
  return n;

If the changes are reversed then no problem.