Commit Graph

148 Commits

Author SHA1 Message Date
Bodmer 61dfb2b4ac Extended character set suport for Adafruit_GFX format fonts
Supports Adafruit_GFX compatible font format with characters in the range 32-255.

Note that the font rendering functions expect UTF-8 encoded characters/strings.
2019-02-08 18:25:55 +00:00
Bodmer 7479f7e680 Fix transparent Sprite rendering 2019-02-04 01:48:53 +00:00
Bodmer 091d8cd231 Fix issue #297
There is a bug in the ESP8266 Arduino core that averwrites the overlap
mode setup and hold bits for the hardware driven SPI SS line.  The
TFT_eSPI library has been patched as a work-around.

In overlap mode to maintain the required setup and hold times at 80MHz
ESP8266 CPU clock the SPI rate must be 27MHz or less. At 160MHz CPU
clock the SPI rate can be 40MHz.
2019-02-03 21:54:24 +00:00
Bodmer caef4519f3 Improve bounds checking update CS management
Add bounds checking to graphics functions
Rationalise variable types and style used to minimse type casting needs
(this change ended up being a more extensive refactoring than
anticipated - but once started...)
Add version reporting to diagnostic sketch
Boost PDQ graphicstest performance
2019-01-25 14:25:40 +00:00
Bodmer e8a0024054
Fix issue #295 2019-01-25 13:03:28 +00:00
Bodmer 11ef56d48c Test slower DC and CS lines for a user 2019-01-23 20:55:04 +00:00
Bodmer 054a824eb8 Add ESP32 VSPI or HSPI port option + others
If the VSPI port is in use and pins are not accessible (e.g. TTGO
T-Beam)
then add or uncomment the following line in the setup header file:
//#define USE_HSPI_PORT

Minor performance tweaks for ESP32 to minimise the occurence of the slow
transaction overhead.

setAddrWindow now takes xstart, ystart, width and height as inputs

Multi-sample raw touch x and y for noisy displays

Example update for setAddrWindow change compatibility
2019-01-22 18:41:31 +00:00
Bodmer b5db54dc79
Fix #293 for ESP8266 core 2.4.2 and later
UTFT8 encoded Unicode values were not being drawn on screen with versions after 2.4.1 of the ESP8266 core.
2019-01-22 11:46:04 +00:00
Bodmer 4e6736e596 Add backlight support
The backlight control pin and ON state can be defined in the setup.h
file. Addresses #229, #226, #221

Comments updated and ILI9488 warning added.
2019-01-06 19:03:31 +00:00
Bodmer 96228cbf44 Add Sprite rotation and examples
Sprites can be rendered rotated with defined pivot points, 3 new
examples have been added "Rotated_Sprite_1/2/3".
The FLASH bitmap example has been moved to the Generic examples folder.
Boundary checks have been added to pushImage()
A new scrolling and wrapping in a Sprite example has been added.
2019-01-06 01:14:10 +00:00
Bodmer 71a222f704
Fix #276
Fixes warning/error that is only reported with certain compiler warning flag settings ("All" in Arduino IDE).
2018-12-26 16:46:54 +00:00
Bodmer 2a02c81c69
Fix #267 2018-12-03 21:09:54 +00:00
Bodmer 41dea61bfd Correct #263, add setup file for 160x80 TFT, add invert option
Fixed bug where wrong wodth was returned for 1bpp Sprite
Improved speed for copying a 1bpp Sprite into another 1bpp Sprite (
affects Sprite pushImage() function only)
Added option to setup for colour inversion
2018-11-30 23:27:10 +00:00
Bodmer beda811a3a Add R61581 driver as detailed in #238
Not tested by Bodmer, tested by s60sc as in #238
2018-11-25 19:41:29 +00:00
Bodmer 5e62875ff5 Fix issue #256
Parallel compatibility lost during recent updates.
Now working again.
2018-11-25 03:15:16 +00:00
Bodmer d13f84e4a6 Re-work the support for bi-directional SDA line
Tested on ESP32 and ST7789V display only. It may not work with other
displays!

Use:
#define TFT_SDA_READ

in setup file to use bi-directional SDA pin support.
2018-11-24 01:30:41 +00:00
Bodmer 1cf2305e4d Add capability to read TFT SDA bi-directional pin
Tested on an ESP32 with ST7789V display
SDA read is very slow on an ESP8266 (to be investigated)
Added new setup #define TFT_SDA_READ
Add new ESP32 and ESP8266 compatible in example/Generic folder to test
capture of TFT screen
2018-11-23 03:09:07 +00:00
Bodmer ac7a229301 Remove setAddressWindow change for ESP32
Corner case caused missed graphics.
2018-11-16 00:54:51 +00:00
Bodmer 7a3d6bcab9 Minor performance improvements for ESP32
Remove legacy changes for double buffered SPI
Eliminate unecessary ESP32 SPI read/modify write
Eliminate two stage control bit changes (may impact some diplays with
setup/hold  timing and show ESP32 hardware register bug?)
Add single register write for CS and DC command
Make setAddrWindow smarter (as used in previous AVR library)
Improve compatibility with GFX sketches
Re-arrange comments slightly to improve positioning
2018-11-14 01:05:16 +00:00
Bodmer 3d5ff73690 Fix issue #224 2018-10-24 10:00:33 +01:00
Bodmer d18a5a0c8f Revert "Fix issue #225"
This reverts commit 1e1525010e.
2018-10-24 09:59:26 +01:00
Bodmer 1e1525010e Fix issue #225 2018-10-24 09:58:28 +01:00
Bodmer 1a0b37097a Add new anti-aliased (smooth) font examples + bug fixes
Four new examples have been added to show different methods of rendering
the anta-aliased fonts.  A few minor bugs have been corrected associated
with the font rendering. drawNumber and drawFloat handle fixed width
mono fonts with no digit movement.
2018-10-21 17:53:27 +01:00
Bodmer 1fd8d4cd6d Fix issue #216 2018-10-11 23:46:19 +01:00
Bodmer 73c1831e7b Add option for a different TFT read SPI frequency
#define SPI_READ_FREQUENCY  20000000 // Optional reduced SPI frequency
for reading TFT

Also weeded out some compiler warnings
2018-07-29 15:00:09 +01:00
Bodmer 40e2c8dc74 Update so read TFT works for ILI9488 SPI display
Small performance improvement for ILI9488
2018-07-11 20:30:39 +01:00
Bodmer 5b0d96d64d Completed support for SPI ILI9488
Setup20 added for ESP8266 and Setup21 addwd for ESP32
2018-07-07 22:41:53 +01:00
Bodmer 51ed23af0f Support ST7789 rotation offset and boards with no chip select
Other minor changes to tidy code up
Put back in ability to call init() multiple times in sketch
2018-07-06 18:48:24 +01:00
Bodmer 53119823f9 Add support for ST7789 display (240 x 240) 2018-06-01 18:26:09 +01:00
Bodmer f2686a9024
Try alternative drawLine for HX8357D display as noted in issue #149 2018-05-29 22:06:14 +01:00
Bodmer 4a52f5e685 Add ability to set ST7735 tab color from sketch
Use line is form:
tft.init(1);
or:
tft.init(INITR_REDTAB);
// Enumerated the configurations in library are:
#define INITR_GREENTAB
0x0
#define INITR_REDTAB    0x1
#define INITR_BLACKTAB  0x2
#define
INITR_GREENTAB2 0x3 // Use if you get random pixels on two edges of
green tab display
#define INITR_GREENTAB3 0x4 // Use if you get random
pixels on edge(s) of 128x128 screen
#define INITR_GREENTAB128 0x5 // Use
if you only get part of 128x128 screen in rotation 0 & 1
#define INITB
0xB
2018-05-25 22:48:22 +01:00
Bodmer 54b3f0f63d Add drawXBitmap() function and example
Example is in Generic folder, draw the Espressif logo on the screen.
2018-04-23 17:16:18 +01:00
Bodmer 4d181d7a19 Fix bug #122 by different approach 2018-04-21 09:50:41 +01:00
Bodmer f56184e9cd Add diagnostic sketches
Do not load button class is touch screen chip select not defined
2018-04-11 01:03:26 +01:00
Bodmer ada678d76e Added Waveshare ePaper support
Also added ability to push 1bpp bitmaps to a Sprite to support rendering
images on an EPaper screen.

Floyd-Steinberg dithering and basic graphics example added as first
ePaper demo.
2018-04-02 02:53:42 +01:00
Bodmer 9276b0162d Add support for 1 bit per pixel in Sprite class
This is stage one of support for ePaper displays from Waveshare.
Examples for 1 bit per pixel Sprites and 2 or 3 colour ePaper displays
to follow soon.
2018-03-26 01:02:23 +01:00
Bodmer 972d852346 Correct issue #104 and update setup files
Macro name (transfer16) conflict with SPI library fixed
Smooth font option added to User Setup files
Narrow font 8 option added to User Setup files
2018-03-12 22:49:18 +00:00
Bodmer a00011c2df Add 8 bit parallel TFT support for ESP32
Add interface driver macro
Add 8 bit parallel support
Add 8 bit parallel read support
Add ILI9481, ILI9488 and HX8357D drivers
Update version and ReadMe
Update Create_Font processing sketch
Add slightly narrower alternative font 8
2018-03-10 23:08:57 +00:00
Bodmer 8752236ac2 Add smooth (antialiased) fonts 2018-02-24 19:02:20 +00:00
Bodmer 02a902f617
Potential fix for issue #96 2018-02-24 18:35:03 +00:00
Bodmer 8df115ab4d Raise version 2018-02-22 22:33:49 +00:00
Bodmer f3190fde71 Allow init() to be called in sketch to reset and re-initialise TFT
Solution to Issue #85
2018-01-27 19:22:42 +00:00
Bodmer 139fe8dc4c Stop y wrapping
I need this in my project but will add a switch.
2018-01-27 14:20:22 +00:00
Bodmer 1f84ab0885 Reinstate 8bit pushColors()
Permits backwards compatibility
2018-01-27 13:46:59 +00:00
Bodmer b2e4e69f7a Fix Issue #81 2018-01-27 02:35:25 +00:00
Bodmer 6c993f8fd2 Add getCursorX() and getCursorY() functions
As requested in Issue #79

Function names are compatible with Adafruit_GFX

Also trimmed out duplicate keywords
2018-01-26 15:19:40 +00:00
Bodmer aa2c79a25f Performance enhancements, new functions, bug fixes
1. Ability to swap bytes in pushColors() and pushImage()
2. pushImage() will handle FLASH stroed images
3. pushImage() will accept a transparent color
4. pushRect() deprecated but still works
5. setSwapBytes() to set swapping bytes in color for pushImage() and
pushColors() true or false
6. getSwapBytes() returns swap bytes parameter
7. fillCircle() and fillCircleHelper() changed to use horizontal lines
to speed up plotting in a sprite
8. fillTriangle bug fix by moving spi_begin()
9  Small performance improvement to setAddrWindow()
10. pushColor() bug fix for swapped bytes
11. pushColors() performance improvement for ESP8266 and add optional
byte swap parameter, accepts higher pixel count
12. move spi_begin() later in drawLine() incase fn returns early
13. add spi_end() in drawLine incdae return occurs early
14. Add color332() fn to convert 16 bit to 8 bit colour
15. Sprite: createSprite() checks if sprite already created and returns
pointer if it does
16. Sprite: one extra "off-screen pixel added to a sprite to point
out-of-bounds setWindow coords to
this avoids extra bounds checks in push/write color
17. Sprite: setColorDepth allows changing of depthe for existing sprtie
and returns a new pointer to the new sprite
18. Sprite: pushImage() accepts a swapped byte parameter
19. Sprite: setSwapBytes() to set swapping bytes in color for
pushImage() and pushColors() true or false
20. Sprite: getSwapBytes() returns swap bytes parameter
21. Sprite: setWindow deals with duff out of sprite coords.
22. Sprite: bug in draw char corrected which could draw too many
over-writing pixels
2018-01-08 23:19:42 +00:00
Bodmer 5e98ce5294 Avoid divide by zero crash if touch screen not fitted or not wired up 2017-12-27 14:57:01 +00:00
Bodmer b536af5062 Fix bug
If touch not used dummy getTouch missing the new threshold parameter.
2017-12-22 00:50:24 +00:00
Bodmer 2e84218ecb Add touch pressure hysterisis and user defined sensitivity
getTouch accepts a third optional pressure threshold, default is 600,
increasing means harder presses are needed.
getTouch(uint16_t *x, uint16_t *y, uint16_t threshold = 600);
2017-12-21 23:16:11 +00:00
Bodmer 93ba6e3716 Add scrolling inside a sprite
Added example "Sprite_scroll"
Tidy up virtual function list
Add PROGMEM bitmap image functions
2017-12-10 23:04:31 +00:00
Bodmer 7f909a1527 Fix bug in 16 bit transparent Sprite 2017-12-03 02:55:43 +00:00
Bodmer d2104f6d85 Add ability to plot Sprites with a "transparent" colour
Can now specify a colour that will not be plotted so some part of the
Sprite are "transparent" and the TFT backforund shows through. New
example added for demonstration.
2017-12-03 02:29:39 +00:00
Bodmer 9d2c7f21fc
Correct Sprite odd pixel count width crash
The 32 bit alignment offset must be checked for every line to prevent crash with odd pixel count lines.
2017-12-01 15:37:08 +00:00
Bodmer 8b24e61b99
Fix issue #60
Do not adjust x datum for characters that have a positive offset.
2017-11-30 22:41:23 +00:00
Bodmer 706af163c0 Add some crash prevention
Prevent memory access to non-existant Sprite memory areas which would
cause a processor reset.
2017-11-30 00:27:56 +00:00
Bodmer 6fc63061d7 Filter bad character codes
Do not substitute bad characters for first valid one.
2017-11-29 02:00:47 +00:00
Bodmer e18383a29c Bounds check character codes (issue #58)
Correct isuue #58
2017-11-29 00:38:05 +00:00
turiphro b97324875d Fix width/height override issue when using setRotation
This commit fixes an issue when setting screen width
and height from the constructor (e.g., user sketch),
followed by setRotation(i). Previously, setRotation
used TFT_WIDTH and TFT_HEIGHT, ignoring user overrides.
2017-11-26 18:06:11 -08:00
Bodmer 58fa8326a2
Correct uninitialised warning on ESP32
int16_t  xo16 = 0, yo16 = 0;
2017-11-26 12:38:20 +00:00
Bodmer 218dd1b06e Bug fix
Should have tested that last minute edit!
2017-11-24 15:03:24 +00:00
Bodmer 312b7c1128 Tidy up 8 bit sprite code and fix gugs
Minor tweaks and speed improvements
2017-11-24 14:12:29 +00:00
Bodmer 3b5e673603 Version update, minor tweaks and typos 2017-11-22 00:53:09 +00:00
Bodmer 3e3d638bba Add support for 8 bit color sprites (needs less RAM)
Added setColorDepth(d) where "d" is 8 or 16.
Default is 16 bit if not specified.
2017-11-21 22:57:11 +00:00
Bodmer 943c18facf Add sprite class
Sprites (images) can now be created in RAM, written to with text and
graphics and rendered to screen quickly, this makes it easier to get
flicker frre screen updates.
ESP8266 can typically create up to a 160x128 sprite, and ESP32 about
200x200 pixels. 16 bit colour only at the moment, may soon implement 8
bit colour to reduce RAM.
2017-11-15 20:26:22 +00:00
Bodmer 8734a05d3e Update touch handler to work with ESP32
Adde Setup11... for testing with ESP32
2017-11-04 19:11:50 +00:00
Bodmer df4e658fe4 Improved touch detection and position reliability 2017-10-25 01:41:01 +01:00
Bodmer e4ea506b65 Update touch, add Button class
Touch reliability improved by using pressure and double sampling. Added
Adafruit compatible Button class. Added touchscreen on/off and keypad
examples.
2017-10-23 01:59:37 +01:00
Bodmer 5591c6bae0 Change to always use mutex handling with ESP32
Grabbing the mutex for exclusive SPI access by the TFT library causes a
crash when OTA updates are done. Always switching the hal mutex is only
marginally slower so that is now the default.
2017-10-20 18:05:21 +01:00
Max 548fcca258 now calibration works with all orientations. 2017-10-01 21:34:11 +02:00
Max 8813ed35b1 should add esp32 support. have no hardware to test. 2017-10-01 00:56:05 +02:00
Max 944e505f36 Add XPT2046 touch controller support
supports esp8266 + RPi displays
2017-10-01 00:32:30 +02:00
Bodmer 6b794e1eb3 Add SPI overlap support Issue #26
Note, must use latest ESP board package with support for the overlap
mode
2017-07-15 18:44:49 +01:00
Bodmer bacd198832 Free font bounding box correction
1 pixel correctio for background bounding box determination
2017-07-07 23:52:01 +01:00
Bodmer cbc8d209a3 Remove 1 pixel border on FreeFont background
This caused problems when the font is rendered at screen edges.
2017-06-16 19:05:12 +01:00
Bodmer 49340b3952 Add RPi display support for ESP32 2017-06-16 15:17:28 +01:00
Bodmer d9694ef50d Correct textwrap limit (Issue #18) 2017-05-22 23:43:26 +01:00
Bodmer a2ab44f106 Revert "Corrext teztwrap limit (Issue #18)"
This reverts commit 4230f6bc30.
2017-05-22 23:41:56 +01:00
Bodmer 4230f6bc30 Corrext teztwrap limit (Issue #18) 2017-05-22 23:41:32 +01:00
Bodmer c52db6bf59 Add ESP32 compatibility
Tested with ILI9341 only so far!
2017-05-20 01:37:58 +01:00
Bodmer bd37f9a8de Make byte pointers explicit 2017-05-01 23:42:17 +01:00
Bodmer 8e996c0257 Minor bug fixes plus faster block write function added 2017-04-23 18:50:53 +01:00
Bodmer c2dcf25cc1 Add support for ST7735 128x128 display
May not cater for 128x128 ST7735 displays with different RGB and offset
configurations.
2017-04-16 16:13:12 +01:00
Bodmer 6526e34e7c Work around for D4 IDE bug
A condition can exist where pin D4 is allocated a value of 0
The workaround is to define and use pin numbers in the PIN_Dx format
2017-04-14 15:45:40 +01:00
Bodmer d31cbc3dbd Format and code tidy - fixes for compatibility issues 2017-04-14 01:04:04 +01:00
Bodmer e65f4cb1fe Rename swap() to avoid clashes
Increment version
2017-04-13 00:20:19 +01:00
Bodmer c5fafdd71c Minor performance tweaks
Plus code tidy and typo corrections
2017-03-28 23:56:54 +01:00
Bodmer 0f5c2dcdf6 Fix \ to / again!
\ upsets Linux in file paths
2017-03-28 23:12:44 +01:00
Bodmer d3d877c8e2 Add RPi display support for write strobe mod 2017-03-27 02:15:30 +01:00
Bodmer 4f8029b096 Added support for RPi TFT
16 bit serial based ILI9486 supported
2017-03-24 23:23:35 +00:00
Bodmer 20c9086853 Add support for ST7735 128x128 TFT 2017-03-17 00:03:35 +00:00
Bodmer 4f857c43fd init reg 2017-03-14 09:51:44 +00:00
Bodmer 0fe1acf6cb Allow MISO (D6) to be used as DC or CS pin 2017-03-12 03:31:51 +00:00
Bodmer c2cf07db1e Tweak padding
Allows for negative x offsets in fonts
2017-03-12 01:16:07 +00:00
Bodmer a427626cfc Weed out legacy variables, add readAddrWindow()
readAddrWindow is a private function to support pixel and block reads of
the TFT screen. Tested on ILI9341.
2017-03-11 16:59:34 +00:00
Bodmer 05a9aee260 Permit D6 (MISO) to be used for DC to save on pins
Using D6 (MISO) for the DC line is not recommended as transaction support and TFT reads may cause it to become and input!
However if a hardware setup has no other pins spare, then this is an option that can be tried.
2017-03-11 16:38:29 +00:00
Bodmer cd356bb6c5 Add S6D02A1 and ILI9163 driver code 2017-02-26 03:03:47 +00:00
Bodmer e1b2959577 First draft release
Not yet fully tested but seems to work OK!
2017-02-22 03:07:17 +00:00