![]() |
Display_Lib_RPI 2.3.0
A C++ Library to connect electronic displays to Linux single board computers.
|
class to control OLED and define buffer More...
#include <SH110X_OLED_RDL.hpp>
Public Types | |
enum | OLED_IC_type_e : uint8_t { SH1106_IC = 0 , SH1107_IC =1 } |
![]() | |
enum | displayBC_rotate_e : uint8_t { BC_Degrees_0 = 0 , BC_Degrees_90 = 1 , BC_Degrees_180 = 2 , BC_Degrees_270 = 3 } |
enum | pixel_color_e : uint8_t { WHITE = 0 , BLACK = 1 , INVERSE = 2 } |
![]() | |
enum | BaseNum : uint8_t { RDL_DEC = 10 , RDL_HEX = 16 , RDL_OCT = 8 , RDL_BIN = 2 } |
Public Member Functions | |
SH110X_RDL (int16_t oledwidth, int16_t oledheight) | |
init the screen object | |
virtual void | drawPixel (int16_t x, int16_t y, uint8_t color) override |
Draws a Pixel to the screen overrides the graphics lib. | |
rdlib::Return_Codes_e | OLEDSetBufferPtr (uint8_t width, uint8_t height, std::span< uint8_t > buffer) |
sets the buffer pointer to the users screen data buffer | |
rdlib::Return_Codes_e | OLEDupdate (void) |
updates the buffer i.e. writes it to the screen | |
rdlib::Return_Codes_e | OLEDclearBuffer (void) |
clears the buffer memory i.e. does NOT write to the screen | |
void | OLEDBufferScreen (uint8_t w, uint8_t h, std::span< uint8_t > buffer) |
Draw the buffer to screen directly to the screen. | |
void | OLEDFillScreen (uint8_t pixel, uint8_t mircodelay) |
Fill the screen NOT the buffer with a datapattern. | |
void | OLEDFillPage (uint8_t page_num, uint8_t pixels, uint8_t delay) |
Fill the chosen page with a data pattern. | |
rdlib::Return_Codes_e | OLEDbegin (OLED_IC_type_e=SH1106_IC, int8_t ResetPin=-1, int gpioDev=0) |
begin Method initialise OLED | |
void | OLEDinit (void) |
Called from OLEDbegin carries out Power on sequence and register init. | |
void | OLEDPowerDown (void) |
Disables OLED Call when powering down. | |
void | OLEDReset (void) |
Handles OLED reset, if reset pin present on device. | |
void | OLEDEnable (uint8_t on) |
Turns On Display. | |
void | OLEDContrast (uint8_t OLEDcontrast) |
Adjusts contrast. | |
void | OLEDInvert (bool on) |
invert the display | |
rdlib::Return_Codes_e | OLED_I2C_ON (int I2C_device, int I2C_addr, int I2C_flags) |
Start I2C operations. | |
rdlib::Return_Codes_e | OLED_I2C_OFF (void) |
End I2C operations. This closes the I2C device. | |
int | OLEDCheckConnection (void) |
checks if OLED on I2C bus | |
uint8_t | OLEDI2CErrorGet (void) |
get I2C error Flag | |
uint16_t | OLEDI2CErrorTimeoutGet (void) |
Gets the I2C timeout, used in the event of an I2C write error. | |
void | OLEDI2CErrorTimeoutSet (uint16_t) |
Sets the I2C timeout, in the event of an I2C write error. | |
uint8_t | OLEDI2CErrorRetryNumGet (void) |
Gets the I2C error retry attempts, used in the event of an I2C write error. | |
void | OLEDI2CErrorRetryNumSet (uint8_t) |
Sets the I2C error retry attempts used in the event of an I2C write error. | |
![]() | |
bicolor_graphics (int16_t w, int16_t h) | |
init the Display Graphics class object | |
rdlib::Return_Codes_e | drawDotGrid (int16_t x, int16_t y, int16_t w, int16_t h, uint8_t DotGridGap, uint8_t color) |
Draws a grid of dots on the screen starting from the given coordinates. This function draws a grid of pixels with a specified gap between them. It checks that the provided coordinates and dimensions are within the screen bounds and adjusts them if necessary. It also validates The grid of dots gap value and defaults it to 2 if invalid. | |
void | drawLine (int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint8_t color) |
draws a line from (x0,y0) to (x1,y1). | |
rdlib::Return_Codes_e | drawFastVLine (int16_t x, int16_t y, int16_t h, uint8_t color) |
Draws a vertical line starting at (x,y) with height h. | |
rdlib::Return_Codes_e | drawFastHLine (int16_t x, int16_t y, int16_t w, uint8_t color) |
Draws a horizontal line starting at (x,y) with width w. | |
void | drawLineAngle (int16_t x, int16_t y, int angle, uint8_t start, uint8_t length, int offset, uint8_t color) |
Draws a line using an angle and length as parameters. This function draws a line starting from (x, y) , extending in the direction specified by angle , with a given length . The function also allows applying an offset to the angle before computing the line’s end coordinates. | |
void | drawRect (int16_t x, int16_t y, int16_t w, int16_t h, uint8_t color) |
draws rectangle at (x,y) where h is height and w is width of the rectangle. | |
void | fillRect (int16_t x, int16_t y, int16_t w, int16_t h, uint8_t color) |
fills a rectangle starting from coordinates (x,y) with width of w and height of h. | |
void | fillScreen (uint8_t color) |
Fills the whole screen with a given color. | |
void | drawCircle (int16_t x0, int16_t y0, int16_t r, uint8_t color) |
draws a circle where (x0,y0) are center coordinates an r is circle radius. | |
void | fillCircle (int16_t x0, int16_t y0, int16_t r, uint8_t color) |
fills a circle where (x0,y0) are center coordinates an r is circle radius. | |
void | drawEllipse (int16_t cx, int16_t cy, int16_t semiMajorAxis, int16_t semiMinorAxis, bool fill, uint8_t color) |
Draw an ellipse on the display. This function uses the midpoint ellipse algorithm to efficiently draw an ellipse centered at (cx, cy) with the given semi-major (horizontal) and semi-minor (vertical) axes. | |
void | drawTriangle (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint8_t color) |
draws a triangle of coordinates (x0,y0), (x1,y1) and (x2,y2). | |
void | fillTriangle (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint8_t color) |
Fills a triangle of coordinates (x0,y0), (x1,y1) and (x2,y2). | |
void | drawRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint8_t color) |
draws a rectangle with rounded edges | |
void | fillRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint8_t color) |
Fills a rectangle with rounded edges. | |
void | drawQuadrilateral (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, int16_t x3, int16_t y3, uint8_t color) |
Draws a quadrilateral (four-sided polygon) by connecting four points with lines. This function draws a quadrilateral by drawing four lines between the given vertices. The lines are drawn in the order: (x0, y0) to (x1, y1), (x1, y1) to (x2, y2), (x2, y2) to (x3, y3), and finally (x3, y3) back to (x0, y0). | |
void | fillQuadrilateral (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, int16_t x3, int16_t y3, uint8_t color, bool useTriangleSplit=true) |
Fills a quadrilateral with the specified color using triangles. This function fills a quadrilateral by dividing it into triangles and filling them individually. The quadrilateral is filled by calling the fillTriangle function three times with appropriate vertex coordinates. The useTriangleSplit parameter determines whether the quadrilateral is divided into two triangles or if only one triangle is used. | |
rdlib::Return_Codes_e | drawPolygon (int16_t x, int16_t y, uint8_t sides, int16_t diameter, float rotation, bool fill, uint8_t color) |
Draws a polygon with a specified number of sides, diameter, rotation, and color. This function draws a regular polygon by connecting points equally spaced around a circle, with each point having a distance defined by the diameter. The polygon is rotated by the given angle (in degrees) before being drawn. The number of sides is enforced to be at least 3. | |
void | drawArc (uint16_t cx, uint16_t cy, uint16_t radius, uint16_t thickness, float startAngle, float endAngle, uint8_t color) |
Draw an arc on the TFT display. This function draws an arc between two angles (start and end) on a circle with a given radius. | |
void | drawSimpleArc (int16_t cx, int16_t cy, int16_t radius, float startAngle, float endAngle, uint8_t color) |
Draw a simple arc of one pixel on the display( no offsets , thickness or maximum arc calculations) This function draws an arc between two angles (start and end) on a circle with a given radius. | |
float | getArcAngleMax () const |
Get the current maximum angle of the arc. | |
void | setArcAngleMax (float arcAngleMax) |
Set a new maximum angle for the arc. | |
int | getArcAngleOffset () const |
Get the current angle offset. | |
void | setArcAngleOffset (int arcAngleOffset) |
Set a new angle offset. | |
void | setCursor (int16_t x, int16_t y) |
set the cursor position | |
void | setRotation (displayBC_rotate_e m) |
Sets the _rotation of the display. | |
displayBC_rotate_e | getRotation () |
Gets the _rotation of the display. | |
int16_t | height (void) const |
Gets the height of the display (per current _rotation) | |
int16_t | width (void) const |
Gets the width of the display (per current _rotation) | |
virtual size_t | write (uint8_t) override |
write method used in the print class when user calls print | |
rdlib::Return_Codes_e | writeChar (int16_t x, int16_t y, char value) |
Write 1 character on display. | |
rdlib::Return_Codes_e | writeCharString (int16_t x, int16_t y, char *text) |
Write Text character array on Display. | |
void | setTextWrap (bool w) |
turn on or off screen wrap of the text | |
void | setDrawBitmapAddr (bool mode) |
sets the data addressing mode in drawBitmap function. | |
rdlib::Return_Codes_e | drawBitmap (int16_t x, int16_t y, const std::span< const uint8_t > bitmap, int16_t w, int16_t h, uint8_t color, uint8_t bg) |
Draw a 1-bit color bitmap. | |
![]() | |
display_Fonts () | |
init the OLED font class object constructor | |
rdlib::Return_Codes_e | setFont (display_Font_name_e) |
SetFont. | |
void | setInvertFont (bool invertStatus) |
setInvertFont | |
bool | getInvertFont (void) |
getInvertFont | |
![]() | |
int | getWriteError () |
gets the error flag status, zero no error | |
void | clearWriteError () |
clears the error flag by setting it to zero | |
virtual size_t | write (const uint8_t *buffer, size_t size) |
define in the sub class | |
size_t | write (const char *str) |
Writes a string to the output. | |
size_t | write (const char *buffer, size_t size) |
Writes a buffer of a specified size to the output. | |
virtual int | availableForWrite () |
define in the sub class | |
size_t | print (const char[]) |
print an array | |
size_t | print (char) |
print an character | |
size_t | print (int, int=RDL_DEC) |
print an integer of base number system | |
size_t | print (unsigned int, int=RDL_DEC) |
print an unsigned integer of base number system | |
size_t | print (long, int=RDL_DEC) |
print an long integer of base number system | |
size_t | print (unsigned long, int=RDL_DEC) |
print an unsigned long integer of base number system | |
size_t | print (double, int=2) |
print an double | |
size_t | print (const std::string &) |
print an C++ string object | |
size_t | println (const char[]) |
Prints a character array followed by a newline. | |
size_t | println (char) |
print an character followed by new line | |
size_t | println (int, int=RDL_DEC) |
print an integer of base number system followed by new line | |
size_t | println (unsigned int, int=RDL_DEC) |
print an unsigned integer of base number system followed by new line | |
size_t | println (long, int=RDL_DEC) |
print an long integer of base number system followed by new line | |
size_t | println (unsigned long, int=RDL_DEC) |
print an unsigned long integer of base number system followed by new line | |
size_t | println (double, int=2) |
print an double | |
size_t | println (void) |
Goto to new line. | |
size_t | println (const std::string &s) |
print an C++ string object followed by new line | |
template<typename T > | |
size_t | print (const std::vector< T > &v, int format=defaultFormat< T >()) |
Print a vector of any type. | |
template<typename T > | |
size_t | println (const std::vector< T > &vec, int format=defaultFormat< T >()) |
Print a vector of elements followed by a newline. | |
template<typename T , size_t N> | |
size_t | print (const std::array< T, N > &arr, int format=defaultFormat< T >()) |
Print a std::array of any type. | |
template<typename T , size_t N> | |
size_t | println (const std::array< T, N > &arr, int format=defaultFormat< T >()) |
Print a std::array of elements followed by a newline. | |
Public Attributes | |
const uint8_t | SH110X_RDL_ADDR = 0x3C |
Protected Attributes | |
uint8_t | pageStartOffset = 0 |
![]() | |
displayBC_rotate_e | _display_rotate = BC_Degrees_0 |
const int16_t | WIDTH |
const int16_t | HEIGHT |
int16_t | _width |
int16_t | _height |
int16_t | _cursor_x |
int16_t | _cursor_y |
float | _arcAngleMax = 360.0f |
int | _arcAngleOffset = 0 |
bool | _textwrap = true |
![]() | |
std::span< const uint8_t > | _FontSelect = pFontDefault |
uint8_t | _Font_X_Size = 0x08 |
uint8_t | _Font_Y_Size = 0x08 |
uint8_t | _FontOffset = 0x20 |
uint8_t | _FontNumChars = 0x5F |
Private Member Functions | |
void | I2CWriteByte (uint8_t value=0x00, uint8_t DataOrCmd=SH110X_COMMAND_BYTE) |
Writes a byte to I2C address,command or data, used internally. | |
void | SH1106_begin (void) |
Init routine for SH1106 OLED. | |
void | SH1107_begin (void) |
Init routine for SH1107 OLED. | |
Private Attributes | |
int | _OLEDI2CAddress = SH110X_RDL_ADDR |
int | _OLEDI2CDevice = 1 |
int | _OLEDI2CFlags = 0 |
int | _OLEDI2CHandle = 0 |
uint16_t | _I2C_ErrorDelay = 100 |
uint8_t | _I2C_ErrorRetryNum = 3 |
int | _I2C_ErrorFlag = 0 |
uint8_t | _OLED_WIDTH =128 |
uint8_t | _OLED_HEIGHT =64 |
uint8_t | _OLED_PAGE_NUM =(_OLED_HEIGHT/8) |
std::span< uint8_t > | _OLEDbuffer |
OLED_IC_type_e | _OLED_IC_type = SH1106_IC |
int8_t | _Display_RST = -1 |
int | _DeviceNumGpioChip = 0 |
int | _GpioHandle = 0 |
Additional Inherited Members | |
![]() | |
void | setWriteError (int err=0) |
class to control OLED and define buffer
init the screen object
oledwidth | width of OLED in pixels |
oledheight | height of OLED in pixels |
Draws a Pixel to the screen overrides the graphics lib.
x | x axis position |
y | y axis position |
color | color of pixel. |
Implements bicolor_graphics.
|
private |
Writes a byte to I2C address,command or data, used internally.
value | write the value to be written |
cmd | command or data |
rdlib::Return_Codes_e SH110X_RDL::OLED_I2C_OFF | ( | void | ) |
End I2C operations. This closes the I2C device.
rdlib::Return_Codes_e SH110X_RDL::OLED_I2C_ON | ( | int | I2C_device, |
int | I2C_addr, | ||
int | I2C_flags | ||
) |
Start I2C operations.
I2C_device | An I2C device number. |
I2C_addr | The address of a device on the I2C bus. Default is 0x3C |
I2C_flags | Flags which modify an I2C open command. None are currently defined. |
rdlib::Return_Codes_e SH110X_RDL::OLEDbegin | ( | OLED_IC_type_e | OLEDtype = SH1106_IC , |
int8_t | resetPin = -1 , |
||
int | gpioDev = 0 |
||
) |
begin Method initialise OLED
OLEDtype | enum type of display sh1106 or sh1107 |
resetPin | Used only if reset pin present on device, iF not = set to -1 |
gpioDev | device num gpiochip Used only rst pin on device |
Draw the buffer to screen directly to the screen.
w | width |
h | height |
data | the buffer data |
checks if OLED on I2C bus
rdlib::Return_Codes_e SH110X_RDL::OLEDclearBuffer | ( | void | ) |
clears the buffer memory i.e. does NOT write to the screen
Adjusts contrast.
contrast | 0x00 to 0xFF , default 0x80 |
Fill the chosen page with a data pattern.
page_num | chosen page (1-X) |
dataPattern | can be set to 0 to FF (not buffer) |
mydelay | optional delay in milliseconds can be set to zero normally. |
Fill the screen NOT the buffer with a datapattern.
dataPattern | can be set to zero to clear screen (not buffer) range 0x00 to 0ff |
delay | in milliseconds can be set to zero normally. |
get I2C error Flag
See Error Codes at bottom of https://abyz.me.uk/lg/lgpio.html
Gets the I2C error retry attempts, used in the event of an I2C write error.
Number of times to retry in event of an error
Sets the I2C error retry attempts used in the event of an I2C write error.
Number of times to retry in event of an error
AttemptCount | I2C retry attempts |
Gets the I2C timeout, used in the event of an I2C write error.
Delay between retry attempts in event of an error , mS
Sets the I2C timeout, in the event of an I2C write error.
newTimeout | I2C timeout delay in mS |
Delay between retry attempts in event of an error , mS
invert the display
value | true invert , false normal |
Handles OLED reset, if reset pin present on device.
< reset delay in miliseconds
rdlib::Return_Codes_e SH110X_RDL::OLEDSetBufferPtr | ( | uint8_t | width, |
uint8_t | height, | ||
std::span< uint8_t > | buffer | ||
) |
sets the buffer pointer to the users screen data buffer
width | width of buffer in pixels |
height | height of buffer in pixels |
buffer | the buffer span |
rdlib::Return_Codes_e SH110X_RDL::OLEDupdate | ( | void | ) |
updates the buffer i.e. writes it to the screen
Init routine for SH1106 OLED.
< Initialisation delay in mS
Init routine for SH1107 OLED.
< Initialisation delay in mS
|
private |
The device number of a gpiochip ls /dev/gpio
|
private |
Reset pin only needed of reset pin is present on display
|
private |
This returns a handle to a device.
|
private |
I2C delay(in between retry attempts) in event of error in mS
|
private |
In event of I2C error holds lgpio error code
|
private |
In event of I2C error number of retry attempts
|
private |
Height of OLED Screen in pixels
|
private |
Enum to hold TFT type
|
private |
Number of byte size pages OLED screen is divided into
|
private |
Width of OLED Screen in pixels
|
private |
buffer which holds screen data
|
private |
I2C address for I2C module PCF8574 backpack on OLED
|
private |
An I2C device number.
|
private |
Flags which modify an I2C open command. None are currently defined.
|
private |
A number referencing an object opened by one of lgI2cOpen
|
protected |
the SH1106 display requires a small offset
Charge pump control register
Column address control register
Command byte command
Scan from COMN to COM0
Sets the scan direction of common output
Controls DC-DC voltage convertor
Set entire Display ON
Set entire Display OFF
Inverts Display, no rma rewrite
Memory mode control register
Normal Display, no ram rewrite
Page address control register
Set segment remap, left or right
Common signals pad configuration
Command to set contrast, 256 contrast steps
Set freq of internal clock
Mapping of start line to COM lines
Specify Column address to determine the initial display line or COM0.
Set higher column address
Set lower column address
Set multiplex ration
Specify page address to load display RAM data to page address
Duration of precharge period
Specifies line address to determine the initial display
Common pad output voltage level deselect stage