Skip to content

Commit 2eb6f51

Browse files
version 2.6.0, see changelog for details
1 parent 43eda35 commit 2eb6f51

32 files changed

Lines changed: 2749 additions & 269 deletions

File tree

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
stuff/
2+
.vscode/
23
bin/
34
build/
4-
display-cppcheck-build-dir/
55
examples/Bin
66
examples/Build
7+
display-cppcheck-build-dir/
78
display.cppcheck
89
geany_test_project
910
display_RPI_geany.geany

README.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,13 @@ Open a Terminal in a folder where you want to download,build & test library
5555
Run following command to download latest release from github.
5656

5757
```sh
58-
curl -sL https://github.com/gavinlyonsrepo/Display_Lib_RPI/archive/2.5.0.tar.gz | tar xz
58+
curl -sL https://github.com/gavinlyonsrepo/Display_Lib_RPI/archive/2.6.0.tar.gz | tar xz
5959
```
6060

6161
3. Install library : Run 'make' and 'sudo make install' to run the makefile to build and then install library. It will be installed to usr/local/lib and usr/local/include by default.
6262

6363
```sh
64-
cd Display_Lib_RPI-2.5.0
64+
cd Display_Lib_RPI-2.6.0
6565
make
6666
sudo make install
6767
```
@@ -94,11 +94,13 @@ make run
9494
| ST7735 | 16 bit Colour Graphic TFT LCD | SPI HW & SW | [Readme](extra/doc/st7735/README.md) |
9595
| GC9A01A | 16 bit Colour Graphic TFT LCD | SPI HW & SW | [Readme](extra/doc/gc9a01a/README.md) |
9696
| GC9D01N | 16 bit Colour Graphic TFT LCD | SPI HW & SW | [Readme](extra/doc/gc9d01n/README.md) |
97+
| GC9107 | 16 bit Colour Graphic TFT LCD | SPI HW & SW | [Readme](extra/doc/gc9107/README.md) |
9798
| SSD1331 | 16 bit Colour Graphic OLED | SPI HW & SW | [Readme](extra/doc/ssd1331/README.md) |
9899
| ERM19264 UC1609 | Bi colour Graphic LCD | SPI HW & SW | [Readme](extra/doc/erm19264/README.md) |
99100
| PCD8544 | Bi colour Graphic LCD | SPI HW & SW | [Readme](extra/doc/nokia5110/README.md) |
100101
| ERM1 CH1115 | Bi colour Graphic OLED | SPI HW & SW | [Readme](extra/doc/ch1115/README.md) |
101102
| SSD1306 | Bi colour Graphic OLED | I2C | [Readme](extra/doc/ssd1306/README.md) |
103+
| SSD1315 | Bi colour Graphic OLED | I2C | [Readme](extra/doc/ssd1315/README.md) |
102104
| SH1106 SH1107 | Bi colour Graphic OLED | I2C | [Readme](extra/doc/sh110x/README.md) |
103105
| HD44780 PCF8574 | Character LCD | I2C | [Readme](extra/doc/hd44780/README.md) |
104106
| TM1638 | LED 7 segment display | GPIO | [Readme](extra/doc/tm1638/README.md) |
@@ -133,7 +135,7 @@ Library naming :
133135
2. Linker flags for complier = -lrpidisplaygl (also needs -llgpio for lgpio library)
134136
3. Library File suffix = RDL
135137
4. Project name = Display_Lib_RPI
136-
5. Installed size = ~500 KiB.
138+
5. Installed size = ~700 KiB.
137139
6. Namespaces see API.documentation.
138140

139141
Project class overview :
@@ -151,8 +153,8 @@ is in the 'doc' folder [at link.](extra/doc/error_codes/README.md)
151153
Development Tool chain:
152154

153155
1. Raspberry PI 5 & Raspberry PI 3 model b
154-
2. C++, g++ (Debian 12.2.0)
155-
3. Raspbian , Debian 12 bookworm OS, 64 bit.
156+
2. C++ 23, g++ (Debian 14.2.0-19) 14.2.0
157+
3. Raspbian , Debian 12 bookworm OS, 64 bit , Debian 13 Trixie OS, 64 bit.
156158
4. lgpio library Version Number :: 131584
157159
5. Also tested on a raspberry pi 4 see issue number 2 on github.
158160

examples/Makefile

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,19 @@
1010
# Display 3 = TM1637
1111
# Display 4 = HD44780 LCD I2C
1212
# Display 5 = SSD1306 OLED I2C
13-
# Display 6 = ERM19264 LCD SPI
14-
# Display 7 = NOKIA5110 LCD SPI
15-
# Display 8 = CH1115 OLED I2C
16-
# Display 9 = SH1106 OLED I2C
17-
# Display 10 = SH1107 OLED I2C
18-
# Display 11 = ST7735X TFT LCD SPI
19-
# Display 12 = ST7789 TFT LCD SPI
20-
# Display 13 = ILI9341 TFT LCD SPI
21-
# Display 14 = SSD1331 OLED SPI
22-
# Display 15 = GC9A01A TFT LCD SPI
23-
# Display 16 = GC9D01N TFT LCD SPI
13+
# Display 6 = SSD1315 OLED I2C
14+
# Display 7 = ERM19264 LCD SPI
15+
# Display 8 = NOKIA5110 LCD SPI
16+
# Display 9 = CH1115 OLED I2C
17+
# Display 10 = SH1106 OLED I2C
18+
# Display 11 = SH1107 OLED I2C
19+
# Display 12 = ST7735X TFT LCD SPI
20+
# Display 13 = ST7789 TFT LCD SPI
21+
# Display 14 = ILI9341 TFT LCD SPI
22+
# Display 15 = SSD1331 OLED SPI
23+
# Display 16 = GC9A01A TFT LCD SPI
24+
# Display 17 = GC9D01N TFT LCD SPI
25+
# Display 18 = GC9107 TFT LCD SPI
2426
# ==================================
2527

2628
# ***********************************************
@@ -65,6 +67,10 @@
6567
#SRC=ssd1306/clock_demo
6668
#=================================================
6769

70+
# ================= SSD1315 OLED I2C =============
71+
#SRC=ssd1315/hello_world
72+
#=================================================
73+
6874
# ========== ERM19264_UC1609 LCD SPI==============
6975
#SRC=erm19264/hello_world
7076
#SRC=erm19264/text_graphics_functions
@@ -138,6 +144,11 @@
138144
#SRC=gc9d01/demos
139145
#=================================================
140146

147+
# =============== GC9107 TFT LCD SPI ============
148+
#SRC=gc9107/hello_world
149+
#SRC=gc9107/tests
150+
#=================================================
151+
141152
# =========== XPT2046 touchscreen basic test =====
142153
#SRC=xpt2046/xpt_test
143154
#=================================================
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
/*!
2+
@file examples/gc9107/hello_world/main.cpp
3+
@brief Hello World: hardware or software SPI test
4+
@author Gavin Lyons.
5+
@details
6+
See USER OPTIONS in SETUP function.
7+
To switch between Hardware and software SPI
8+
set ''HardwareSPI'' in ''Globals''.
9+
Prints Hello, at 0 degrees,
10+
Prints World! at 90 degrees.
11+
@test
12+
-# 101 Hello World Hardware SPI
13+
-# 102 Hello World Software SPI
14+
*/
15+
16+
// Section :: libraries
17+
#include <iostream>
18+
#include "GC9107_TFT_LCD_RDL.hpp"
19+
20+
/// @cond
21+
22+
// Section :: Globals
23+
bool HardwareSPI = true; // Hardware SPI = true, software SPI = false
24+
GC9107_TFT myTFT;
25+
26+
// Section :: Function Headers
27+
uint8_t SetupHWSPI(void); // setup + user options for hardware SPI
28+
uint8_t SetupSWSPI(void); // setup + user options for software SPI
29+
void HelloWorld(void);
30+
void EndTests(void);
31+
32+
// Section :: MAIN loop
33+
int main()
34+
{
35+
std::cout << "GC9107 library version : " << rdlib::LibraryVersion() << std::endl;
36+
std::cout << "Lgpio library version :" << lguVersion() << std::endl;
37+
if (HardwareSPI == true)
38+
{ // Hardware SPI
39+
if (SetupHWSPI() != 0)
40+
{
41+
return -1;
42+
}
43+
}
44+
else
45+
{ // Software SPI
46+
if (SetupSWSPI() != 0)
47+
{
48+
return -1;
49+
}
50+
}
51+
HelloWorld();
52+
EndTests();
53+
return 0;
54+
}
55+
// *** End OF MAIN **
56+
57+
// Section :: Function Space
58+
// Hardware SPI setup
59+
uint8_t SetupHWSPI(void)
60+
{
61+
std::cout << "TFT Start Test 101 HWSPI" << std::endl;
62+
int8_t RST_TFT = 25;
63+
int8_t DC_TFT = 24;
64+
int GPIO_CHIP_DEVICE = 0; // GPIO chip device number usually 0
65+
int HWSPI_DEVICE = 0; // A SPI device, >= 0. which SPI interface to use
66+
int HWSPI_CHANNEL = 0; // A SPI channel, >= 0. Which Chip enable pin to use
67+
int HWSPI_SPEED = 8000000; // The speed of serial communication in bits per second.
68+
int HWSPI_FLAGS = 0; // last 2 LSB bits define SPI mode, see readme, mode 0 for this device
69+
// Size of Display (note 60x160 display has VRAM of 128x160)
70+
uint16_t TFT_WIDTH = 60; // width size in pixels
71+
uint16_t TFT_HEIGHT = 160; // height size in pixels
72+
uint8_t X_Offset = 34; // X offset
73+
uint8_t Y_Offset = 0; // Y offset
74+
// GRAM memory base mapping resolution, see GC9107_LTSM::GM_memory_base_e enum
75+
GC9107_TFT::GM_memory_base_e TFTmemoryBase = GC9107_TFT::GM_memory_base_e::MEMORY_BASE_GM_128x160;
76+
77+
// ** USER OPTION 0 GPIO **
78+
myTFT.TFTSetupGPIO(RST_TFT, DC_TFT);
79+
80+
// *** USER OPTION 1 Screen Setup ***
81+
myTFT.TFTInitScreen(TFT_WIDTH, TFT_HEIGHT, TFTmemoryBase, GC9107_TFT::MADCTL_FLAGS_t::RGB);
82+
83+
// *** USER OPTION 2 Screen offsets***
84+
myTFT.TFTsetPanelOffset(X_Offset, Y_Offset);
85+
86+
// ** USER OPTION 3 SPI settings **
87+
if (myTFT.TFTInitSPI(HWSPI_DEVICE, HWSPI_CHANNEL, HWSPI_SPEED, HWSPI_FLAGS, GPIO_CHIP_DEVICE) != rdlib::Success)
88+
{
89+
return 3;
90+
}
91+
92+
delayMilliSecRDL(100);
93+
return 0;
94+
}
95+
96+
// Software SPI setup
97+
uint8_t SetupSWSPI(void)
98+
{
99+
std::cout << "Start Test 102 SWSPI" << std::endl;
100+
int8_t RST_TFT = 25;
101+
int8_t DC_TFT = 24;
102+
int8_t SCLK_TFT = 20;
103+
int8_t SDIN_TFT = 16;
104+
int8_t CS_TFT = 21;
105+
int GPIO_CHIP_DEVICE = 0;
106+
uint16_t SWSPI_CommDelay = 0; // uS GPIO SW SPI delay
107+
// Size of Display (note 60x160 display has VRAM of 128x160)
108+
uint16_t TFT_WIDTH = 60; // width size in pixels
109+
uint16_t TFT_HEIGHT = 160; // height size in pixels
110+
uint8_t X_Offset = 34; // X offset
111+
uint8_t Y_Offset = 0; // Y offset
112+
// GRAM memory base mapping resolution, see GC9107_LTSM::GM_memory_base_e enum
113+
GC9107_TFT::GM_memory_base_e TFTmemoryBase = GC9107_TFT::GM_memory_base_e::MEMORY_BASE_GM_128x160;
114+
115+
// ** USER OPTION 0 GPIO **
116+
myTFT.TFTSetupGPIO(RST_TFT, DC_TFT, CS_TFT, SCLK_TFT, SDIN_TFT);
117+
118+
// *** USER OPTION 1 Screen Setup ***
119+
myTFT.TFTInitScreen(TFT_WIDTH, TFT_HEIGHT, TFTmemoryBase, GC9107_TFT::MADCTL_FLAGS_t::RGB);
120+
121+
// *** USER OPTION 2 Screen offset ***
122+
myTFT.TFTsetPanelOffset(X_Offset, Y_Offset);
123+
124+
// ** USER OPTION 3 SPI settings **
125+
if (myTFT.TFTInitSPI(SWSPI_CommDelay, GPIO_CHIP_DEVICE) != rdlib::Success)
126+
{
127+
return 3;
128+
}
129+
std::cout << "SWSPI Comm GPIO Delay set to : " << myTFT.HighFreqDelayGet() << "uS" << std::endl;
130+
131+
delayMilliSecRDL(100);
132+
return 0;
133+
}
134+
135+
void HelloWorld(void)
136+
{
137+
std::cout << "Hello, World!" << std::endl;
138+
myTFT.TFTsetRotation(myTFT.Degrees_0);
139+
myTFT.fillScreen(myTFT.RDLC_BLACK);
140+
141+
myTFT.setCursor(0, 0);
142+
myTFT.setTextColor(myTFT.RDLC_GREEN, myTFT.RDLC_BLACK);
143+
myTFT.setFont(font_default);
144+
145+
myTFT.print("Hello, ");
146+
delayMilliSecRDL(5000);
147+
148+
myTFT.TFTsetRotation(myTFT.Degrees_90);
149+
myTFT.fillScreen(myTFT.RDLC_BLACK);
150+
151+
myTFT.print("World!");
152+
delayMilliSecRDL(5000);
153+
}
154+
155+
void EndTests(void)
156+
{
157+
myTFT.fillScreen(myTFT.RDLC_BLACK);
158+
delayMilliSecRDL(500);
159+
myTFT.TFTPowerDown(); // Power down device
160+
std::cout << "End" << std::endl;
161+
}
162+
163+
/// @endcond

0 commit comments

Comments
 (0)