screen as source. Modified silab screen driver code.

Dependencies:   MemoryLCD

Dependents:   Host_Software_MAX32664GWEC_SpO2_HR

Files at this revision

API Documentation at this revision

Comitter:
gmehmet
Date:
Mon Dec 24 13:42:25 2018 +0000
Parent:
0:0d4feb02e324
Child:
2:4e102446d8ff
Commit message:
screen added as lib now

Changed in this revision

screen.lib Show annotated file Show diff for this revision Revisions of this file
screen/BufferedDisplay.cpp Show diff for this revision Revisions of this file
screen/BufferedDisplay.h Show diff for this revision Revisions of this file
screen/GraphicsDisplay.cpp Show diff for this revision Revisions of this file
screen/GraphicsDisplay.h Show diff for this revision Revisions of this file
screen/LCDSettings.h Show diff for this revision Revisions of this file
screen/LS013B7DH03.ZIP Show diff for this revision Revisions of this file
screen/LS013B7DH03.cpp Show diff for this revision Revisions of this file
screen/LS013B7DH03.h Show diff for this revision Revisions of this file
screen/TextDisplay.cpp Show diff for this revision Revisions of this file
screen/TextDisplay.h Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/screen.lib	Mon Dec 24 13:42:25 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/gmehmet/code/screen/#39ae48344951
--- a/screen/BufferedDisplay.cpp	Mon Dec 24 13:26:28 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,139 +0,0 @@
-/***************************************************************************//**
- * @file BufferedDisplay.cpp
- * @brief Buffered version of GraphicsDisplay
- *******************************************************************************
- * @section License
- * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
- *******************************************************************************
- *
- * Permission is granted to anyone to use this software for any purpose,
- * including commercial applications, and to alter it and redistribute it
- * freely, subject to the following restrictions:
- *
- * 1. The origin of this software must not be misrepresented; you must not
- *    claim that you wrote the original software.
- * 2. Altered source versions must be plainly marked as such, and must not be
- *    misrepresented as being the original software.
- * 3. This notice may not be removed or altered from any source distribution.
- *
- * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
- * obligation to support this Software. Silicon Labs is providing the
- * Software "AS IS", with no express or implied warranties of any kind,
- * including, but not limited to, any implied warranties of merchantability
- * or fitness for any particular purpose or warranties against infringement
- * of any proprietary rights of a third party.
- *
- * Silicon Labs will not be liable for any consequential, incidental, or
- * special damages, or any other relief, or for any claim by any third party,
- * arising from your use of this Software.
- *
- ******************************************************************************/
-
-#include "../screen/BufferedDisplay.h"
-
-#define SWAP8(a) ((((a) & 0x80) >> 7) | (((a) & 0x40) >> 5) | (((a) & 0x20) >> 3) | (((a) & 0x10) >> 1) | (((a) & 0x08) << 1) | (((a) & 0x04) << 3) | (((a) & 0x02) << 5) | (((a) & 0x01) << 7))
-
-namespace silabs {
-
-	BufferedDisplay::BufferedDisplay(const char *name) : GraphicsDisplay(name) {
-		memset((uint8_t*)_pixelBuffer, White, sizeof(_pixelBuffer));	// init full frame buffer
-		memset((uint8_t*)_dirtyRows, 0xFF, sizeof(_dirtyRows)); 		// init dirty status
-	}
-
-	/**
-	 * Override of GraphicsDisplay's pixel()
-	 */
-
-	void BufferedDisplay::pixel(int x, int y, int colour) {
-	    /* Apply constraint to x and y */
-	    if(x < 0 || y < 0) return;
-	    if(x >= DISPLAY_WIDTH || y >= DISPLAY_HEIGHT) return;
-	    
-	    /***************************************************************************************************************** 
-	     * The display expects LSB input, while the SPI is configured for 8bit MSB transfers. Therefore, we should  
-	     * construct the framebuffer accordingly, so that an MSB transmission will put pixel 0 first on the wire.
-	     *
-	     * So the actual pixel layout in framebuffer (for 128x128) is as follows:
-	     * {                                                    //Framebuffer
-	     *	{                                                   //Line 0
-	     *	 {p0, p1, p2, p3, p4, p5, p6, p7},                  //Line 0 byte 0 (byte 0)
-	     *   {p8, p9,p10,p11,p12,p13,p14,p15},                  //Line 0 byte 1 (byte 1)
-	     *   ...
-	     *   {p120,p121,p122,p123,p124,p125,p126,p127}          //Line 0 byte 15 (byte 15)
-	     *  },        
-	     *  {													//Line 1
-	     *	 {p128,p129,p130,p131,p132,p133,p134,p135},         //Line 1 byte 0 (byte 16)
-	     *   ...
-	     *  },
-	     *  ...
-	     *  {													//Line 127
-	     *	 {...},              								//Line 127 byte 0 (byte 2032)
-	     *   ...
-	     *   {...}												//Line 127 byte 15 (byte 2047) = 128*128 bits
-	     *	}
-	     * }
-	     *
-	     * This means that to calculate the actual bit position in the framebuffer byte, we need to swap the bit 
-	     * order of the lower three bits. So pixel 7 becomes bit offset 0, 6 -> 1, 5 -> 2, 4->3, 3->4, 2->5, 1->6 and 0->7.
-	     *****************************************************************************************************************/
-	    uint8_t swapx = 7 - ((unsigned int)x & 0x07);
-	    x = ((unsigned int)x & 0xFFFFFFF8) | swapx;
-
-	    /* Since we are dealing with 1-bit pixels, we can avoid having to do bitshift and comparison operations twice.
-	     * Basically, do the comparison with the requested state and current state, and if it changed, do an XOR on the framebuffer pixel and set the line to dirty.
-	     */
-	    bool change = ((_pixelBuffer[((y * DISPLAY_WIDTH) + x) / DISPLAY_BUFFER_TYPE_SIZE] & (1 << (x & DISPLAY_BUFFER_TYPE_MASK))) != ((colour & 0x01) << (x & DISPLAY_BUFFER_TYPE_MASK)));
-		if(change) {
-			/* Pixel's value and requested value are different, so since it's binary, we can simply do an XOR */
-            _pixelBuffer[((y * DISPLAY_WIDTH) + x) / DISPLAY_BUFFER_TYPE_SIZE] ^= (1 << (x & DISPLAY_BUFFER_TYPE_MASK));
-
-            /* notify dirty status of this line */
-            _dirtyRows[y / DISPLAY_BUFFER_TYPE_SIZE] |= (1 << (y & DISPLAY_BUFFER_TYPE_MASK));
-		}
-	}
-
-	int BufferedDisplay::width() {
-		return DISPLAY_WIDTH;
-	}
-	int BufferedDisplay::height() {
-		return DISPLAY_HEIGHT;
-	}
-
-	/**
-	 * Function to move bitmap into frame buffer
-	 * arguments:
-	 * 	* bitmap: pointer to uint8 array containing horizontal pixel data
-	 * 	* bmpWidth: width of the bitmap in pixels (must be multiple of 8)
-	 * 	* bmpHeight: height of the bitmap in pixels
-	 * 	* startX: starting position to apply bitmap in horizontal direction (0 = leftmost) (must be multiple of 8)
-	 * 	* startY: starting position to apply bitmap in vertical direction (0 = topmost)
-	 */
-	void BufferedDisplay::showBMP(const uint8_t* bitmap, const uint32_t bmpWidth, const uint32_t bmpHeight, const uint32_t startX, const uint32_t startY) {
-		uint32_t bmpLine = 0, y = startY, bytesPerLine = ((bmpWidth >= (DISPLAY_WIDTH - startX)) ? (DISPLAY_WIDTH - startX) : bmpWidth) / 8;
-
-		/* Apply constraints */
-		if((bmpWidth & 0x07) != 0) return;
-		if((startX & 0x07) != 0) return;
-		if(startX >= DISPLAY_WIDTH) return;
-		
-		//Superflouous due to for-loop check
-		//if((startY >= DISPLAY_HEIGHT) return;
-
-		/* Copy over bytes to the framebuffer, do not write outside framebuffer boundary */
-		for(; y < DISPLAY_HEIGHT; y++) {
-			/* Check that we are not writing more than the BMP height */
-			if(bmpLine >= bmpHeight) break;
-			
-			/* Copy over one line (bmpLine) from the BMP file to the corresponding line (y) in the pixel buffer */
-			memcpy( (void*) &(((uint8_t*)_pixelBuffer)[((y * DISPLAY_WIDTH) + startX) / 8]),
-					(const void*) &(bitmap[bmpLine * (bmpWidth / 8)]),
-					bytesPerLine);
-
-			/* Set dirty status for the line we just overwrote */
-			_dirtyRows[y / DISPLAY_BUFFER_TYPE_SIZE] |= (1 << (y % DISPLAY_BUFFER_TYPE_SIZE));
-			bmpLine++;
-		}
-
-		return;
-	}
-}
--- a/screen/BufferedDisplay.h	Mon Dec 24 13:26:28 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/***************************************************************************//**
- * @file BufferedDisplay.h
- * @brief Framebuffered version of GraphicsDisplay
- *******************************************************************************
- * @section License
- * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
- *******************************************************************************
- *
- * Permission is granted to anyone to use this software for any purpose,
- * including commercial applications, and to alter it and redistribute it
- * freely, subject to the following restrictions:
- *
- * 1. The origin of this software must not be misrepresented; you must not
- *    claim that you wrote the original software.
- * 2. Altered source versions must be plainly marked as such, and must not be
- *    misrepresented as being the original software.
- * 3. This notice may not be removed or altered from any source distribution.
- *
- * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
- * obligation to support this Software. Silicon Labs is providing the
- * Software "AS IS", with no express or implied warranties of any kind,
- * including, but not limited to, any implied warranties of merchantability
- * or fitness for any particular purpose or warranties against infringement
- * of any proprietary rights of a third party.
- *
- * Silicon Labs will not be liable for any consequential, incidental, or
- * special damages, or any other relief, or for any claim by any third party,
- * arising from your use of this Software.
- *
- ******************************************************************************/
-
-#ifndef SILABS_BUFFEREDDISPLAY_H
-#define SILABS_BUFFEREDDISPLAY_H
-
-#include "../screen/GraphicsDisplay.h"
-#include "../screen/LCDSettings.h"
-
-namespace silabs {
-/** Framebuffered version of GraphicsDisplay
- * 
- * This has been implemented as part of the MemoryLCD library.
- */
-class BufferedDisplay : public GraphicsDisplay {
-
-public:
-
-	BufferedDisplay(const char *name=NULL);
-
-	/**
-	 * Override of GraphicsDisplay pixel() function to set a pixel in the buffer
-     *
-     * @param x      Zero-based x-axis index of pixel to set. 0 = leftmost.
-     * @param y      Zero-based y-axis index of pixel to set. 0 = topmost.
-     * @param colour Colour value to set pixel to. In this implementation, only LSB is taken into account.
-	 */
-	virtual void pixel(int x, int y, int colour);
-	virtual int width();
-	virtual int height();
-
-	/**
-	 * Function to move bitmap into frame buffer
-	 * 
-	 * @param bitmap      pointer to uint8 array containing horizontal pixel data
-	 * @param bmpWidth    width of the bitmap in pixels (must be multiple of 8)
-	 * @param bmpHeight   height of the bitmap in pixels
-	 * @param startX      starting position to apply bitmap in horizontal direction (0 = leftmost) (must be multiple of 8)
-	 * @param startY      starting position to apply bitmap in vertical direction (0 = topmost)
-	 */
-	void showBMP(const uint8_t* bitmap, const uint32_t bmpWidth, const uint32_t bmpHeight, const uint32_t startX, const uint32_t startY);
-
-protected:
-	volatile DISPLAY_BUFFER_TYPE _pixelBuffer[DISPLAY_BUFFER_ELEMENTS]; // one full frame buffer
-	volatile DISPLAY_BUFFER_TYPE _dirtyRows[DISPLAY_HEIGHT/DISPLAY_BUFFER_TYPE_SIZE]; // 1 bit per row to indicate dirty status
-};
-
-} // namespace silabs
-
-
-
-
-#endif //SILABS_BUFFEREDDISPLAY_H
--- a/screen/GraphicsDisplay.cpp	Mon Dec 24 13:26:28 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,456 +0,0 @@
-/* mbed GraphicsDisplay Display Library Base Class
- * Copyright (c) 2007-2009 sford
- * Released under the MIT License: http://mbed.org/license/mit
- */
- 
-#include "../screen/GraphicsDisplay.h"
-
-#define incx() x++, dxt += d2xt, t += dxt
-#define incy() y--, dyt += d2yt, t += dyt
-
-const unsigned char FONT8x8[97][8] = {
-{0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00}, // columns, rows, num_bytes_per_char
-{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // space 0x20
-{0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00}, // !
-{0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00}, // "
-{0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00}, // #
-{0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00}, // $
-{0x00,0x63,0x66,0x0C,0x18,0x33,0x63,0x00}, // %
-{0x1C,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00}, // &
-{0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00}, // '
-{0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00}, // (
-{0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00}, // )
-{0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00}, // *
-{0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00}, // +
-{0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30}, // ,
-{0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00}, // -
-{0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00}, // .
-{0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00}, // / (forward slash)
-{0x3E,0x63,0x63,0x6B,0x63,0x63,0x3E,0x00}, // 0 0x30
-{0x18,0x38,0x58,0x18,0x18,0x18,0x7E,0x00}, // 1
-{0x3C,0x66,0x06,0x1C,0x30,0x66,0x7E,0x00}, // 2
-{0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00}, // 3
-{0x0E,0x1E,0x36,0x66,0x7F,0x06,0x0F,0x00}, // 4
-{0x7E,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00}, // 5
-{0x1C,0x30,0x60,0x7C,0x66,0x66,0x3C,0x00}, // 6
-{0x7E,0x66,0x06,0x0C,0x18,0x18,0x18,0x00}, // 7
-{0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00}, // 8
-{0x3C,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00}, // 9
-{0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00}, // :
-{0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30}, // ;
-{0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00}, // <
-{0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00}, // =
-{0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00}, // >
-{0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x00}, // ?
-{0x3E,0x63,0x6F,0x69,0x6F,0x60,0x3E,0x00}, // @ 0x40
-{0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x00}, // A
-{0x7E,0x33,0x33,0x3E,0x33,0x33,0x7E,0x00}, // B
-{0x1E,0x33,0x60,0x60,0x60,0x33,0x1E,0x00}, // C
-{0x7C,0x36,0x33,0x33,0x33,0x36,0x7C,0x00}, // D
-{0x7F,0x31,0x34,0x3C,0x34,0x31,0x7F,0x00}, // E
-{0x7F,0x31,0x34,0x3C,0x34,0x30,0x78,0x00}, // F
-{0x1E,0x33,0x60,0x60,0x67,0x33,0x1F,0x00}, // G
-{0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00}, // H
-{0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // I
-{0x0F,0x06,0x06,0x06,0x66,0x66,0x3C,0x00}, // J
-{0x73,0x33,0x36,0x3C,0x36,0x33,0x73,0x00}, // K
-{0x78,0x30,0x30,0x30,0x31,0x33,0x7F,0x00}, // L
-{0x63,0x77,0x7F,0x7F,0x6B,0x63,0x63,0x00}, // M
-{0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x00}, // N
-{0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00}, // O
-{0x7E,0x33,0x33,0x3E,0x30,0x30,0x78,0x00}, // P 0x50
-{0x3C,0x66,0x66,0x66,0x6E,0x3C,0x0E,0x00}, // Q
-{0x7E,0x33,0x33,0x3E,0x36,0x33,0x73,0x00}, // R
-{0x3C,0x66,0x30,0x18,0x0C,0x66,0x3C,0x00}, // S
-{0x7E,0x5A,0x18,0x18,0x18,0x18,0x3C,0x00}, // T
-{0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x00}, // U
-{0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00}, // V
-{0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00}, // W
-{0x63,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00}, // X
-{0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00}, // Y
-{0x7F,0x63,0x46,0x0C,0x19,0x33,0x7F,0x00}, // Z
-{0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00}, // [
-{0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00}, // \ (back slash)
-{0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00}, // ]
-{0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00}, // ^
-{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF}, // _
-{0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00}, // ` 0x60
-{0x00,0x00,0x3C,0x06,0x3E,0x66,0x3B,0x00}, // a
-{0x70,0x30,0x3E,0x33,0x33,0x33,0x6E,0x00}, // b
-{0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00}, // c
-{0x0E,0x06,0x3E,0x66,0x66,0x66,0x3B,0x00}, // d
-{0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00}, // e
-{0x1C,0x36,0x30,0x78,0x30,0x30,0x78,0x00}, // f
-{0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x7C}, // g
-{0x70,0x30,0x36,0x3B,0x33,0x33,0x73,0x00}, // h
-{0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00}, // i
-{0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3C}, // j
-{0x70,0x30,0x33,0x36,0x3C,0x36,0x73,0x00}, // k
-{0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // l
-{0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00}, // m
-{0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00}, // n
-{0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00}, // o
-{0x00,0x00,0x6E,0x33,0x33,0x3E,0x30,0x78}, // p
-{0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x0F}, // q
-{0x00,0x00,0x6E,0x3B,0x33,0x30,0x78,0x00}, // r
-{0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00}, // s
-{0x08,0x18,0x3E,0x18,0x18,0x1A,0x0C,0x00}, // t
-{0x00,0x00,0x66,0x66,0x66,0x66,0x3B,0x00}, // u
-{0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00}, // v
-{0x00,0x00,0x63,0x6B,0x7F,0x7F,0x36,0x00}, // w
-{0x00,0x00,0x63,0x36,0x1C,0x36,0x63,0x00}, // x
-{0x00,0x00,0x66,0x66,0x66,0x3E,0x06,0x7C}, // y
-{0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00}, // z
-{0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00}, // {
-{0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x0C,0x00}, // |
-{0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00}, // }
-{0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00}, // ~
-{0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00}}; // DEL
-    
-GraphicsDisplay::GraphicsDisplay(const char *name):TextDisplay(name) {
-    foreground((uint16_t)Black);
-    background((uint16_t)White);
-    // current pixel location
-	_x = 0;
-	_y = 0;
-	// window settings
-	_x1 = 0;
-	_x2 = 0;
-	_y1 = 0;
-	_y2 = 0;
-}
-    
-void GraphicsDisplay::character(int column, int row, int value) { 
-    if(externalfont){ // send external font
-        unsigned int hor,vert,offset,bpl,j,i,b;
-        const unsigned char* sign;
-        unsigned char z,w;
-        if ((value < 31) || (value > 127)) return;   // test char range
-        // read font parameter from start of array
-        offset = font[0];                    // bytes / char
-        hor = font[1];                       // get hor size of font
-        vert = font[2];                      // get vert size of font
-        bpl = font[3];                       // bytes per line
-        if (char_x + hor > width()) {
-            char_x = 0;
-            char_y = char_y + vert;
-            if (char_y >= height() - font[2]) {
-                char_y = 0;
-            }
-        }     
-        window(char_x, char_y,hor,vert); // char box
-        sign = &font[((value -32) * offset) + 4]; // start of char bitmap
-        w = sign[0];                          // width of actual char
-        for (j=0; j<vert; j++) {  //  vert line
-            for (i=0; i<hor; i++) {   //  horz line
-                z =  sign[bpl * i + ((j & 0xF8) >> 3)+1];
-                b = 1 << (j & 0x07);
-                if (( z & b ) == 0x00) {               
-                    putp(_foreground);              
-                } 
-                else {                     
-                    putp(_background);                                
-                }
-            }
-        }
-        if ((w + 2) < hor) {                   // x offset to next char
-            char_x += w + 2;
-            }
-            else char_x += hor;
-    }   
-    // send default font            
-    else {
-        blitbit(column * 8, row * 8, 8, 8, (char*)&(FONT8x8[value - 0x1F][0]));
-    }
-}
-
-void GraphicsDisplay::window(int x, int y, int w, int h) {
-    // current pixel location
-    _x = x;
-    _y = y;
-    // window settings
-    _x1 = x;
-    _x2 = x + w - 1;
-    _y1 = y;
-    _y2 = y + h - 1;
-}
-    
-void GraphicsDisplay::putp(int colour) {
-    // put pixel at current pixel location
-    pixel(_x, _y, colour);
-    // update pixel location based on window settings
-    _x++;
-    if(_x > _x2) {
-        _x = _x1;
-        _y++;
-        if(_y > _y2) {
-            _y = _y1;
-        }
-    }
-}
-
-void GraphicsDisplay::rect(int x0, int y0, int x1, int y1, int color) {
-    if (x1 > x0) hline(x0,x1,y0,color);
-    else  hline(x1,x0,y0,color);
-    if (y1 > y0) vline(x0,y0,y1,color);
-    else vline(x0,y1,y0,color);
-    if (x1 > x0) hline(x0,x1,y1,color);
-    else  hline(x1,x0,y1,color);
-    if (y1 > y0) vline(x1,y0,y1,color);
-    else vline(x1,y1,y0,color);
-    return;
-}
- 
-void GraphicsDisplay::fillrect(int x0, int y0, int w, int h, int colour) {
-    unsigned long int index=0;
-    if (w < 0) {
-        x0 = x0 + w;
-        w = -w;
-    }
-    if (h < 0) {
-        y0 = y0 + h;
-        h = -h;
-    }
-    window(x0,y0,w,h);
-    int num = h*w;
-    for( index = 0; index<num; index++ ) {
-       putp(colour); 
-    }
-    return;
-}
-
-void GraphicsDisplay::fill(int x, int y, int w, int h, int colour) { 
-    fillrect(x, y, w, h, colour);
-}
-
-void GraphicsDisplay::circle(int x, int y, int r,int colour){
-	int ce = -r;
-	int cx = r;
-	int cy = 0;
-	while(cx >= cy){
-		pixel(x+cx,y+cy,colour);
-		pixel(x-cx,y-cy,colour);
-		pixel(x-cx,y+cy,colour);
-		pixel(x+cx,y-cy,colour);
-		pixel(x+cy,y+cx,colour);
-		pixel(x-cy,y+cx,colour);
-		pixel(x-cy,y-cx,colour);
-		pixel(x+cy,y-cx,colour);
-		ce += 2*cy++ + 1;
-		if(ce >= 0){
-			ce -= 2*cx---1;	
-		}
-		
-	}
-
-}
-
-// To draw circle set a and b to the same values
-void GraphicsDisplay::ellipse(int xc, int yc, int a, int b, unsigned int colour)
-{
-    /* e(x,y) = b^2*x^2 + a^2*y^2 - a^2*b^2 */
-    int x = 0, y = b;
-    long a2 = (long)a*a, b2 = (long)b*b;
-    long crit1 = -(a2/4 + a%2 + b2);
-    long crit2 = -(b2/4 + b%2 + a2);
-    long crit3 = -(b2/4 + b%2);
-    long t = -a2*y;                         // e(x+1/2,y-1/2) - (a^2+b^2)/4
-    long dxt = 2*b2*x, dyt = -2*a2*y;
-    long d2xt = 2*b2, d2yt = 2*a2;
- 
-    while (y>=0 && x<=a) {
-        pixel(xc+x, yc+y, colour);
-        if (x!=0 || y!=0)
-            pixel(xc-x, yc-y, colour);
-        if (x!=0 && y!=0) {
-            pixel(xc+x, yc-y, colour);
-            pixel(xc-x, yc+y, colour);
-        }
-        if (t + b2*x <= crit1 ||            // e(x+1,y-1/2) <= 0
-                t + a2*y <= crit3)          // e(x+1/2,y) <= 0
-            incx();
-        else if (t - a2*y > crit2)          // e(x+1/2,y-1) > 0
-            incy();
-        else {
-            incx();
-            incy();
-        }
-    }
-}
-// To draw circle set a and b to the same values
-void GraphicsDisplay::fillellipse(int xc, int yc, int a, int b, unsigned int colour)
-{
-    /* e(x,y) = b^2*x^2 + a^2*y^2 - a^2*b^2 */
-    int x = 0, y = b;
-    int rx = x, ry = y;
-    unsigned int width = 1;
-    unsigned int height = 1;
-    long a2 = (long)a*a, b2 = (long)b*b;
-    long crit1 = -(a2/4 + a%2 + b2);
-    long crit2 = -(b2/4 + b%2 + a2);
-    long crit3 = -(b2/4 + b%2);
-    long t = -a2*y;                         // e(x+1/2,y-1/2) - (a^2+b^2)/4
-    long dxt = 2*b2*x, dyt = -2*a2*y;
-    long d2xt = 2*b2, d2yt = 2*a2;
-    if (b == 0) {
-        fillrect(xc-a, yc, 2*a+1, 1, colour);
-        return;
-    }
-    while (y>=0 && x<=a) {
-        if (t + b2*x <= crit1 ||            // e(x+1,y-1/2) <= 0
-                t + a2*y <= crit3) {        // e(x+1/2,y) <= 0
-            if (height == 1)
-                ;                           // draw nothing
-            else if (ry*2+1 > (height-1)*2) {
-                fillrect(xc-rx, yc-ry, width, height-1, colour);
-                fillrect(xc-rx, yc+ry+1, width, 1-height, colour);
-                ry -= height-1;
-                height = 1;
-            } else {
-                fillrect(xc-rx, yc-ry, width, ry*2+1, colour);
-                ry -= ry;
-                height = 1;
-            }
-            incx();
-            rx++;
-            width += 2;
-        } else if (t - a2*y > crit2) {      // e(x+1/2,y-1) > 0
-            incy();
-            height++;
-        } else {
-            if (ry*2+1 > height*2) {
-                fillrect(xc-rx, yc-ry, width, height, colour);
-                fillrect(xc-rx, yc+ry+1, width, -height, colour);
-            } else {
-                fillrect(xc-rx, yc-ry, width, ry*2+1, colour);
-            }
-            incx();
-            incy();
-            rx++;
-            width += 2;
-            ry -= height;
-            height = 1;
-        }
-    }
-    if (ry > height) {
-        fillrect(xc-rx, yc-ry, width, height, colour);
-        fillrect(xc-rx, yc+ry+1, width, -height, colour);
-    } else {
-        fillrect(xc-rx, yc-ry, width, ry*2+1, colour);
-    }
-}
- 
- 
-void GraphicsDisplay::line(int x0, int y0, int x1, int y1, int colour) {
-    //window(x0, y, w, h);
-    int   dx = 0, dy = 0;
-    int   dx_sym = 0, dy_sym = 0;
-    int   dx_x2 = 0, dy_x2 = 0;
-    int   di = 0;
-    dx = x1-x0;
-    dy = y1-y0;
- 
-    if (dx == 0) {        /* vertical line */
-        if (y1 > y0) vline(x0,y0,y1,colour);
-        else vline(x0,y1,y0,colour);
-        return;
-    }
-    if (dx > 0) {
-        dx_sym = 1;
-    } else {
-        dx_sym = -1;
-    }
-    if (dy == 0) {        /* horizontal line */
-        if (x1 > x0) hline(x0,x1,y0,colour);
-        else  hline(x1,x0,y0,colour);
-        return;
-    }
-    if (dy > 0) {
-        dy_sym = 1;
-    } else {
-        dy_sym = -1;
-    }
-    dx = dx_sym*dx;
-    dy = dy_sym*dy;
-    dx_x2 = dx*2;
-    dy_x2 = dy*2;
-    if (dx >= dy) {
-        di = dy_x2 - dx;
-        while (x0 != x1) {
- 
-            pixel(x0, y0, colour);
-            x0 += dx_sym;
-            if (di<0) {
-                di += dy_x2;
-            } else {
-                di += dy_x2 - dx_x2;
-                y0 += dy_sym;
-            }
-        }
-        pixel(x0, y0, colour);
-    } else {
-        di = dx_x2 - dy;
-        while (y0 != y1) {
-            pixel(x0, y0, colour);
-            y0 += dy_sym;
-            if (di < 0) {
-                di += dx_x2;
-            } else {
-                di += dx_x2 - dy_x2;
-                x0 += dx_sym;
-            }
-        }
-        pixel(x0, y0, colour);
-    }
-    return;
-}
- 
-void GraphicsDisplay::hline(int x0, int x1, int y, int colour) {
-    int w;
-    w = x1 - x0 + 1;
-    window(x0,y,w,1);
-    for (int x=0; x<w; x++) {
-        putp(colour);
-    }
-    return;
-}
- 
-void GraphicsDisplay::vline(int x, int y0, int y1, int colour) {
-    int h;
-    h = y1 - y0 + 1;
-    window(x,y0,1,h);
-    for (int y=0; y<h; y++) {
-        putp(colour);
-    }
-    return;
-}
-
-void GraphicsDisplay::cls() {
-    fill(0, 0, width(), height(), _background);
-}
-    
-void GraphicsDisplay::blit(int x, int y, int w, int h, const int *colour) { 
-    window(x, y, w, h);
-    for(int i=0; i<w*h; i++) {
-        putp(colour[i]);
-    }
-}
-    
-void GraphicsDisplay::blitbit(int x, int y, int w, int h, const char* colour) {
-    window(x, y, w, h);
-    for(int i = 0; i < w*h; i++) {
-        char byte = colour[i >> 3];
-        int offset = i & 0x7;
-        int c = ((byte << (offset)) & 0x80) ? _foreground : _background;
-        putp(c);
-    }
-}
-    
-int GraphicsDisplay::columns() { 
-    return width() / 8; 
-}
-
-int GraphicsDisplay::rows() { 
-    return height() / 8; 
-}
-
--- a/screen/GraphicsDisplay.h	Mon Dec 24 13:26:28 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/* mbed GraphicsDisplay Display Library Base Class
- * Copyright (c) 2007-2009 sford
- * Released under the MIT License: http://mbed.org/license/mit
- *
- * A library for providing a common base class for Graphics displays
- * To port a new display, derive from this class and implement
- * the constructor (setup the display), pixel (put a pixel
- * at a location), width and height functions. Everything else
- * (locate, printf, putc, cls, window, putp, fill, blit, blitbit) 
- * will come for free. You can also provide a specialised implementation
- * of window and putp to speed up the results
- */
-
-#ifndef MBED_GRAPHICSDISPLAY_H
-#define MBED_GRAPHICSDISPLAY_H
-
-#include "../screen/TextDisplay.h"
-
-class GraphicsDisplay : public TextDisplay {
-
-public:         
-          
-    GraphicsDisplay(const char* name);
-     
-    virtual void pixel(int x, int y, int colour) = 0;
-    virtual int width() = 0;
-    virtual int height() = 0;
-        
-    virtual void window(int x, int y, int w, int h);
-    virtual void putp(int colour);
-    
-    virtual void cls();
-    virtual void rect(int x0, int y0, int x1, int y1, int colour);
-    virtual void fillrect(int x0, int y0, int w, int h, int colour);
-    // fill equals fillrect, name has been kept to not break compatibility
-    virtual void fill(int x, int y, int w, int h, int colour);
-    
-    // To draw circle using ellipse, set a and b to the same values
-    virtual void ellipse(int xc, int yc, int a, int b, unsigned int colour);
-    virtual void fillellipse(int xc, int yc, int a, int b, unsigned int colour);
-    virtual void circle(int x, int y, int r, int colour);
-    
-    virtual void hline(int x0, int x1, int y, int colour);
-    virtual void vline(int x0, int y0, int y1, int colour);
-    virtual void line(int x0, int y0, int x1, int y1, int colour);
-    
-    virtual void blit(int x, int y, int w, int h, const int *colour);    
-    virtual void blitbit(int x, int y, int w, int h, const char* colour);
-    
-    virtual void character(int column, int row, int value);
-    virtual int columns();
-    virtual int rows();
-    
-protected:
-
-    // pixel location
-    short _x;
-    short _y;
-    
-    // window location
-    short _x1;
-    short _x2;
-    short _y1;
-    short _y2;
-
-};
-
-#endif
--- a/screen/LCDSettings.h	Mon Dec 24 13:26:28 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-#ifndef LCDSETTINGS_H
-#define LCDSETTINGS_H
-
-/** MemoryLCD width in pixels */ 
-#define DISPLAY_WIDTH				(128)
-
-/** MemoryLCD height in pixels */
-#define DISPLAY_HEIGHT				(128)
-
-/** Data type for storing buffer the pixel buffer */
-#if	((DISPLAY_WIDTH % 32) == 0)
-#define	DISPLAY_BUFFER_TYPE			uint32_t
-#define DISPLAY_BUFFER_TYPE_MASK    (0x1F)
-#else
-#define DISPLAY_BUFFER_TYPE			uint8_t
-#define DISPLAY_BUFFER_TYPE_MASK    (0x07)
-#endif
-
-#define DISPLAY_BUFFER_TYPE_SIZE	(sizeof(DISPLAY_BUFFER_TYPE) * 8)
-#define DISPLAY_BUFFER_ELEMENTS 	((DISPLAY_WIDTH*DISPLAY_HEIGHT)/DISPLAY_BUFFER_TYPE_SIZE)
-
-/** Maximum length of a printf to the display */
-#define MAX_PRINTF_CHARS			40
-
-/** Color definitions */
-#define White						0xFFFFFFFF
-#define Black						0x00000000
-
-#endif
Binary file screen/LS013B7DH03.ZIP has changed
--- a/screen/LS013B7DH03.cpp	Mon Dec 24 13:26:28 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,245 +0,0 @@
-/***************************************************************************//**
- * @file LS013B7DH03.cpp
- * @brief Driver class for the Sharp LS013B7DH03 memory LCD on some kits.
- *******************************************************************************
- * @section License
- * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
- *******************************************************************************
- *
- * Permission is granted to anyone to use this software for any purpose,
- * including commercial applications, and to alter it and redistribute it
- * freely, subject to the following restrictions:
- *
- * 1. The origin of this software must not be misrepresented; you must not
- *    claim that you wrote the original software.
- * 2. Altered source versions must be plainly marked as such, and must not be
- *    misrepresented as being the original software.
- * 3. This notice may not be removed or altered from any source distribution.
- *
- * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
- * obligation to support this Software. Silicon Labs is providing the
- * Software "AS IS", with no express or implied warranties of any kind,
- * including, but not limited to, any implied warranties of merchantability
- * or fitness for any particular purpose or warranties against infringement
- * of any proprietary rights of a third party.
- *
- * Silicon Labs will not be liable for any consequential, incidental, or
- * special damages, or any other relief, or for any claim by any third party,
- * arising from your use of this Software.
- *
- ******************************************************************************/
-
-#include "../screen/LS013B7DH03.h"
-
-#include <mbed.h>
-#include "SPI.h"
-//#include "Peripherals.h"
-
-/* LS013B7DH03 SPI commands */
-#define LS013B7DH03_CMD_UPDATE     (0x01)
-#define LS013B7DH03_CMD_ALL_CLEAR  (0x04)
-
-/* Macro to switch endianness on char value */
-#define SWAP8(a) ((((a) & 0x80) >> 7) | (((a) & 0x40) >> 5) | (((a) & 0x20) >> 3) | (((a) & 0x10) >> 1) | (((a) & 0x08) << 1) | (((a) & 0x04) << 3) | (((a) & 0x02) << 5) | (((a) & 0x01) << 7))
-
-namespace silabs {
-
-
-LS013B7DH03::LS013B7DH03(mbed::SPI * spi, DigitalOut * CS, const char *name) : BufferedDisplay( name )  {
-	//Save pointer to ChipSelect pin
-	_CS = CS;
-	_CS->write(0);
-	DigitalOut DISP(P6_6);
-
-//Save pointer to ExtCom pin
-///	_EXTCOM = ExtCom;
-///	_EXTCOM->write(0);
-
-	DISP  = 0;
-	wait_ms(1);
-	DISP = 1;
-
-	//Save pointer to spi peripheral
-	_spi = spi;
-	//_spi->frequency(600000);
-	_spi->format( 8, 0 );
-
-	_internalEventCallback.attach(this, &LS013B7DH03::_cbHandler);
-
-	//Initialize
-	//_spi->set_dma_usage((DMAUsage)DMA_USAGE_NEVER);
-	_refreshCount = 0;
-	_lcdPolarity = 0;
-	_state = IDLE;
-	_completionCallbackPtr = NULL;
-	_rowCount = 0;
-
-	//Start toggling the EXTCOM pin
-	//_displayToggler.attach(this, &LS013B7DH03::toggle, 0.008f);
-}
-
-/**
- * Call this function at 55 ~ 65 Hz to keep the display up-to-date.
- */
-void LS013B7DH03::toggle() {
-//	_EXTCOM->write(!_EXTCOM->read());
-//	_refreshCount++;
-}
-
-/**
- * Function to get internal refresh counter
- */
-uint32_t LS013B7DH03::getRefreshTicks() {
-	return _refreshCount;
-}
-
-/**
- * Call this function to push all changes to the display
- */
-int LS013B7DH03::update( cbptr_t callback ) {
-	uint32_t rowCount = 0;
-	bool update = false;
-
-	// Check if something actually changed in the pixelbuffer
-	for(rowCount = 0; rowCount < DISPLAY_HEIGHT/DISPLAY_BUFFER_TYPE_SIZE; rowCount++) {
-		if(_dirtyRows[rowCount] != 0) update = true;
-	}
-
-	if(update == false) return LS013B7DH03_NO_ACTION;
-
-	// Watch out to not mess up a transfer
-	if(_state != IDLE) return LS013B7DH03_ERROR_BUSY;
-
-	_completionCallbackPtr = callback;
-
-	// Take control
-	_state = WAIT_WRITE;
-	_rowCount = 0;
-
-	//Initialize the command vector
-	_cmd[0] = (uint8_t)SWAP8(LS013B7DH03_CMD_UPDATE);
-	_cmd[1] = SWAP8(1);
-
-	// Activate LCD
-	_CS->write(1);
-	_csTimeout.attach(this, &LS013B7DH03::_cbHandlerTimeout, 0.01f);
-
-	return LS013B7DH03_OK;
-}
-
-/**
- * Function to test display buffer
- */
-int LS013B7DH03::showDemo() {
-	for(uint32_t i = 0; i < DISPLAY_BUFFER_ELEMENTS; i+=2) {
-		_pixelBuffer[i] = 0x00555345;
-	}
-	memset((void*)_dirtyRows, 0x33, sizeof(_dirtyRows));
-
-	return LS013B7DH03_OK;
-}
-
-/**
- * Call this function to immediately clear the display
- */
-int LS013B7DH03::clearImmediate( cbptr_t callback ) {
-	// Watch out to not mess up a transfer
-	if(_state != IDLE) return LS013B7DH03_ERROR_BUSY;
-
-	_state = WAIT_CLEAR;
-	_completionCallbackPtr = callback;
-
-	// Clear out the pixel buffer
-	memset((void*)_pixelBuffer, White, sizeof(_pixelBuffer));
-	memset((void*)_dirtyRows, 0, sizeof(_dirtyRows));
-
-	_cmd[0] = (uint8_t)(SWAP8(LS013B7DH03_CMD_ALL_CLEAR | _lcdPolarity));
-	_cmd[1] = 0;
-
-	// Wait for the ChipSelect line
-	_CS->write(1);
-	_csTimeout.attach(this, &LS013B7DH03::_cbHandlerTimeout, 0.01f);
-
-	return LS013B7DH03_OK;
-}
-
-void LS013B7DH03::_cbHandlerTimeout( void ) {
-	this->_cbHandler(0);
-}
-
-void LS013B7DH03::_cbHandler( int event ) {
-	if((_state == WAIT_WRITE) || (_state == WRITING))
-	{
-		_state = WRITING;
-		while(_rowCount < DISPLAY_HEIGHT) {
-			// Determine the next line to send
-			if((_dirtyRows[_rowCount / DISPLAY_BUFFER_TYPE_SIZE] & (1 << (_rowCount % DISPLAY_BUFFER_TYPE_SIZE))) != 0) {
-
-				// Row is dirty, send an update to the display
-				_cmd[1] = (uint8_t)SWAP8(_rowCount + 1);
-				memcpy((void*)&(_cmd[2]), (const void*)&(_pixelBuffer[_rowCount*(DISPLAY_WIDTH/DISPLAY_BUFFER_TYPE_SIZE)]), DISPLAY_WIDTH / DISPLAY_BUFFER_TYPE_SIZE * sizeof(DISPLAY_BUFFER_TYPE));
-
-				if(_spi->write((const char*)_cmd, (2 + (DISPLAY_WIDTH / DISPLAY_BUFFER_TYPE_SIZE * sizeof(DISPLAY_BUFFER_TYPE))) , (char*)NULL, 0/*, _internalEventCallback, SPI_EVENT_COMPLETE*/) != (2 + (DISPLAY_WIDTH / DISPLAY_BUFFER_TYPE_SIZE * sizeof(DISPLAY_BUFFER_TYPE)))) {
-					// SPI is busy, with another transaction. This means the data to the LCD has been corrupted, so fail here.
-					_state = DONE;
-					//printf("Failed at _cbHandler\n");
-					// Make sure the handler is called again
-					_csTimeout.attach(this, &LS013B7DH03::_cbHandlerTimeout, 0.1f);
-				}else{	//sc...
-					_csTimeout.attach(this, &LS013B7DH03::_cbHandlerTimeout, 0.001f);
-				}
-
-				// Transaction is in progress, so update row state
-				_dirtyRows[_rowCount / DISPLAY_BUFFER_TYPE_SIZE] &= ~(1 << (_rowCount % DISPLAY_BUFFER_TYPE_SIZE));
-				_rowCount++;
-				return;
-			}
-
-			// Row wasn't touched, so check the next row
-			_rowCount++;
-		}
-
-		// Done sending!
-		_cmd[1] = 0xFF;
-		_state = TRANSFERS_DONE;
-		if(_spi->write((const char*)_cmd, 2, (char*)NULL, 0/*, _internalEventCallback, SPI_EVENT_COMPLETE*/) != 2) {
-			// SPI is busy, with another transaction. This means the data to the LCD has been corrupted, so fail here.
-			_state = DONE;
-
-			// Make sure the handler is called again
-			_csTimeout.attach(this, &LS013B7DH03::_cbHandlerTimeout, 0.1f);
-		}else{	//sc...
-			_csTimeout.attach(this, &LS013B7DH03::_cbHandlerTimeout, 0.001f);
-		}
-		return;
-	}
-	else if (_state == WAIT_CLEAR)
-	{
-		_state = TRANSFERS_DONE;
-		if(_spi->write((const char*)_cmd, 2, (char*)NULL, 0/*, _internalEventCallback, SPI_EVENT_COMPLETE*/) != 2) {
-			// SPI is busy, with another transaction. This means the data to the LCD has been corrupted, so fail here.
-			_state = DONE;
-
-			// Make sure the handler is called again
-			_csTimeout.attach(this, &LS013B7DH03::_cbHandlerTimeout, 0.1f);
-		}else{	//sc...
-			_csTimeout.attach(this, &LS013B7DH03::_cbHandlerTimeout, 0.001f);
-		}
-		return;
-	}
-	else if (_state == TRANSFERS_DONE)
-	{
-		_state = DONE;
-		_csTimeout.attach(this, &LS013B7DH03::_cbHandlerTimeout, 0.01f);
-		return;
-	}
-	else if (_state == DONE)
-	{
-		_CS->write(0);
-		_state = IDLE;
-		if(_completionCallbackPtr != 0) _completionCallbackPtr();
-		return;
-	}
-}
-
-} // namespace silabs
--- a/screen/LS013B7DH03.h	Mon Dec 24 13:26:28 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +0,0 @@
-/***************************************************************************//**
- * @file LS013B7DH03.h
- * @brief Driver class for the Sharp LS013B7DH03 memory LCD on some kits.
- *******************************************************************************
- * @section License
- * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
- *******************************************************************************
- *
- * Permission is granted to anyone to use this software for any purpose,
- * including commercial applications, and to alter it and redistribute it
- * freely, subject to the following restrictions:
- *
- * 1. The origin of this software must not be misrepresented; you must not
- *    claim that you wrote the original software.
- * 2. Altered source versions must be plainly marked as such, and must not be
- *    misrepresented as being the original software.
- * 3. This notice may not be removed or altered from any source distribution.
- *
- * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
- * obligation to support this Software. Silicon Labs is providing the
- * Software "AS IS", with no express or implied warranties of any kind,
- * including, but not limited to, any implied warranties of merchantability
- * or fitness for any particular purpose or warranties against infringement
- * of any proprietary rights of a third party.
- *
- * Silicon Labs will not be liable for any consequential, incidental, or
- * special damages, or any other relief, or for any claim by any third party,
- * arising from your use of this Software.
- *
- ******************************************************************************/
-
-#ifndef SILABS_LS013B7DH03_H
-#define SILABS_LS013B7DH03_H
-
-#include "platform.h"
-#include <mbed.h>
-#include "../screen/BufferedDisplay.h"
-#include "../screen/LCDSettings.h"
-//#include "Peripherals.h"
-
-typedef void (*cbptr_t)(void);
-
-#define LS013B7DH03_ERROR_BUSY		-1
-#define LS013B7DH03_ERROR_SPI_BUSY	-2
-#define LS013B7DH03_NO_ACTION		-3
-#define LS013B7DH03_ERROR_ARGUMENT	-4
-#define	LS013B7DH03_OK				0
-
-typedef enum {
-	IDLE,			// No operation currently ongoing
-	CLEARING,		// In the process of clearing the display
-	WRITING,		// In the process of sending a display update
-	WAIT_CLEAR,		// Going to clear after CS pin timeout
-	WAIT_WRITE,		// Going to write after CS pin timeout
-	TRANSFERS_DONE, // Last transfer in progress
-	DONE			// Done with transmission, waiting for CS pin to become high
-} LS013B7DH03_state_t;
-
-namespace silabs {
-class LS013B7DH03 : public BufferedDisplay {
-
-public:
-
-	LS013B7DH03(SPI * spi, DigitalOut * CS,  const char *name=NULL);
-
-	/**
-	 * Call this function to push all changes to the display
-	 */
-	int update( cbptr_t callback = NULL );
-
-	/**
-	 * Immediately clear the display: set pixel buffer to zero and clear out the display.
-	 */
-	int clearImmediate( cbptr_t callback = NULL );
-
-	/**
-	 * Function to test display buffer
-	 */
-	int showDemo();
-
-
-
-	/**
-	 * Function to get internal refresh counter
-	 */
-	uint32_t getRefreshTicks();
-
-
-protected:
-	mbed::SPI *_spi;
-	//mbed::DigitalOut *_EXTCOM;
-	mbed::DigitalOut *_CS;
-
-	mbed::Ticker _displayToggler;
-	mbed::Timeout _csTimeout;
-
-	event_callback_t _internalEventCallback;
-	volatile uint32_t _refreshCount;
-	uint8_t _lcdPolarity;
-	LS013B7DH03_state_t _state;
-	cbptr_t _completionCallbackPtr;
-	volatile uint32_t _rowCount;
-	uint8_t _cmd[2 + (DISPLAY_WIDTH / DISPLAY_BUFFER_TYPE_SIZE * sizeof(DISPLAY_BUFFER_TYPE))];
-
-	/**
-	 * Callback handler for internal SPI transfers.
-	 */
-	void _cbHandler( int event );
-
-	/**
-	 * Callback handler for internal SPI transfers triggered by timeout.
-	 */
-	void _cbHandlerTimeout( void );
-
-	/**
-	 * Call this function at 55 ~ 65 Hz to keep the display from losing contrast.
-	 */
-	void toggle();
-};
-
-} // namespace silabs
-
-#endif //SILABS_LS013B7DH03_H
--- a/screen/TextDisplay.cpp	Mon Dec 24 13:26:28 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-/* mbed TextDisplay Display Library Base Class
- * Copyright (c) 2007-2009 sford
- * Released under the MIT License: http://mbed.org/license/mit
- */
- 
-#include "../screen/TextDisplay.h"
-
-#include <cstdarg>
-
-TextDisplay::TextDisplay(const char *name){
-    _row = 0;
-    _column = 0;
-
-    if (name == NULL) {
-        _path = NULL;
-    } else {
-        _path = new char[strlen(name) + 2];
-        sprintf(_path, "/%s", name);
-    }
-}
-    
-int TextDisplay::_putc(int value) {
-    if(value == '\n') {
-        _column = 0;
-        _row++;
-        if(_row >= rows()) {
-            _row = 0;
-        }
-    } else {
-        character(_column, _row, value);
-        _column++;
-        if(_column >= columns()) {
-            _column = 0;
-            _row++;
-            if(_row >= rows()) {
-                _row = 0;
-            }
-        }
-    }
-    return value;
-}
-
-// crude cls implementation, should generally be overwritten in derived class
-void TextDisplay::cls() {
-    locate(0, 0);
-    for(int i=0; i<columns()*rows(); i++) {
-        _putc(' ');
-    }
-}
-
-void TextDisplay::set_font(const unsigned char * f) {
-    font = f;
-    if(font==NULL) {
-    	externalfont = 0;  // set display.font
-    	locate(0, 0);
-    }    
-    else{
-    	externalfont = 1;
-    	locate(0, 0);
-    }
-}
-
-void TextDisplay::locate(int column, int row) {
-    _column = column;
-    _row = row;
-    char_x = column;
-    char_y = row;
-}
-
-int TextDisplay::_getc() {
-    return -1;
-}
-        
-void TextDisplay::foreground(uint16_t colour) {
-    _foreground = colour;
-}
-
-void TextDisplay::background(uint16_t colour) {
-    _background = colour;
-}
-
-void TextDisplay::printf(const char* format, ...) {
-	char buffer[MAX_PRINTF_CHARS + 1] = { 0 };
-	uint32_t iterator = 0;
-	va_list args;
-	va_start(args, format);
-	vsprintf(buffer, format, args);
-	va_end(args);
-
-	while((buffer[iterator] != 0) && (iterator < MAX_PRINTF_CHARS)) {
-		_putc(buffer[iterator++]);
-	}
-}
--- a/screen/TextDisplay.h	Mon Dec 24 13:26:28 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-/* mbed TextDisplay Library Base Class
- * Copyright (c) 2007-2009 sford
- * Released under the MIT License: http://mbed.org/license/mit
- *
- * A common base class for Text displays
- * To port a new display, derive from this class and implement
- * the constructor (setup the display), character (put a character
- * at a location), rows and columns (number of rows/cols) functions.
- * Everything else (locate, printf, putc, cls) will come for free
- *
- * The model is the display will wrap at the right and bottom, so you can
- * keep writing and will always get valid characters. The location is 
- * maintained internally to the class to make this easy
- */
-
-#ifndef MBED_TEXTDISPLAY_H
-#define MBED_TEXTDISPLAY_H
-
-#include "../screen/LCDSettings.h"
-#include "mbed.h"
-
-class TextDisplay {
-public:
-
-  // functions needing implementation in derived implementation class
-  /** Create a TextDisplay interface
-     *
-     * @param name The name used in the path to access the strean through the filesystem
-     */
-    TextDisplay(const char *name = NULL);
-
-    /** output a character at the given position
-     *
-     * @param column column where charater must be written
-     * @param  row where character must be written
-     * @param c the character to be written to the TextDisplay
-     */
-    virtual void character(int column, int row, int c) = 0;
-
-    /** return number if rows on TextDisplay
-     * @result number of rows
-     */
-    virtual int rows() = 0;
-
-    /** return number if columns on TextDisplay
-    * @result number of rows
-    */
-    virtual int columns() = 0;
-    
-    // Sets external font usage, eg. dispaly.set_font(Arial12x12);
-    // This uses pixel positioning.
-    // display.set_font(NULL); returns to internal default font.
-    void set_font(const unsigned char * f);
-    
-    // set position of the next character or string print.
-    // External font, set pixel x(column),y(row) position.
-    // internal(default) font, set character column and row position 
-    virtual void locate(int column, int row);
-    
-    // functions that come for free, but can be overwritten
-
-    /** clear screen
-    */
-    virtual void cls();
-    virtual void foreground(uint16_t colour);
-    virtual void background(uint16_t colour);
-    // putc (from Stream)
-    // printf (from Stream)
-    virtual void printf(const char* format, ...);
-    
-protected:
-
-    virtual int _putc(int value);
-    virtual int _getc();
-    
-    // external font functions
-    const unsigned char* font;
-    int externalfont;
- 
-    // character location
-    uint16_t _column;
-    uint16_t _row;
-    unsigned int char_x;
-    unsigned int char_y;
-
-    // colours
-    uint16_t _foreground;
-    uint16_t _background;
-    char *_path;
-};
-
-#endif