|
FabGL
ESP32 Display Controller and Graphics Library
|
This is a list of FabGL specific terminal sequences. These are used to get access to features like graphics/audio/etc not else available using standard escape sequences.
Specific sequences are also useful when you don't know which terminal emulation has been set and you still want to control screen using known escape sequences.
Specific sequences begin with an ESC (ASCII 27h, 0x1B) plus an underscore ("_", ASCII 90h, 0x5f). Follows the actual command which is composed by a single letter.
After the command letter it is possible to specify parameters (if required) separated by semicolons (";"). An ending dollar sign ($, ASCII 36h, 0x24) ends the escape sequence.
Some commands return a response sequence: this has a fixed length and starts with a dollar sign ($).
Setup Analog to Digital Converter (ADC)
Sequence:
ESC "_A" resolution ";" attenuation ";" gpio "$"
Parameters:
resolution:
"9", "10", "11", "12"
attenuation:
"0" = 0dB (reduced to 1/1), full-scale voltage 1.1 V, accurate between 100 and 950 mV
"1" = 2.5dB (reduced to 1/1.34), full-scale voltage 1.5 V, accurate between 100 and 1250 mV
"2" = 6dB (reduced to 1/2), full-scale voltage 2.2 V, accurate between 150 to 1750 mV
"3" = 11dB (reduced to 1/3.6), full-scale voltage 3.9 V (maximum volatage is still 3.3V!!), accurate between 150 to 2450 mV
gpio:
"32"..."39"
Example:
// setup GPIO number 36 as analog input, 11dB attenuation (3) and 12 bit resolution
Terminal.write("\e_A12;3;36$");
Read analog input (ADC) from specified gpio
Sequence:
ESC "_C" gpio "$"
Parameters:
gpio:
"32"..."39"
Returns:
"$"
hex value (3 characters)
Example:
// Request to read ADC from GPIO number 36
Terminal.write("\e_C36$"); // will return something like "$1A5" (value 421)
Setup digital pin for input or output
Sequence:
ESC "_D" mode gpio "$"
Parameters:
mode:
"-" = disable input/output
"I" = input only
"O" = output only
"D" = output only with open-drain
"E" = output and input with open-drain
"X" = output and input
gpio:
"0"..."39" (not all usable!)
Example:
// Setup gpio number 12 as output (O)
Terminal.write("\e_DO12$");
Set digital output pin state
Sequence:
ESC "_W" value gpio "$"
Parameters:
value:
0 or '0' or 'L' = low (and others)
1 or '1' or 'H' = high
gpio:
"0"..."39" (not all usable!)
Example:
// Set gpio 12 to High
Terminal.write("\e_WH12$");
// Set gpio 12 to Low
Terminal.write("\e_WL12$");
Read digital input pin state
Sequence:
ESC "_R" gpio "$"
Parameters:
gpio:
"0"..."39" (not all usable!)
Returns:
"$"
'0' = low, '1' = high
Example:
// Read state of gpio 12
Terminal.write("\e_R12$"); // you will get "$0" or "$1"
Clear terminal area with background color
Sequence:
ESC "_B" "$"
Example:
// Clear terminal area
Terminal.write("\e_B$");
Enable or disable cursor
Sequence:
ESC "_E" state "$"
Parameters:
state:
"0" = disable cursor
"1" = enable cursor
Example:
// Disable cursor
Terminal.write("\e_E0$");
Set cursor position
Sequence:
ESC "_F" column ";" row "$"
Parameters:
column:
column (1 = first column)
row:
row (1 = first row)
Example:
// Print "Hello" at column 1 of row 10
Terminal.write("\e_F1;10$");
Terminal.write("Hello");
Enable/disable mouse
Sequence:
ESC "_H" value "$"
Parameters:
value:
'0' (and others) = enable mouse
'1' = disable mouse
Example:
// Enable mouse
Terminal.write("\e_H1$");
Get mouse position
Sequence:
ESC "_M" "$"
Returns:
"$"
X position: 3 hex digits
";"
Y position: 3 hex digits
";"
Scroll wheel delta: 1 hex digit (0..F)
";"
Pressed buttons: 1 hex digit, composed as follow:
bit 1 = left button
bit 2 = middle button
bit 3 = right button
Example:
// Get mouse status
Terminal.write("\e_M$"); // you will get something like "$1AB;08A;0;1"
Delay milliseconds
Sequence:
ESC "_Y" value "$"
Parameters:
value:
number (milliseconds)
Returns:
"$": returns the dollar sign after specified number of milliseconds
Example:
// Get mouse status
Terminal.write("\e_Y500$"); // you will get "$" after 500 milliseconds
Play sound
Sequence:
ESC "_S" waveform ";" frequency ";" duration ";" volume "$"
Parameters:
waveform:
"0" = SINE
"1" = SQUARE
"2" = TRIANGLE
"3" = SAWTOOTH
"4" = NOISE
"5" = VIC NOISE
frequency:
frequency in Hertz
duration:
duration in milliseconds
volume:
volume (min is 0, max is 127)
Example:
// play Sine waveform at 800 Hz, for 1000ms at volume 100
Terminal.write("\e_S0;800;1000;100$");
Clear graphics screen with background color and reset scrolling region
Sequence:
ESC "_GCLEAR" "$"
Example:
// clear graphics screen, filling with dark blue
Terminal.write("\e_GBRUSH0;0;128$");
Terminal.write("\e_GCLEAR$");
Set brush color for graphics
Sequence:
ESC "_GBRUSH" red ";" green ";" blue "$"
Parameters:
red: '0'..'255'
green: '0'..'255'
blue: '0'..'255'
Example:
// set pure red (255,0,0) as background color for graphics
Terminal.write("\e_GBRUSH255;0;0$");
Set pen color for graphics
Sequence:
ESC "_GPEN" red ";" green ";" blue "$"
Parameters:
red: '0'..'255'
green: '0'..'255'
blue: '0'..'255'
Example:
// set yellow (255,255,0) as pen color for graphics
Terminal.write("\e_GPEN255;255;0$");
Set pen width
Sequence:
ESC "_GPENW" width "$"
Parameters:
width: pen width (from 1)
Example:
// set pen width to 2
Terminal.write("\e_GPENW2$");
Set specified pixel using pen color
Sequence:
ESC "_GPIXEL" X ";" Y "$"
Parameters:
X: horizontal coordinate
Y: vertical coordinate
Example:
// set pixel at 89, 31 to blue
Terminal.write("\e_GPEN0;0;255$"); // pen = blue
Terminal.write("\e_GPIXEL89;31$"); // draw pixel
Draw a line using pen color
Sequence:
ESC "_GLINE" X1 ";" Y1 ";" X2 ";" Y2 "$"
Parameters:
X1: starting horizontal coordinate
Y1: starting vertical coordinate
X2: ending horizontal coordinate
Y2: ending vertical coordinate
Example:
// draw a red line from 10, 10 to 150,150
Terminal.write("\e_GPEN255;0;0$"); // pen = red
Terminal.write("\e_GLINE10;10;150;150$"); // draw line
Draw a rectangle using pen color
Sequence:
ESC "_GRECT" X1 ";" Y1 ";" X2 ";" Y2 "$"
Parameters:
X1: starting horizontal coordinate
Y1: starting vertical coordinate
X2: ending horizontal coordinate
Y2: ending vertical coordinate
Example:
// draw a white rectangle from 10, 10 to 150,150
Terminal.write("\e_GPEN255;255;255$"); // pen = white
Terminal.write("\e_GRECT10;10;150;150$"); // draw rectangle
Fill a rectangle using brush color
Sequence:
ESC "_GFILLRECT" X1 ";" Y1 ";" X2 ";" Y2 "$"
Parameters:
X1: starting horizontal coordinate
Y1: starting vertical coordinate
X2: ending horizontal coordinate
Y2: ending vertical coordinate
Example:
// fill a yellow rectangle from 10, 10 to 150,150
Terminal.write("\e_GBRUSH255;255;0$"); // brush = yellow
Terminal.write("\e_GFILLRECT10;10;150;150$"); // fill rectangle
Draw an ellipse using pen color
Sequence:
ESC "_GELLIPSE" X ";" Y ";" width ";" height "$"
Parameters:
X: horizontal coordinate of ellipse center
Y: vertical coordinate of ellipse center
with: ellipse width
height: ellipse height
Example:
// draw a green ellipse at 100,120 with 50 horizontal size and 80 vertical size
Terminal.write("\e_GPEN0;255;0$"); // pen = green
Terminal.write("\e_GELLIPSE100;120;50;80$"); // draw ellipse
Fill an ellipse using brush color
Sequence:
ESC "_GFILLELLIPSE" X ";" Y ";" width ";" height "$"
Parameters:
X: horizontal coordinate of ellipse center
Y: vertical coordinate of ellipse center
with: ellipse width
height: ellipse height
Example:
// fill a red ellipse at 100,120 with 50 horizontal size and 80 vertical size
Terminal.write("\e_GBRUSH255;0;0$"); // brush = red
Terminal.write("\e_GFILLELLIPSE100;120;50;80$"); // fill ellipse
Draw a polygon (path) using pen color
Sequence:
ESC "_GPATH" X1 ";" Y1 ";" X2 ";" Y2 [";" Xn ";" Yn...] "$"
Parameters:
X1: first horizontal coordinate
Y1: first vertical coordinate
X2: second horizontal coordinate
Y2: second vertical coordinate
Xn: optional "n" horizontal coordinate
Yn: optional "n" vertical coordinate
Notes:
Maximum number of points is 32 (configurable in terminal.h)
Example:
// draw a red triangle at (5,5)-(12,18)-(6,16)
Terminal.write("\e_GPEN255;0;0$"); // pen = red
Terminal.write("\e_GPATH5;5;12;18;6;16$"); // draw path
Fill a polygon (path) using brush color
Sequence:
ESC "_GFILLPATH" X1 ";" Y1 ";" X2 ";" Y2 [";" Xn ";" Yn...] "$"
Parameters:
X1: first horizontal coordinate
Y1: first vertical coordinate
X2: second horizontal coordinate
Y2: second vertical coordinate
[Xn]: optional "n" horizontal coordinate
[Yn]: optional "n" vertical coordinate
Notes:
Maximum number of points is 32 (configurable in terminal.h)
Example:
// fill a green triangle at (5,5)-(12,18)-(6,16)
Terminal.write("\e_GBRUSH0;255;0$"); // brush = green
Terminal.write("\e_GFILLPATH5;5;12;18;6;16$"); // fill path
Set number of sprites to allocate
Sequence:
ESC "_GSPRITECOUNT" count "$"
Parameters:
count: number of sprites that will be defined by "_GSPRITEDEF"
Example:
// allocates two sprites
Terminal.write("\e_GSPRITECOUNT2$");
Add a bitmap to an allocated sprite
Sequence:
ESC "_GSPRITEDEF" spriteIndex ";" width ";" height ";" format ";" [R ";" G ";" B ";"] data... "$"
Parameters:
spriteIndex: sprite index (0...)
width: bitmap width
height: bitmap height
format:
"M" = bitmap format is monochrome (1 bit per pixel)
"2" = bitmap format is 64 colors (6 bits per pixel, 2 bits per channel with transparency)
"8" = bitmap format is true color (32 bits per pixel, 8 bits per channel with transparency)
[R]: red channel when bitmap format is monochrome
[G]: green channel when bitmap format is monochrome
[B]: blue channel when bitmap format is monochrome
data: bitmap data data as a sequence of 2 digits hex numbers (ie 002A3BFF2C...).
each bitmap row is always byte aligned
Example:
// allocates one sprite and assign a 8x4 monochrome bitmap, colored with red
Terminal.write("\e_GSPRITECOUNT1$");
Terminal.write("\e_GSPRITEDEF0;8;4;M;255;0;0;AABBCCDD$");
Set sprite visibility, position and current frame (bitmap)
Sequence:
ESC "_GSPRITESET" spriteIndex ";" visible ";" frameIndex ";" X ";" Y "$"
Parameters:
spriteIndex: sprite index (0...)
visible: "H" = hidden, "V" = visible
frameIndex: current frame (bitmap) to show (0...)
X: horizontal position
Y: vertical position
Example:
// make sprite 0 visible at position 50,120 with first added bitmap
Terminal.write("\e_GSPRITESET0;V;0;50;120$");
Scroll screen at pixel level
Sequence:
ESC "_GSCROLL" offsetX ";" offsetY "$"
Parameters:
offsetX: number of pixels to scroll (<0 = scroll left, >0 scroll right)
offsetY: nunber of pixels to scroll (<0 = scroll up, >0 scroll down)
Example:
// scroll left by 8 pixels
Terminal.write("\e_GSCROLL-8;0$");