Library to control a Graphics TFT connected to 4-wire SPI - revised for the Raio RA8875 Display Controller.

Dependents:   FRDM_RA8875_mPaint RA8875_Demo RA8875_KeyPadDemo SignalGenerator ... more

Fork of SPI_TFT by Peter Drescher

See Components - RA8875 Based Display

Enhanced touch-screen support - where it previous supported both the Resistive Touch and Capacitive Touch based on the FT5206 Touch Controller, now it also has support for the GSL1680 Touch Controller.

Offline Help Manual (Windows chm)

/media/uploads/WiredHome/ra8875.zip.bin (download, rename to .zip and unzip)

Committer:
WiredHome
Date:
Tue Feb 11 18:33:44 2020 +0000
Revision:
195:17e176dbd6eb
Parent:
193:74f80834d59d
Child:
196:56820026701b
Working on orientation.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
WiredHome 78:faf49c381591 1 ///
WiredHome 78:faf49c381591 2 /// @mainpage RA8875 Display Controller Driver library
WiredHome 78:faf49c381591 3 ///
WiredHome 78:faf49c381591 4 /// The RA8875 Display controller is a powerful interface for low cost displays. It
WiredHome 190:3132b7dfad82 5 /// can support displays up to 800 x 480 pixels x 16-bit color.
WiredHome 167:8aa3fb2a5a31 6 ///
WiredHome 182:8832d03a2a29 7 /// @image html Example_Program.png "Image of an Example Program"
WiredHome 182:8832d03a2a29 8 ///
WiredHome 190:3132b7dfad82 9 /// Aside from 800 x 480 pixel displays, another common implementation is
WiredHome 190:3132b7dfad82 10 /// 480 x 272 x 16 with two layers. The two layers can be exchanged, or blended
WiredHome 190:3132b7dfad82 11 /// in various ways (transparency, OR, AND, and more). It includes graphics
WiredHome 190:3132b7dfad82 12 /// acceleration capabilities for drawing primitives, such as line, rectangle,
WiredHome 167:8aa3fb2a5a31 13 /// circles, and more.
WiredHome 167:8aa3fb2a5a31 14 ///
WiredHome 190:3132b7dfad82 15 /// It is not a display for video-speed animations, and maybe could hold its own
WiredHome 190:3132b7dfad82 16 /// as a slow picture frame, at least when using the SPI ports. How the performance
WiredHome 167:8aa3fb2a5a31 17 /// differs using I2C, 8-bit parallel or 16-bit parallel has not been evaluated.
WiredHome 167:8aa3fb2a5a31 18 /// Certainly the parallel interface option would be expected to be a lot faster.
WiredHome 167:8aa3fb2a5a31 19 ///
WiredHome 167:8aa3fb2a5a31 20 /// What it is good at is performing as a basic display for appliance or simple
WiredHome 190:3132b7dfad82 21 /// home automation, and because of the built-in capability to draw lines, circles,
WiredHome 190:3132b7dfad82 22 /// ellipses, rectangles, rounded rectangles, and triangles, it does a lot of the
WiredHome 167:8aa3fb2a5a31 23 /// work that your host micro would otherwise be doing, and in many cases it does
WiredHome 167:8aa3fb2a5a31 24 /// it much faster.
WiredHome 78:faf49c381591 25 ///
WiredHome 167:8aa3fb2a5a31 26 /// While it is good to know about Bresenham's algorithm (to draw a line) and how
WiredHome 190:3132b7dfad82 27 /// to implement it in software, this controller simplifies things -
WiredHome 190:3132b7dfad82 28 /// You just give it (x1,y1), (x2,y2) and tell it to draw a line.
WiredHome 167:8aa3fb2a5a31 29 /// Without the hardware acceleration built into the RA8875, the host would have to
WiredHome 167:8aa3fb2a5a31 30 /// compute every point, set the graphics cursor to that point, and fill in that
WiredHome 167:8aa3fb2a5a31 31 /// point with the target color. A diagonal line of some length might take 100
WiredHome 190:3132b7dfad82 32 /// interactions instead of just a few. Other drawing primitives are similarly easy.
WiredHome 167:8aa3fb2a5a31 33 ///
WiredHome 190:3132b7dfad82 34 /// It has some built-in fonts, which can be enhanced with optional font-chips, and
WiredHome 167:8aa3fb2a5a31 35 /// with the provided software font engine, and a few instructions, you can convert
WiredHome 190:3132b7dfad82 36 /// most any True Type Font into the data structures suitable for this display.
WiredHome 167:8aa3fb2a5a31 37 ///
WiredHome 167:8aa3fb2a5a31 38 /// To round out the features, this library offers the ability to render Bitmap (BMP),
WiredHome 190:3132b7dfad82 39 /// Icon (ICO), Join Photographic Experts Group (JPG), and Graphics Interchange Format
WiredHome 190:3132b7dfad82 40 /// (GIF) images. These are implemented primarily in software, taking advantage of the
WiredHome 190:3132b7dfad82 41 /// hardware acceleration where it can.
WiredHome 167:8aa3fb2a5a31 42 ///
WiredHome 190:3132b7dfad82 43 /// When you are satisfied with what appears on screen, there is a PrintScreen method
WiredHome 167:8aa3fb2a5a31 44 /// to pull that image back out and write it to a file system as a BitMap image.
WiredHome 101:e0aad446094a 45 ///
WiredHome 78:faf49c381591 46 /// The controller additionally supports backlight control (via PWM), keypad scanning
WiredHome 167:8aa3fb2a5a31 47 /// (for a 4 x 5 matrix) and resistive touch-panel support. Support for capacitive
WiredHome 167:8aa3fb2a5a31 48 /// touch screens is also integrated, in a manner that makes the resistive and
WiredHome 190:3132b7dfad82 49 /// capacitive interfaces nearly API identical. The capacitive touch support is for
WiredHome 167:8aa3fb2a5a31 50 /// either the FT5206 or the GSL1680 controller chips.
WiredHome 167:8aa3fb2a5a31 51 ///
WiredHome 167:8aa3fb2a5a31 52 /// Here's a few hints to get started:
WiredHome 167:8aa3fb2a5a31 53 /// * @ref Display_Config
WiredHome 167:8aa3fb2a5a31 54 /// * @ref Touch_Panel
WiredHome 167:8aa3fb2a5a31 55 /// * @ref Hardwired_KeyPad
WiredHome 167:8aa3fb2a5a31 56 /// * @ref Example_Program
WiredHome 167:8aa3fb2a5a31 57 /// * @ref Wiring_Diagram
WiredHome 182:8832d03a2a29 58 /// * @ref External_Resources
WiredHome 167:8aa3fb2a5a31 59 /// * @ref Future_Plans
WiredHome 167:8aa3fb2a5a31 60 ///
WiredHome 167:8aa3fb2a5a31 61 /// @todo Add APIs for the 2nd RA8875 PWM channel. If the frequency can be independently
WiredHome 167:8aa3fb2a5a31 62 /// controlled, it could be used as a simple beeper.
WiredHome 167:8aa3fb2a5a31 63 /// @todo Figure out how to "init()" in the constructor. I ran into some issues if
WiredHome 167:8aa3fb2a5a31 64 /// the display was instantiated before main(), and the code would not run,
WiredHome 167:8aa3fb2a5a31 65 /// thus the exposure and activation of the init() function. If the constructor
WiredHome 167:8aa3fb2a5a31 66 /// was within main(), then it seemed to work as expected.
WiredHome 78:faf49c381591 67 ///
WiredHome 167:8aa3fb2a5a31 68 /// @note As the author of this library, let me state that I am not affiliated with
WiredHome 190:3132b7dfad82 69 /// Raio (silicon provider of the RA8875), or with BuyDisplay.com (where a lot
WiredHome 190:3132b7dfad82 70 /// of these displays can be purchased), I am simply a very satisfied customer
WiredHome 167:8aa3fb2a5a31 71 /// of the technology of the RA8875 chip.
WiredHome 167:8aa3fb2a5a31 72 ///
WiredHome 167:8aa3fb2a5a31 73 /// @copyright Copyright © 2012-2019 by Smartware Computing, all rights reserved.
WiredHome 167:8aa3fb2a5a31 74 /// This library is predominantly, that of Smartware Computing, however some
WiredHome 190:3132b7dfad82 75 /// portions are compiled from the work of others. Where the contribution of
WiredHome 190:3132b7dfad82 76 /// others was listed as copyright, that copyright is maintained, even as a
WiredHome 167:8aa3fb2a5a31 77 /// derivative work may have been created for better integration in this library.
WiredHome 167:8aa3fb2a5a31 78 /// See @ref Copyright_References.
WiredHome 167:8aa3fb2a5a31 79 ///
WiredHome 167:8aa3fb2a5a31 80 /// @page Copyright_References Copyright References
WiredHome 190:3132b7dfad82 81 ///
WiredHome 167:8aa3fb2a5a31 82 /// Following are links to the known copyright references. If I overlooked any, it was
WiredHome 167:8aa3fb2a5a31 83 /// unintentional - please let me know so I can update it. Some portions of the code
WiredHome 167:8aa3fb2a5a31 84 /// have been acquired from the cloud, and where any copyright information was available,
WiredHome 167:8aa3fb2a5a31 85 /// it was preserved.
WiredHome 167:8aa3fb2a5a31 86 ///
WiredHome 167:8aa3fb2a5a31 87 /// * @ref GraphicDisplay_Copyright
WiredHome 167:8aa3fb2a5a31 88 /// * @ref TextDisplay_Copyright
WiredHome 167:8aa3fb2a5a31 89 /// * @ref TinyJPEGDecompressor_Copyright
WiredHome 167:8aa3fb2a5a31 90 /// * @ref RA8875::TouchPanelComputeCalibration
WiredHome 167:8aa3fb2a5a31 91 ///
WiredHome 167:8aa3fb2a5a31 92 /// @page Display_Config Display Configuration
WiredHome 78:faf49c381591 93 ///
WiredHome 78:faf49c381591 94 /// This section details basics for bringing the display online. At a minimum,
WiredHome 167:8aa3fb2a5a31 95 /// the display is instantiated, after which nearly any of the available commands
WiredHome 78:faf49c381591 96 /// may be issued.
WiredHome 78:faf49c381591 97 ///
WiredHome 182:8832d03a2a29 98 /// @image html RA8875_Display.png "Schematic Representation of the Display"
WiredHome 182:8832d03a2a29 99 ///
WiredHome 78:faf49c381591 100 /// During the instantiation, the display is powered on, cleared, and the backlight
WiredHome 78:faf49c381591 101 /// is energized. Additionally, the keypad and touchscreen features are activated.
WiredHome 190:3132b7dfad82 102 /// It is important to keep in mind that the keypad has its default mapping,
WiredHome 190:3132b7dfad82 103 /// a resistive touchscreen does not yet have the calibration matrix configured,
WiredHome 167:8aa3fb2a5a31 104 /// and the RA8875::init() function is required to configure other important options
WiredHome 167:8aa3fb2a5a31 105 /// like the display resolution.
WiredHome 190:3132b7dfad82 106 ///
WiredHome 190:3132b7dfad82 107 /// @code
WiredHome 78:faf49c381591 108 /// RA8875 lcd(p5, p6, p7, p12, NC, "tft");
WiredHome 81:01da2e34283d 109 /// lcd.init();
WiredHome 78:faf49c381591 110 /// lcd.foreground(Blue);
WiredHome 78:faf49c381591 111 /// lcd.line(0,0, 479,271);
WiredHome 78:faf49c381591 112 /// ...
WiredHome 78:faf49c381591 113 /// @endcode
WiredHome 78:faf49c381591 114 ///
WiredHome 167:8aa3fb2a5a31 115 /// @section RA8875_Capabilities Basic Capabilities
WiredHome 167:8aa3fb2a5a31 116 /// @subsection RA8875_Resolution Display Resolution
WiredHome 167:8aa3fb2a5a31 117 /// There are two very common display resolutions that use the RA8875:
WiredHome 167:8aa3fb2a5a31 118 /// * 480 x 272 pixels
WiredHome 167:8aa3fb2a5a31 119 /// * 800 x 480 pixels
WiredHome 167:8aa3fb2a5a31 120 ///
WiredHome 167:8aa3fb2a5a31 121 /// @subsection RA8875_Layers Display Layers
WiredHome 190:3132b7dfad82 122 /// The RA8875 Controller, depending on the resolution and color depth, can support
WiredHome 167:8aa3fb2a5a31 123 /// multiple display layers.
WiredHome 167:8aa3fb2a5a31 124 ///
WiredHome 167:8aa3fb2a5a31 125 /// * 1 Layer - when the color depth is 16 bits per pixel
WiredHome 167:8aa3fb2a5a31 126 /// * 2 Layers - when the color depth is 8 bits per pixel and the resolution is 480 x 272.
WiredHome 78:faf49c381591 127 ///
WiredHome 167:8aa3fb2a5a31 128 ///
WiredHome 167:8aa3fb2a5a31 129 ///
WiredHome 167:8aa3fb2a5a31 130 /// @page Touch_Panel Touch Panel
WiredHome 167:8aa3fb2a5a31 131 ///
WiredHome 167:8aa3fb2a5a31 132 /// There is support for various touch panel interfaces.
WiredHome 190:3132b7dfad82 133 /// * @ref Resistive_Touch_Panel - native control for a resistive touch panel.
WiredHome 167:8aa3fb2a5a31 134 /// There are a few steps to enable this interface.
WiredHome 182:8832d03a2a29 135 ///
WiredHome 182:8832d03a2a29 136 /// For the Capacitive Touch controllers, an I2C interface is required.
WiredHome 182:8832d03a2a29 137 ///
WiredHome 182:8832d03a2a29 138 /// @image html RA8875_Touch.png "Schematic Representation of the Touch Interface"
WiredHome 182:8832d03a2a29 139 ///
WiredHome 190:3132b7dfad82 140 /// * @ref CapSense_FT5206 - FT5206 capacitive touch controller, integrated in
WiredHome 167:8aa3fb2a5a31 141 /// several popular RA8875-based displays. See @ref Capacitive_Touch_Panel.
WiredHome 190:3132b7dfad82 142 /// * @ref CapSense_GSL1680 - GSL1680 capacitive touch controller, integrated in
WiredHome 167:8aa3fb2a5a31 143 /// several popular RA8875-based displays. See @ref Capacitive_Touch_Panel.
WiredHome 167:8aa3fb2a5a31 144 ///
WiredHome 182:8832d03a2a29 145 /// @page MicroSD_Interface Micro SD Interface
WiredHome 182:8832d03a2a29 146 ///
WiredHome 182:8832d03a2a29 147 /// Several of the displays from BuyDisplay.com include the option for a Micro SD
WiredHome 182:8832d03a2a29 148 /// card adapter. This is not tied in to the RA8875 controller, it is just provided
WiredHome 182:8832d03a2a29 149 /// as a convenience to the display product.
WiredHome 182:8832d03a2a29 150 ///
WiredHome 182:8832d03a2a29 151 /// @image html RA8875_MicroSD.png "Schematic Representation of the Micro SD Interface"
WiredHome 78:faf49c381591 152 ///
WiredHome 167:8aa3fb2a5a31 153 ///
WiredHome 167:8aa3fb2a5a31 154 /// @page Hardwired_KeyPad Hardwired Keypad
WiredHome 167:8aa3fb2a5a31 155 ///
WiredHome 167:8aa3fb2a5a31 156 /// The RA8875 controller supports a hardwired matrix of keys, which can be used to
WiredHome 167:8aa3fb2a5a31 157 /// easily monitor for up to 20 keys (4 x 5 matrix). It is quite flexible, so these
WiredHome 190:3132b7dfad82 158 /// could be a set of independent functions, or they could be wired as a simple
WiredHome 167:8aa3fb2a5a31 159 /// calculator or telephone style of keypad.
WiredHome 167:8aa3fb2a5a31 160 ///
WiredHome 182:8832d03a2a29 161 /// @image html RA8875_Keypad.png "Schematic Representation of the Keypad Interface"
WiredHome 182:8832d03a2a29 162 ///
WiredHome 167:8aa3fb2a5a31 163 /// Various parameters can be configured, such as the scan rate, using @ref RA8875::KeypadInit().
WiredHome 167:8aa3fb2a5a31 164 /// The keypad has a default keypad mapping, but there is an API that permits
WiredHome 167:8aa3fb2a5a31 165 /// installing a custom @ref RA8875::SetKeyMap().
WiredHome 78:faf49c381591 166 ///
WiredHome 167:8aa3fb2a5a31 167 /// @page Resistive_Touch_Panel Resistive Touch Panel
WiredHome 167:8aa3fb2a5a31 168 ///
WiredHome 167:8aa3fb2a5a31 169 /// The RA8875 controller supports a native resistive touchscreen interface than can
WiredHome 190:3132b7dfad82 170 /// track a single touch-point.
WiredHome 78:faf49c381591 171 ///
WiredHome 167:8aa3fb2a5a31 172 /// If your display has this option, you can easily accept touch input, but it comes with
WiredHome 167:8aa3fb2a5a31 173 /// some additional requirements - calibration being the primary concern.
WiredHome 167:8aa3fb2a5a31 174 ///
WiredHome 167:8aa3fb2a5a31 175 /// @section Touch_Panel_Enable Touch Panel Enable
WiredHome 167:8aa3fb2a5a31 176 ///
WiredHome 190:3132b7dfad82 177 /// @ref RA8875::TouchPanelInit() has two forms - one fully automatic, and more controlled.
WiredHome 167:8aa3fb2a5a31 178 /// See the APIs for details.
WiredHome 167:8aa3fb2a5a31 179 ///
WiredHome 167:8aa3fb2a5a31 180 /// @section Touch_Panel_Calibration
WiredHome 190:3132b7dfad82 181 ///
WiredHome 190:3132b7dfad82 182 /// The touch panel is not initially calibrated on startup. The application should
WiredHome 78:faf49c381591 183 /// provide a means to activate the calibration process, and that should not require
WiredHome 78:faf49c381591 184 /// the touchscreen as it may not yet be usable. Alternately, a calibration matrix
WiredHome 78:faf49c381591 185 /// can be loaded from non-volatile and installed.
WiredHome 78:faf49c381591 186 ///
WiredHome 167:8aa3fb2a5a31 187 /// @page Capacitive_Touch_Panel Capacitive Touch Panel
WiredHome 167:8aa3fb2a5a31 188 ///
WiredHome 167:8aa3fb2a5a31 189 /// Common to many of the commercially available display modules that use the RA8875 is
WiredHome 167:8aa3fb2a5a31 190 /// an option for a capacitive sense touch screen [Cap Sense] There are two known Cap Sense
WiredHome 167:8aa3fb2a5a31 191 /// controllers that this library can work with:
WiredHome 167:8aa3fb2a5a31 192 ///
WiredHome 167:8aa3fb2a5a31 193 /// * @ref CapSense_FT5206.
WiredHome 167:8aa3fb2a5a31 194 /// * @ref CapSense_GSL1680.
WiredHome 190:3132b7dfad82 195 ///
WiredHome 167:8aa3fb2a5a31 196 /// @page CapSense_FT5206 Capacitive Sense - FT5206 Controller
WiredHome 167:8aa3fb2a5a31 197 ///
WiredHome 167:8aa3fb2a5a31 198 /// This is the more common controller. It supports up to 5 simultaneous touch point
WiredHome 167:8aa3fb2a5a31 199 /// tracking.
WiredHome 167:8aa3fb2a5a31 200 ///
WiredHome 167:8aa3fb2a5a31 201 /// @page CapSense_GSL1680 Capacitive Sense - GSL1680 Controller
WiredHome 167:8aa3fb2a5a31 202 ///
WiredHome 167:8aa3fb2a5a31 203 /// This is the less common controller. It supports either 5 or 10 simultaneous touch point
WiredHome 167:8aa3fb2a5a31 204 /// tracking, depending on the firmware installed in the controller.
WiredHome 167:8aa3fb2a5a31 205 ///
WiredHome 182:8832d03a2a29 206
WiredHome 182:8832d03a2a29 207
WiredHome 167:8aa3fb2a5a31 208 /// @page Example_Program Example Program
WiredHome 167:8aa3fb2a5a31 209 ///
WiredHome 167:8aa3fb2a5a31 210 /// This is just a small sample of what can be done, and what it can look like:
WiredHome 167:8aa3fb2a5a31 211 /// @image html Example_Program.png "Example Program"
WiredHome 78:faf49c381591 212 ///
WiredHome 167:8aa3fb2a5a31 213 /// @code
WiredHome 167:8aa3fb2a5a31 214 /// // Small test program
WiredHome 167:8aa3fb2a5a31 215 /// #include "mbed.h" // Working: v146, not fully working: v147
WiredHome 167:8aa3fb2a5a31 216 /// #include "RA8875.h" // Working: v149
WiredHome 167:8aa3fb2a5a31 217 /// RA8875 lcd(p5, p6, p7, p12, NC, "tft");
WiredHome 190:3132b7dfad82 218 ///
WiredHome 167:8aa3fb2a5a31 219 /// int main()
WiredHome 167:8aa3fb2a5a31 220 /// {
WiredHome 167:8aa3fb2a5a31 221 /// lcd.init(480,272,16,100);
WiredHome 167:8aa3fb2a5a31 222 /// lcd.printf("printing 3 x 2 = %d", 3*2);
WiredHome 167:8aa3fb2a5a31 223 /// lcd.circle( 400,25, 25, BrightRed);
WiredHome 167:8aa3fb2a5a31 224 /// lcd.fillcircle( 400,25, 15, RGB(128,255,128));
WiredHome 167:8aa3fb2a5a31 225 /// lcd.ellipse( 440,75, 35,20, BrightBlue);
WiredHome 167:8aa3fb2a5a31 226 /// lcd.fillellipse( 440,75, 25,10, Blue);
WiredHome 167:8aa3fb2a5a31 227 /// lcd.triangle( 440,100, 475,110, 450,125, Magenta);
WiredHome 167:8aa3fb2a5a31 228 /// lcd.filltriangle( 445,105, 467,111, 452,120, Cyan);
WiredHome 167:8aa3fb2a5a31 229 /// lcd.rect( 400,130, 475,155, Brown);
WiredHome 167:8aa3fb2a5a31 230 /// lcd.fillrect( 405,135, 470,150, Pink);
WiredHome 167:8aa3fb2a5a31 231 /// lcd.roundrect( 410,160, 475,190, 10,8, Yellow);
WiredHome 167:8aa3fb2a5a31 232 /// lcd.fillroundrect(415,165, 470,185, 5,3, Orange);
WiredHome 167:8aa3fb2a5a31 233 /// lcd.line( 430,200, 460,230, RGB(0,255,0));
WiredHome 190:3132b7dfad82 234 /// for (int i=0; i<=30; i+=5)
WiredHome 167:8aa3fb2a5a31 235 /// lcd.pixel(435+i,200+i, White);
WiredHome 167:8aa3fb2a5a31 236 /// }
WiredHome 167:8aa3fb2a5a31 237 /// @endcode
WiredHome 78:faf49c381591 238 ///
WiredHome 182:8832d03a2a29 239
WiredHome 182:8832d03a2a29 240
WiredHome 167:8aa3fb2a5a31 241 /// @page Wiring_Diagram Example Wiring Diagram
WiredHome 167:8aa3fb2a5a31 242 ///
WiredHome 190:3132b7dfad82 243 /// This library was crafted around the 4-Wire SPI interface. This was the chosen
WiredHome 190:3132b7dfad82 244 /// interface method in order to balance the requirements of the host micro IO with
WiredHome 167:8aa3fb2a5a31 245 /// the capability of this display. Alternatives include: 3-Wire SPI, I2C, 8-bit and
WiredHome 167:8aa3fb2a5a31 246 /// 16-bit parallel.
WiredHome 190:3132b7dfad82 247 ///
WiredHome 190:3132b7dfad82 248 /// @section Schematic_Basic Basic Schematic
WiredHome 182:8832d03a2a29 249 ///
WiredHome 182:8832d03a2a29 250 /// The basic schematic should be the most portable to any system that has SPI support.
WiredHome 190:3132b7dfad82 251 ///
WiredHome 182:8832d03a2a29 252 /// @image html RA8875_display_schematic.png "Basic Display support"
WiredHome 182:8832d03a2a29 253 ///
WiredHome 182:8832d03a2a29 254 /// @section Schematic_DisplayTouch Display with Capacitive Touch
WiredHome 182:8832d03a2a29 255 ///
WiredHome 182:8832d03a2a29 256 /// A more advanced schematic - this with the I2C interface connecting to the Capacitive
WiredHome 182:8832d03a2a29 257 /// Touch controller. Note that this requires additional IO pins.
WiredHome 182:8832d03a2a29 258 ///
WiredHome 182:8832d03a2a29 259 /// @image html RA8875_captouch_wiring.png "Display and Capacitive Touch support"
WiredHome 182:8832d03a2a29 260 ///
WiredHome 182:8832d03a2a29 261 /// @section Schematic_DisplayTouchMicroSD Display with Capacitive Touch and micro SD
WiredHome 182:8832d03a2a29 262 ///
WiredHome 190:3132b7dfad82 263 /// The most advanced schematic - taking advantage of the display, the capacitive touch
WiredHome 190:3132b7dfad82 264 /// controller, and the peripheral support for a micro SD card on some of the display
WiredHome 182:8832d03a2a29 265 /// modules.
WiredHome 182:8832d03a2a29 266 ///
WiredHome 182:8832d03a2a29 267 /// @note There are online indications that the RA8875 has a defect in its SPI interface
WiredHome 182:8832d03a2a29 268 /// where it will not release the MISO pin. If this pin is shared with the micro SD
WiredHome 190:3132b7dfad82 269 /// port, then it could interfere with successful read/write of the files.
WiredHome 182:8832d03a2a29 270 /// The easiest solution is to put that interface on a separate SPI port.
WiredHome 182:8832d03a2a29 271 ///
WiredHome 182:8832d03a2a29 272 /// @image html RA8875_display_full.png "Display, Touch, and micro SD support"
WiredHome 167:8aa3fb2a5a31 273 ///
WiredHome 182:8832d03a2a29 274 /// @page External_Resources External Resources
WiredHome 182:8832d03a2a29 275 ///
WiredHome 190:3132b7dfad82 276 /// There are many websites with information on the RA8875 Display. This partial list
WiredHome 182:8832d03a2a29 277 /// may be helpful:
WiredHome 182:8832d03a2a29 278 ///
WiredHome 190:3132b7dfad82 279 /// * <a href="https://os.mbed.com/components/RA8875-Based-Display/">RA8875 Library</a>
WiredHome 182:8832d03a2a29 280 /// on the <a href="https://os.mbed.com/">mbed site</a><br/>
WiredHome 182:8832d03a2a29 281 /// This page has **a lot** of detail, schematices, sample programs, instructions to
WiredHome 182:8832d03a2a29 282 /// create your own fonts, and more...
WiredHome 182:8832d03a2a29 283 /// * <a href="https://os.mbed.com/search/?q=RA8875">RA8875 search on the mbed site</a><br/>
WiredHome 182:8832d03a2a29 284 /// Many more links, discussions, questions and answers, and more...
WiredHome 182:8832d03a2a29 285 /// * <a href="https://www.buydisplay.com/">Buy Display</a> site<br/>
WiredHome 182:8832d03a2a29 286 /// Where you can find many inexpensive displays, some with the **RA8875** controller
WiredHome 182:8832d03a2a29 287 /// (which this library supports), and others using different controllers (thus not
WiredHome 182:8832d03a2a29 288 /// supported by this library).
WiredHome 182:8832d03a2a29 289 /// * <a href="https://github.com/sumotoy/RA8875/wiki/Fix-compatibility-with-other-SPI-devices">SPI Bug notes</a><br/>
WiredHome 182:8832d03a2a29 290 /// A link to a site that discusses a SPI bug on the RA8875. [I have not verified this
WiredHome 182:8832d03a2a29 291 /// bug]
WiredHome 182:8832d03a2a29 292 /// * <a href="https://www.google.com/search?safe=on&source=hp&ei=1oN1XP6hEsPq_AbZlKMw&q=RA8875">RA8875 - Google</a><br/>
WiredHome 182:8832d03a2a29 293 /// Because new things show up all the time.
WiredHome 182:8832d03a2a29 294 /// * <a href="https://www.bing.com/search?q=RA8875">RA8875 - Bing</a><br/>
WiredHome 182:8832d03a2a29 295 /// And you want to look in more than one place.
WiredHome 182:8832d03a2a29 296 ///
WiredHome 182:8832d03a2a29 297 /// @image html RA8875_display_full.png "Example Wiring Diagram"
WiredHome 182:8832d03a2a29 298 ///
WiredHome 182:8832d03a2a29 299
WiredHome 182:8832d03a2a29 300
WiredHome 167:8aa3fb2a5a31 301 /// @page Future_Plans Future Plans
WiredHome 167:8aa3fb2a5a31 302 ///
WiredHome 167:8aa3fb2a5a31 303 /// Following are some notions of future plans. This does not mean they will all be
WiredHome 167:8aa3fb2a5a31 304 /// implemented, just consider them as things I'm thinking about. If you have a suggestion,
WiredHome 167:8aa3fb2a5a31 305 /// please send it to me.
WiredHome 167:8aa3fb2a5a31 306 ///
WiredHome 167:8aa3fb2a5a31 307 /// - Change the return values for several functions. Most functions return @ref RA8875::RetCode_t,
WiredHome 167:8aa3fb2a5a31 308 /// but would benefit from returning a data type related to that function. For example,
WiredHome 167:8aa3fb2a5a31 309 /// @ref RA8875::SelectDrawingLayer() could return the current drawing layer even as a new
WiredHome 167:8aa3fb2a5a31 310 /// layer is defined. This can facilitate switching back and forth between configurations.
WiredHome 167:8aa3fb2a5a31 311 /// Examples:
WiredHome 167:8aa3fb2a5a31 312 /// - @ref RA8875::SelectDrawingLayer()
WiredHome 167:8aa3fb2a5a31 313 /// - @ref RA8875::SelectUserFont()
WiredHome 167:8aa3fb2a5a31 314 /// - @ref RA8875::SetBackgroundTransparencyColor()
WiredHome 167:8aa3fb2a5a31 315 /// - @ref RA8875::SetLayerMode()
WiredHome 167:8aa3fb2a5a31 316 /// - @ref RA8875::SetLayerTransparency()
WiredHome 167:8aa3fb2a5a31 317 /// - @ref RA8875::SetOrientation()
WiredHome 167:8aa3fb2a5a31 318 /// - @ref RA8875::SetTextCursor()
WiredHome 167:8aa3fb2a5a31 319 /// - @ref RA8875::SetTextCursorControl()
WiredHome 167:8aa3fb2a5a31 320 /// - @ref RA8875::SetTextFont()
WiredHome 167:8aa3fb2a5a31 321 /// - @ref RA8875::SetTextFontControl()
WiredHome 167:8aa3fb2a5a31 322 /// - @ref RA8875::SetTextFontSize()
WiredHome 167:8aa3fb2a5a31 323 /// - @ref RA8875::background()
WiredHome 167:8aa3fb2a5a31 324 /// - @ref RA8875::foreground()
WiredHome 167:8aa3fb2a5a31 325 /// - @ref RA8875::Backlight()
WiredHome 167:8aa3fb2a5a31 326 /// - @ref RA8875::window()
WiredHome 167:8aa3fb2a5a31 327 /// - @ref RA8875::WindowMax()
WiredHome 167:8aa3fb2a5a31 328 ///
WiredHome 190:3132b7dfad82 329 /// - Change the title-case of the functions to be consistent. Because this was adapted
WiredHome 167:8aa3fb2a5a31 330 /// from parts of several different libraries, it isn't very consistently titled.
WiredHome 167:8aa3fb2a5a31 331 ///
WiredHome 190:3132b7dfad82 332 /// - Change names of some of the functions to be more consistent. Why are some Set*
WiredHome 167:8aa3fb2a5a31 333 /// and others are Select*. The layer commands SetDrawingLayer and GetDrawingLayer do
WiredHome 167:8aa3fb2a5a31 334 /// not need 'Drawing' in them.
WiredHome 167:8aa3fb2a5a31 335 ///
WiredHome 190:3132b7dfad82 336 /// - Improve the PrintScreen method. There are two functions - one that accepts a filename,
WiredHome 167:8aa3fb2a5a31 337 /// and a second more experimental version that could pipe the image stream back to
WiredHome 167:8aa3fb2a5a31 338 /// a calling process. This could be used, for example, to send the image over a
WiredHome 167:8aa3fb2a5a31 339 /// network interface. The intended side effect is that there is then only a single
WiredHome 167:8aa3fb2a5a31 340 /// PrintScreen method with either an internal helper (for file system access) or
WiredHome 167:8aa3fb2a5a31 341 /// a callback for the user handled process.
WiredHome 101:e0aad446094a 342 ///
WiredHome 182:8832d03a2a29 343 /// - Add support for the hardware reset pin
WiredHome 182:8832d03a2a29 344 ///
WiredHome 190:3132b7dfad82 345 /// - Figure out how to "init()" in the constructor when it is not in main(). I ran into
WiredHome 190:3132b7dfad82 346 /// some issues if the display was instantiated before main(), and the code would not
WiredHome 190:3132b7dfad82 347 /// run, thus the exposure and activation of the init() function. If the instantiation
WiredHome 190:3132b7dfad82 348 /// is within main(), then it seemed to work as expected.
WiredHome 182:8832d03a2a29 349 ///
WiredHome 190:3132b7dfad82 350 /// - Add Scroll support for text.
WiredHome 182:8832d03a2a29 351 ///
WiredHome 190:3132b7dfad82 352 /// - Add high level objects - x-y graph, meter, buttons, ... but these will probably be
WiredHome 182:8832d03a2a29 353 /// best served in another class, since they may not be needed for many uses.
WiredHome 182:8832d03a2a29 354 ///
WiredHome 19:3f82c1161fd2 355 #ifndef RA8875_H
WiredHome 19:3f82c1161fd2 356 #define RA8875_H
WiredHome 19:3f82c1161fd2 357 #include <mbed.h>
WiredHome 19:3f82c1161fd2 358
WiredHome 77:9206c13aa527 359 #include "RA8875_Regs.h"
WiredHome 165:695c24cc5197 360 #include "RA8875_Touch_FT5206.h"
WiredHome 165:695c24cc5197 361 #include "RA8875_Touch_GSL1680.h"
WiredHome 19:3f82c1161fd2 362 #include "GraphicsDisplay.h"
WiredHome 19:3f82c1161fd2 363
WiredHome 41:2956a0a221e5 364 #define RA8875_DEFAULT_SPI_FREQ 5000000
WiredHome 19:3f82c1161fd2 365
WiredHome 156:4bdb2772128d 366 #ifndef MBED_ENCODE_VERSION
WiredHome 181:0032d1b8f5d4 367 #define MBED_MAJOR_VERSION 2
WiredHome 181:0032d1b8f5d4 368 #define MBED_MINOR_VERSION 0
WiredHome 181:0032d1b8f5d4 369 #define MBED_PATCH_VERSION MBED_LIBRARY_VERSION
WiredHome 156:4bdb2772128d 370 #define MBED_ENCODE_VERSION(major, minor, patch) ((major)*10000 + (minor)*100 + (patch))
WiredHome 156:4bdb2772128d 371 #endif
WiredHome 156:4bdb2772128d 372
WiredHome 19:3f82c1161fd2 373 // Define this to enable code that monitors the performance of various
WiredHome 19:3f82c1161fd2 374 // graphics commands.
WiredHome 78:faf49c381591 375 //#define PERF_METRICS
WiredHome 19:3f82c1161fd2 376
WiredHome 23:a50ded45dbaf 377 // What better place for some test code than in here and the companion
WiredHome 23:a50ded45dbaf 378 // .cpp file. See also the bottom of this file.
WiredHome 99:66edf771373a 379 //#define TESTENABLE
WiredHome 19:3f82c1161fd2 380
WiredHome 167:8aa3fb2a5a31 381 /// @page PredefinedColors Predefined Colors
WiredHome 167:8aa3fb2a5a31 382 ///
WiredHome 167:8aa3fb2a5a31 383 /// Keep in mind that the color scheme shown here is unlikely to precisely match
WiredHome 190:3132b7dfad82 384 /// that on the actual display. The perceived color is additional affected by
WiredHome 167:8aa3fb2a5a31 385 /// other attributes, such as the backlight brightness.
WiredHome 167:8aa3fb2a5a31 386 ///
WiredHome 190:3132b7dfad82 387 /// These are the predefined colors that are typically used where any @ref color_t
WiredHome 167:8aa3fb2a5a31 388 /// variable is applied.
WiredHome 167:8aa3fb2a5a31 389 ///
WiredHome 167:8aa3fb2a5a31 390 /// <blockquote>
WiredHome 167:8aa3fb2a5a31 391 /// <table>
WiredHome 167:8aa3fb2a5a31 392 /// <tr>
WiredHome 167:8aa3fb2a5a31 393 /// <td bgcolor='#000000'>&nbsp;</td><td>@ref Black</td>
WiredHome 167:8aa3fb2a5a31 394 /// <td bgcolor='#0000BB'>&nbsp;</td><td>@ref Blue</td>
WiredHome 167:8aa3fb2a5a31 395 /// <td bgcolor='#00BB00'>&nbsp;</td><td>@ref Green</td>
WiredHome 167:8aa3fb2a5a31 396 /// <td bgcolor='#00BBBB'>&nbsp;</td><td>@ref Cyan</td>
WiredHome 167:8aa3fb2a5a31 397 /// </tr>
WiredHome 167:8aa3fb2a5a31 398 /// <tr>
WiredHome 167:8aa3fb2a5a31 399 /// <td bgcolor='#BB0000'>&nbsp;</td><td>@ref Red</td>
WiredHome 167:8aa3fb2a5a31 400 /// <td bgcolor='#BB00BB'>&nbsp;</td><td>@ref Magenta</td>
WiredHome 167:8aa3fb2a5a31 401 /// <td bgcolor='#3F3F3F'>&nbsp;</td><td>@ref Brown</td>
WiredHome 167:8aa3fb2a5a31 402 /// <td bgcolor='#BBBBBB'>&nbsp;</td><td>@ref Gray</td>
WiredHome 167:8aa3fb2a5a31 403 /// </tr>
WiredHome 167:8aa3fb2a5a31 404 /// <tr>
WiredHome 167:8aa3fb2a5a31 405 /// <td bgcolor='#555555'>&nbsp;</td><td>@ref Charcoal</td>
WiredHome 167:8aa3fb2a5a31 406 /// <td bgcolor='#0000FF'>&nbsp;</td><td>@ref BrightBlue</td>
WiredHome 167:8aa3fb2a5a31 407 /// <td bgcolor='#00FF00'>&nbsp;</td><td>@ref BrightGreen</td>
WiredHome 167:8aa3fb2a5a31 408 /// <td bgcolor='#00FFFF'>&nbsp;</td><td>@ref BrightCyan</td>
WiredHome 167:8aa3fb2a5a31 409 /// </tr>
WiredHome 167:8aa3fb2a5a31 410 /// <tr>
WiredHome 167:8aa3fb2a5a31 411 /// <td bgcolor='#FF5555'>&nbsp;</td><td>@ref Orange</td>
WiredHome 167:8aa3fb2a5a31 412 /// <td bgcolor='#FF55FF'>&nbsp;</td><td>@ref Pink</td>
WiredHome 167:8aa3fb2a5a31 413 /// <td bgcolor='#BBBB00'>&nbsp;</td><td>@ref Yellow</td>
WiredHome 167:8aa3fb2a5a31 414 /// <td bgcolor='#FFFFFF'>&nbsp;</td><td>@ref White</td>
WiredHome 167:8aa3fb2a5a31 415 /// </tr>
WiredHome 167:8aa3fb2a5a31 416 /// <tr>
WiredHome 167:8aa3fb2a5a31 417 /// <td bgcolor='#00003F'>&nbsp;</td><td>@ref DarkBlue </td>
WiredHome 167:8aa3fb2a5a31 418 /// <td bgcolor='#003F00'>&nbsp;</td><td>@ref DarkGreen</td>
WiredHome 167:8aa3fb2a5a31 419 /// <td bgcolor='#003F3F'>&nbsp;</td><td>@ref DarkCyan </td>
WiredHome 167:8aa3fb2a5a31 420 /// <td bgcolor='#3F0000'>&nbsp;</td><td>@ref DarkRed </td>
WiredHome 167:8aa3fb2a5a31 421 /// </tr>
WiredHome 167:8aa3fb2a5a31 422 /// <tr>
WiredHome 167:8aa3fb2a5a31 423 /// <td bgcolor='#3F003F'>&nbsp;</td><td>@ref DarkMagenta</td>
WiredHome 167:8aa3fb2a5a31 424 /// <td bgcolor='#3F3F00'>&nbsp;</td><td>@ref DarkBrown </td>
WiredHome 167:8aa3fb2a5a31 425 /// <td bgcolor='#3F3F3F'>&nbsp;</td><td>@ref DarkGray </td>
WiredHome 167:8aa3fb2a5a31 426 /// <td bgcolor='#FFFFFF'>&nbsp;</td><td>&nbsp;</td>
WiredHome 167:8aa3fb2a5a31 427 /// </tr>
WiredHome 167:8aa3fb2a5a31 428 /// </table>
WiredHome 167:8aa3fb2a5a31 429 /// </blockquote>
WiredHome 167:8aa3fb2a5a31 430 ///
WiredHome 167:8aa3fb2a5a31 431
WiredHome 185:cb7591a43f44 432 #define Black (color_t)(RGB(0,0,0))
WiredHome 185:cb7591a43f44 433 #define Blue (color_t)(RGB(0,0,187))
WiredHome 185:cb7591a43f44 434 #define Green (color_t)(RGB(0,187,0))
WiredHome 185:cb7591a43f44 435 #define Cyan (color_t)(RGB(0,187,187))
WiredHome 185:cb7591a43f44 436 #define Red (color_t)(RGB(187,0,0))
WiredHome 185:cb7591a43f44 437 #define Magenta (color_t)(RGB(187,0,187))
WiredHome 185:cb7591a43f44 438 #define Brown (color_t)(RGB(63,63,0))
WiredHome 185:cb7591a43f44 439 #define Gray (color_t)(RGB(187,187,187))
WiredHome 185:cb7591a43f44 440 #define Charcoal (color_t)(RGB(85,85,85))
WiredHome 185:cb7591a43f44 441 #define BrightBlue (color_t)(RGB(0,0,255))
WiredHome 185:cb7591a43f44 442 #define BrightGreen (color_t)(RGB(0,255,0))
WiredHome 185:cb7591a43f44 443 #define BrightCyan (color_t)(RGB(0,255,255))
WiredHome 185:cb7591a43f44 444 #define BrightRed (color_t)(RGB(255,0,0))
WiredHome 185:cb7591a43f44 445 #define Orange (color_t)(RGB(255,85,85))
WiredHome 185:cb7591a43f44 446 #define Pink (color_t)(RGB(255,85,255))
WiredHome 185:cb7591a43f44 447 #define Yellow (color_t)(RGB(187,187,0))
WiredHome 186:910fc2335c45 448 #define BrightYellow (color_t)(RGB(255,255,0))
WiredHome 185:cb7591a43f44 449 #define White (color_t)(RGB(255,255,255))
WiredHome 20:6e2e4a8372eb 450
WiredHome 185:cb7591a43f44 451 #define DarkBlue (color_t)(RGB(0,0,63))
WiredHome 185:cb7591a43f44 452 #define DarkGreen (color_t)(RGB(0,63,0))
WiredHome 185:cb7591a43f44 453 #define DarkCyan (color_t)(RGB(0,63,63))
WiredHome 185:cb7591a43f44 454 #define DarkRed (color_t)(RGB(63,0,0))
WiredHome 185:cb7591a43f44 455 #define DarkMagenta (color_t)(RGB(63,0,63))
WiredHome 185:cb7591a43f44 456 #define DarkBrown (color_t)(RGB(63,63,0))
WiredHome 185:cb7591a43f44 457 #define DarkGray (color_t)(RGB(63,63,63))
WiredHome 61:8f3153bf0baa 458
WiredHome 82:f7d300f26540 459 #define min(a,b) ((a<b)?a:b)
WiredHome 82:f7d300f26540 460 #define max(a,b) ((a>b)?a:b)
WiredHome 82:f7d300f26540 461
WiredHome 19:3f82c1161fd2 462
WiredHome 19:3f82c1161fd2 463 //namespace SW_graphics
WiredHome 19:3f82c1161fd2 464 //{
WiredHome 19:3f82c1161fd2 465
WiredHome 96:40b74dd3695b 466 class FPointerDummy; // used by the callback methods.
WiredHome 24:8ca861acf12d 467
WiredHome 21:3c1efb192927 468 /// This is a graphics library for the Raio RA8875 Display Controller chip
WiredHome 21:3c1efb192927 469 /// attached to a 4-wire SPI interface.
WiredHome 21:3c1efb192927 470 ///
WiredHome 56:7a85d226ad0d 471 /// It offers both primitive and high level APIs.
WiredHome 56:7a85d226ad0d 472 ///
WiredHome 21:3c1efb192927 473 /// Central to this API is a coordinate system, where the origin (0,0) is in
WiredHome 56:7a85d226ad0d 474 /// the top-left corner of the display, and the width (x) extends positive to the
WiredHome 56:7a85d226ad0d 475 /// right and the height (y) extends positive toward the bottom.
WiredHome 21:3c1efb192927 476 ///
WiredHome 125:7a0b70f56550 477 /// @note As there are both graphics and text commands, one must take care to use
WiredHome 21:3c1efb192927 478 /// the proper coordinate system for each. Some of the text APIs are in units
WiredHome 29:422616aa04bd 479 /// of column and row, which is measured in character positions (and dependent
WiredHome 56:7a85d226ad0d 480 /// on the font size), where other text APIs permit pixel level positioning.
WiredHome 56:7a85d226ad0d 481 ///
WiredHome 56:7a85d226ad0d 482 /// @code
WiredHome 56:7a85d226ad0d 483 /// #include "RA8875.h"
WiredHome 56:7a85d226ad0d 484 /// RA8875 lcd(p5, p6, p7, p12, NC, "tft");
WiredHome 56:7a85d226ad0d 485 ///
WiredHome 56:7a85d226ad0d 486 /// int main()
WiredHome 56:7a85d226ad0d 487 /// {
WiredHome 81:01da2e34283d 488 /// lcd.init();
WiredHome 56:7a85d226ad0d 489 /// lcd.printf("printing 3 x 2 = %d", 3*2);
WiredHome 56:7a85d226ad0d 490 /// lcd.circle( 400,25, 25, BrightRed);
WiredHome 56:7a85d226ad0d 491 /// lcd.fillcircle( 400,25, 15, RGB(128,255,128));
WiredHome 56:7a85d226ad0d 492 /// lcd.ellipse( 440,75, 35,20, BrightBlue);
WiredHome 56:7a85d226ad0d 493 /// lcd.fillellipse( 440,75, 25,10, Blue);
WiredHome 56:7a85d226ad0d 494 /// lcd.triangle( 440,100, 475,110, 450,125, Magenta);
WiredHome 56:7a85d226ad0d 495 /// lcd.filltriangle( 445,105, 467,111, 452,120, Cyan);
WiredHome 56:7a85d226ad0d 496 /// lcd.rect( 400,130, 475,155, Brown);
WiredHome 56:7a85d226ad0d 497 /// lcd.fillrect( 405,135, 470,150, Pink);
WiredHome 56:7a85d226ad0d 498 /// lcd.roundrect( 410,160, 475,190, 10,8, Yellow);
WiredHome 56:7a85d226ad0d 499 /// lcd.fillroundrect(415,165, 470,185, 5,3, Orange);
WiredHome 56:7a85d226ad0d 500 /// lcd.line( 430,200, 460,230, RGB(0,255,0));
WiredHome 190:3132b7dfad82 501 /// for (int i=0; i<=30; i+=5)
WiredHome 56:7a85d226ad0d 502 /// lcd.pixel(435+i,200+i, White);
WiredHome 56:7a85d226ad0d 503 /// }
WiredHome 56:7a85d226ad0d 504 /// @endcode
WiredHome 29:422616aa04bd 505 ///
WiredHome 31:c72e12cd5c67 506 /// @todo Add Scroll support for text.
WiredHome 75:ca78388cfd77 507 /// @todo Add Hardware reset signal - but testing to date indicates it is not needed.
WiredHome 44:207594dece70 508 /// @todo Add high level objects - x-y graph, meter, others... but these will
WiredHome 44:207594dece70 509 /// probably be best served in another class, since they may not
WiredHome 44:207594dece70 510 /// be needed for many uses.
WiredHome 195:17e176dbd6eb 511 /// @todo Move the global enums into the class (e.g. NOFILL becomes RA8875::NOFILL) to
WiredHome 195:17e176dbd6eb 512 /// avoid namespace clashes.
WiredHome 190:3132b7dfad82 513 ///
WiredHome 19:3f82c1161fd2 514 class RA8875 : public GraphicsDisplay
WiredHome 19:3f82c1161fd2 515 {
WiredHome 190:3132b7dfad82 516 public:
WiredHome 190:3132b7dfad82 517 /// Vertical alignment attribute. Used to align one rect against another.
WiredHome 190:3132b7dfad82 518 /// @ref AlignRectInRect
WiredHome 190:3132b7dfad82 519 typedef enum {
WiredHome 190:3132b7dfad82 520 top, ///< vertically align to the top
WiredHome 190:3132b7dfad82 521 middle, ///< vertically align to the middle
WiredHome 190:3132b7dfad82 522 bottom ///< vertically align to the bottom
WiredHome 190:3132b7dfad82 523 } valign_t;
WiredHome 190:3132b7dfad82 524
WiredHome 190:3132b7dfad82 525 /// Horizontal alignment attribute. Used to align one rect against another.
WiredHome 190:3132b7dfad82 526 /// @ref AlignRectInRect
WiredHome 190:3132b7dfad82 527 typedef enum {
WiredHome 190:3132b7dfad82 528 left, ///< horizontally align to the left
WiredHome 190:3132b7dfad82 529 center, ///< horizontally align to the center
WiredHome 190:3132b7dfad82 530 right ///< horizontally align to the right
WiredHome 190:3132b7dfad82 531 } halign_t;
WiredHome 190:3132b7dfad82 532
WiredHome 167:8aa3fb2a5a31 533 /// cursor type argument for @ref SetTextCursorControl()
WiredHome 53:86d24b9480b9 534 typedef enum
WiredHome 53:86d24b9480b9 535 {
WiredHome 53:86d24b9480b9 536 NOCURSOR, ///< cursor is hidden
WiredHome 167:8aa3fb2a5a31 537 IBEAM, ///< I Beam '|' cursor
WiredHome 167:8aa3fb2a5a31 538 UNDER, ///< Underscore '_' cursor
WiredHome 53:86d24b9480b9 539 BLOCK ///< Block cursor
WiredHome 53:86d24b9480b9 540 } cursor_t;
WiredHome 53:86d24b9480b9 541
WiredHome 167:8aa3fb2a5a31 542 /// font type selection argument for @ref SetTextFont()
WiredHome 19:3f82c1161fd2 543 typedef enum
WiredHome 19:3f82c1161fd2 544 {
WiredHome 31:c72e12cd5c67 545 ISO8859_1, ///< ISO8859-1 font
WiredHome 31:c72e12cd5c67 546 ISO8859_2, ///< ISO8859-2 font
WiredHome 31:c72e12cd5c67 547 ISO8859_3, ///< ISO8859-3 font
WiredHome 31:c72e12cd5c67 548 ISO8859_4 ///< ISO8859-4 font
WiredHome 19:3f82c1161fd2 549 } font_t;
WiredHome 190:3132b7dfad82 550
WiredHome 167:8aa3fb2a5a31 551 /// display orientation argument for @ref SetOrientation()
WiredHome 167:8aa3fb2a5a31 552 /// with landscape mode as the normal (0 degree) orientation.
WiredHome 19:3f82c1161fd2 553 typedef enum
WiredHome 19:3f82c1161fd2 554 {
WiredHome 84:e102021864b5 555 normal, ///< normal (landscape) orientation
WiredHome 84:e102021864b5 556 rotate_0 = normal, ///< alternate to 'normal'
WiredHome 84:e102021864b5 557 rotate_90, ///< rotated clockwise 90 degree
WiredHome 84:e102021864b5 558 rotate_180, ///< rotated (clockwise) 180 degree
WiredHome 84:e102021864b5 559 rotate_270, ///< rotated clockwise 270 degree
WiredHome 84:e102021864b5 560 } orientation_t;
WiredHome 190:3132b7dfad82 561
WiredHome 167:8aa3fb2a5a31 562 /// alignment control argument for @ref SetTextFontControl()
WiredHome 19:3f82c1161fd2 563 typedef enum
WiredHome 19:3f82c1161fd2 564 {
WiredHome 31:c72e12cd5c67 565 align_none, ///< align - none
WiredHome 31:c72e12cd5c67 566 align_full ///< align - full
WiredHome 190:3132b7dfad82 567 } alignment_t;
WiredHome 190:3132b7dfad82 568
WiredHome 167:8aa3fb2a5a31 569 /// Font Horizontal Scale factor - 1, 2, 3 4 for @ref SetTextFontSize(), @ref GetTextFontSize()
WiredHome 40:04aa280dfa39 570 typedef int HorizontalScale;
WiredHome 190:3132b7dfad82 571
WiredHome 167:8aa3fb2a5a31 572 /// Font Vertical Scale factor - 1, 2, 3, 4 for @ref SetTextFontSize(), @ref GetTextFontSize()
WiredHome 40:04aa280dfa39 573 typedef int VerticalScale;
WiredHome 19:3f82c1161fd2 574
WiredHome 167:8aa3fb2a5a31 575 /// Clear screen region option for @ref clsw()
WiredHome 19:3f82c1161fd2 576 typedef enum
WiredHome 19:3f82c1161fd2 577 {
WiredHome 31:c72e12cd5c67 578 FULLWINDOW, ///< Full screen
WiredHome 31:c72e12cd5c67 579 ACTIVEWINDOW ///< active window/region
WiredHome 19:3f82c1161fd2 580 } Region_t;
WiredHome 167:8aa3fb2a5a31 581
WiredHome 167:8aa3fb2a5a31 582 /// Layer Display Mode argument for @ref SetLayerMode, @ref GetLayerMode
WiredHome 53:86d24b9480b9 583 typedef enum
WiredHome 53:86d24b9480b9 584 {
WiredHome 61:8f3153bf0baa 585 ShowLayer0, ///< Only layer 0 is visible, layer 1 is hidden (default)
WiredHome 56:7a85d226ad0d 586 ShowLayer1, ///< Only layer 1 is visible, layer 0 is hidden
WiredHome 53:86d24b9480b9 587 LightenOverlay, ///< Lighten-overlay mode
WiredHome 53:86d24b9480b9 588 TransparentMode, ///< Transparent mode
WiredHome 53:86d24b9480b9 589 BooleanOR, ///< Boolean OR mode
WiredHome 53:86d24b9480b9 590 BooleanAND, ///< Boolean AND mode
WiredHome 53:86d24b9480b9 591 FloatingWindow ///< Floating Window mode
WiredHome 53:86d24b9480b9 592 } LayerMode_T;
WiredHome 190:3132b7dfad82 593
hexley 54:e117ad10fba6 594 /// Touch Panel modes
hexley 54:e117ad10fba6 595 typedef enum
hexley 54:e117ad10fba6 596 {
hexley 54:e117ad10fba6 597 TP_Auto, ///< Auto touch detection mode
hexley 54:e117ad10fba6 598 TP_Manual, ///< Manual touch detection mode
hexley 54:e117ad10fba6 599 } tpmode_t;
WiredHome 96:40b74dd3695b 600
WiredHome 167:8aa3fb2a5a31 601 /// PrintScreen callback commands for the user code @ref PrintCallback_T()
WiredHome 96:40b74dd3695b 602 typedef enum
WiredHome 96:40b74dd3695b 603 {
WiredHome 96:40b74dd3695b 604 OPEN, ///< command to open the file. cast uint32_t * to the buffer to get the total size to be written.
WiredHome 96:40b74dd3695b 605 WRITE, ///< command to write some data, buffer points to the data and the size is in bytes.
WiredHome 96:40b74dd3695b 606 CLOSE, ///< command to close the file
WiredHome 96:40b74dd3695b 607 } filecmd_t;
WiredHome 96:40b74dd3695b 608
WiredHome 96:40b74dd3695b 609 /// print screen callback
WiredHome 96:40b74dd3695b 610 ///
WiredHome 190:3132b7dfad82 611 /// The special form of the print screen will pass one blob at a time
WiredHome 149:c62c4b2d6a15 612 /// to the callback. There are basic commands declaring that the stream
WiredHome 96:40b74dd3695b 613 /// can be opened, a block written, and the stream closed. There is
WiredHome 96:40b74dd3695b 614 /// also a command to communicate the total size being delivered.
WiredHome 96:40b74dd3695b 615 ///
WiredHome 149:c62c4b2d6a15 616 /// If the idle callback is registered, it will be activated passing
WiredHome 149:c62c4b2d6a15 617 /// a parameter indicating the percent complete, which may be of value.
WiredHome 149:c62c4b2d6a15 618 ///
WiredHome 96:40b74dd3695b 619 /// @code
WiredHome 96:40b74dd3695b 620 /// lcd.PrintScreen(x,y,w,h,callback);
WiredHome 190:3132b7dfad82 621 /// ...
WiredHome 96:40b74dd3695b 622 /// void callback(filecmd_t cmd, uint8_t * buffer, uint16_t size) {
WiredHome 96:40b74dd3695b 623 /// switch(cmd) {
WiredHome 96:40b74dd3695b 624 /// case OPEN:
WiredHome 96:40b74dd3695b 625 /// pc.printf("About to write %u bytes\r\n", *(uint32_t *)buffer);
WiredHome 96:40b74dd3695b 626 /// fh = fopen("file.bmp", "w+b");
WiredHome 96:40b74dd3695b 627 /// break;
WiredHome 96:40b74dd3695b 628 /// case WRITE:
WiredHome 96:40b74dd3695b 629 /// fwrite(buffer, size, fh);
WiredHome 96:40b74dd3695b 630 /// break;
WiredHome 96:40b74dd3695b 631 /// case CLOSE:
WiredHome 96:40b74dd3695b 632 /// fclose(fh);
WiredHome 96:40b74dd3695b 633 /// break;
WiredHome 96:40b74dd3695b 634 /// default:
WiredHome 96:40b74dd3695b 635 /// pc.printf("Unexpected callback %d\r\n", cmd);
WiredHome 96:40b74dd3695b 636 /// break;
WiredHome 96:40b74dd3695b 637 /// }
WiredHome 96:40b74dd3695b 638 /// }
WiredHome 96:40b74dd3695b 639 /// @endcode
WiredHome 96:40b74dd3695b 640 ///
WiredHome 106:c80828f5dea4 641 /// @param cmd is the command to execute. See @ref filecmd_t.
WiredHome 96:40b74dd3695b 642 /// @param buffer is a pointer to the buffer being passed.
WiredHome 96:40b74dd3695b 643 /// @param size is the number of bytes in the buffer.
WiredHome 167:8aa3fb2a5a31 644 /// @returns @ref RetCode_t value.
WiredHome 96:40b74dd3695b 645 ///
WiredHome 96:40b74dd3695b 646 typedef RetCode_t (* PrintCallback_T)(filecmd_t cmd, uint8_t * buffer, uint16_t size);
WiredHome 190:3132b7dfad82 647
WiredHome 167:8aa3fb2a5a31 648 /// Idle reason provided in the Idle Callback @ref IdleCallback_T()
WiredHome 123:2f45e80fec5f 649 typedef enum {
WiredHome 123:2f45e80fec5f 650 unknown, ///< reason has not been assigned (this should not happen)
WiredHome 123:2f45e80fec5f 651 status_wait, ///< driver is polling the status register while busy
WiredHome 123:2f45e80fec5f 652 command_wait, ///< driver is polling the command register while busy
WiredHome 123:2f45e80fec5f 653 getc_wait, ///< user has called the getc function
WiredHome 123:2f45e80fec5f 654 touch_wait, ///< user has called the touch function
WiredHome 149:c62c4b2d6a15 655 touchcal_wait, ///< driver is performing a touch calibration
WiredHome 149:c62c4b2d6a15 656 progress, ///< communicates progress
WiredHome 123:2f45e80fec5f 657 } IdleReason_T;
WiredHome 190:3132b7dfad82 658
WiredHome 190:3132b7dfad82 659 /// Idle Callback
WiredHome 190:3132b7dfad82 660 ///
WiredHome 190:3132b7dfad82 661 /// This defines the interface for an idle callback. That is, when the
WiredHome 125:7a0b70f56550 662 /// driver is held up, pending some event, it can call a previously registered
WiredHome 123:2f45e80fec5f 663 /// idle function. This could be most useful for servicing a watchdog.
WiredHome 123:2f45e80fec5f 664 ///
WiredHome 123:2f45e80fec5f 665 /// The user code, which is notified via this API, can force the idle
WiredHome 123:2f45e80fec5f 666 /// to abort, by returning the external_abort value back to the driver.
WiredHome 125:7a0b70f56550 667 /// It is important to note that the abort could leave the driver in
WiredHome 125:7a0b70f56550 668 /// an undesireable state, so this should be used with care.
WiredHome 125:7a0b70f56550 669 ///
WiredHome 125:7a0b70f56550 670 /// @note Should it be called the BusyCallback? It is true, that it will
WiredHome 125:7a0b70f56550 671 /// call this function when the RA8875 is busy, but this is also
WiredHome 125:7a0b70f56550 672 /// when the CPU is largely idle.
WiredHome 125:7a0b70f56550 673 ///
WiredHome 125:7a0b70f56550 674 /// @code
WiredHome 149:c62c4b2d6a15 675 /// RetCode_t myIdle_handler(RA8875::IdleReason_T reason, uint16_t param)
WiredHome 125:7a0b70f56550 676 /// {
WiredHome 125:7a0b70f56550 677 /// idleFlasher = !idleFlasher;
WiredHome 125:7a0b70f56550 678 /// if (it_has_been_too_long())
WiredHome 125:7a0b70f56550 679 /// return external_abort;
WiredHome 125:7a0b70f56550 680 /// else
WiredHome 125:7a0b70f56550 681 /// return noerror;
WiredHome 125:7a0b70f56550 682 /// }
WiredHome 125:7a0b70f56550 683 /// @endcode
WiredHome 125:7a0b70f56550 684 ///
WiredHome 125:7a0b70f56550 685 /// @param reason informs the callback why it is idle.
WiredHome 149:c62c4b2d6a15 686 /// @param param is a 2nd parameter, which is used for certain reason codes
WiredHome 149:c62c4b2d6a15 687 /// for 'progress' reason code, param ranges from 0 to 100 (percent)
WiredHome 167:8aa3fb2a5a31 688 /// @returns @ref RetCode_t value.
WiredHome 123:2f45e80fec5f 689 ///
WiredHome 190:3132b7dfad82 690 typedef RetCode_t (* IdleCallback_T)(IdleReason_T reason, uint16_t param);
WiredHome 190:3132b7dfad82 691
WiredHome 190:3132b7dfad82 692 /// Basic constructor for a display based on the RAiO RA8875
WiredHome 125:7a0b70f56550 693 /// display controller, which can be used with no touchscreen,
WiredHome 125:7a0b70f56550 694 /// or the RA8875 managed resistive touchscreen.
WiredHome 124:1690a7ae871c 695 ///
WiredHome 124:1690a7ae871c 696 /// This constructor differs from the alternate by supportting
WiredHome 124:1690a7ae871c 697 /// either No Touch Screen, or the RA8875 built-in resistive
WiredHome 125:7a0b70f56550 698 /// touch screen. If the application requires the use of the
WiredHome 190:3132b7dfad82 699 /// capacitive touchscreen, the alternate constructor must
WiredHome 125:7a0b70f56550 700 /// be used.
WiredHome 19:3f82c1161fd2 701 ///
WiredHome 61:8f3153bf0baa 702 /// This configures the registers and calls the @ref init method.
WiredHome 61:8f3153bf0baa 703 ///
WiredHome 56:7a85d226ad0d 704 /// @code
WiredHome 56:7a85d226ad0d 705 /// #include "RA8875.h"
WiredHome 56:7a85d226ad0d 706 /// RA8875 lcd(p5, p6, p7, p12, NC, "tft");
WiredHome 56:7a85d226ad0d 707 ///
WiredHome 56:7a85d226ad0d 708 /// int main()
WiredHome 56:7a85d226ad0d 709 /// {
WiredHome 157:1565f38ca44b 710 /// lcd.init(); // defaults for 480x272x16 at low brightness
WiredHome 56:7a85d226ad0d 711 /// lcd.printf("printing 3 x 2 = %d", 3*2);
WiredHome 56:7a85d226ad0d 712 /// lcd.circle(400,25, 25, BrightRed);
WiredHome 56:7a85d226ad0d 713 /// }
WiredHome 56:7a85d226ad0d 714 /// @endcode
WiredHome 56:7a85d226ad0d 715 ///
WiredHome 72:ecffe56af969 716 /// @param[in] mosi is the SPI master out slave in pin on the mbed.
WiredHome 72:ecffe56af969 717 /// @param[in] miso is the SPI master in slave out pin on the mbed.
WiredHome 72:ecffe56af969 718 /// @param[in] sclk is the SPI shift clock pin on the mbed.
WiredHome 72:ecffe56af969 719 /// @param[in] csel is the DigitalOut pin on the mbed to use as the
WiredHome 19:3f82c1161fd2 720 /// active low chip select for the display controller.
WiredHome 190:3132b7dfad82 721 /// @param[in] reset is the DigitalOut pin on the mbed to use as the
WiredHome 190:3132b7dfad82 722 /// active low reset input on the display controller -
WiredHome 19:3f82c1161fd2 723 /// but this is not currently used.
WiredHome 72:ecffe56af969 724 /// @param[in] name is a text name for this object, which will permit
WiredHome 72:ecffe56af969 725 /// capturing stdout to puts() and printf() directly to it.
WiredHome 19:3f82c1161fd2 726 ///
WiredHome 190:3132b7dfad82 727 RA8875(PinName mosi, PinName miso, PinName sclk, PinName csel, PinName reset,
WiredHome 124:1690a7ae871c 728 const char * name = "lcd");
WiredHome 190:3132b7dfad82 729
WiredHome 190:3132b7dfad82 730
WiredHome 190:3132b7dfad82 731 /// Constructor for a display based on the RAiO RA8875 display controller
WiredHome 165:695c24cc5197 732 /// (using the FT5206 Capacitive TouchScreen Controller)
WiredHome 124:1690a7ae871c 733 ///
WiredHome 125:7a0b70f56550 734 /// @code
WiredHome 125:7a0b70f56550 735 /// #include "RA8875.h"
WiredHome 125:7a0b70f56550 736 /// RA8875 lcd(p5, p6, p7, p12, NC, p9,p10,p13, "tft");
WiredHome 190:3132b7dfad82 737 ///
WiredHome 125:7a0b70f56550 738 /// int main()
WiredHome 125:7a0b70f56550 739 /// {
WiredHome 125:7a0b70f56550 740 /// lcd.init();
WiredHome 125:7a0b70f56550 741 /// lcd.printf("printing 3 x 2 = %d", 3*2);
WiredHome 125:7a0b70f56550 742 /// lcd.circle(400,25, 25, BrightRed);
WiredHome 125:7a0b70f56550 743 /// TouchCode_t tp = lcd.TouchPanelReadable();
WiredHome 125:7a0b70f56550 744 /// if (tp == touch)
WiredHome 125:7a0b70f56550 745 /// ...
WiredHome 125:7a0b70f56550 746 /// }
WiredHome 125:7a0b70f56550 747 /// @endcode
WiredHome 125:7a0b70f56550 748 ///
WiredHome 124:1690a7ae871c 749 /// @param[in] mosi is the SPI master out slave in pin on the mbed.
WiredHome 124:1690a7ae871c 750 /// @param[in] miso is the SPI master in slave out pin on the mbed.
WiredHome 124:1690a7ae871c 751 /// @param[in] sclk is the SPI shift clock pin on the mbed.
WiredHome 124:1690a7ae871c 752 /// @param[in] csel is the DigitalOut pin on the mbed to use as the
WiredHome 124:1690a7ae871c 753 /// active low chip select for the display controller.
WiredHome 190:3132b7dfad82 754 /// @param[in] reset is the DigitalOut pin on the mbed to use as the
WiredHome 190:3132b7dfad82 755 /// active low reset input on the display controller -
WiredHome 124:1690a7ae871c 756 /// but this is not currently used.
WiredHome 124:1690a7ae871c 757 /// @param[in] sda is the I2C Serial Data pin you are wiring to the FT5206.
WiredHome 124:1690a7ae871c 758 /// @param[in] scl is the I2C Serial Clock pin you are wiring to the FT5206.
WiredHome 124:1690a7ae871c 759 /// @param[in] irq is the Interrupt Request pin you are wiring to the FT5206.
WiredHome 124:1690a7ae871c 760 /// @param[in] name is a text name for this object, which will permit
WiredHome 124:1690a7ae871c 761 /// capturing stdout to puts() and printf() directly to it.
WiredHome 124:1690a7ae871c 762 ///
WiredHome 190:3132b7dfad82 763 RA8875(PinName mosi, PinName miso, PinName sclk, PinName csel, PinName reset,
WiredHome 124:1690a7ae871c 764 PinName sda, PinName scl, PinName irq, const char * name = "lcd");
WiredHome 190:3132b7dfad82 765
WiredHome 190:3132b7dfad82 766
WiredHome 190:3132b7dfad82 767 /// Constructor for a display based on the RAiO RA8875 display controller
WiredHome 165:695c24cc5197 768 /// (using the GSL1680 Capacitive TouchScreen Controller)
WiredHome 165:695c24cc5197 769 ///
WiredHome 165:695c24cc5197 770 /// @code
WiredHome 165:695c24cc5197 771 /// #include "RA8875.h"
WiredHome 165:695c24cc5197 772 /// RA8875 lcd(p5, p6, p7, p12, NC, p9,p10,p13,p14, "tft");
WiredHome 190:3132b7dfad82 773 ///
WiredHome 165:695c24cc5197 774 /// int main()
WiredHome 165:695c24cc5197 775 /// {
WiredHome 165:695c24cc5197 776 /// lcd.init();
WiredHome 165:695c24cc5197 777 /// lcd.printf("printing 3 x 2 = %d", 3*2);
WiredHome 165:695c24cc5197 778 /// lcd.circle(400,25, 25, BrightRed);
WiredHome 165:695c24cc5197 779 /// TouchCode_t tp = lcd.TouchPanelReadable();
WiredHome 165:695c24cc5197 780 /// if (tp == touch)
WiredHome 165:695c24cc5197 781 /// ...
WiredHome 165:695c24cc5197 782 /// }
WiredHome 165:695c24cc5197 783 /// @endcode
WiredHome 165:695c24cc5197 784 ///
WiredHome 165:695c24cc5197 785 /// @param[in] mosi is the SPI master out slave in pin on the mbed.
WiredHome 165:695c24cc5197 786 /// @param[in] miso is the SPI master in slave out pin on the mbed.
WiredHome 165:695c24cc5197 787 /// @param[in] sclk is the SPI shift clock pin on the mbed.
WiredHome 165:695c24cc5197 788 /// @param[in] csel is the DigitalOut pin on the mbed to use as the
WiredHome 165:695c24cc5197 789 /// active low chip select for the display controller.
WiredHome 190:3132b7dfad82 790 /// @param[in] reset is the DigitalOut pin on the mbed to use as the
WiredHome 190:3132b7dfad82 791 /// active low reset input on the display controller -
WiredHome 165:695c24cc5197 792 /// but this is not currently used.
WiredHome 165:695c24cc5197 793 /// @param[in] sda is the I2C Serial Data pin you are wiring to the GSL1680.
WiredHome 165:695c24cc5197 794 /// @param[in] scl is the I2C Serial Clock pin you are wiring to the GSL1680.
WiredHome 165:695c24cc5197 795 /// @param[in] wake is the wake control pin you are wiring to the GSL1680.
WiredHome 165:695c24cc5197 796 /// @param[in] irq is the Interrupt Request pin you are wiring to the GSL1680.
WiredHome 165:695c24cc5197 797 /// @param[in] name is a text name for this object, which will permit
WiredHome 165:695c24cc5197 798 /// capturing stdout to puts() and printf() directly to it.
WiredHome 165:695c24cc5197 799 ///
WiredHome 190:3132b7dfad82 800 RA8875(PinName mosi, PinName miso, PinName sclk, PinName csel, PinName reset,
WiredHome 165:695c24cc5197 801 PinName sda, PinName scl, PinName wake, PinName irq, const char * name = "lcd");
WiredHome 190:3132b7dfad82 802
WiredHome 190:3132b7dfad82 803
WiredHome 45:679c2fb8480c 804 // Destructor doesn't have much to do as this would typically be created
WiredHome 45:679c2fb8480c 805 // at startup, and not at runtime.
WiredHome 19:3f82c1161fd2 806 //~RA8875();
WiredHome 190:3132b7dfad82 807
WiredHome 79:544eb4964795 808 /// Initialize the driver.
WiredHome 79:544eb4964795 809 ///
WiredHome 190:3132b7dfad82 810 /// The RA8875 can control typical displays from the 480x272 to 800x480, and it supports 8 or 16-bit color.
WiredHome 190:3132b7dfad82 811 /// It also supports 2 graphics layers, but it cannot support 2 layers at the maximum color depth and
WiredHome 190:3132b7dfad82 812 /// screen size. When configured under 480x400, it will support both 16-bit color depth and 2 drawing layers.
WiredHome 132:a5d7a8541683 813 /// Above 480x400 it support either 16-bit color, or 2 layers, but not both.
WiredHome 132:a5d7a8541683 814 ///
WiredHome 132:a5d7a8541683 815 /// Typical of the displays that are readily purchased, you will find 480x272 and 800x480 resolutions.
WiredHome 106:c80828f5dea4 816 ///
WiredHome 81:01da2e34283d 817 /// @param[in] width in pixels to configure the display for. This parameter is optional
WiredHome 81:01da2e34283d 818 /// and the default is 480.
WiredHome 81:01da2e34283d 819 /// @param[in] height in pixels to configure the display for. This parameter is optional
WiredHome 81:01da2e34283d 820 /// and the default is 272.
WiredHome 81:01da2e34283d 821 /// @param[in] color_bpp can be either 8 or 16, but must be consistent
WiredHome 81:01da2e34283d 822 /// with the width and height parameters. This parameter is optional
WiredHome 81:01da2e34283d 823 /// and the default is 16.
WiredHome 131:5bd6ba2ee4a1 824 /// @param[in] poweron defines if the display should be initialized into the power-on or off state.
WiredHome 132:a5d7a8541683 825 /// If power is non-zero(on), the backlight is set to this value. This parameter is optional
WiredHome 157:1565f38ca44b 826 /// and the default is 40 (on at a low brightness level because many users power
WiredHome 157:1565f38ca44b 827 /// the module from their PC USB port and it often cannot support the curent
WiredHome 157:1565f38ca44b 828 /// required for full brightness). See @ref Power.
WiredHome 81:01da2e34283d 829 /// @param[in] keypadon defines if the keypad support should be enabled. This parameter is optional
WiredHome 106:c80828f5dea4 830 /// and the default is true (enabled). See @ref KeypadInit.
WiredHome 190:3132b7dfad82 831 /// @param[in] touchscreeenon defines if the touchscreen support should be enabled.
WiredHome 132:a5d7a8541683 832 /// This parameter is optional and the default is true (enabled). See @ref TouchPanelInit.
WiredHome 190:3132b7dfad82 833 /// - If the constructor was called with support for the capacitive driver, this
WiredHome 124:1690a7ae871c 834 /// parameter causes the driver to initialize.
WiredHome 124:1690a7ae871c 835 /// - If the constructor was called without support for the capacitive driver, this
WiredHome 124:1690a7ae871c 836 /// parameter is used to enable and initialize the resistive touchscreen driver.
WiredHome 167:8aa3fb2a5a31 837 /// @returns @ref RetCode_t value.
WiredHome 79:544eb4964795 838 ///
WiredHome 190:3132b7dfad82 839 RetCode_t init(int width = 480, int height = 272, int color_bpp = 16,
WiredHome 157:1565f38ca44b 840 uint8_t poweron = 40, bool keypadon = true, bool touchscreeenon = true);
WiredHome 124:1690a7ae871c 841
WiredHome 125:7a0b70f56550 842
WiredHome 167:8aa3fb2a5a31 843 /// Get a pointer to the text string representing the RetCode_t
WiredHome 79:544eb4964795 844 ///
WiredHome 79:544eb4964795 845 /// This method returns a pointer to a text string that matches the
WiredHome 106:c80828f5dea4 846 /// code. See @ref RetCode_t.
WiredHome 79:544eb4964795 847 ///
WiredHome 79:544eb4964795 848 /// @param[in] code is the return value from RetCode_t to look up.
WiredHome 79:544eb4964795 849 /// @returns a pointer to the text message representing code. If code
WiredHome 79:544eb4964795 850 /// is not a valid value, then it returns the text for bad_parameter;
WiredHome 125:7a0b70f56550 851 ///
WiredHome 79:544eb4964795 852 const char * GetErrorMessage(RetCode_t code);
WiredHome 190:3132b7dfad82 853
WiredHome 190:3132b7dfad82 854
WiredHome 50:2c4f474a2453 855 /// Select the drawing layer for subsequent commands.
WiredHome 43:3becae133285 856 ///
WiredHome 190:3132b7dfad82 857 /// If the screen configuration is 480 x 272, or if it is 800 x 480
WiredHome 190:3132b7dfad82 858 /// and 8-bit color, the the display supports two layers, which can
WiredHome 43:3becae133285 859 /// be independently drawn on and shown. Additionally, complex
WiredHome 43:3becae133285 860 /// operations involving both layers are permitted.
WiredHome 43:3becae133285 861 ///
WiredHome 142:6e9bff59878a 862 /// @attention If the current display configuration does not support
WiredHome 142:6e9bff59878a 863 /// multiple layers, then layer 0 will be selected.
WiredHome 142:6e9bff59878a 864 ///
WiredHome 56:7a85d226ad0d 865 /// @code
WiredHome 56:7a85d226ad0d 866 /// //lcd.SetLayerMode(OnlyLayer0); // default is layer 0
WiredHome 56:7a85d226ad0d 867 /// lcd.rect(400,130, 475,155,Brown);
WiredHome 56:7a85d226ad0d 868 /// lcd.SelectDrawingLayer(1);
WiredHome 56:7a85d226ad0d 869 /// lcd.circle(400,25, 25, BrightRed);
WiredHome 56:7a85d226ad0d 870 /// wait(1);
WiredHome 56:7a85d226ad0d 871 /// lcd.SetLayerMode(ShowLayer1);
WiredHome 56:7a85d226ad0d 872 /// @endcode
WiredHome 56:7a85d226ad0d 873 ///
WiredHome 61:8f3153bf0baa 874 /// @attention The user manual refers to Layer 1 and Layer 2, however the
WiredHome 61:8f3153bf0baa 875 /// actual register values are value 0 and 1. This API as well as
WiredHome 61:8f3153bf0baa 876 /// others that reference the layers use the values 0 and 1 for
WiredHome 61:8f3153bf0baa 877 /// cleaner iteration in the code.
WiredHome 43:3becae133285 878 ///
WiredHome 190:3132b7dfad82 879 /// @param[in] layer is 0 or 1 to select the layer for subsequent
WiredHome 61:8f3153bf0baa 880 /// commands.
WiredHome 143:e872d65a710d 881 /// @param[out] prevLayer is an optiona pointer to where the previous layer
WiredHome 143:e872d65a710d 882 /// will be written, making it a little easer to restore layers.
WiredHome 143:e872d65a710d 883 /// Writes 0 or 1 when the pointer is not NULL.
WiredHome 167:8aa3fb2a5a31 884 /// @returns @ref RetCode_t value.
WiredHome 143:e872d65a710d 885 ///
WiredHome 143:e872d65a710d 886 virtual RetCode_t SelectDrawingLayer(uint16_t layer, uint16_t * prevLayer = NULL);
WiredHome 190:3132b7dfad82 887
WiredHome 190:3132b7dfad82 888
WiredHome 61:8f3153bf0baa 889 /// Get the currently active drawing layer.
WiredHome 61:8f3153bf0baa 890 ///
WiredHome 61:8f3153bf0baa 891 /// This returns a value, 0 or 1, based on the screen configuration
WiredHome 61:8f3153bf0baa 892 /// and the currently active drawing layer.
WiredHome 61:8f3153bf0baa 893 ///
WiredHome 61:8f3153bf0baa 894 /// @code
WiredHome 61:8f3153bf0baa 895 /// uint16_t prevLayer = lcd.GetDrawingLayer();
WiredHome 61:8f3153bf0baa 896 /// lcd.SelectDrawingLayer(x);
WiredHome 61:8f3153bf0baa 897 /// lcd.circle(400,25, 25, BrightRed);
WiredHome 61:8f3153bf0baa 898 /// lcd.SelectDrawingLayer(prevLayer);
WiredHome 61:8f3153bf0baa 899 /// @endcode
WiredHome 61:8f3153bf0baa 900 ///
WiredHome 61:8f3153bf0baa 901 /// @attention The user manual refers to Layer 1 and Layer 2, however the
WiredHome 61:8f3153bf0baa 902 /// actual register values are value 0 and 1. This API as well as
WiredHome 61:8f3153bf0baa 903 /// others that reference the layers use the values 0 and 1 for
WiredHome 61:8f3153bf0baa 904 /// cleaner iteration in the code.
WiredHome 61:8f3153bf0baa 905 ///
WiredHome 61:8f3153bf0baa 906 /// @returns the current drawing layer; 0 or 1.
WiredHome 190:3132b7dfad82 907 ///
WiredHome 142:6e9bff59878a 908 virtual uint16_t GetDrawingLayer(void);
WiredHome 190:3132b7dfad82 909
WiredHome 190:3132b7dfad82 910
WiredHome 44:207594dece70 911 /// Set the Layer presentation mode.
WiredHome 44:207594dece70 912 ///
WiredHome 44:207594dece70 913 /// This sets the presentation mode for layers, and permits showing
WiredHome 44:207594dece70 914 /// a single layer, or applying a mode where the two layers
WiredHome 44:207594dece70 915 /// are combined using one of the hardware methods.
WiredHome 44:207594dece70 916 ///
WiredHome 61:8f3153bf0baa 917 /// Refer to the RA8875 data sheet for full details.
WiredHome 61:8f3153bf0baa 918 ///
WiredHome 56:7a85d226ad0d 919 /// @code
WiredHome 56:7a85d226ad0d 920 /// //lcd.SetLayerMode(OnlyLayer0); // default is layer 0
WiredHome 56:7a85d226ad0d 921 /// lcd.rect(400,130, 475,155,Brown);
WiredHome 56:7a85d226ad0d 922 /// lcd.SelectDrawingLayer(1);
WiredHome 56:7a85d226ad0d 923 /// lcd.circle(400,25, 25, BrightRed);
WiredHome 56:7a85d226ad0d 924 /// wait(1);
WiredHome 56:7a85d226ad0d 925 /// lcd.SetLayerMode(ShowLayer1);
WiredHome 56:7a85d226ad0d 926 /// @endcode
WiredHome 56:7a85d226ad0d 927 ///
WiredHome 72:ecffe56af969 928 /// @param[in] mode sets the mode in the Layer Transparency Register.
WiredHome 167:8aa3fb2a5a31 929 /// @returns @ref RetCode_t value.
WiredHome 44:207594dece70 930 ///
WiredHome 53:86d24b9480b9 931 RetCode_t SetLayerMode(LayerMode_T mode);
WiredHome 190:3132b7dfad82 932
WiredHome 190:3132b7dfad82 933
WiredHome 82:f7d300f26540 934 /// Get the Layer presentation mode.
WiredHome 82:f7d300f26540 935 ///
WiredHome 106:c80828f5dea4 936 /// This gets the current layer mode. See @ref LayerMode_T.
WiredHome 82:f7d300f26540 937 ///
WiredHome 82:f7d300f26540 938 /// @returns layer mode.
WiredHome 82:f7d300f26540 939 ///
WiredHome 82:f7d300f26540 940 LayerMode_T GetLayerMode(void);
WiredHome 190:3132b7dfad82 941
WiredHome 190:3132b7dfad82 942
WiredHome 44:207594dece70 943 /// Set the layer transparency for each layer.
WiredHome 44:207594dece70 944 ///
WiredHome 44:207594dece70 945 /// Set the transparency, where the range of values is
WiredHome 44:207594dece70 946 /// from zero (fully visible) to eight (fully transparent).
WiredHome 44:207594dece70 947 /// The input value is automatically limited to this range.
WiredHome 44:207594dece70 948 ///
WiredHome 56:7a85d226ad0d 949 /// @code
WiredHome 56:7a85d226ad0d 950 /// // draw something on each layer, then step-fade across
WiredHome 56:7a85d226ad0d 951 /// display.SetLayerMode(RA8875::TransparentMode);
WiredHome 56:7a85d226ad0d 952 /// for (i=0; i<=8; i++) {
WiredHome 56:7a85d226ad0d 953 /// display.SetLayerTransparency(i, 8-i);
WiredHome 56:7a85d226ad0d 954 /// wait_ms(200);
WiredHome 56:7a85d226ad0d 955 /// }
WiredHome 56:7a85d226ad0d 956 /// @endcode
WiredHome 56:7a85d226ad0d 957 ///
WiredHome 72:ecffe56af969 958 /// @param[in] layer1 sets the layer 1 transparency.
WiredHome 72:ecffe56af969 959 /// @param[in] layer2 sets the layer 2 transparency.
WiredHome 167:8aa3fb2a5a31 960 /// @returns @ref RetCode_t value.
WiredHome 190:3132b7dfad82 961 ///
WiredHome 44:207594dece70 962 RetCode_t SetLayerTransparency(uint8_t layer1, uint8_t layer2);
WiredHome 190:3132b7dfad82 963
WiredHome 190:3132b7dfad82 964
WiredHome 53:86d24b9480b9 965 /// Set the background color register used for transparency.
WiredHome 53:86d24b9480b9 966 ///
WiredHome 53:86d24b9480b9 967 /// This command sets the background color registers that are used
WiredHome 53:86d24b9480b9 968 /// in the transparent color operations involving the layers.
WiredHome 190:3132b7dfad82 969 ///
WiredHome 72:ecffe56af969 970 /// @param[in] color is optional and expressed in 16-bit format. If not
WiredHome 53:86d24b9480b9 971 /// supplied, a default of Black is used.
WiredHome 167:8aa3fb2a5a31 972 /// @returns @ref RetCode_t value.
WiredHome 53:86d24b9480b9 973 ///
WiredHome 53:86d24b9480b9 974 RetCode_t SetBackgroundTransparencyColor(color_t color = RGB(0,0,0));
WiredHome 190:3132b7dfad82 975
WiredHome 190:3132b7dfad82 976
WiredHome 73:f22a18707b5e 977 /// Get the background color value used for transparency.
WiredHome 73:f22a18707b5e 978 ///
WiredHome 73:f22a18707b5e 979 /// This command reads the background color registers that define
WiredHome 73:f22a18707b5e 980 /// the transparency color for operations involving layers.
WiredHome 73:f22a18707b5e 981 ///
WiredHome 73:f22a18707b5e 982 /// @returns the color.
WiredHome 73:f22a18707b5e 983 ///
WiredHome 73:f22a18707b5e 984 color_t GetBackgroundTransparencyColor(void);
WiredHome 190:3132b7dfad82 985
WiredHome 190:3132b7dfad82 986
WiredHome 190:3132b7dfad82 987 /// Initialize theTouch Panel controller with default values
hexley 54:e117ad10fba6 988 ///
WiredHome 78:faf49c381591 989 /// This activates the simplified touch panel init, which may work for
WiredHome 78:faf49c381591 990 /// most uses. The alternate API is available if fine-grained control
WiredHome 124:1690a7ae871c 991 /// of the numerous settings of the resistive panel is needed.
WiredHome 78:faf49c381591 992 ///
WiredHome 157:1565f38ca44b 993 /// Additionally, for an even simpler interface for most RESISTIVE
WiredHome 157:1565f38ca44b 994 /// touch use cases, the init() method can perform the calibration.
WiredHome 157:1565f38ca44b 995 ///
WiredHome 167:8aa3fb2a5a31 996 /// @returns @ref RetCode_t value.
WiredHome 56:7a85d226ad0d 997 ///
hexley 54:e117ad10fba6 998 RetCode_t TouchPanelInit(void);
WiredHome 190:3132b7dfad82 999
WiredHome 190:3132b7dfad82 1000
hexley 54:e117ad10fba6 1001 /// Initialize the Touch Panel controller with detailed settings.
hexley 54:e117ad10fba6 1002 ///
WiredHome 78:faf49c381591 1003 /// This is the detailed touch panel init, which provides the ability
WiredHome 124:1690a7ae871c 1004 /// to set nearly every option.
WiredHome 124:1690a7ae871c 1005 ///
WiredHome 124:1690a7ae871c 1006 /// @note If the capacitive touch panel was constructed, this behaves
WiredHome 124:1690a7ae871c 1007 /// the same as the simplified version.
WiredHome 78:faf49c381591 1008 ///
hexley 54:e117ad10fba6 1009 /// @param[in] bTpEnable Touch Panel enable/disable control:
hexley 54:e117ad10fba6 1010 /// - TP_ENABLE: enable the touch panel
hexley 54:e117ad10fba6 1011 /// - TP_DISABLE: disable the touch panel
WiredHome 56:7a85d226ad0d 1012 /// @param[in] bTpAutoManual Touch Panel operating mode:
hexley 54:e117ad10fba6 1013 /// - TP_MODE_AUTO: automatic capture
hexley 54:e117ad10fba6 1014 /// - TP_MODE_MANUAL: manual capture
WiredHome 56:7a85d226ad0d 1015 /// @param[in] bTpDebounce Debounce circuit enable for touch panel interrupt:
hexley 54:e117ad10fba6 1016 /// - TP_DEBOUNCE_OFF: disable the debounce circuit
WiredHome 190:3132b7dfad82 1017 /// - TP_DEBOUNCE_ON: enable the debounce circuit
WiredHome 56:7a85d226ad0d 1018 /// @param[in] bTpManualMode When Manual Mode is selected, this sets the mode:
WiredHome 190:3132b7dfad82 1019 /// - TP_MANUAL_IDLE: touch panel is idle
WiredHome 190:3132b7dfad82 1020 /// - TP_MANUAL_WAIT: wait for touch panel event
WiredHome 190:3132b7dfad82 1021 /// - TP_MANUAL_LATCH_X: latch X data
WiredHome 190:3132b7dfad82 1022 /// - TP_MANUAL_LATCH_Y: latch Y data
WiredHome 56:7a85d226ad0d 1023 /// @param[in] bTpAdcClkDiv Sets the ADC clock as a fraction of the System CLK:
WiredHome 190:3132b7dfad82 1024 /// - TP_ADC_CLKDIV_1: Use CLK
WiredHome 190:3132b7dfad82 1025 /// - TP_ADC_CLKDIV_2: Use CLK/2
WiredHome 190:3132b7dfad82 1026 /// - TP_ADC_CLKDIV_4: Use CLK/4
WiredHome 190:3132b7dfad82 1027 /// - TP_ADC_CLKDIV_8: Use CLK/8
WiredHome 190:3132b7dfad82 1028 /// - TP_ADC_CLKDIV_16: Use CLK/16
WiredHome 190:3132b7dfad82 1029 /// - TP_ADC_CLKDIV_32: Use CLK/32
WiredHome 190:3132b7dfad82 1030 /// - TP_ADC_CLKDIV_64: Use CLK/64
WiredHome 190:3132b7dfad82 1031 /// - TP_ADC_CLKDIV_128: Use CLK/128
WiredHome 56:7a85d226ad0d 1032 /// @param[in] bTpAdcSampleTime Touch Panel sample time delay before ADC data is ready:
WiredHome 190:3132b7dfad82 1033 /// - TP_ADC_SAMPLE_512_CLKS: Wait 512 system clocks
WiredHome 190:3132b7dfad82 1034 /// - TP_ADC_SAMPLE_1024_CLKS: Wait 1024 system clocks
WiredHome 190:3132b7dfad82 1035 /// - TP_ADC_SAMPLE_2048_CLKS: Wait 2048 system clocks
WiredHome 190:3132b7dfad82 1036 /// - TP_ADC_SAMPLE_4096_CLKS: Wait 4096 system clocks
WiredHome 190:3132b7dfad82 1037 /// - TP_ADC_SAMPLE_8192_CLKS: Wait 8192 system clocks
WiredHome 190:3132b7dfad82 1038 /// - TP_ADC_SAMPLE_16384_CLKS: Wait 16384 system clocks
WiredHome 190:3132b7dfad82 1039 /// - TP_ADC_SAMPLE_32768_CLKS: Wait 32768 system clocks
hexley 54:e117ad10fba6 1040 /// - TP_ADC_SAMPLE_65536_CLKS: Wait 65536 system clocks
WiredHome 190:3132b7dfad82 1041 /// @returns @ref RetCode_t value.
WiredHome 190:3132b7dfad82 1042 ///
WiredHome 190:3132b7dfad82 1043 RetCode_t TouchPanelInit(uint8_t bTpEnable, uint8_t bTpAutoManual, uint8_t bTpDebounce,
WiredHome 78:faf49c381591 1044 uint8_t bTpManualMode, uint8_t bTpAdcClkDiv, uint8_t bTpAdcSampleTime);
WiredHome 190:3132b7dfad82 1045
WiredHome 190:3132b7dfad82 1046
WiredHome 123:2f45e80fec5f 1047 /// Get the screen calibrated point of touch.
WiredHome 123:2f45e80fec5f 1048 ///
WiredHome 123:2f45e80fec5f 1049 /// This method determines if there is a touch and if so it will provide
WiredHome 123:2f45e80fec5f 1050 /// the screen-relative touch coordinates. This method can be used in
WiredHome 190:3132b7dfad82 1051 /// a manner similar to Serial.readable(), to determine if there was a
WiredHome 123:2f45e80fec5f 1052 /// touch and indicate that - but not care about the coordinates. Alternately,
WiredHome 123:2f45e80fec5f 1053 /// if a valid pointer to a point_t is provided, then if a touch is detected
WiredHome 190:3132b7dfad82 1054 /// the point_t will be populated with data.
WiredHome 123:2f45e80fec5f 1055 ///
WiredHome 123:2f45e80fec5f 1056 /// @code
WiredHome 123:2f45e80fec5f 1057 /// Timer t;
WiredHome 123:2f45e80fec5f 1058 /// t.start();
WiredHome 123:2f45e80fec5f 1059 /// do {
WiredHome 123:2f45e80fec5f 1060 /// point_t point = {0, 0};
WiredHome 123:2f45e80fec5f 1061 /// if (display.TouchPanelReadable(&point)) {
WiredHome 123:2f45e80fec5f 1062 /// display.pixel(point, Red);
WiredHome 123:2f45e80fec5f 1063 /// }
WiredHome 123:2f45e80fec5f 1064 /// } while (t.read_ms() < 30000);
WiredHome 123:2f45e80fec5f 1065 /// @endcode
WiredHome 123:2f45e80fec5f 1066 ///
WiredHome 190:3132b7dfad82 1067 /// @param[out] TouchPoint is a pointer to a point_t, which is set as the touch point,
WiredHome 165:695c24cc5197 1068 /// if a touch is registered.
WiredHome 123:2f45e80fec5f 1069 /// @returns a value indicating the state of the touch,
WiredHome 123:2f45e80fec5f 1070 /// - no_cal: no calibration matrix is available, touch coordinates are not returned.
WiredHome 123:2f45e80fec5f 1071 /// - no_touch: no touch is detected, touch coordinates are not returned.
WiredHome 123:2f45e80fec5f 1072 /// - touch: touch is detected, touch coordinates are returned.
WiredHome 123:2f45e80fec5f 1073 /// - held: held after touch, touch coordinates are returned.
WiredHome 123:2f45e80fec5f 1074 /// - release: indicates a release, touch coordinates are returned.
WiredHome 123:2f45e80fec5f 1075 ///
WiredHome 123:2f45e80fec5f 1076 TouchCode_t TouchPanelReadable(point_t * TouchPoint = NULL);
WiredHome 123:2f45e80fec5f 1077
WiredHome 125:7a0b70f56550 1078
WiredHome 124:1690a7ae871c 1079 /// Get the reported touch gesture, if any.
WiredHome 190:3132b7dfad82 1080 ///
WiredHome 124:1690a7ae871c 1081 /// If it could detect a gesture, it will return a value based on
WiredHome 132:a5d7a8541683 1082 /// the interpreted gesture.
WiredHome 124:1690a7ae871c 1083 ///
WiredHome 124:1690a7ae871c 1084 /// Valid gesture values are:
WiredHome 124:1690a7ae871c 1085 /// @li 0x00 No gesture
WiredHome 132:a5d7a8541683 1086 /// @li 0x48 Zoom in
WiredHome 132:a5d7a8541683 1087 /// @li 0x49 Zoom out
WiredHome 132:a5d7a8541683 1088 ///
WiredHome 132:a5d7a8541683 1089 /// The following gestures are defined in the FT5206 specification, but
WiredHome 132:a5d7a8541683 1090 /// do not appear to work.
WiredHome 124:1690a7ae871c 1091 /// @li 0x10 Move up
WiredHome 124:1690a7ae871c 1092 /// @li 0x14 Move left
WiredHome 124:1690a7ae871c 1093 /// @li 0x18 Move down
WiredHome 124:1690a7ae871c 1094 /// @li 0x1C Move right
WiredHome 124:1690a7ae871c 1095 ///
WiredHome 124:1690a7ae871c 1096 /// @returns gesture information.
WiredHome 124:1690a7ae871c 1097 ///
WiredHome 124:1690a7ae871c 1098 uint8_t TouchGesture(void) { return gesture; }
WiredHome 190:3132b7dfad82 1099
WiredHome 123:2f45e80fec5f 1100
WiredHome 124:1690a7ae871c 1101 /// Get the count of registered touches.
WiredHome 124:1690a7ae871c 1102 ///
WiredHome 124:1690a7ae871c 1103 /// @returns count of touch points to communicate; 0 to 5.
WiredHome 124:1690a7ae871c 1104 ///
WiredHome 124:1690a7ae871c 1105 int TouchCount(void) { return numberOfTouchPoints; }
WiredHome 125:7a0b70f56550 1106
WiredHome 190:3132b7dfad82 1107
WiredHome 124:1690a7ae871c 1108 /// Get the count of possible touch channels.
WiredHome 124:1690a7ae871c 1109 ///
WiredHome 124:1690a7ae871c 1110 /// @returns count of touch channels supported by the hardware.
WiredHome 124:1690a7ae871c 1111 ///
WiredHome 124:1690a7ae871c 1112 int TouchChannels(void);
WiredHome 125:7a0b70f56550 1113
WiredHome 190:3132b7dfad82 1114
WiredHome 124:1690a7ae871c 1115 /// Get the Touch ID value for a specified touch channel.
WiredHome 124:1690a7ae871c 1116 ///
WiredHome 124:1690a7ae871c 1117 /// Touch ID is a tracking number based on the order of the touch
WiredHome 190:3132b7dfad82 1118 /// detections. The first touch is ID 0, the next is ID 1, and
WiredHome 124:1690a7ae871c 1119 /// so on. If the first touch is lifted (no touch), the touch count
WiredHome 124:1690a7ae871c 1120 /// decrements, and the remaining touch is communicated on
WiredHome 124:1690a7ae871c 1121 /// touch channel zero, even as the Touch ID remains as originally
WiredHome 190:3132b7dfad82 1122 /// reported (1 in this example). In this way, it is easy to track
WiredHome 132:a5d7a8541683 1123 /// a specific touch.
WiredHome 124:1690a7ae871c 1124 ///
WiredHome 124:1690a7ae871c 1125 /// It is possible to query the data for a channel that is not
WiredHome 124:1690a7ae871c 1126 /// presently reported as touched.
WiredHome 124:1690a7ae871c 1127 ///
WiredHome 166:53fd4a876dac 1128 /// @param[in] channel is the touch channel, from 0 to 4, or 0 to TouchChannels()-1
WiredHome 124:1690a7ae871c 1129 /// It defaults to 0, in case the user is not interested in multi-touch.
WiredHome 124:1690a7ae871c 1130 /// @returns the touch ID, or 15 if you get the ID for an untouched channel.
WiredHome 124:1690a7ae871c 1131 /// @returns 0 if an invalid channel is queried.
WiredHome 124:1690a7ae871c 1132 ///
WiredHome 166:53fd4a876dac 1133 uint8_t TouchID(uint8_t channel = 0);
WiredHome 190:3132b7dfad82 1134
WiredHome 124:1690a7ae871c 1135 /// Get the Touch Code for a touch channel.
WiredHome 124:1690a7ae871c 1136 ///
WiredHome 124:1690a7ae871c 1137 /// It is possible to query the data for a channel that is not
WiredHome 124:1690a7ae871c 1138 /// presently reported as touched.
WiredHome 124:1690a7ae871c 1139 ///
WiredHome 166:53fd4a876dac 1140 /// @param[in] channel is the touch channel, from 0 to 4, or 0 to TouchChannels()-1
WiredHome 124:1690a7ae871c 1141 /// It defaults to 0, in case the user is not interested in multi-touch.
WiredHome 124:1690a7ae871c 1142 /// @returns the touch code (@ref TouchCode_t).
WiredHome 124:1690a7ae871c 1143 /// @returns channel 0 information if an invalid channel is queried.
WiredHome 124:1690a7ae871c 1144 ///
WiredHome 166:53fd4a876dac 1145 TouchCode_t TouchCode(uint8_t channel = 0);
WiredHome 124:1690a7ae871c 1146
WiredHome 125:7a0b70f56550 1147
WiredHome 124:1690a7ae871c 1148 /// Get the coordinates for a touch channel.
WiredHome 124:1690a7ae871c 1149 ///
WiredHome 124:1690a7ae871c 1150 /// This returns the (X,Y) coordinates for a touch channel.
WiredHome 132:a5d7a8541683 1151 ///
WiredHome 124:1690a7ae871c 1152 ///
WiredHome 124:1690a7ae871c 1153 /// It is possible to query the data for a channel that is not
WiredHome 124:1690a7ae871c 1154 /// presently reported as touched.
WiredHome 124:1690a7ae871c 1155 ///
WiredHome 166:53fd4a876dac 1156 /// @param[in] channel is an optional touch channel, from 0 to 4, or 0 to TouchChannels()-1.
WiredHome 124:1690a7ae871c 1157 /// It defaults to 0, in case the user is not interested in multi-touch.
WiredHome 124:1690a7ae871c 1158 /// @returns the coordinates as a point_t structure.
WiredHome 124:1690a7ae871c 1159 /// @returns channel 0 information if an invalid channel is queried.
WiredHome 124:1690a7ae871c 1160 ///
WiredHome 166:53fd4a876dac 1161 point_t TouchCoordinates(uint8_t channel = 0);
WiredHome 190:3132b7dfad82 1162
WiredHome 131:5bd6ba2ee4a1 1163
WiredHome 79:544eb4964795 1164 /// Poll the TouchPanel and on a touch event return the a to d filtered x, y coordinates.
hexley 54:e117ad10fba6 1165 ///
WiredHome 78:faf49c381591 1166 /// This method reads the touch controller, which has a 10-bit range for each the
WiredHome 79:544eb4964795 1167 /// x and the y axis.
WiredHome 79:544eb4964795 1168 ///
WiredHome 79:544eb4964795 1169 /// @note The returned values are not in display (pixel) units but are in analog to
WiredHome 79:544eb4964795 1170 /// digital converter units.
WiredHome 190:3132b7dfad82 1171 ///
WiredHome 190:3132b7dfad82 1172 /// @note This API is usually not needed and is likely to be deprecated.
WiredHome 190:3132b7dfad82 1173 /// See @ref TouchPanelComputeCalibration.
WiredHome 106:c80828f5dea4 1174 /// See @ref TouchPanelReadable.
WiredHome 190:3132b7dfad82 1175 ///
WiredHome 79:544eb4964795 1176 /// @param[out] x is the x scale a/d value.
WiredHome 79:544eb4964795 1177 /// @param[out] y is the y scale a/d value.
WiredHome 83:7bad0068cca0 1178 /// @returns a value indicating the state of the touch,
WiredHome 83:7bad0068cca0 1179 /// - no_cal: no calibration matrix is available, touch coordinates are not returned.
WiredHome 83:7bad0068cca0 1180 /// - no_touch: no touch is detected, touch coordinates are not returned.
WiredHome 83:7bad0068cca0 1181 /// - touch: touch is detected, touch coordinates are returned.
WiredHome 83:7bad0068cca0 1182 /// - held: held after touch, touch coordinates are returned.
WiredHome 83:7bad0068cca0 1183 /// - release: indicates a release, touch coordinates are returned.
WiredHome 56:7a85d226ad0d 1184 ///
WiredHome 83:7bad0068cca0 1185 TouchCode_t TouchPanelA2DFiltered(int *x, int *y);
hexley 54:e117ad10fba6 1186
WiredHome 125:7a0b70f56550 1187
WiredHome 79:544eb4964795 1188 /// Poll the TouchPanel and on a touch event return the a to d raw x, y coordinates.
hexley 54:e117ad10fba6 1189 ///
WiredHome 78:faf49c381591 1190 /// This method reads the touch controller, which has a 10-bit range for each the
WiredHome 78:faf49c381591 1191 /// x and the y axis. A number of samples of the raw data are taken, filtered,
WiredHome 190:3132b7dfad82 1192 /// and the results are returned.
WiredHome 78:faf49c381591 1193 ///
WiredHome 79:544eb4964795 1194 /// @note The returned values are not in display (pixel) units but are in analog to
WiredHome 79:544eb4964795 1195 /// digital converter units.
WiredHome 190:3132b7dfad82 1196 ///
WiredHome 190:3132b7dfad82 1197 /// @note This API is usually not needed and is likely to be deprecated.
WiredHome 190:3132b7dfad82 1198 /// See @ref TouchPanelComputeCalibration.
WiredHome 106:c80828f5dea4 1199 /// See @ref TouchPanelReadable.
WiredHome 190:3132b7dfad82 1200 ///
WiredHome 79:544eb4964795 1201 /// @param[out] x is the x scale a/d value.
WiredHome 79:544eb4964795 1202 /// @param[out] y is the y scale a/d value.
WiredHome 83:7bad0068cca0 1203 /// @returns a value indicating the state of the touch,
WiredHome 83:7bad0068cca0 1204 /// - no_cal: no calibration matrix is available, touch coordinates are not returned.
WiredHome 83:7bad0068cca0 1205 /// - no_touch: no touch is detected, touch coordinates are not returned.
WiredHome 83:7bad0068cca0 1206 /// - touch: touch is detected, touch coordinates are returned.
WiredHome 83:7bad0068cca0 1207 /// - held: held after touch, touch coordinates are returned.
WiredHome 83:7bad0068cca0 1208 /// - release: indicates a release, touch coordinates are returned.
WiredHome 83:7bad0068cca0 1209 ///
WiredHome 83:7bad0068cca0 1210 TouchCode_t TouchPanelA2DRaw(int *x, int *y);
WiredHome 125:7a0b70f56550 1211
WiredHome 190:3132b7dfad82 1212
WiredHome 85:022bba13c5c4 1213 /// Wait for a touch panel touch and return it.
WiredHome 190:3132b7dfad82 1214 ///
WiredHome 85:022bba13c5c4 1215 /// This method is similar to Serial.getc() in that it will wait for a touch
WiredHome 85:022bba13c5c4 1216 /// and then return. In order to extract the coordinates of the touch, a
WiredHome 85:022bba13c5c4 1217 /// valid pointer to a point_t must be provided.
WiredHome 85:022bba13c5c4 1218 ///
WiredHome 85:022bba13c5c4 1219 /// @note There is no timeout on this function, so its use is not recommended.
WiredHome 85:022bba13c5c4 1220 ///
WiredHome 85:022bba13c5c4 1221 /// @code
WiredHome 85:022bba13c5c4 1222 /// Timer t;
WiredHome 85:022bba13c5c4 1223 /// t.start();
WiredHome 85:022bba13c5c4 1224 /// do {
WiredHome 85:022bba13c5c4 1225 /// point_t point = {0, 0};
WiredHome 85:022bba13c5c4 1226 /// display.TouchPanelGet(&point); // hangs here until touch
WiredHome 85:022bba13c5c4 1227 /// display.pixel(point, Red);
WiredHome 85:022bba13c5c4 1228 /// } while (t.read_ms() < 30000);
WiredHome 85:022bba13c5c4 1229 /// @endcode
WiredHome 85:022bba13c5c4 1230 ///
WiredHome 85:022bba13c5c4 1231 /// @param[out] TouchPoint is the touch point, if a touch is registered.
WiredHome 85:022bba13c5c4 1232 /// @returns a value indicating the state of the touch,
WiredHome 85:022bba13c5c4 1233 /// - no_cal: no calibration matrix is available, touch coordinates are not returned.
WiredHome 85:022bba13c5c4 1234 /// - no_touch: no touch is detected, touch coordinates are not returned.
WiredHome 85:022bba13c5c4 1235 /// - touch: touch is detected, touch coordinates are returned.
WiredHome 85:022bba13c5c4 1236 /// - held: held after touch, touch coordinates are returned.
WiredHome 85:022bba13c5c4 1237 /// - release: indicates a release, touch coordinates are returned.
WiredHome 85:022bba13c5c4 1238 ///
WiredHome 85:022bba13c5c4 1239 TouchCode_t TouchPanelGet(point_t * TouchPoint);
WiredHome 85:022bba13c5c4 1240
WiredHome 83:7bad0068cca0 1241
WiredHome 157:1565f38ca44b 1242 /// Configuration Option for the Resistive Touch Panel Calibration.
WiredHome 157:1565f38ca44b 1243 ///
WiredHome 157:1565f38ca44b 1244 /// This method is only useful for the resistive touchscreen.
WiredHome 157:1565f38ca44b 1245 ///
WiredHome 157:1565f38ca44b 1246 /// Also, this method is optional - the user can take all of the responsibility
WiredHome 157:1565f38ca44b 1247 /// in their code, or for simplicity sake, this API can be used prior
WiredHome 157:1565f38ca44b 1248 /// to the init method.
WiredHome 157:1565f38ca44b 1249 ///
WiredHome 157:1565f38ca44b 1250 /// @code
WiredHome 157:1565f38ca44b 1251 /// RA8875 lcd(p5, p6, p7, p12, NC);
WiredHome 157:1565f38ca44b 1252 /// ...
WiredHome 190:3132b7dfad82 1253 /// LocalFileSystem local();
WiredHome 157:1565f38ca44b 1254 /// // Be sure you previously mounted the "/sd" file system to put the cal there.
WiredHome 157:1565f38ca44b 1255 /// lcd.ResTouchPanelCfg("/sd/tpcal.cfg", "Touch '+' to calibrate the touch panel");
WiredHome 157:1565f38ca44b 1256 ///
WiredHome 190:3132b7dfad82 1257 /// // Only if the touch panel is enabled, AND is configured as the resistive
WiredHome 157:1565f38ca44b 1258 /// // panel will the prior command be useful.
WiredHome 157:1565f38ca44b 1259 /// lcd.init(LCD_W,LCD_H,LCD_C,40, false, true);
WiredHome 157:1565f38ca44b 1260 ///
WiredHome 157:1565f38ca44b 1261 /// @endcode
WiredHome 157:1565f38ca44b 1262 ///
WiredHome 157:1565f38ca44b 1263 /// @param[in] tpFQFN is a pointer to a fully qualified read-write accessible
WiredHome 157:1565f38ca44b 1264 /// filename where the calibration is held.
WiredHome 157:1565f38ca44b 1265 /// @param[in] tpCalMessage is an optional pointer to a message shown to the
WiredHome 190:3132b7dfad82 1266 /// user in the calibration process.
WiredHome 157:1565f38ca44b 1267 /// - If this parameter is not included, a default message will be shown.
WiredHome 157:1565f38ca44b 1268 /// - If this parameter points to a NULL string, no message is shown.
WiredHome 157:1565f38ca44b 1269 /// - If this parameter points to a non-NULL string, that string will be shown.
WiredHome 157:1565f38ca44b 1270 ///
WiredHome 157:1565f38ca44b 1271 void ResTouchPanelCfg(const char * tpFQFN = NULL, const char * tpCalMessage = NULL);
WiredHome 157:1565f38ca44b 1272
WiredHome 157:1565f38ca44b 1273
WiredHome 77:9206c13aa527 1274 /// Calibrate the touch panel.
WiredHome 77:9206c13aa527 1275 ///
WiredHome 77:9206c13aa527 1276 /// This method accepts two lists - one list is target points in ,
WiredHome 190:3132b7dfad82 1277 /// display coordinates and the other is a lit of raw touch coordinate
WiredHome 77:9206c13aa527 1278 /// values. It generates a calibration matrix for later use. This
WiredHome 77:9206c13aa527 1279 /// matrix is also accessible to the calling API, which may store
WiredHome 77:9206c13aa527 1280 /// the matrix in persistent memory and then install the calibration
WiredHome 77:9206c13aa527 1281 /// matrix on the next power cycle. By doing so, it can avoid the
WiredHome 77:9206c13aa527 1282 /// need to calibrate on every power cycle.
WiredHome 77:9206c13aa527 1283 ///
WiredHome 81:01da2e34283d 1284 /// @note The methods "TouchPanelComputeCalibration", "TouchPanelReadable", and
WiredHome 77:9206c13aa527 1285 /// indirectly the "TouchPanelSetMatrix" methods are all derived
WiredHome 77:9206c13aa527 1286 /// from a program by Carlos E. Vidales. See the copyright note
WiredHome 77:9206c13aa527 1287 /// for further details. See also the article
WiredHome 77:9206c13aa527 1288 /// http://www.embedded.com/design/system-integration/4023968/How-To-Calibrate-Touch-Screens
WiredHome 77:9206c13aa527 1289 ///
WiredHome 167:8aa3fb2a5a31 1290 /// @copyright Copyright &copy; 2001, Carlos E. Vidales. All rights reserved.
WiredHome 190:3132b7dfad82 1291 /// This sample program was written and put in the public domain
WiredHome 190:3132b7dfad82 1292 /// by Carlos E. Vidales. The program is provided "as is"
WiredHome 78:faf49c381591 1293 /// without warranty of any kind, either expressed or implied.
WiredHome 78:faf49c381591 1294 /// If you choose to use the program within your own products
WiredHome 78:faf49c381591 1295 /// you do so at your own risk, and assume the responsibility
WiredHome 78:faf49c381591 1296 /// for servicing, repairing or correcting the program should
WiredHome 78:faf49c381591 1297 /// it prove defective in any manner.
WiredHome 190:3132b7dfad82 1298 /// You may copy and distribute the program's source code in any
WiredHome 78:faf49c381591 1299 /// medium, provided that you also include in each copy an
WiredHome 78:faf49c381591 1300 /// appropriate copyright notice and disclaimer of warranty.
WiredHome 78:faf49c381591 1301 /// You may also modify this program and distribute copies of
WiredHome 190:3132b7dfad82 1302 /// it provided that you include prominent notices stating
WiredHome 78:faf49c381591 1303 /// that you changed the file(s) and the date of any change,
WiredHome 190:3132b7dfad82 1304 /// and that you do not charge any royalties or licenses for
WiredHome 78:faf49c381591 1305 /// its use.
WiredHome 77:9206c13aa527 1306 ///
WiredHome 190:3132b7dfad82 1307 /// @param[in] display is a pointer to a set of 3 points, which
WiredHome 77:9206c13aa527 1308 /// are in display units of measure. These are the targets
WiredHome 77:9206c13aa527 1309 /// the calibration was aiming for.
WiredHome 77:9206c13aa527 1310 /// @param[in] screen is a pointer to a set of 3 points, which
WiredHome 77:9206c13aa527 1311 /// are in touchscreen units of measure. These are the
WiredHome 77:9206c13aa527 1312 /// registered touches.
WiredHome 190:3132b7dfad82 1313 /// @param[out] matrix is an optional parameter to hold the calibration matrix
WiredHome 190:3132b7dfad82 1314 /// as a result of the calibration. This can be saved in
WiredHome 77:9206c13aa527 1315 /// non-volatile memory to recover the calibration after a power fail.
WiredHome 167:8aa3fb2a5a31 1316 /// @returns @ref RetCode_t value.
WiredHome 77:9206c13aa527 1317 ///
WiredHome 81:01da2e34283d 1318 RetCode_t TouchPanelComputeCalibration(point_t display[3], point_t screen[3], tpMatrix_t * matrix);
WiredHome 81:01da2e34283d 1319
WiredHome 81:01da2e34283d 1320
WiredHome 81:01da2e34283d 1321 /// Perform the touch panel calibration process.
WiredHome 81:01da2e34283d 1322 ///
WiredHome 81:01da2e34283d 1323 /// This method provides the easy "shortcut" to calibrating the touch panel.
WiredHome 81:01da2e34283d 1324 /// The process will automatically generate the calibration points, present
WiredHome 81:01da2e34283d 1325 /// the targets on-screen, detect the touches, compute the calibration
WiredHome 81:01da2e34283d 1326 /// matrix, and optionally provide the calibration matrix to the calling code
WiredHome 81:01da2e34283d 1327 /// for persistence in non-volatile memory.
WiredHome 81:01da2e34283d 1328 ///
WiredHome 190:3132b7dfad82 1329 /// @param[out] matrix is an optional parameter to hold the calibration matrix
WiredHome 190:3132b7dfad82 1330 /// as a result of the calibration. This can be saved in
WiredHome 81:01da2e34283d 1331 /// non-volatile memory to recover the calibration after a power fail.
WiredHome 167:8aa3fb2a5a31 1332 /// @returns @ref RetCode_t value.
WiredHome 81:01da2e34283d 1333 ///
WiredHome 85:022bba13c5c4 1334 RetCode_t TouchPanelCalibrate(tpMatrix_t * matrix = NULL);
WiredHome 81:01da2e34283d 1335
WiredHome 125:7a0b70f56550 1336
WiredHome 81:01da2e34283d 1337 /// Perform the touch panel calibration process.
WiredHome 81:01da2e34283d 1338 ///
WiredHome 81:01da2e34283d 1339 /// This method provides the easy "shortcut" to calibrating the touch panel.
WiredHome 81:01da2e34283d 1340 /// The process will automatically generate the calibration points, present
WiredHome 81:01da2e34283d 1341 /// the targets on-screen, detect the touches, compute the calibration
WiredHome 81:01da2e34283d 1342 /// matrix, and optionally provide the calibration matrix to the calling code
WiredHome 81:01da2e34283d 1343 /// for persistence in non-volatile memory.
WiredHome 81:01da2e34283d 1344 ///
WiredHome 81:01da2e34283d 1345 /// @param[in] msg is a text message to present on the screen during the
WiredHome 81:01da2e34283d 1346 /// calibration process.
WiredHome 190:3132b7dfad82 1347 /// @param[out] matrix is an optional parameter to hold the calibration matrix
WiredHome 190:3132b7dfad82 1348 /// as a result of the calibration. This can be saved in
WiredHome 81:01da2e34283d 1349 /// non-volatile memory to recover the calibration after a power fail.
WiredHome 88:bfddef6ec836 1350 /// @param[in] maxwait_s is the maximum number of seconds to wait for a touch
WiredHome 88:bfddef6ec836 1351 /// calibration. If no touch panel installed, it then reports
WiredHome 155:b3f225ae572c 1352 /// touch_cal_timeout. Default: 30 s.
WiredHome 167:8aa3fb2a5a31 1353 /// @returns @ref RetCode_t value.
WiredHome 81:01da2e34283d 1354 ///
WiredHome 155:b3f225ae572c 1355 RetCode_t TouchPanelCalibrate(const char * msg, tpMatrix_t * matrix = NULL, int maxwait_s = 30);
WiredHome 77:9206c13aa527 1356
WiredHome 125:7a0b70f56550 1357
WiredHome 157:1565f38ca44b 1358 /// Set the calibration matrix for the resistive touch panel.
WiredHome 77:9206c13aa527 1359 ///
WiredHome 77:9206c13aa527 1360 /// This method is used to set the calibration matrix for the touch panel. After
WiredHome 106:c80828f5dea4 1361 /// performing the calibration (See @ref TouchPanelComputeCalibration), the matrix can be stored.
WiredHome 77:9206c13aa527 1362 /// On a subsequence power cycle, the matrix may be restored from non-volatile and
WiredHome 77:9206c13aa527 1363 /// passed in to this method. It will then be held to perform the corrections when
WiredHome 77:9206c13aa527 1364 /// reading the touch panel point.
WiredHome 77:9206c13aa527 1365 ///
WiredHome 78:faf49c381591 1366 /// @code
WiredHome 78:faf49c381591 1367 /// FILE * fh = fopen("/local/tpmatrix.cfg", "r");
WiredHome 78:faf49c381591 1368 /// if (fh) {
WiredHome 78:faf49c381591 1369 /// tpMatrix_t matrix;
WiredHome 78:faf49c381591 1370 /// if (fread(fh, &matrix, sizeof(tpMatrix_t))) {
WiredHome 78:faf49c381591 1371 /// lcd.TouchPanelSetMatrix(&matrix);
WiredHome 78:faf49c381591 1372 /// }
WiredHome 78:faf49c381591 1373 /// fclose(fh);
WiredHome 78:faf49c381591 1374 /// }
WiredHome 78:faf49c381591 1375 /// @endcode
WiredHome 190:3132b7dfad82 1376 ///
WiredHome 77:9206c13aa527 1377 /// @param[in] matrix is a pointer to the touch panel calibration matrix.
WiredHome 167:8aa3fb2a5a31 1378 /// @returns @ref RetCode_t value.
WiredHome 77:9206c13aa527 1379 ///
WiredHome 190:3132b7dfad82 1380 ///
WiredHome 77:9206c13aa527 1381 RetCode_t TouchPanelSetMatrix(tpMatrix_t * matrix);
WiredHome 157:1565f38ca44b 1382
WiredHome 157:1565f38ca44b 1383 /// Get the calibration matrix for the resistive touch panel.
WiredHome 157:1565f38ca44b 1384 ///
WiredHome 157:1565f38ca44b 1385 /// This method returns a const pointer to the matrix. If this matrix has
WiredHome 157:1565f38ca44b 1386 /// not be set, with either the TouchPanelSetMatrix API or the calibration
WiredHome 157:1565f38ca44b 1387 /// process, the results are indeterminate.
WiredHome 157:1565f38ca44b 1388 ///
WiredHome 157:1565f38ca44b 1389 /// return const tpMatrix_t pointer
WiredHome 190:3132b7dfad82 1390 ///
WiredHome 157:1565f38ca44b 1391 const tpMatrix_t * TouchPanelGetMatrix();
WiredHome 125:7a0b70f56550 1392
WiredHome 75:ca78388cfd77 1393 #if 0
hexley 54:e117ad10fba6 1394 /// Append interrupt handler for specific RA8875 interrupt source
hexley 54:e117ad10fba6 1395 ///
hexley 54:e117ad10fba6 1396 /// @param[in] bISRType Interrupt Source, should be:
hexley 54:e117ad10fba6 1397 /// - RA8875_INT_KEYSCAN: KEYCAN interrupt
hexley 54:e117ad10fba6 1398 /// - RA8875_INT_DMA: DMA interrupt
hexley 54:e117ad10fba6 1399 /// - RA8875_INT_TP: Touch panel interrupt
hexley 54:e117ad10fba6 1400 /// - RA8875_INT_BTE: BTE process complete interrupt
WiredHome 190:3132b7dfad82 1401 /// - RA8875_INT_BTEMCU_FONTWR: Multi-purpose interrupt (see spec sheet)
WiredHome 56:7a85d226ad0d 1402 /// @param[in] fptr is a callback function to handle the interrupt event.
WiredHome 56:7a85d226ad0d 1403 /// @returns none
hexley 54:e117ad10fba6 1404 ///
hexley 54:e117ad10fba6 1405 void AppendISR(uint8_t bISRType, void(*fptr)(void));
hexley 54:e117ad10fba6 1406
hexley 54:e117ad10fba6 1407 /// Unappend interrupt handler for specific RA8875 interrupt source
hexley 54:e117ad10fba6 1408 ///
hexley 54:e117ad10fba6 1409 /// @param[in] bISRType Interrupt Source, should be:
hexley 54:e117ad10fba6 1410 /// - RA8875_INT_KEYSCAN: KEYCAN interrupt
hexley 54:e117ad10fba6 1411 /// - RA8875_INT_DMA: DMA interrupt
hexley 54:e117ad10fba6 1412 /// - RA8875_INT_TP: Touch panel interrupt
hexley 54:e117ad10fba6 1413 /// - RA8875_INT_BTE: BTE process complete interrupt
WiredHome 190:3132b7dfad82 1414 /// - RA8875_INT_BTEMCU_FONTWR: Multi-purpose interrupt (see spec sheet)
hexley 54:e117ad10fba6 1415 /// @return none
hexley 54:e117ad10fba6 1416 ///
hexley 54:e117ad10fba6 1417 void UnAppendISR(uint8_t bISRType);
WiredHome 75:ca78388cfd77 1418 #endif
WiredHome 77:9206c13aa527 1419
WiredHome 125:7a0b70f56550 1420
WiredHome 71:dcac8efd842d 1421 /// Initialize the keypad interface on the RA8875 controller.
WiredHome 71:dcac8efd842d 1422 ///
WiredHome 71:dcac8efd842d 1423 /// Enables the keypad subsystem. It will scan the 4 x 5 matrix
WiredHome 182:8832d03a2a29 1424 /// and make available key presses. See also @ref SetKeyMap().
WiredHome 71:dcac8efd842d 1425 ///
WiredHome 71:dcac8efd842d 1426 /// @note See section 5-13 of RAIO RA8875 data sheet for more details.
WiredHome 125:7a0b70f56550 1427 /// @note When using the display from buy-display.com, be sure that
WiredHome 71:dcac8efd842d 1428 /// the option for the keypad is configured on the hardware.
WiredHome 71:dcac8efd842d 1429 ///
WiredHome 71:dcac8efd842d 1430 /// All parameters are optional.
WiredHome 76:c981284eb513 1431 /// @param[in] scanEnable when true, enables the key scan function (default: true).
WiredHome 76:c981284eb513 1432 /// @param[in] longDetect when true, additionally enables the long key held detection (default: false).
WiredHome 71:dcac8efd842d 1433 /// @param[in] sampleTime setting (range: 0 - 3, default: 0).
WiredHome 71:dcac8efd842d 1434 /// @param[in] scanFrequency setting (range: 0 - 7, default: 0).
WiredHome 71:dcac8efd842d 1435 /// @param[in] longTimeAdjustment (range: 0 - 3, default: 0).
WiredHome 76:c981284eb513 1436 /// @param[in] interruptEnable when true, enables interrupts from keypress (default: false).
WiredHome 76:c981284eb513 1437 /// @param[in] wakeupEnable when true, activates the wakeup function (default: false).
WiredHome 71:dcac8efd842d 1438 ///
WiredHome 167:8aa3fb2a5a31 1439 /// @returns @ref RetCode_t value.
WiredHome 71:dcac8efd842d 1440 ///
WiredHome 190:3132b7dfad82 1441 RetCode_t KeypadInit(bool scanEnable = true, bool longDetect = false,
WiredHome 190:3132b7dfad82 1442 uint8_t sampleTime = 0, uint8_t scanFrequency = 0,
WiredHome 71:dcac8efd842d 1443 uint8_t longTimeAdjustment = 0,
WiredHome 71:dcac8efd842d 1444 bool interruptEnable = false, bool wakeupEnable = false);
WiredHome 71:dcac8efd842d 1445
WiredHome 125:7a0b70f56550 1446
WiredHome 75:ca78388cfd77 1447 /// Create Key Code definitions for the key matrix.
WiredHome 75:ca78388cfd77 1448 ///
WiredHome 75:ca78388cfd77 1449 /// This API provides a table of 22 key-code assignments for the matrix of keys.
WiredHome 182:8832d03a2a29 1450 /// See also KeypadInit().
WiredHome 75:ca78388cfd77 1451 /// This can be used to translate the keys 1 - 20 into some other value, as
WiredHome 75:ca78388cfd77 1452 /// well as to communicate the "no key" (zero) and "error state" (21).
WiredHome 75:ca78388cfd77 1453 ///
WiredHome 75:ca78388cfd77 1454 /// In this way, a keypad could easily emulate a piece of a keyboard, transforming
WiredHome 75:ca78388cfd77 1455 /// 0 - 20 into the values 0, '0', '1', '2', '3', '4', '5', '6', '7', '8',
WiredHome 125:7a0b70f56550 1456 /// '9', '+', '-', '*' , '/', '=', '(bs)', '(cr)', and so on...
WiredHome 75:ca78388cfd77 1457 ///
WiredHome 75:ca78388cfd77 1458 /// @code
WiredHome 75:ca78388cfd77 1459 /// // Return Value by Row, Column Example reassignment
WiredHome 190:3132b7dfad82 1460 /// // Column 0 1 2 3 4
WiredHome 75:ca78388cfd77 1461 /// // +-------------------------+ +-------------------------+
WiredHome 76:c981284eb513 1462 /// // Row 0 | 1 2 3 4 5 | | '7' '8' '9' ',' '<-' |
WiredHome 75:ca78388cfd77 1463 /// // 1 | 6 7 8 9 10 | | '4' '5' '6' '/' '-' |
WiredHome 75:ca78388cfd77 1464 /// // 2 | 11 12 13 14 15 | | '1' '2' '3' '*' '+' |
WiredHome 76:c981284eb513 1465 /// // 3 | 16 17 18 19 20 | | '0' '.' '(' ')' '\n' |
WiredHome 75:ca78388cfd77 1466 /// // +-------------------------+ +-------------------------+
WiredHome 75:ca78388cfd77 1467 /// // Return value 0 = No Key pressed
WiredHome 75:ca78388cfd77 1468 /// // Return value 21 = Error
WiredHome 190:3132b7dfad82 1469 /// const uint8_t CodeList[22] =
WiredHome 190:3132b7dfad82 1470 /// {0, '7', '8', '9', ',', '\h',
WiredHome 77:9206c13aa527 1471 /// '4', '5', '6', '/', '-',
WiredHome 77:9206c13aa527 1472 /// '1', '2', '3', '*', '+',
WiredHome 190:3132b7dfad82 1473 /// '0', '.', '(', ')', '\n',
WiredHome 77:9206c13aa527 1474 /// '\x1b'};
WiredHome 77:9206c13aa527 1475 /// lcd.SetKeyMap(CodeList);
WiredHome 75:ca78388cfd77 1476 /// @endcode
WiredHome 190:3132b7dfad82 1477 ///
WiredHome 190:3132b7dfad82 1478 /// @param[in] CodeList is a pointer to an always available byte-array
WiredHome 190:3132b7dfad82 1479 /// where the first 22 bytes are used as the transformation
WiredHome 75:ca78388cfd77 1480 /// from raw code to your reassigned value.
WiredHome 75:ca78388cfd77 1481 /// If CodeList is NULL, the original raw value key map is
WiredHome 75:ca78388cfd77 1482 /// restored.
WiredHome 167:8aa3fb2a5a31 1483 /// @returns @ref RetCode_t value.
WiredHome 75:ca78388cfd77 1484 ///
WiredHome 75:ca78388cfd77 1485 RetCode_t SetKeyMap(const uint8_t * CodeList = NULL);
WiredHome 75:ca78388cfd77 1486
WiredHome 125:7a0b70f56550 1487
WiredHome 71:dcac8efd842d 1488 /// Determine if a key has been hit
WiredHome 71:dcac8efd842d 1489 ///
WiredHome 71:dcac8efd842d 1490 /// @returns true if a key has been hit
WiredHome 71:dcac8efd842d 1491 ///
WiredHome 75:ca78388cfd77 1492 bool readable();
WiredHome 71:dcac8efd842d 1493
WiredHome 125:7a0b70f56550 1494
WiredHome 71:dcac8efd842d 1495 /// Blocking read of the keypad.
WiredHome 71:dcac8efd842d 1496 ///
WiredHome 125:7a0b70f56550 1497 /// @note: This is a blocking read, so it is important to first call _kbhit()
WiredHome 71:dcac8efd842d 1498 /// to avoid hanging your processes.
WiredHome 71:dcac8efd842d 1499 ///
WiredHome 71:dcac8efd842d 1500 /// A keypad connected to the RA8875 is connected in a matrix of 4 rows and 5 columns.
WiredHome 75:ca78388cfd77 1501 /// When pressed, this method will return a code in the range of 1 through 20, reserving
WiredHome 75:ca78388cfd77 1502 /// the value 0 to indicate that no key is pressed.
WiredHome 71:dcac8efd842d 1503 ///
WiredHome 71:dcac8efd842d 1504 /// Additionally, if configured to detect a "long press", bit 7 will be set to indicate
WiredHome 71:dcac8efd842d 1505 /// this. In this situation, first a "normal press" would be detected and signaled and
WiredHome 71:dcac8efd842d 1506 /// soon after that a "long press" of the same key would be detected and communicated.
WiredHome 71:dcac8efd842d 1507 ///
WiredHome 75:ca78388cfd77 1508 /// @return 8-bit where bit 7 indicates a long press. The remaining bits indicate the
WiredHome 75:ca78388cfd77 1509 /// keypress using 0 = no key pressed, 1 - 20 = the key pressed.
WiredHome 71:dcac8efd842d 1510 ///
WiredHome 75:ca78388cfd77 1511 uint8_t getc();
WiredHome 190:3132b7dfad82 1512
WiredHome 190:3132b7dfad82 1513
WiredHome 190:3132b7dfad82 1514 /// Align one rectangle against another.
WiredHome 190:3132b7dfad82 1515 ///
WiredHome 190:3132b7dfad82 1516 /// This will accept a rectangle to align and align it against another rectangle.
WiredHome 190:3132b7dfad82 1517 /// It would be most typical if the rectangle to align is smaller than the reference rectangle.
WiredHome 190:3132b7dfad82 1518 ///
WiredHome 190:3132b7dfad82 1519 /// @param[in] toAlign is a rectangular region to align against another.
WiredHome 190:3132b7dfad82 1520 /// @param[in] inRect is a rectangle to align against.
WiredHome 190:3132b7dfad82 1521 /// @param[in] v specifies the vertical alignment - top, middle, bottom.
WiredHome 190:3132b7dfad82 1522 /// @param[in] h specified the horizontal alignment - left, center, right.
WiredHome 190:3132b7dfad82 1523 /// @returns a new rectangle, the size of the toAlign.
WiredHome 190:3132b7dfad82 1524 ///
WiredHome 190:3132b7dfad82 1525 rect_t AlignRectInRect(rect_t toAlign, rect_t inRect, valign_t v, halign_t h);
WiredHome 190:3132b7dfad82 1526
WiredHome 82:f7d300f26540 1527 /// Determine if a point is within a rectangle.
WiredHome 82:f7d300f26540 1528 ///
WiredHome 82:f7d300f26540 1529 /// @param[in] rect is a rectangular region to use.
WiredHome 82:f7d300f26540 1530 /// @param[in] p is a point to analyze to see if it is within the rect.
WiredHome 82:f7d300f26540 1531 /// @returns true if p is within rect.
WiredHome 82:f7d300f26540 1532 ///
WiredHome 82:f7d300f26540 1533 bool Intersect(rect_t rect, point_t p);
WiredHome 82:f7d300f26540 1534
WiredHome 131:5bd6ba2ee4a1 1535 /// Determine if a rectangle intersects another rectangle.
WiredHome 131:5bd6ba2ee4a1 1536 ///
WiredHome 131:5bd6ba2ee4a1 1537 /// @param[in] rect1 is a rectangular region.
WiredHome 131:5bd6ba2ee4a1 1538 /// @param[in] rect2 is a second rectangular region.
WiredHome 147:3494792458d9 1539 /// @returns true if any part of rect2 intersects rect1.
WiredHome 131:5bd6ba2ee4a1 1540 ///
WiredHome 131:5bd6ba2ee4a1 1541 bool Intersect(rect_t rect1, rect_t rect2);
WiredHome 190:3132b7dfad82 1542
WiredHome 147:3494792458d9 1543 /// Determine if a rectangle intersects another rectangle and provides
WiredHome 147:3494792458d9 1544 /// the area of intersection.
WiredHome 147:3494792458d9 1545 ///
WiredHome 147:3494792458d9 1546 /// @code
WiredHome 147:3494792458d9 1547 /// +---------------------+
WiredHome 147:3494792458d9 1548 /// | rect1 |
WiredHome 147:3494792458d9 1549 /// | |
WiredHome 147:3494792458d9 1550 /// | +------------------+
WiredHome 147:3494792458d9 1551 /// | | rect3 | |
WiredHome 147:3494792458d9 1552 /// | | | |
WiredHome 147:3494792458d9 1553 /// +---------------------+ |
WiredHome 147:3494792458d9 1554 /// | rect2 |
WiredHome 147:3494792458d9 1555 /// +------------------+
WiredHome 147:3494792458d9 1556 /// @endcode
WiredHome 147:3494792458d9 1557 ///
WiredHome 190:3132b7dfad82 1558 /// @note that the first parameter is a pointer to a rect and the
WiredHome 147:3494792458d9 1559 ///
WiredHome 147:3494792458d9 1560 /// @param[inout] pRect1 is a pointer to a rectangular region, and returns
WiredHome 147:3494792458d9 1561 /// the area of intersection.
WiredHome 147:3494792458d9 1562 /// @param[in] pRect2 is a pointer to a second rectangular region.
WiredHome 147:3494792458d9 1563 /// @returns true if pRect1 and pRect2 intersect and pRect1 is written with
WiredHome 147:3494792458d9 1564 /// the rectangle describing the intersection.
WiredHome 147:3494792458d9 1565 ///
WiredHome 167:8aa3fb2a5a31 1566 bool Intersect(rect_t * pRect1, const rect_t * pRect2);
WiredHome 190:3132b7dfad82 1567
WiredHome 190:3132b7dfad82 1568
WiredHome 38:38d503b4fad6 1569 /// Write a command to the display with a word of data.
WiredHome 38:38d503b4fad6 1570 ///
WiredHome 38:38d503b4fad6 1571 /// This is a high level command, and may invoke several primitives.
WiredHome 38:38d503b4fad6 1572 ///
WiredHome 72:ecffe56af969 1573 /// @param[in] command is the command to write.
WiredHome 72:ecffe56af969 1574 /// @param[in] data is data to be written to the command register.
WiredHome 167:8aa3fb2a5a31 1575 /// @returns @ref RetCode_t value.
WiredHome 38:38d503b4fad6 1576 ///
WiredHome 38:38d503b4fad6 1577 RetCode_t WriteCommandW(uint8_t command, uint16_t data);
WiredHome 38:38d503b4fad6 1578
WiredHome 125:7a0b70f56550 1579
WiredHome 19:3f82c1161fd2 1580 /// Write a command to the display
WiredHome 19:3f82c1161fd2 1581 ///
WiredHome 19:3f82c1161fd2 1582 /// This is a high level command, and may invoke several primitives.
WiredHome 19:3f82c1161fd2 1583 ///
WiredHome 72:ecffe56af969 1584 /// @param[in] command is the command to write.
WiredHome 72:ecffe56af969 1585 /// @param[in] data is optional data to be written to the command register
WiredHome 19:3f82c1161fd2 1586 /// and only occurs if the data is in the range [0 - 0xFF].
WiredHome 167:8aa3fb2a5a31 1587 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 1588 ///
WiredHome 32:0e4f2ae512e2 1589 virtual RetCode_t WriteCommand(unsigned char command, unsigned int data = 0xFFFF);
WiredHome 125:7a0b70f56550 1590
WiredHome 190:3132b7dfad82 1591
WiredHome 38:38d503b4fad6 1592 /// Write a data word to the display
WiredHome 38:38d503b4fad6 1593 ///
WiredHome 38:38d503b4fad6 1594 /// This is a high level command, and may invoke several primitives.
WiredHome 38:38d503b4fad6 1595 ///
WiredHome 72:ecffe56af969 1596 /// @param[in] data is the data to write.
WiredHome 167:8aa3fb2a5a31 1597 /// @returns @ref RetCode_t value.
WiredHome 38:38d503b4fad6 1598 ///
WiredHome 38:38d503b4fad6 1599 RetCode_t WriteDataW(uint16_t data);
WiredHome 125:7a0b70f56550 1600
WiredHome 190:3132b7dfad82 1601
WiredHome 19:3f82c1161fd2 1602 /// Write a data byte to the display
WiredHome 19:3f82c1161fd2 1603 ///
WiredHome 19:3f82c1161fd2 1604 /// This is a high level command, and may invoke several primitives.
WiredHome 19:3f82c1161fd2 1605 ///
WiredHome 72:ecffe56af969 1606 /// @param[in] data is the data to write.
WiredHome 167:8aa3fb2a5a31 1607 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 1608 ///
WiredHome 32:0e4f2ae512e2 1609 virtual RetCode_t WriteData(unsigned char data);
WiredHome 125:7a0b70f56550 1610
WiredHome 190:3132b7dfad82 1611
WiredHome 19:3f82c1161fd2 1612 /// Read a command register
WiredHome 19:3f82c1161fd2 1613 ///
WiredHome 72:ecffe56af969 1614 /// @param[in] command is the command register to read.
WiredHome 19:3f82c1161fd2 1615 /// @returns the value read from the register.
WiredHome 19:3f82c1161fd2 1616 ///
WiredHome 19:3f82c1161fd2 1617 unsigned char ReadCommand(unsigned char command);
WiredHome 136:224e03d5c31f 1618
WiredHome 136:224e03d5c31f 1619
WiredHome 136:224e03d5c31f 1620 /// Read a word from a command register
WiredHome 136:224e03d5c31f 1621 ///
WiredHome 136:224e03d5c31f 1622 /// @param[in] command is the command register to read.
WiredHome 136:224e03d5c31f 1623 /// @returns the value read from the register.
WiredHome 136:224e03d5c31f 1624 ///
WiredHome 136:224e03d5c31f 1625 uint16_t ReadCommandW(unsigned char command);
WiredHome 190:3132b7dfad82 1626
WiredHome 190:3132b7dfad82 1627
WiredHome 41:2956a0a221e5 1628 /// Read a data byte from the display
WiredHome 19:3f82c1161fd2 1629 ///
WiredHome 19:3f82c1161fd2 1630 /// This is a high level command, and may invoke several primitives.
WiredHome 19:3f82c1161fd2 1631 ///
WiredHome 19:3f82c1161fd2 1632 /// @returns data that was read.
WiredHome 19:3f82c1161fd2 1633 ///
WiredHome 19:3f82c1161fd2 1634 unsigned char ReadData(void);
WiredHome 125:7a0b70f56550 1635
WiredHome 190:3132b7dfad82 1636
WiredHome 41:2956a0a221e5 1637 /// Read a word from the display
WiredHome 41:2956a0a221e5 1638 ///
WiredHome 41:2956a0a221e5 1639 /// This is a high level command, and may invoke several primitives.
WiredHome 41:2956a0a221e5 1640 ///
WiredHome 41:2956a0a221e5 1641 /// @returns data that was read.
WiredHome 41:2956a0a221e5 1642 ///
WiredHome 41:2956a0a221e5 1643 uint16_t ReadDataW(void);
WiredHome 41:2956a0a221e5 1644
WiredHome 125:7a0b70f56550 1645
WiredHome 19:3f82c1161fd2 1646 /// Read the display status
WiredHome 19:3f82c1161fd2 1647 ///
WiredHome 19:3f82c1161fd2 1648 /// This is a high level command, and may invoke several primitives.
WiredHome 19:3f82c1161fd2 1649 ///
WiredHome 19:3f82c1161fd2 1650 /// @returns data that was read.
WiredHome 19:3f82c1161fd2 1651 ///
WiredHome 19:3f82c1161fd2 1652 unsigned char ReadStatus(void);
WiredHome 19:3f82c1161fd2 1653
WiredHome 125:7a0b70f56550 1654
WiredHome 19:3f82c1161fd2 1655 /// get the width in pixels of the currently active font
WiredHome 19:3f82c1161fd2 1656 ///
WiredHome 19:3f82c1161fd2 1657 /// @returns font width in pixels.
WiredHome 190:3132b7dfad82 1658 ///
WiredHome 37:f19b7e7449dc 1659 dim_t fontwidth(void);
WiredHome 190:3132b7dfad82 1660
WiredHome 125:7a0b70f56550 1661
WiredHome 19:3f82c1161fd2 1662 /// get the height in pixels of the currently active font
WiredHome 19:3f82c1161fd2 1663 ///
WiredHome 19:3f82c1161fd2 1664 /// @returns font height in pixels.
WiredHome 190:3132b7dfad82 1665 ///
WiredHome 37:f19b7e7449dc 1666 dim_t fontheight(void);
WiredHome 125:7a0b70f56550 1667
WiredHome 190:3132b7dfad82 1668
WiredHome 19:3f82c1161fd2 1669 /// get the number of colums based on the currently active font
WiredHome 19:3f82c1161fd2 1670 ///
WiredHome 19:3f82c1161fd2 1671 /// @returns number of columns.
WiredHome 190:3132b7dfad82 1672 ///
WiredHome 19:3f82c1161fd2 1673 virtual int columns(void);
WiredHome 19:3f82c1161fd2 1674
WiredHome 125:7a0b70f56550 1675
WiredHome 19:3f82c1161fd2 1676 /// get the number of rows based on the currently active font
WiredHome 19:3f82c1161fd2 1677 ///
WiredHome 19:3f82c1161fd2 1678 /// @returns number of rows.
WiredHome 190:3132b7dfad82 1679 ///
WiredHome 19:3f82c1161fd2 1680 virtual int rows(void);
WiredHome 19:3f82c1161fd2 1681
WiredHome 125:7a0b70f56550 1682
WiredHome 19:3f82c1161fd2 1683 /// get the screen width in pixels
WiredHome 19:3f82c1161fd2 1684 ///
WiredHome 19:3f82c1161fd2 1685 /// @returns screen width in pixels.
WiredHome 19:3f82c1161fd2 1686 ///
WiredHome 38:38d503b4fad6 1687 virtual dim_t width(void);
WiredHome 19:3f82c1161fd2 1688
WiredHome 125:7a0b70f56550 1689
WiredHome 19:3f82c1161fd2 1690 /// get the screen height in pixels
WiredHome 19:3f82c1161fd2 1691 ///
WiredHome 19:3f82c1161fd2 1692 /// @returns screen height in pixels.
WiredHome 19:3f82c1161fd2 1693 ///
WiredHome 38:38d503b4fad6 1694 virtual dim_t height(void);
WiredHome 19:3f82c1161fd2 1695
WiredHome 125:7a0b70f56550 1696
WiredHome 43:3becae133285 1697 /// get the color depth in bits per pixel.
WiredHome 43:3becae133285 1698 ///
WiredHome 43:3becae133285 1699 /// @returns 8 or 16 only.
WiredHome 43:3becae133285 1700 ///
WiredHome 43:3becae133285 1701 virtual dim_t color_bpp(void);
WiredHome 43:3becae133285 1702
WiredHome 19:3f82c1161fd2 1703 /// Set cursor position based on the current font size.
WiredHome 190:3132b7dfad82 1704 ///
WiredHome 72:ecffe56af969 1705 /// @param[in] column is the horizontal position in character positions
WiredHome 72:ecffe56af969 1706 /// @param[in] row is the vertical position in character positions
WiredHome 167:8aa3fb2a5a31 1707 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 1708 ///
WiredHome 37:f19b7e7449dc 1709 virtual RetCode_t locate(textloc_t column, textloc_t row);
WiredHome 19:3f82c1161fd2 1710
WiredHome 190:3132b7dfad82 1711 /// Enable word-wrap in _puts()
WiredHome 190:3132b7dfad82 1712 ///
WiredHome 190:3132b7dfad82 1713 /// @todo Consider adding a method to define the word-delimiters, which could then
WiredHome 190:3132b7dfad82 1714 /// include user-selection of characters (e.g. ' ', '-', ';', and so on).
WiredHome 190:3132b7dfad82 1715 ///
WiredHome 190:3132b7dfad82 1716 /// @param[in] _wordwrap when true controls _puts() to wrap on word-boundary, which
WiredHome 190:3132b7dfad82 1717 /// is delimited by 'space' character or 'cr' 'lf' sequences.
WiredHome 190:3132b7dfad82 1718 /// @returns previous wordwrap setting to permit an easy restore.
WiredHome 190:3132b7dfad82 1719 ///
WiredHome 190:3132b7dfad82 1720 bool SetWordWrap(bool _wordwrap);
WiredHome 190:3132b7dfad82 1721
WiredHome 125:7a0b70f56550 1722
WiredHome 19:3f82c1161fd2 1723 /// Prepare the controller to write text to the screen by positioning
WiredHome 19:3f82c1161fd2 1724 /// the cursor.
WiredHome 19:3f82c1161fd2 1725 ///
WiredHome 56:7a85d226ad0d 1726 /// @code
WiredHome 56:7a85d226ad0d 1727 /// lcd.SetTextCursor(100, 25);
WiredHome 56:7a85d226ad0d 1728 /// lcd.puts("Hello");
WiredHome 56:7a85d226ad0d 1729 /// @endcode
WiredHome 56:7a85d226ad0d 1730 ///
WiredHome 72:ecffe56af969 1731 /// @param[in] x is the horizontal position in pixels (from the left edge)
WiredHome 72:ecffe56af969 1732 /// @param[in] y is the vertical position in pixels (from the top edge)
WiredHome 167:8aa3fb2a5a31 1733 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 1734 ///
WiredHome 37:f19b7e7449dc 1735 RetCode_t SetTextCursor(loc_t x, loc_t y);
WiredHome 29:422616aa04bd 1736
WiredHome 125:7a0b70f56550 1737
WiredHome 103:7e0464ca6c5c 1738 /// Prepare the controller to write text to the screen by positioning
WiredHome 103:7e0464ca6c5c 1739 /// the cursor.
WiredHome 103:7e0464ca6c5c 1740 ///
WiredHome 103:7e0464ca6c5c 1741 /// @code
WiredHome 103:7e0464ca6c5c 1742 /// point_t point = {100, 25};
WiredHome 103:7e0464ca6c5c 1743 /// lcd.SetTextCursor(point);
WiredHome 103:7e0464ca6c5c 1744 /// lcd.puts("Hello");
WiredHome 103:7e0464ca6c5c 1745 /// @endcode
WiredHome 103:7e0464ca6c5c 1746 ///
WiredHome 103:7e0464ca6c5c 1747 /// @param[in] p is the x:y point in pixels from the top-left.
WiredHome 167:8aa3fb2a5a31 1748 /// @returns @ref RetCode_t value.
WiredHome 103:7e0464ca6c5c 1749 ///
WiredHome 103:7e0464ca6c5c 1750 RetCode_t SetTextCursor(point_t p);
WiredHome 103:7e0464ca6c5c 1751
WiredHome 125:7a0b70f56550 1752
WiredHome 37:f19b7e7449dc 1753 /// Get the current cursor position in pixels.
WiredHome 37:f19b7e7449dc 1754 ///
WiredHome 56:7a85d226ad0d 1755 /// @code
WiredHome 56:7a85d226ad0d 1756 /// point_t point = GetTextCursor();
WiredHome 56:7a85d226ad0d 1757 /// if (point.x > 100 && point.y > 150)
WiredHome 56:7a85d226ad0d 1758 /// //...
WiredHome 56:7a85d226ad0d 1759 /// @endcode
WiredHome 56:7a85d226ad0d 1760 ///
WiredHome 37:f19b7e7449dc 1761 /// @returns cursor position.
WiredHome 37:f19b7e7449dc 1762 ///
WiredHome 37:f19b7e7449dc 1763 point_t GetTextCursor(void);
WiredHome 190:3132b7dfad82 1764
WiredHome 125:7a0b70f56550 1765
WiredHome 29:422616aa04bd 1766 /// Get the current cursor horizontal position in pixels.
WiredHome 29:422616aa04bd 1767 ///
WiredHome 29:422616aa04bd 1768 /// @returns cursor position horizontal offset.
WiredHome 29:422616aa04bd 1769 ///
WiredHome 37:f19b7e7449dc 1770 loc_t GetTextCursor_X(void);
WiredHome 29:422616aa04bd 1771
WiredHome 125:7a0b70f56550 1772
WiredHome 29:422616aa04bd 1773 /// Get the current cursor vertical position in pixels.
WiredHome 29:422616aa04bd 1774 ///
WiredHome 29:422616aa04bd 1775 /// @returns cursor position vertical offset.
WiredHome 29:422616aa04bd 1776 ///
WiredHome 37:f19b7e7449dc 1777 loc_t GetTextCursor_Y(void);
WiredHome 29:422616aa04bd 1778
WiredHome 125:7a0b70f56550 1779
WiredHome 23:a50ded45dbaf 1780 /// Configure additional Cursor Control settings.
WiredHome 23:a50ded45dbaf 1781 ///
WiredHome 190:3132b7dfad82 1782 /// This API lets you modify other cursor control settings;
WiredHome 190:3132b7dfad82 1783 /// Cursor visible/hidden, Cursor blink/normal,
WiredHome 23:a50ded45dbaf 1784 /// Cursor I-Beam/underscore/box.
WiredHome 23:a50ded45dbaf 1785 ///
WiredHome 72:ecffe56af969 1786 /// @param[in] cursor can be set to NOCURSOR (default), IBEAM,
WiredHome 24:8ca861acf12d 1787 /// UNDER, or BLOCK.
WiredHome 72:ecffe56af969 1788 /// @param[in] blink can be set to true or false (default false)
WiredHome 167:8aa3fb2a5a31 1789 /// @returns @ref RetCode_t value.
WiredHome 23:a50ded45dbaf 1790 ///
WiredHome 24:8ca861acf12d 1791 RetCode_t SetTextCursorControl(cursor_t cursor = NOCURSOR, bool blink = false);
WiredHome 125:7a0b70f56550 1792
WiredHome 190:3132b7dfad82 1793
WiredHome 98:ecebed9b80b2 1794 /// Select the built-in ISO 8859-X font to use next.
WiredHome 19:3f82c1161fd2 1795 ///
WiredHome 19:3f82c1161fd2 1796 /// Supported fonts: ISO 8859-1, -2, -3, -4
WiredHome 19:3f82c1161fd2 1797 ///
WiredHome 125:7a0b70f56550 1798 /// @note This only modifies the choice of font from the RA8875 internal
WiredHome 98:ecebed9b80b2 1799 /// fonts.
WiredHome 98:ecebed9b80b2 1800 ///
WiredHome 72:ecffe56af969 1801 /// @param[in] font selects the font for the subsequent text rendering.
WiredHome 19:3f82c1161fd2 1802 ///
WiredHome 19:3f82c1161fd2 1803 /// @note if either hScale or vScale is outside of its permitted range,
WiredHome 19:3f82c1161fd2 1804 /// the command is not executed.
WiredHome 167:8aa3fb2a5a31 1805 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 1806 ///
WiredHome 19:3f82c1161fd2 1807 RetCode_t SetTextFont(font_t font = ISO8859_1);
WiredHome 190:3132b7dfad82 1808
WiredHome 125:7a0b70f56550 1809
WiredHome 191:0fad2e45e196 1810 /// Gets the display orientation
WiredHome 191:0fad2e45e196 1811 ///
WiredHome 191:0fad2e45e196 1812 /// @returns the basic display orientationas an @ref orientation_t value.
WiredHome 191:0fad2e45e196 1813 ///
WiredHome 191:0fad2e45e196 1814 orientation_t GetOrientation();
WiredHome 191:0fad2e45e196 1815
WiredHome 84:e102021864b5 1816 /// Sets the display orientation.
WiredHome 84:e102021864b5 1817 ///
WiredHome 84:e102021864b5 1818 /// @note This command does not let you "merge" text onto an existing
WiredHome 84:e102021864b5 1819 /// image, since it reuses the memory for the new orientation.
WiredHome 84:e102021864b5 1820 /// Therefore, it is recommended that you issue a cls() prior
WiredHome 84:e102021864b5 1821 /// to sending text to the screen, or you end with a blended
WiredHome 84:e102021864b5 1822 /// image that is probably not as intended.
WiredHome 84:e102021864b5 1823 ///
WiredHome 125:7a0b70f56550 1824 /// @note This command only operates on the RA8875 internal fonts.
WiredHome 98:ecebed9b80b2 1825 ///
WiredHome 191:0fad2e45e196 1826 /// @note more sophisticated control of drawings with rotated text may
WiredHome 191:0fad2e45e196 1827 /// be achieved by direct control of the registers. See the RA8875
WiredHome 191:0fad2e45e196 1828 /// datasheet.
WiredHome 191:0fad2e45e196 1829 ///
WiredHome 84:e102021864b5 1830 /// @code
WiredHome 84:e102021864b5 1831 /// lcd.cls();
WiredHome 84:e102021864b5 1832 /// lcd.SetOrientation(RA8875::normal);
WiredHome 84:e102021864b5 1833 /// lcd.puts(30,30, "Normal Landscape");
WiredHome 84:e102021864b5 1834 /// wait_ms(2500);
WiredHome 190:3132b7dfad82 1835 ///
WiredHome 84:e102021864b5 1836 /// lcd.cls();
WiredHome 84:e102021864b5 1837 /// lcd.SetOrientation(RA8875::rotate_90);
WiredHome 84:e102021864b5 1838 /// lcd.puts(30,30, "Rotated 90 Text\r\n");
WiredHome 84:e102021864b5 1839 /// wait_ms(2500);
WiredHome 190:3132b7dfad82 1840 ///
WiredHome 84:e102021864b5 1841 /// lcd.cls();
WiredHome 84:e102021864b5 1842 /// lcd.SetOrientation(RA8875::rotate_180);
WiredHome 84:e102021864b5 1843 /// lcd.puts(30,30, "Rotated 180 Text\r\n");
WiredHome 84:e102021864b5 1844 /// wait_ms(2500);
WiredHome 190:3132b7dfad82 1845 ///
WiredHome 84:e102021864b5 1846 /// lcd.cls();
WiredHome 84:e102021864b5 1847 /// lcd.SetOrientation(RA8875::rotate_270);
WiredHome 84:e102021864b5 1848 /// lcd.puts(30,30, "Rotated 270 Text\r\n");
WiredHome 84:e102021864b5 1849 /// wait_ms(2500);
WiredHome 84:e102021864b5 1850 /// @endcode
WiredHome 84:e102021864b5 1851 ///
WiredHome 84:e102021864b5 1852 /// @param[in] angle defaults to normal, but can be rotated
WiredHome 84:e102021864b5 1853 /// - normal | rotate_0
WiredHome 84:e102021864b5 1854 /// - rotate_90 (clockwise)
WiredHome 84:e102021864b5 1855 /// - rotate_180
WiredHome 84:e102021864b5 1856 /// - rotate_270 (clockwise)
WiredHome 167:8aa3fb2a5a31 1857 /// @returns @ref RetCode_t value.
WiredHome 84:e102021864b5 1858 ///
WiredHome 84:e102021864b5 1859 RetCode_t SetOrientation(orientation_t angle = normal);
WiredHome 190:3132b7dfad82 1860
WiredHome 125:7a0b70f56550 1861
WiredHome 19:3f82c1161fd2 1862 /// Control the font behavior.
WiredHome 19:3f82c1161fd2 1863 ///
WiredHome 19:3f82c1161fd2 1864 /// This command lets you make several modifications to any text that
WiredHome 56:7a85d226ad0d 1865 /// will be written to the screen.
WiredHome 19:3f82c1161fd2 1866 ///
WiredHome 125:7a0b70f56550 1867 /// @note This command only operates on the RA8875 internal fonts.
WiredHome 98:ecebed9b80b2 1868 ///
WiredHome 19:3f82c1161fd2 1869 /// Options can be combined:
WiredHome 19:3f82c1161fd2 1870 /// Default:
WiredHome 190:3132b7dfad82 1871 /// @li Full alignment disabled,
WiredHome 190:3132b7dfad82 1872 /// @li Font with Background color,
WiredHome 84:e102021864b5 1873 /// @li Font in normal orientiation, or rotated 90, 180, or 270 clockwise,
WiredHome 84:e102021864b5 1874 /// @li Horizontal scale x 1, 2, 3, or 4
WiredHome 84:e102021864b5 1875 /// @li Vertical scale x 1, 2, 3, or 4
WiredHome 84:e102021864b5 1876 ///
WiredHome 84:e102021864b5 1877 /// @note alignment is a special mode for the fonts, when mixing half and
WiredHome 84:e102021864b5 1878 /// full fonts on one presentation. 'align_full' starts each full
WiredHome 84:e102021864b5 1879 /// character on an even alignment. See section 7-4-7 of the RA8875
WiredHome 84:e102021864b5 1880 /// specification.
WiredHome 190:3132b7dfad82 1881 ///
WiredHome 72:ecffe56af969 1882 /// @param[in] fillit defaults to FILL, but can be NOFILL
WiredHome 72:ecffe56af969 1883 /// @param[in] hScale defaults to 1, but can be 1, 2, 3, or 4,
WiredHome 19:3f82c1161fd2 1884 /// and scales the font size by this amount.
WiredHome 72:ecffe56af969 1885 /// @param[in] vScale defaults to 1, but can be 1, 2, 3, or 4,
WiredHome 19:3f82c1161fd2 1886 /// and scales the font size by this amount.
WiredHome 72:ecffe56af969 1887 /// @param[in] alignment defaults to align_none, but can be
WiredHome 19:3f82c1161fd2 1888 /// align_full.
WiredHome 190:3132b7dfad82 1889 ///
WiredHome 19:3f82c1161fd2 1890 /// @note if either hScale or vScale is outside of its permitted range,
WiredHome 19:3f82c1161fd2 1891 /// the command is not executed.
WiredHome 167:8aa3fb2a5a31 1892 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 1893 ///
WiredHome 190:3132b7dfad82 1894 RetCode_t SetTextFontControl(fill_t fillit = FILL,
WiredHome 190:3132b7dfad82 1895 HorizontalScale hScale = 1,
WiredHome 190:3132b7dfad82 1896 VerticalScale vScale = 1,
WiredHome 19:3f82c1161fd2 1897 alignment_t alignment = align_none);
WiredHome 190:3132b7dfad82 1898
WiredHome 190:3132b7dfad82 1899
WiredHome 190:3132b7dfad82 1900 /// Control the font - to background fill or "ink-only"
WiredHome 190:3132b7dfad82 1901 ///
WiredHome 190:3132b7dfad82 1902 /// This command configures the font presentation to write
WiredHome 190:3132b7dfad82 1903 /// only the font "ink", or to write the ink and also overwrite
WiredHome 190:3132b7dfad82 1904 /// the background with the background color.
WiredHome 190:3132b7dfad82 1905 ///
WiredHome 190:3132b7dfad82 1906 /// @note This command applies only to the internal fonts not to user fonts
WiredHome 190:3132b7dfad82 1907 /// e.g. SelectUserFont(...) out of concerns for performance.
WiredHome 190:3132b7dfad82 1908 /// User fonts always write the character block as a continuous
WiredHome 190:3132b7dfad82 1909 /// stream (for efficiency). This precludes first reading the
WiredHome 190:3132b7dfad82 1910 /// character block before writing it. Alternately, addressing
WiredHome 190:3132b7dfad82 1911 /// individual pixels would also be a significant performance
WiredHome 190:3132b7dfad82 1912 /// impact.
WiredHome 190:3132b7dfad82 1913 ///
WiredHome 190:3132b7dfad82 1914 /// @param[in] fillit set to FILL will also write the background,
WiredHome 190:3132b7dfad82 1915 /// and set to NOFILL will write only the ink.
WiredHome 190:3132b7dfad82 1916 /// @returns the previous fill setting permitting easy restore.
WiredHome 190:3132b7dfad82 1917 ///
WiredHome 190:3132b7dfad82 1918 fill_t SetTextFontFill(fill_t fillit);
WiredHome 125:7a0b70f56550 1919
WiredHome 153:8a85efb3eb71 1920 /// Control the font size of the RA8875 rendered fonts.
WiredHome 19:3f82c1161fd2 1921 ///
WiredHome 19:3f82c1161fd2 1922 /// This command lets you set the font enlargement for both horizontal
WiredHome 190:3132b7dfad82 1923 /// and vertical, independent of the rotation, background, and
WiredHome 106:c80828f5dea4 1924 /// alignment. See @ref SetTextFontControl.
WiredHome 19:3f82c1161fd2 1925 ///
WiredHome 153:8a85efb3eb71 1926 /// @note This command operates on the RA8875 internal fonts.
WiredHome 153:8a85efb3eb71 1927 /// @note This command also operates on the selected soft font.
WiredHome 98:ecebed9b80b2 1928 ///
WiredHome 72:ecffe56af969 1929 /// @param[in] hScale defaults to 1, but can be 1, 2, 3, or 4,
WiredHome 19:3f82c1161fd2 1930 /// and scales the font size by this amount.
WiredHome 190:3132b7dfad82 1931 /// @param[in] vScale is an optional parameter that defaults to the hScale value,
WiredHome 40:04aa280dfa39 1932 /// but can be 1, 2, 3, or 4, and scales the font size by this amount.
WiredHome 40:04aa280dfa39 1933 ///
WiredHome 40:04aa280dfa39 1934 /// @code
WiredHome 40:04aa280dfa39 1935 /// lcd.SetTextFontSize(2); // Set the font to 2x normal size
WiredHome 56:7a85d226ad0d 1936 /// lcd.puts("Two times");
WiredHome 40:04aa280dfa39 1937 /// lcd.SetTextFontSize(2,3); // Set the font to 2x Width and 3x Height
WiredHome 56:7a85d226ad0d 1938 /// lcd.puts("2*2 3*h");
WiredHome 40:04aa280dfa39 1939 /// lcd.SetTextFontSize(); // Restore to normal size in both dimensions
WiredHome 56:7a85d226ad0d 1940 /// lcd.puts("normal");
WiredHome 153:8a85efb3eb71 1941 /// lcd.SelectUserFont(BPG_Arial63x63); // Large user font
WiredHome 153:8a85efb3eb71 1942 /// lcd.puts("B63x63"); // Show a sample
WiredHome 153:8a85efb3eb71 1943 /// lcd.SetTextFontSize(2); // Now twice as big
WiredHome 153:8a85efb3eb71 1944 /// lcd.puts("x2"); // Show a sample
WiredHome 40:04aa280dfa39 1945 /// @endcode
WiredHome 19:3f82c1161fd2 1946 ///
WiredHome 19:3f82c1161fd2 1947 /// @note if either hScale or vScale is outside of its permitted range,
WiredHome 19:3f82c1161fd2 1948 /// the command is not executed.
WiredHome 167:8aa3fb2a5a31 1949 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 1950 ///
WiredHome 40:04aa280dfa39 1951 RetCode_t SetTextFontSize(HorizontalScale hScale = 1, VerticalScale vScale = -1);
WiredHome 127:db7f2c704693 1952
WiredHome 127:db7f2c704693 1953
WiredHome 127:db7f2c704693 1954 /// Get the text font size of the RA8875 internal fonts.
WiredHome 127:db7f2c704693 1955 ///
WiredHome 127:db7f2c704693 1956 /// This command lets you retrieve the current settings for the font
WiredHome 190:3132b7dfad82 1957 /// horizontal and vertical scale factors. The return value is
WiredHome 127:db7f2c704693 1958 /// one of the scale factors 1, 2, 3, or 4.
WiredHome 127:db7f2c704693 1959 ///
WiredHome 127:db7f2c704693 1960 /// @param[out] hScale is a pointer to memory where the horizontal scale factor
WiredHome 127:db7f2c704693 1961 /// will be written. If the pointer is null, that item will be ignored.
WiredHome 127:db7f2c704693 1962 /// @param[out] vScale is a pointer to memory where the vertical scale factor
WiredHome 127:db7f2c704693 1963 /// will be written. If the pointer is null, that item will be ignored.
WiredHome 167:8aa3fb2a5a31 1964 /// @returns @ref RetCode_t value.
WiredHome 127:db7f2c704693 1965 ///
WiredHome 127:db7f2c704693 1966 RetCode_t GetTextFontSize(HorizontalScale * hScale, VerticalScale * vScale);
WiredHome 125:7a0b70f56550 1967
WiredHome 19:3f82c1161fd2 1968 /// put a character on the screen.
WiredHome 19:3f82c1161fd2 1969 ///
WiredHome 190:3132b7dfad82 1970 /// @param[in] text is a pointer to a text string to evaluate.
WiredHome 190:3132b7dfad82 1971 /// @param[in] charOnly defaults to false, which computes over the whole string.
WiredHome 190:3132b7dfad82 1972 /// @returns width in pixels, given the selected font and scale.
WiredHome 190:3132b7dfad82 1973 ///
WiredHome 190:3132b7dfad82 1974 dim_t GetTextWidth(const char * text, bool charOnly = false);
WiredHome 190:3132b7dfad82 1975
WiredHome 190:3132b7dfad82 1976
WiredHome 190:3132b7dfad82 1977 /// put a character on the screen.
WiredHome 190:3132b7dfad82 1978 ///
WiredHome 72:ecffe56af969 1979 /// @param[in] c is the character.
WiredHome 19:3f82c1161fd2 1980 /// @returns the character, or EOF if there is an error.
WiredHome 19:3f82c1161fd2 1981 ///
WiredHome 19:3f82c1161fd2 1982 virtual int _putc(int c);
WiredHome 19:3f82c1161fd2 1983
WiredHome 125:7a0b70f56550 1984
WiredHome 19:3f82c1161fd2 1985 /// Write string of text to the display
WiredHome 19:3f82c1161fd2 1986 ///
WiredHome 56:7a85d226ad0d 1987 /// @code
WiredHome 56:7a85d226ad0d 1988 /// lcd.puts("Test STring");
WiredHome 56:7a85d226ad0d 1989 /// @endcode
WiredHome 56:7a85d226ad0d 1990 ///
WiredHome 72:ecffe56af969 1991 /// @param[in] string is the null terminated string to send to the display.
WiredHome 19:3f82c1161fd2 1992 ///
WiredHome 19:3f82c1161fd2 1993 void puts(const char * string);
WiredHome 125:7a0b70f56550 1994
WiredHome 190:3132b7dfad82 1995
WiredHome 19:3f82c1161fd2 1996 /// Write string of text to the display at the specified location.
WiredHome 19:3f82c1161fd2 1997 ///
WiredHome 56:7a85d226ad0d 1998 /// @code
WiredHome 56:7a85d226ad0d 1999 /// lcd.puts(10,25, "Test STring");
WiredHome 56:7a85d226ad0d 2000 /// @endcode
WiredHome 56:7a85d226ad0d 2001 ///
WiredHome 72:ecffe56af969 2002 /// @param[in] x is the horizontal position in pixels (from the left edge)
WiredHome 72:ecffe56af969 2003 /// @param[in] y is the vertical position in pixels (from the top edge)
WiredHome 72:ecffe56af969 2004 /// @param[in] string is the null terminated string to send to the display.
WiredHome 19:3f82c1161fd2 2005 ///
WiredHome 37:f19b7e7449dc 2006 void puts(loc_t x, loc_t y, const char * string);
WiredHome 190:3132b7dfad82 2007
WiredHome 125:7a0b70f56550 2008
WiredHome 19:3f82c1161fd2 2009 /// Prepare the controller to write binary data to the screen by positioning
WiredHome 19:3f82c1161fd2 2010 /// the memory cursor.
WiredHome 19:3f82c1161fd2 2011 ///
WiredHome 72:ecffe56af969 2012 /// @param[in] x is the horizontal position in pixels (from the left edge)
WiredHome 72:ecffe56af969 2013 /// @param[in] y is the vertical position in pixels (from the top edge)
WiredHome 167:8aa3fb2a5a31 2014 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2015 ///
WiredHome 37:f19b7e7449dc 2016 virtual RetCode_t SetGraphicsCursor(loc_t x, loc_t y);
WiredHome 125:7a0b70f56550 2017
WiredHome 136:224e03d5c31f 2018 /// Prepare the controller to write binary data to the screen by positioning
WiredHome 136:224e03d5c31f 2019 /// the memory cursor.
WiredHome 136:224e03d5c31f 2020 ///
WiredHome 136:224e03d5c31f 2021 /// @param[in] p is the point representing the cursor position to set
WiredHome 167:8aa3fb2a5a31 2022 /// @returns @ref RetCode_t value.
WiredHome 136:224e03d5c31f 2023 ///
WiredHome 136:224e03d5c31f 2024 virtual RetCode_t SetGraphicsCursor(point_t p);
WiredHome 190:3132b7dfad82 2025
WiredHome 136:224e03d5c31f 2026 /// Read the current graphics cursor position as a point.
WiredHome 136:224e03d5c31f 2027 ///
WiredHome 136:224e03d5c31f 2028 /// @returns the graphics cursor as a point.
WiredHome 136:224e03d5c31f 2029 ///
WiredHome 136:224e03d5c31f 2030 virtual point_t GetGraphicsCursor(void);
WiredHome 136:224e03d5c31f 2031
WiredHome 190:3132b7dfad82 2032
WiredHome 41:2956a0a221e5 2033 /// Prepare the controller to read binary data from the screen by positioning
WiredHome 41:2956a0a221e5 2034 /// the memory read cursor.
WiredHome 41:2956a0a221e5 2035 ///
WiredHome 72:ecffe56af969 2036 /// @param[in] x is the horizontal position in pixels (from the left edge)
WiredHome 72:ecffe56af969 2037 /// @param[in] y is the vertical position in pixels (from the top edge)
WiredHome 167:8aa3fb2a5a31 2038 /// @returns @ref RetCode_t value.
WiredHome 41:2956a0a221e5 2039 ///
WiredHome 41:2956a0a221e5 2040 virtual RetCode_t SetGraphicsCursorRead(loc_t x, loc_t y);
WiredHome 190:3132b7dfad82 2041
WiredHome 125:7a0b70f56550 2042
WiredHome 111:efe436c43aba 2043 /// Set the window, constraining where items are written to the screen.
WiredHome 111:efe436c43aba 2044 ///
WiredHome 111:efe436c43aba 2045 /// After setting the window, text and graphics are constrained to this
WiredHome 111:efe436c43aba 2046 /// window. Text will wrap from the right edge back to the left and down
WiredHome 111:efe436c43aba 2047 /// one row and from the bottom to the top. Graphics drawing will be clipped
WiredHome 111:efe436c43aba 2048 /// at the edge of the window.
WiredHome 111:efe436c43aba 2049 ///
WiredHome 111:efe436c43aba 2050 /// @note If the initial text write is outside the window, it will be shown
WiredHome 111:efe436c43aba 2051 /// where the cursor position it. Once the write hits the right edge of
WiredHome 111:efe436c43aba 2052 /// the defined window, it will then wrap back to the left edge. Once it
WiredHome 111:efe436c43aba 2053 /// hits the bottom, it wraps to the top of the window. For this reason,
WiredHome 111:efe436c43aba 2054 /// it is common to set the text cursor to the window.
WiredHome 19:3f82c1161fd2 2055 ///
WiredHome 111:efe436c43aba 2056 /// @code
WiredHome 111:efe436c43aba 2057 /// rect_t r = {10,10, 90,90};
WiredHome 111:efe436c43aba 2058 /// lcd.window(r);
WiredHome 111:efe436c43aba 2059 /// lcd.SetTextCursor(r.p1.x, r.p1.y);
WiredHome 111:efe436c43aba 2060 /// lcd.puts("012345678901234567890123456789012345678901234567890");
WiredHome 111:efe436c43aba 2061 /// lcd.window(); restore to full screen
WiredHome 111:efe436c43aba 2062 /// @endcode
WiredHome 111:efe436c43aba 2063 ///
WiredHome 111:efe436c43aba 2064 /// @param[in] r is the rect_t used to set the window.
WiredHome 167:8aa3fb2a5a31 2065 /// @returns @ref RetCode_t value.
WiredHome 111:efe436c43aba 2066 ///
WiredHome 111:efe436c43aba 2067 virtual RetCode_t window(rect_t r);
WiredHome 190:3132b7dfad82 2068
WiredHome 125:7a0b70f56550 2069
WiredHome 111:efe436c43aba 2070 /// Set the window, constraining where items are written to the screen.
WiredHome 111:efe436c43aba 2071 ///
WiredHome 111:efe436c43aba 2072 /// After setting the window, text and graphics are constrained to this
WiredHome 111:efe436c43aba 2073 /// window. Text will wrap from the right edge back to the left and down
WiredHome 111:efe436c43aba 2074 /// one row and from the bottom to the top. Graphics drawing will be clipped
WiredHome 111:efe436c43aba 2075 /// at the edge of the window.
WiredHome 111:efe436c43aba 2076 ///
WiredHome 114:dbfb996bfbf3 2077 /// @note if no parameters are provided, it restores the window to full screen.
WiredHome 114:dbfb996bfbf3 2078 ///
WiredHome 111:efe436c43aba 2079 /// @note If the initial text write is outside the window, it will be shown
WiredHome 111:efe436c43aba 2080 /// where the cursor position it. Once the write hits the right edge of
WiredHome 111:efe436c43aba 2081 /// the defined window, it will then wrap back to the left edge. Once it
WiredHome 111:efe436c43aba 2082 /// hits the bottom, it wraps to the top of the window. For this reason,
WiredHome 111:efe436c43aba 2083 /// it is common to set the text cursor to the window.
WiredHome 19:3f82c1161fd2 2084 ///
WiredHome 56:7a85d226ad0d 2085 /// @code
WiredHome 56:7a85d226ad0d 2086 /// lcd.window(10,10, 80,80);
WiredHome 111:efe436c43aba 2087 /// lcd.SetTextCursor(10,10);
WiredHome 56:7a85d226ad0d 2088 /// lcd.puts("012345678901234567890123456789012345678901234567890");
WiredHome 111:efe436c43aba 2089 /// lcd.window(); restore to full screen
WiredHome 56:7a85d226ad0d 2090 /// @endcode
WiredHome 56:7a85d226ad0d 2091 ///
WiredHome 72:ecffe56af969 2092 /// @param[in] x is the left edge in pixels.
WiredHome 72:ecffe56af969 2093 /// @param[in] y is the top edge in pixels.
WiredHome 72:ecffe56af969 2094 /// @param[in] width is the window width in pixels.
WiredHome 72:ecffe56af969 2095 /// @param[in] height is the window height in pixels.
WiredHome 167:8aa3fb2a5a31 2096 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2097 ///
WiredHome 111:efe436c43aba 2098 virtual RetCode_t window(loc_t x = 0, loc_t y = 0, dim_t width = (dim_t)-1, dim_t height = (dim_t)-1);
WiredHome 190:3132b7dfad82 2099
WiredHome 125:7a0b70f56550 2100
WiredHome 61:8f3153bf0baa 2101 /// Clear either the specified layer, or the active layer.
WiredHome 19:3f82c1161fd2 2102 ///
WiredHome 61:8f3153bf0baa 2103 /// The behavior is to clear the whole screen for the specified
WiredHome 61:8f3153bf0baa 2104 /// layer. When not specified, the active drawing layer is cleared.
WiredHome 61:8f3153bf0baa 2105 /// This command can also be used to specifically clear either,
WiredHome 106:c80828f5dea4 2106 /// or both layers. See @ref clsw().
WiredHome 19:3f82c1161fd2 2107 ///
WiredHome 56:7a85d226ad0d 2108 /// @code
WiredHome 56:7a85d226ad0d 2109 /// lcd.cls();
WiredHome 56:7a85d226ad0d 2110 /// @endcode
WiredHome 56:7a85d226ad0d 2111 ///
WiredHome 72:ecffe56af969 2112 /// @param[in] layers is optional. If not provided, the active layer
WiredHome 61:8f3153bf0baa 2113 /// is cleared. If bit 0 is set, layer 0 is cleared, if bit
WiredHome 61:8f3153bf0baa 2114 /// 1 is set, layer 1 is cleared. If both are set, both layers
WiredHome 61:8f3153bf0baa 2115 /// are cleared. Any other value does not cause an action.
WiredHome 190:3132b7dfad82 2116 ///
WiredHome 167:8aa3fb2a5a31 2117 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2118 ///
WiredHome 61:8f3153bf0baa 2119 virtual RetCode_t cls(uint16_t layers = 0);
WiredHome 125:7a0b70f56550 2120
WiredHome 190:3132b7dfad82 2121
WiredHome 19:3f82c1161fd2 2122 /// Clear the screen, or clear only the active window.
WiredHome 19:3f82c1161fd2 2123 ///
WiredHome 190:3132b7dfad82 2124 /// The default behavior is to clear the whole screen. With the optional
WiredHome 19:3f82c1161fd2 2125 /// parameter, the action can be restricted to the active window, which
WiredHome 106:c80828f5dea4 2126 /// can be set with the See @ref window method.
WiredHome 19:3f82c1161fd2 2127 ///
WiredHome 56:7a85d226ad0d 2128 /// @code
WiredHome 56:7a85d226ad0d 2129 /// lcd.window(20,20, 40,10);
WiredHome 56:7a85d226ad0d 2130 /// lcd.clsw();
WiredHome 56:7a85d226ad0d 2131 /// @endcode
WiredHome 56:7a85d226ad0d 2132 ///
WiredHome 72:ecffe56af969 2133 /// @param[in] region is an optional parameter that defaults to FULLWINDOW
WiredHome 19:3f82c1161fd2 2134 /// or may be set to ACTIVEWINDOW.
WiredHome 167:8aa3fb2a5a31 2135 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2136 ///
WiredHome 19:3f82c1161fd2 2137 RetCode_t clsw(RA8875::Region_t region = FULLWINDOW);
WiredHome 19:3f82c1161fd2 2138
WiredHome 125:7a0b70f56550 2139
WiredHome 19:3f82c1161fd2 2140 /// Set the background color.
WiredHome 19:3f82c1161fd2 2141 ///
WiredHome 72:ecffe56af969 2142 /// @param[in] color is expressed in 16-bit format.
WiredHome 167:8aa3fb2a5a31 2143 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2144 ///
WiredHome 19:3f82c1161fd2 2145 virtual RetCode_t background(color_t color);
WiredHome 125:7a0b70f56550 2146
WiredHome 190:3132b7dfad82 2147
WiredHome 19:3f82c1161fd2 2148 /// Set the background color.
WiredHome 19:3f82c1161fd2 2149 ///
WiredHome 72:ecffe56af969 2150 /// @param[in] r is the red element of the color.
WiredHome 72:ecffe56af969 2151 /// @param[in] g is the green element of the color.
WiredHome 72:ecffe56af969 2152 /// @param[in] b is the blue element of the color.
WiredHome 167:8aa3fb2a5a31 2153 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2154 ///
WiredHome 19:3f82c1161fd2 2155 virtual RetCode_t background(unsigned char r, unsigned char g, unsigned char b);
WiredHome 190:3132b7dfad82 2156
WiredHome 125:7a0b70f56550 2157
WiredHome 19:3f82c1161fd2 2158 /// Set the foreground color.
WiredHome 19:3f82c1161fd2 2159 ///
WiredHome 72:ecffe56af969 2160 /// @param[in] color is expressed in 16-bit format.
WiredHome 167:8aa3fb2a5a31 2161 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2162 ///
WiredHome 19:3f82c1161fd2 2163 virtual RetCode_t foreground(color_t color);
WiredHome 190:3132b7dfad82 2164
WiredHome 125:7a0b70f56550 2165
WiredHome 19:3f82c1161fd2 2166 /// Set the foreground color.
WiredHome 19:3f82c1161fd2 2167 ///
WiredHome 72:ecffe56af969 2168 /// @param[in] r is the red element of the color.
WiredHome 72:ecffe56af969 2169 /// @param[in] g is the green element of the color.
WiredHome 72:ecffe56af969 2170 /// @param[in] b is the blue element of the color.
WiredHome 167:8aa3fb2a5a31 2171 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2172 ///
WiredHome 37:f19b7e7449dc 2173 virtual RetCode_t foreground(unsigned char r, unsigned char g, unsigned char b);
WiredHome 190:3132b7dfad82 2174
WiredHome 190:3132b7dfad82 2175
WiredHome 19:3f82c1161fd2 2176 /// Get the current foreground color value.
WiredHome 19:3f82c1161fd2 2177 ///
WiredHome 167:8aa3fb2a5a31 2178 /// @returns the current foreground color as @ref color_t.
WiredHome 19:3f82c1161fd2 2179 ///
WiredHome 37:f19b7e7449dc 2180 color_t GetForeColor(void);
WiredHome 190:3132b7dfad82 2181
WiredHome 190:3132b7dfad82 2182
WiredHome 87:ee2240581aa7 2183 /// Draw a pixel in the specified color.
WiredHome 87:ee2240581aa7 2184 ///
WiredHome 87:ee2240581aa7 2185 /// @note Unlike many other operations, this does not
WiredHome 87:ee2240581aa7 2186 /// set the forecolor!
WiredHome 87:ee2240581aa7 2187 ///
WiredHome 87:ee2240581aa7 2188 /// @param[in] p is the point_t defining the location.
WiredHome 167:8aa3fb2a5a31 2189 /// @param[in] color is expressed in 16-bit format.
WiredHome 167:8aa3fb2a5a31 2190 /// @returns @ref RetCode_t value.
WiredHome 87:ee2240581aa7 2191 ///
WiredHome 87:ee2240581aa7 2192 virtual RetCode_t pixel(point_t p, color_t color);
WiredHome 190:3132b7dfad82 2193
WiredHome 190:3132b7dfad82 2194
WiredHome 87:ee2240581aa7 2195 /// Draw a pixel in the current foreground color.
WiredHome 87:ee2240581aa7 2196 ///
WiredHome 87:ee2240581aa7 2197 /// @param[in] p is the point_t defining the location.
WiredHome 167:8aa3fb2a5a31 2198 /// @returns @ref RetCode_t value.
WiredHome 87:ee2240581aa7 2199 ///
WiredHome 87:ee2240581aa7 2200 virtual RetCode_t pixel(point_t p);
WiredHome 190:3132b7dfad82 2201
WiredHome 190:3132b7dfad82 2202
WiredHome 19:3f82c1161fd2 2203 /// Draw a pixel in the specified color.
WiredHome 19:3f82c1161fd2 2204 ///
WiredHome 41:2956a0a221e5 2205 /// @note Unlike many other operations, this does not
WiredHome 41:2956a0a221e5 2206 /// set the forecolor!
WiredHome 19:3f82c1161fd2 2207 ///
WiredHome 72:ecffe56af969 2208 /// @param[in] x is the horizontal offset to this pixel.
WiredHome 72:ecffe56af969 2209 /// @param[in] y is the vertical offset to this pixel.
WiredHome 72:ecffe56af969 2210 /// @param[in] color defines the color for the pixel.
WiredHome 167:8aa3fb2a5a31 2211 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2212 ///
WiredHome 37:f19b7e7449dc 2213 virtual RetCode_t pixel(loc_t x, loc_t y, color_t color);
WiredHome 190:3132b7dfad82 2214
WiredHome 190:3132b7dfad82 2215
WiredHome 19:3f82c1161fd2 2216 /// Draw a pixel in the current foreground color.
WiredHome 19:3f82c1161fd2 2217 ///
WiredHome 72:ecffe56af969 2218 /// @param[in] x is the horizontal offset to this pixel.
WiredHome 72:ecffe56af969 2219 /// @param[in] y is the veritical offset to this pixel.
WiredHome 167:8aa3fb2a5a31 2220 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2221 ///
WiredHome 37:f19b7e7449dc 2222 virtual RetCode_t pixel(loc_t x, loc_t y);
WiredHome 190:3132b7dfad82 2223
WiredHome 190:3132b7dfad82 2224
WiredHome 41:2956a0a221e5 2225 /// Get a pixel from the display.
WiredHome 41:2956a0a221e5 2226 ///
WiredHome 72:ecffe56af969 2227 /// @param[in] x is the horizontal offset to this pixel.
WiredHome 72:ecffe56af969 2228 /// @param[in] y is the vertical offset to this pixel.
WiredHome 167:8aa3fb2a5a31 2229 /// @returns the pixel. See @ref color_t
WiredHome 41:2956a0a221e5 2230 ///
WiredHome 41:2956a0a221e5 2231 virtual color_t getPixel(loc_t x, loc_t y);
WiredHome 190:3132b7dfad82 2232
WiredHome 190:3132b7dfad82 2233
WiredHome 136:224e03d5c31f 2234 /// Write an RGB565 stream of pixels to the display.
WiredHome 41:2956a0a221e5 2235 ///
WiredHome 72:ecffe56af969 2236 /// @param[in] p is a pointer to a color_t array to write.
WiredHome 72:ecffe56af969 2237 /// @param[in] count is the number of pixels to write.
WiredHome 72:ecffe56af969 2238 /// @param[in] x is the horizontal position on the display.
WiredHome 72:ecffe56af969 2239 /// @param[in] y is the vertical position on the display.
WiredHome 167:8aa3fb2a5a31 2240 /// @returns @ref RetCode_t value.
WiredHome 41:2956a0a221e5 2241 ///
WiredHome 41:2956a0a221e5 2242 virtual RetCode_t pixelStream(color_t * p, uint32_t count, loc_t x, loc_t y);
WiredHome 190:3132b7dfad82 2243
WiredHome 190:3132b7dfad82 2244
WiredHome 41:2956a0a221e5 2245 /// Get a stream of pixels from the display.
WiredHome 41:2956a0a221e5 2246 ///
WiredHome 72:ecffe56af969 2247 /// @param[in] p is a pointer to a color_t array to accept the stream.
WiredHome 72:ecffe56af969 2248 /// @param[in] count is the number of pixels to read.
WiredHome 72:ecffe56af969 2249 /// @param[in] x is the horizontal offset to this pixel.
WiredHome 72:ecffe56af969 2250 /// @param[in] y is the vertical offset to this pixel.
WiredHome 167:8aa3fb2a5a31 2251 /// @returns @ref RetCode_t value.
WiredHome 41:2956a0a221e5 2252 ///
WiredHome 41:2956a0a221e5 2253 virtual RetCode_t getPixelStream(color_t * p, uint32_t count, loc_t x, loc_t y);
WiredHome 131:5bd6ba2ee4a1 2254
WiredHome 131:5bd6ba2ee4a1 2255
WiredHome 109:7b94f06f085b 2256 /// Write a boolean stream to the display.
WiredHome 109:7b94f06f085b 2257 ///
WiredHome 109:7b94f06f085b 2258 /// This takes a bit stream in memory and using the current color settings
WiredHome 109:7b94f06f085b 2259 /// it will stream it to the display. Along the way, each bit is translated
WiredHome 109:7b94f06f085b 2260 /// to either the foreground or background color value and then that pixel
WiredHome 109:7b94f06f085b 2261 /// is pushed onward.
WiredHome 109:7b94f06f085b 2262 ///
WiredHome 190:3132b7dfad82 2263 /// This is similar, but different, to the @ref pixelStream API, which is
WiredHome 109:7b94f06f085b 2264 /// given a stream of color values.
WiredHome 190:3132b7dfad82 2265 ///
WiredHome 153:8a85efb3eb71 2266 /// This is most often used for Soft Fonts, and for that reason, this method
WiredHome 190:3132b7dfad82 2267 /// will scale the presentation based on the selected font size.
WiredHome 153:8a85efb3eb71 2268 /// See @ref SetTextFontSize, So, users may want to SetTextFontSize(1) for
WiredHome 153:8a85efb3eb71 2269 /// 1:1 scaling.
WiredHome 190:3132b7dfad82 2270 ///
WiredHome 109:7b94f06f085b 2271 /// @param[in] x is the horizontal position on the display.
WiredHome 109:7b94f06f085b 2272 /// @param[in] y is the vertical position on the display.
WiredHome 109:7b94f06f085b 2273 /// @param[in] w is the width of the rectangular region to fill.
WiredHome 109:7b94f06f085b 2274 /// @param[in] h is the height of the rectangular region to fill.
WiredHome 109:7b94f06f085b 2275 /// @param[in] boolStream is the inline memory image from which to extract
WiredHome 109:7b94f06f085b 2276 /// the bitstream.
WiredHome 167:8aa3fb2a5a31 2277 /// @returns @ref RetCode_t value.
WiredHome 109:7b94f06f085b 2278 ///
WiredHome 109:7b94f06f085b 2279 virtual RetCode_t booleanStream(loc_t x, loc_t y, dim_t w, dim_t h, const uint8_t * boolStream);
WiredHome 125:7a0b70f56550 2280
WiredHome 19:3f82c1161fd2 2281 /// Draw a line in the specified color
WiredHome 19:3f82c1161fd2 2282 ///
WiredHome 19:3f82c1161fd2 2283 /// @note As a side effect, this changes the current
WiredHome 19:3f82c1161fd2 2284 /// foreground color for subsequent operations.
WiredHome 19:3f82c1161fd2 2285 ///
WiredHome 83:7bad0068cca0 2286 /// @param[in] p1 is the point to start the line.
WiredHome 83:7bad0068cca0 2287 /// @param[in] p2 is the point to end the line.
WiredHome 83:7bad0068cca0 2288 /// @param[in] color defines the foreground color.
WiredHome 167:8aa3fb2a5a31 2289 /// @returns @ref RetCode_t value.
WiredHome 83:7bad0068cca0 2290 ///
WiredHome 83:7bad0068cca0 2291 RetCode_t line(point_t p1, point_t p2, color_t color);
WiredHome 83:7bad0068cca0 2292
WiredHome 125:7a0b70f56550 2293
WiredHome 83:7bad0068cca0 2294 /// Draw a line
WiredHome 83:7bad0068cca0 2295 ///
WiredHome 83:7bad0068cca0 2296 /// Draws a line using the foreground color setting.
WiredHome 83:7bad0068cca0 2297 ///
WiredHome 83:7bad0068cca0 2298 /// @param[in] p1 is the point to start the line.
WiredHome 83:7bad0068cca0 2299 /// @param[in] p2 is the point to end the line.
WiredHome 167:8aa3fb2a5a31 2300 /// @returns @ref RetCode_t value.
WiredHome 83:7bad0068cca0 2301 ///
WiredHome 83:7bad0068cca0 2302 RetCode_t line(point_t p1, point_t p2);
WiredHome 125:7a0b70f56550 2303
WiredHome 190:3132b7dfad82 2304
WiredHome 83:7bad0068cca0 2305 /// Draw a line in the specified color
WiredHome 83:7bad0068cca0 2306 ///
WiredHome 83:7bad0068cca0 2307 /// @note As a side effect, this changes the current
WiredHome 83:7bad0068cca0 2308 /// foreground color for subsequent operations.
WiredHome 83:7bad0068cca0 2309 ///
WiredHome 72:ecffe56af969 2310 /// @param[in] x1 is the horizontal start of the line.
WiredHome 72:ecffe56af969 2311 /// @param[in] y1 is the vertical start of the line.
WiredHome 72:ecffe56af969 2312 /// @param[in] x2 is the horizontal end of the line.
WiredHome 72:ecffe56af969 2313 /// @param[in] y2 is the vertical end of the line.
WiredHome 72:ecffe56af969 2314 /// @param[in] color defines the foreground color.
WiredHome 167:8aa3fb2a5a31 2315 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2316 ///
WiredHome 56:7a85d226ad0d 2317 RetCode_t line(loc_t x1, loc_t y1, loc_t x2, loc_t y2, color_t color);
WiredHome 19:3f82c1161fd2 2318
WiredHome 125:7a0b70f56550 2319
WiredHome 19:3f82c1161fd2 2320 /// Draw a line
WiredHome 19:3f82c1161fd2 2321 ///
WiredHome 19:3f82c1161fd2 2322 /// Draws a line using the foreground color setting.
WiredHome 19:3f82c1161fd2 2323 ///
WiredHome 72:ecffe56af969 2324 /// @param[in] x1 is the horizontal start of the line.
WiredHome 72:ecffe56af969 2325 /// @param[in] y1 is the vertical start of the line.
WiredHome 72:ecffe56af969 2326 /// @param[in] x2 is the horizontal end of the line.
WiredHome 72:ecffe56af969 2327 /// @param[in] y2 is the vertical end of the line.
WiredHome 167:8aa3fb2a5a31 2328 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2329 ///
WiredHome 37:f19b7e7449dc 2330 RetCode_t line(loc_t x1, loc_t y1, loc_t x2, loc_t y2);
WiredHome 19:3f82c1161fd2 2331
WiredHome 125:7a0b70f56550 2332
WiredHome 144:ba002c4b21b3 2333 /// Draw a thick line
WiredHome 144:ba002c4b21b3 2334 ///
WiredHome 144:ba002c4b21b3 2335 /// Draw a line of a specified thickness and color.
WiredHome 144:ba002c4b21b3 2336 ///
WiredHome 190:3132b7dfad82 2337 /// In order to draw a thick line, this draws filled circles using
WiredHome 190:3132b7dfad82 2338 /// and then draws the 'body' of the thick line using filled triangles. This
WiredHome 190:3132b7dfad82 2339 /// method makes it significantly faster than in prior versions.
WiredHome 190:3132b7dfad82 2340 ///
WiredHome 190:3132b7dfad82 2341 /// An older version of this library used Bresenham's algorithm to move the
WiredHome 190:3132b7dfad82 2342 /// center point of the circle along the line. As a result, this was much
WiredHome 190:3132b7dfad82 2343 /// slower than drawing a 1-pixel line which uses the hardware line drawing
WiredHome 190:3132b7dfad82 2344 /// algorithm.
WiredHome 144:ba002c4b21b3 2345 ///
WiredHome 144:ba002c4b21b3 2346 /// Drawing multiple parallel lines to create a thick line is faster,
WiredHome 144:ba002c4b21b3 2347 /// however the line drawing was not guaranteed to fill every pixel
WiredHome 144:ba002c4b21b3 2348 /// on the diagonals.
WiredHome 144:ba002c4b21b3 2349 ///
WiredHome 144:ba002c4b21b3 2350 /// @param[in] p1 is the point to start the line.
WiredHome 144:ba002c4b21b3 2351 /// @param[in] p2 is the point to end the line.
WiredHome 144:ba002c4b21b3 2352 /// @param[in] thickness is the line thickness.
WiredHome 144:ba002c4b21b3 2353 /// @param[in] color defines the foreground color.
WiredHome 167:8aa3fb2a5a31 2354 /// @returns @ref RetCode_t value.
WiredHome 190:3132b7dfad82 2355 ///
WiredHome 144:ba002c4b21b3 2356 RetCode_t ThickLine(point_t p1, point_t p2, dim_t thickness, color_t color);
WiredHome 144:ba002c4b21b3 2357
WiredHome 144:ba002c4b21b3 2358
WiredHome 190:3132b7dfad82 2359 /// Set the end-cap for ThickLines - square (default) or rounded.
WiredHome 190:3132b7dfad82 2360 ///
WiredHome 190:3132b7dfad82 2361 /// @param[in] roundCap when true causes the end-cap to be drawn as a filled circle.
WiredHome 190:3132b7dfad82 2362 /// @returns the previous end-cap setting, permitting easy restore.
WiredHome 190:3132b7dfad82 2363 ///
WiredHome 190:3132b7dfad82 2364 bool SetEndCap(bool roundCap);
WiredHome 190:3132b7dfad82 2365
WiredHome 190:3132b7dfad82 2366
WiredHome 19:3f82c1161fd2 2367 /// Draw a rectangle in the specified color
WiredHome 19:3f82c1161fd2 2368 ///
WiredHome 19:3f82c1161fd2 2369 /// @note As a side effect, this changes the current
WiredHome 19:3f82c1161fd2 2370 /// foreground color for subsequent operations.
WiredHome 19:3f82c1161fd2 2371 ///
WiredHome 81:01da2e34283d 2372 /// @param[in] rect defines the rectangle.
WiredHome 81:01da2e34283d 2373 /// @param[in] color defines the foreground color.
WiredHome 81:01da2e34283d 2374 /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
WiredHome 167:8aa3fb2a5a31 2375 /// @returns @ref RetCode_t value.
WiredHome 81:01da2e34283d 2376 ///
WiredHome 82:f7d300f26540 2377 RetCode_t rect(rect_t rect, color_t color, fill_t fillit = NOFILL);
WiredHome 190:3132b7dfad82 2378
WiredHome 125:7a0b70f56550 2379
WiredHome 125:7a0b70f56550 2380 /// Draw a filled rectangle in the specified color
WiredHome 81:01da2e34283d 2381 ///
WiredHome 81:01da2e34283d 2382 /// @note As a side effect, this changes the current
WiredHome 81:01da2e34283d 2383 /// foreground color for subsequent operations.
WiredHome 81:01da2e34283d 2384 ///
WiredHome 81:01da2e34283d 2385 /// @param[in] rect defines the rectangle.
WiredHome 81:01da2e34283d 2386 /// @param[in] color defines the foreground color.
WiredHome 81:01da2e34283d 2387 /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
WiredHome 167:8aa3fb2a5a31 2388 /// @returns @ref RetCode_t value.
WiredHome 81:01da2e34283d 2389 ///
WiredHome 81:01da2e34283d 2390 RetCode_t fillrect(rect_t rect, color_t color, fill_t fillit = FILL);
WiredHome 81:01da2e34283d 2391
WiredHome 125:7a0b70f56550 2392
WiredHome 81:01da2e34283d 2393 /// Draw a rectangle in the specified color
WiredHome 81:01da2e34283d 2394 ///
WiredHome 81:01da2e34283d 2395 /// @note As a side effect, this changes the current
WiredHome 81:01da2e34283d 2396 /// foreground color for subsequent operations.
WiredHome 81:01da2e34283d 2397 ///
WiredHome 72:ecffe56af969 2398 /// @param[in] x1 is the horizontal start of the line.
WiredHome 72:ecffe56af969 2399 /// @param[in] y1 is the vertical start of the line.
WiredHome 72:ecffe56af969 2400 /// @param[in] x2 is the horizontal end of the line.
WiredHome 72:ecffe56af969 2401 /// @param[in] y2 is the vertical end of the line.
WiredHome 72:ecffe56af969 2402 /// @param[in] color defines the foreground color.
WiredHome 81:01da2e34283d 2403 /// @param[in] fillit is optional to FILL the rectangle. default is FILL.
WiredHome 167:8aa3fb2a5a31 2404 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2405 ///
WiredHome 190:3132b7dfad82 2406 RetCode_t rect(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 19:3f82c1161fd2 2407 color_t color, fill_t fillit = NOFILL);
WiredHome 19:3f82c1161fd2 2408
WiredHome 125:7a0b70f56550 2409
WiredHome 19:3f82c1161fd2 2410 /// Draw a filled rectangle in the specified color
WiredHome 19:3f82c1161fd2 2411 ///
WiredHome 19:3f82c1161fd2 2412 /// @note As a side effect, this changes the current
WiredHome 19:3f82c1161fd2 2413 /// foreground color for subsequent operations.
WiredHome 19:3f82c1161fd2 2414 ///
WiredHome 72:ecffe56af969 2415 /// @param[in] x1 is the horizontal start of the line.
WiredHome 72:ecffe56af969 2416 /// @param[in] y1 is the vertical start of the line.
WiredHome 72:ecffe56af969 2417 /// @param[in] x2 is the horizontal end of the line.
WiredHome 72:ecffe56af969 2418 /// @param[in] y2 is the vertical end of the line.
WiredHome 72:ecffe56af969 2419 /// @param[in] color defines the foreground color.
WiredHome 72:ecffe56af969 2420 /// @param[in] fillit is optional to NOFILL the rectangle. default is FILL.
WiredHome 167:8aa3fb2a5a31 2421 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2422 ///
WiredHome 190:3132b7dfad82 2423 virtual RetCode_t fillrect(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 19:3f82c1161fd2 2424 color_t color, fill_t fillit = FILL);
WiredHome 19:3f82c1161fd2 2425
WiredHome 125:7a0b70f56550 2426
WiredHome 19:3f82c1161fd2 2427 /// Draw a rectangle
WiredHome 19:3f82c1161fd2 2428 ///
WiredHome 19:3f82c1161fd2 2429 /// Draws a rectangle using the foreground color setting.
WiredHome 19:3f82c1161fd2 2430 ///
WiredHome 72:ecffe56af969 2431 /// @param[in] x1 is the horizontal start of the line.
WiredHome 72:ecffe56af969 2432 /// @param[in] y1 is the vertical start of the line.
WiredHome 72:ecffe56af969 2433 /// @param[in] x2 is the horizontal end of the line.
WiredHome 72:ecffe56af969 2434 /// @param[in] y2 is the vertical end of the line.
WiredHome 72:ecffe56af969 2435 /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
WiredHome 167:8aa3fb2a5a31 2436 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2437 ///
WiredHome 190:3132b7dfad82 2438 RetCode_t rect(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 19:3f82c1161fd2 2439 fill_t fillit = NOFILL);
WiredHome 19:3f82c1161fd2 2440
WiredHome 125:7a0b70f56550 2441
WiredHome 19:3f82c1161fd2 2442 /// Draw a filled rectangle with rounded corners using the specified color.
WiredHome 19:3f82c1161fd2 2443 ///
WiredHome 21:3c1efb192927 2444 /// This draws a rounded rectangle. A numbers of checks are made on the values,
WiredHome 21:3c1efb192927 2445 /// and it could reduce this to drawing a line (if either x1 == x2, or y1 == y2),
WiredHome 21:3c1efb192927 2446 /// or a single point (x1 == x2 && y1 == y2). If the radius parameters are
WiredHome 21:3c1efb192927 2447 /// > 1/2 the length of that side (width or height), an error value is returned.
WiredHome 21:3c1efb192927 2448 ///
WiredHome 19:3f82c1161fd2 2449 /// @note As a side effect, this changes the current
WiredHome 19:3f82c1161fd2 2450 /// foreground color for subsequent operations.
WiredHome 19:3f82c1161fd2 2451 ///
WiredHome 72:ecffe56af969 2452 /// @param[in] x1 is the horizontal start of the line and must be <= x2.
WiredHome 72:ecffe56af969 2453 /// @param[in] y1 is the vertical start of the line and must be <= y2.
WiredHome 72:ecffe56af969 2454 /// @param[in] x2 is the horizontal end of the line and must be >= x1.
WiredHome 72:ecffe56af969 2455 /// @param[in] y2 is the vertical end of the line and must be >= y1.
WiredHome 72:ecffe56af969 2456 /// @param[in] radius1 defines the horizontal radius of the curved corner. Take care
WiredHome 190:3132b7dfad82 2457 /// that this value < 1/2 the width of the rectangle, or bad_parameter
WiredHome 21:3c1efb192927 2458 /// is returned.
WiredHome 72:ecffe56af969 2459 /// @param[in] radius2 defines the vertical radius of the curved corner. Take care
WiredHome 190:3132b7dfad82 2460 /// that this value < 1/2 the height of the rectangle, or bad_parameter
WiredHome 21:3c1efb192927 2461 /// is returned.
WiredHome 72:ecffe56af969 2462 /// @param[in] color defines the foreground color.
WiredHome 72:ecffe56af969 2463 /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
WiredHome 167:8aa3fb2a5a31 2464 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2465 ///
WiredHome 190:3132b7dfad82 2466 RetCode_t fillroundrect(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 37:f19b7e7449dc 2467 dim_t radius1, dim_t radius2, color_t color, fill_t fillit = FILL);
WiredHome 19:3f82c1161fd2 2468
WiredHome 125:7a0b70f56550 2469
WiredHome 107:f9ccffcb84f1 2470 /// Draw a filled rectangle with rounded corners using the specified color.
WiredHome 107:f9ccffcb84f1 2471 ///
WiredHome 107:f9ccffcb84f1 2472 /// This draws a rounded rectangle. A numbers of checks are made on the values,
WiredHome 107:f9ccffcb84f1 2473 /// and it could reduce this to drawing a line (if either x1 == x2, or y1 == y2),
WiredHome 107:f9ccffcb84f1 2474 /// or a single point (x1 == x2 && y1 == y2). If the radius parameters are
WiredHome 107:f9ccffcb84f1 2475 /// > 1/2 the length of that side (width or height), an error value is returned.
WiredHome 107:f9ccffcb84f1 2476 ///
WiredHome 107:f9ccffcb84f1 2477 /// @note As a side effect, this changes the current
WiredHome 107:f9ccffcb84f1 2478 /// foreground color for subsequent operations.
WiredHome 107:f9ccffcb84f1 2479 ///
WiredHome 107:f9ccffcb84f1 2480 /// @param[in] r is the rectangle to draw.
WiredHome 107:f9ccffcb84f1 2481 /// @param[in] radius1 defines the horizontal radius of the curved corner. Take care
WiredHome 190:3132b7dfad82 2482 /// that this value < 1/2 the width of the rectangle, or bad_parameter
WiredHome 107:f9ccffcb84f1 2483 /// is returned.
WiredHome 107:f9ccffcb84f1 2484 /// @param[in] radius2 defines the vertical radius of the curved corner. Take care
WiredHome 190:3132b7dfad82 2485 /// that this value < 1/2 the height of the rectangle, or bad_parameter
WiredHome 107:f9ccffcb84f1 2486 /// is returned.
WiredHome 107:f9ccffcb84f1 2487 /// @param[in] color defines the foreground color.
WiredHome 107:f9ccffcb84f1 2488 /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
WiredHome 167:8aa3fb2a5a31 2489 /// @returns @ref RetCode_t value.
WiredHome 107:f9ccffcb84f1 2490 ///
WiredHome 190:3132b7dfad82 2491 RetCode_t fillroundrect(rect_t r,
WiredHome 107:f9ccffcb84f1 2492 dim_t radius1, dim_t radius2, color_t color, fill_t fillit = FILL);
WiredHome 107:f9ccffcb84f1 2493
WiredHome 125:7a0b70f56550 2494
WiredHome 107:f9ccffcb84f1 2495 /// Draw a rectangle with rounded corners using the specified color.
WiredHome 107:f9ccffcb84f1 2496 ///
WiredHome 107:f9ccffcb84f1 2497 /// This draws a rounded rectangle. A numbers of checks are made on the values,
WiredHome 107:f9ccffcb84f1 2498 /// and it could reduce this to drawing a line (if either x1 == x2, or y1 == y2),
WiredHome 107:f9ccffcb84f1 2499 /// or a single point (x1 == x2 && y1 == y2). If the radius parameters are
WiredHome 107:f9ccffcb84f1 2500 /// > 1/2 the length of that side (width or height), an error value is returned.
WiredHome 107:f9ccffcb84f1 2501 ///
WiredHome 107:f9ccffcb84f1 2502 /// @note As a side effect, this changes the current
WiredHome 107:f9ccffcb84f1 2503 /// foreground color for subsequent operations.
WiredHome 107:f9ccffcb84f1 2504 ///
WiredHome 107:f9ccffcb84f1 2505 /// @param[in] r is the rectangle to draw.
WiredHome 107:f9ccffcb84f1 2506 /// @param[in] radius1 defines the horizontal radius of the curved corner. Take care
WiredHome 190:3132b7dfad82 2507 /// that this value < 1/2 the width of the rectangle, or bad_parameter
WiredHome 107:f9ccffcb84f1 2508 /// is returned.
WiredHome 107:f9ccffcb84f1 2509 /// @param[in] radius2 defines the vertical radius of the curved corner. Take care
WiredHome 190:3132b7dfad82 2510 /// that this value < 1/2 the height of the rectangle, or bad_parameter
WiredHome 107:f9ccffcb84f1 2511 /// is returned.
WiredHome 107:f9ccffcb84f1 2512 /// @param[in] color defines the foreground color.
WiredHome 107:f9ccffcb84f1 2513 /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
WiredHome 167:8aa3fb2a5a31 2514 /// @returns @ref RetCode_t value.
WiredHome 107:f9ccffcb84f1 2515 ///
WiredHome 190:3132b7dfad82 2516 RetCode_t roundrect(rect_t r,
WiredHome 107:f9ccffcb84f1 2517 dim_t radius1, dim_t radius2, color_t color, fill_t fillit = NOFILL);
WiredHome 107:f9ccffcb84f1 2518
WiredHome 125:7a0b70f56550 2519
WiredHome 19:3f82c1161fd2 2520 /// Draw a rectangle with rounded corners using the specified color.
WiredHome 19:3f82c1161fd2 2521 ///
WiredHome 21:3c1efb192927 2522 /// This draws a rounded rectangle. A numbers of checks are made on the values,
WiredHome 21:3c1efb192927 2523 /// and it could reduce this to drawing a line (if either x1 == x2, or y1 == y2),
WiredHome 21:3c1efb192927 2524 /// or a single point (x1 == x2 && y1 == y2). If the radius parameters are
WiredHome 21:3c1efb192927 2525 /// > 1/2 the length of that side (width or height), an error value is returned.
WiredHome 21:3c1efb192927 2526 ///
WiredHome 19:3f82c1161fd2 2527 /// @note As a side effect, this changes the current
WiredHome 19:3f82c1161fd2 2528 /// foreground color for subsequent operations.
WiredHome 19:3f82c1161fd2 2529 ///
WiredHome 72:ecffe56af969 2530 /// @param[in] x1 is the horizontal start of the line and must be <= x2.
WiredHome 72:ecffe56af969 2531 /// @param[in] y1 is the vertical start of the line and must be <= y2.
WiredHome 72:ecffe56af969 2532 /// @param[in] x2 is the horizontal end of the line and must be >= x1.
WiredHome 72:ecffe56af969 2533 /// @param[in] y2 is the vertical end of the line and must be >= y1.
WiredHome 72:ecffe56af969 2534 /// @param[in] radius1 defines the horizontal radius of the curved corner. Take care
WiredHome 190:3132b7dfad82 2535 /// that this value < 1/2 the width of the rectangle, or bad_parameter
WiredHome 21:3c1efb192927 2536 /// is returned.
WiredHome 72:ecffe56af969 2537 /// @param[in] radius2 defines the vertical radius of the curved corner. Take care
WiredHome 190:3132b7dfad82 2538 /// that this value < 1/2 the height of the rectangle, or bad_parameter
WiredHome 21:3c1efb192927 2539 /// is returned.
WiredHome 72:ecffe56af969 2540 /// @param[in] color defines the foreground color.
WiredHome 72:ecffe56af969 2541 /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
WiredHome 167:8aa3fb2a5a31 2542 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2543 ///
WiredHome 190:3132b7dfad82 2544 RetCode_t roundrect(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 37:f19b7e7449dc 2545 dim_t radius1, dim_t radius2, color_t color, fill_t fillit = NOFILL);
WiredHome 19:3f82c1161fd2 2546
WiredHome 125:7a0b70f56550 2547
WiredHome 19:3f82c1161fd2 2548 /// Draw a rectangle with rounded corners.
WiredHome 19:3f82c1161fd2 2549 ///
WiredHome 21:3c1efb192927 2550 /// This draws a rounded rectangle. A numbers of checks are made on the values,
WiredHome 21:3c1efb192927 2551 /// and it could reduce this to drawing a line (if either x1 == x2, or y1 == y2),
WiredHome 21:3c1efb192927 2552 /// or a single point (x1 == x2 && y1 == y2). If the radius parameters are
WiredHome 21:3c1efb192927 2553 /// > 1/2 the length of that side (width or height), an error value is returned.
WiredHome 19:3f82c1161fd2 2554 ///
WiredHome 72:ecffe56af969 2555 /// @param[in] x1 is the horizontal start of the line and must be <= x2.
WiredHome 72:ecffe56af969 2556 /// @param[in] y1 is the vertical start of the line and must be <= y2.
WiredHome 72:ecffe56af969 2557 /// @param[in] x2 is the horizontal end of the line and must be >= x1.
WiredHome 72:ecffe56af969 2558 /// @param[in] y2 is the vertical end of the line and must be >= y1.
WiredHome 72:ecffe56af969 2559 /// @param[in] radius1 defines the horizontal radius of the curved corner. Take care
WiredHome 190:3132b7dfad82 2560 /// that this value < 1/2 the width of the rectangle, or bad_parameter
WiredHome 21:3c1efb192927 2561 /// is returned.
WiredHome 72:ecffe56af969 2562 /// @param[in] radius2 defines the vertical radius of the curved corner. Take care
WiredHome 190:3132b7dfad82 2563 /// that this value < 1/2 the height of the rectangle, or bad_parameter
WiredHome 21:3c1efb192927 2564 /// is returned.
WiredHome 72:ecffe56af969 2565 /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
WiredHome 167:8aa3fb2a5a31 2566 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2567 ///
WiredHome 190:3132b7dfad82 2568 RetCode_t roundrect(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 37:f19b7e7449dc 2569 dim_t radius1, dim_t radius2, fill_t fillit = NOFILL);
WiredHome 19:3f82c1161fd2 2570
WiredHome 125:7a0b70f56550 2571
WiredHome 19:3f82c1161fd2 2572 /// Draw a triangle in the specified color.
WiredHome 19:3f82c1161fd2 2573 ///
WiredHome 19:3f82c1161fd2 2574 /// @note As a side effect, this changes the current
WiredHome 19:3f82c1161fd2 2575 /// foreground color for subsequent operations.
WiredHome 19:3f82c1161fd2 2576 ///
WiredHome 178:ae472eb22740 2577 /// @param[in] p1 is point 1.
WiredHome 178:ae472eb22740 2578 /// @param[in] p2 is point 2.
WiredHome 178:ae472eb22740 2579 /// @param[in] p3 is point 3.
WiredHome 178:ae472eb22740 2580 /// @param[in] color defines the foreground color.
WiredHome 178:ae472eb22740 2581 /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
WiredHome 178:ae472eb22740 2582 /// @returns @ref RetCode_t value.
WiredHome 178:ae472eb22740 2583 ///
WiredHome 178:ae472eb22740 2584 RetCode_t filltriangle(point_t p1, point_t p2, point_t p3, color_t color, fill_t fillit = FILL);
WiredHome 178:ae472eb22740 2585
WiredHome 178:ae472eb22740 2586 /// Draw a triangle in the specified color.
WiredHome 178:ae472eb22740 2587 ///
WiredHome 178:ae472eb22740 2588 /// @note As a side effect, this changes the current
WiredHome 178:ae472eb22740 2589 /// foreground color for subsequent operations.
WiredHome 178:ae472eb22740 2590 ///
WiredHome 178:ae472eb22740 2591 /// @param[in] p1 is point 1.
WiredHome 178:ae472eb22740 2592 /// @param[in] p2 is point 2.
WiredHome 178:ae472eb22740 2593 /// @param[in] p3 is point 3.
WiredHome 178:ae472eb22740 2594 /// @param[in] color defines the foreground color.
WiredHome 178:ae472eb22740 2595 /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
WiredHome 178:ae472eb22740 2596 /// @returns @ref RetCode_t value.
WiredHome 178:ae472eb22740 2597 ///
WiredHome 178:ae472eb22740 2598 RetCode_t triangle(point_t p1, point_t p2, point_t p3, color_t color, fill_t fillit = NOFILL);
WiredHome 190:3132b7dfad82 2599
WiredHome 178:ae472eb22740 2600 /// Draw a triangle in the specified color.
WiredHome 178:ae472eb22740 2601 ///
WiredHome 178:ae472eb22740 2602 /// @note As a side effect, this changes the current
WiredHome 178:ae472eb22740 2603 /// foreground color for subsequent operations.
WiredHome 178:ae472eb22740 2604 ///
WiredHome 72:ecffe56af969 2605 /// @param[in] x1 is the horizontal for point 1.
WiredHome 190:3132b7dfad82 2606 /// @param[in] y1 is the vertical for point 1.
WiredHome 72:ecffe56af969 2607 /// @param[in] x2 is the horizontal for point 2.
WiredHome 72:ecffe56af969 2608 /// @param[in] y2 is the vertical for point 2.
WiredHome 72:ecffe56af969 2609 /// @param[in] x3 is the horizontal for point 3.
WiredHome 72:ecffe56af969 2610 /// @param[in] y3 is the vertical for point 3.
WiredHome 72:ecffe56af969 2611 /// @param[in] color defines the foreground color.
WiredHome 72:ecffe56af969 2612 /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
WiredHome 167:8aa3fb2a5a31 2613 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2614 ///
WiredHome 190:3132b7dfad82 2615 RetCode_t triangle(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 37:f19b7e7449dc 2616 loc_t x3, loc_t y3, color_t color, fill_t fillit = NOFILL);
WiredHome 190:3132b7dfad82 2617
WiredHome 125:7a0b70f56550 2618
WiredHome 19:3f82c1161fd2 2619 /// Draw a filled triangle in the specified color.
WiredHome 19:3f82c1161fd2 2620 ///
WiredHome 19:3f82c1161fd2 2621 /// @note As a side effect, this changes the current
WiredHome 19:3f82c1161fd2 2622 /// foreground color for subsequent operations.
WiredHome 19:3f82c1161fd2 2623 ///
WiredHome 72:ecffe56af969 2624 /// @param[in] x1 is the horizontal for point 1.
WiredHome 72:ecffe56af969 2625 /// @param[in] y1 is the vertical for point 1.
WiredHome 72:ecffe56af969 2626 /// @param[in] x2 is the horizontal for point 2.
WiredHome 72:ecffe56af969 2627 /// @param[in] y2 is the vertical for point 2.
WiredHome 72:ecffe56af969 2628 /// @param[in] x3 is the horizontal for point 3.
WiredHome 72:ecffe56af969 2629 /// @param[in] y3 is the vertical for point 3.
WiredHome 72:ecffe56af969 2630 /// @param[in] color defines the foreground color.
WiredHome 72:ecffe56af969 2631 /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
WiredHome 167:8aa3fb2a5a31 2632 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2633 ///
WiredHome 190:3132b7dfad82 2634 RetCode_t filltriangle(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 37:f19b7e7449dc 2635 loc_t x3, loc_t y3, color_t color, fill_t fillit = FILL);
WiredHome 19:3f82c1161fd2 2636
WiredHome 125:7a0b70f56550 2637
WiredHome 19:3f82c1161fd2 2638 /// Draw a triangle
WiredHome 19:3f82c1161fd2 2639 ///
WiredHome 19:3f82c1161fd2 2640 /// Draws a triangle using the foreground color setting.
WiredHome 19:3f82c1161fd2 2641 ///
WiredHome 72:ecffe56af969 2642 /// @param[in] x1 is the horizontal for point 1.
WiredHome 72:ecffe56af969 2643 /// @param[in] y1 is the vertical for point 1.
WiredHome 72:ecffe56af969 2644 /// @param[in] x2 is the horizontal for point 2.
WiredHome 72:ecffe56af969 2645 /// @param[in] y2 is the vertical for point 2.
WiredHome 72:ecffe56af969 2646 /// @param[in] x3 is the horizontal for point 3.
WiredHome 72:ecffe56af969 2647 /// @param[in] y3 is the vertical for point 3.
WiredHome 72:ecffe56af969 2648 /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
WiredHome 167:8aa3fb2a5a31 2649 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2650 ///
WiredHome 190:3132b7dfad82 2651 RetCode_t triangle(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 37:f19b7e7449dc 2652 loc_t x3, loc_t y3, fill_t fillit = NOFILL);
WiredHome 190:3132b7dfad82 2653
WiredHome 83:7bad0068cca0 2654
WiredHome 83:7bad0068cca0 2655 /// Draw a circle using the specified color.
WiredHome 83:7bad0068cca0 2656 ///
WiredHome 83:7bad0068cca0 2657 /// @note As a side effect, this changes the current
WiredHome 83:7bad0068cca0 2658 /// foreground color for subsequent operations.
WiredHome 83:7bad0068cca0 2659 ///
WiredHome 83:7bad0068cca0 2660 /// @param[in] p defines the center of the circle.
WiredHome 83:7bad0068cca0 2661 /// @param[in] radius defines the size of the circle.
WiredHome 83:7bad0068cca0 2662 /// @param[in] color defines the foreground color.
WiredHome 125:7a0b70f56550 2663 /// @param[in] fillit is optional to FILL the circle. default is NOFILL.
WiredHome 167:8aa3fb2a5a31 2664 /// @returns @ref RetCode_t value.
WiredHome 83:7bad0068cca0 2665 ///
WiredHome 83:7bad0068cca0 2666 RetCode_t circle(point_t p, dim_t radius, color_t color, fill_t fillit = NOFILL);
WiredHome 83:7bad0068cca0 2667
WiredHome 125:7a0b70f56550 2668
WiredHome 83:7bad0068cca0 2669 /// Draw a filled circle using the specified color.
WiredHome 83:7bad0068cca0 2670 ///
WiredHome 83:7bad0068cca0 2671 /// @note As a side effect, this changes the current
WiredHome 83:7bad0068cca0 2672 /// foreground color for subsequent operations.
WiredHome 83:7bad0068cca0 2673 ///
WiredHome 83:7bad0068cca0 2674 /// @param[in] p defines the center of the circle.
WiredHome 83:7bad0068cca0 2675 /// @param[in] radius defines the size of the circle.
WiredHome 83:7bad0068cca0 2676 /// @param[in] color defines the foreground color.
WiredHome 125:7a0b70f56550 2677 /// @param[in] fillit is optional to FILL the circle. default is FILL.
WiredHome 167:8aa3fb2a5a31 2678 /// @returns @ref RetCode_t value.
WiredHome 83:7bad0068cca0 2679 ///
WiredHome 83:7bad0068cca0 2680 RetCode_t fillcircle(point_t p, dim_t radius, color_t color, fill_t fillit = FILL);
WiredHome 83:7bad0068cca0 2681
WiredHome 125:7a0b70f56550 2682
WiredHome 83:7bad0068cca0 2683 /// Draw a circle.
WiredHome 83:7bad0068cca0 2684 ///
WiredHome 83:7bad0068cca0 2685 /// Draws a circle using the foreground color setting.
WiredHome 83:7bad0068cca0 2686 ///
WiredHome 83:7bad0068cca0 2687 /// @param[in] p defines the center of the circle.
WiredHome 83:7bad0068cca0 2688 /// @param[in] radius defines the size of the circle.
WiredHome 125:7a0b70f56550 2689 /// @param[in] fillit is optional to FILL the circle. default is NOFILL.
WiredHome 167:8aa3fb2a5a31 2690 /// @returns @ref RetCode_t value.
WiredHome 83:7bad0068cca0 2691 ///
WiredHome 83:7bad0068cca0 2692 RetCode_t circle(point_t p, dim_t radius, fill_t fillit = NOFILL);
WiredHome 83:7bad0068cca0 2693
WiredHome 125:7a0b70f56550 2694
WiredHome 19:3f82c1161fd2 2695 /// Draw a circle using the specified color.
WiredHome 19:3f82c1161fd2 2696 ///
WiredHome 19:3f82c1161fd2 2697 /// @note As a side effect, this changes the current
WiredHome 19:3f82c1161fd2 2698 /// foreground color for subsequent operations.
WiredHome 19:3f82c1161fd2 2699 ///
WiredHome 72:ecffe56af969 2700 /// @param[in] x is the horizontal center of the circle.
WiredHome 72:ecffe56af969 2701 /// @param[in] y is the vertical center of the circle.
WiredHome 72:ecffe56af969 2702 /// @param[in] radius defines the size of the circle.
WiredHome 72:ecffe56af969 2703 /// @param[in] color defines the foreground color.
WiredHome 125:7a0b70f56550 2704 /// @param[in] fillit is optional to FILL the circle. default is NOFILL.
WiredHome 167:8aa3fb2a5a31 2705 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2706 ///
WiredHome 37:f19b7e7449dc 2707 RetCode_t circle(loc_t x, loc_t y, dim_t radius, color_t color, fill_t fillit = NOFILL);
WiredHome 19:3f82c1161fd2 2708
WiredHome 125:7a0b70f56550 2709
WiredHome 19:3f82c1161fd2 2710 /// Draw a filled circle using the specified color.
WiredHome 19:3f82c1161fd2 2711 ///
WiredHome 19:3f82c1161fd2 2712 /// @note As a side effect, this changes the current
WiredHome 19:3f82c1161fd2 2713 /// foreground color for subsequent operations.
WiredHome 19:3f82c1161fd2 2714 ///
WiredHome 72:ecffe56af969 2715 /// @param[in] x is the horizontal center of the circle.
WiredHome 72:ecffe56af969 2716 /// @param[in] y is the vertical center of the circle.
WiredHome 72:ecffe56af969 2717 /// @param[in] radius defines the size of the circle.
WiredHome 72:ecffe56af969 2718 /// @param[in] color defines the foreground color.
WiredHome 125:7a0b70f56550 2719 /// @param[in] fillit is optional to FILL the circle. default is FILL.
WiredHome 167:8aa3fb2a5a31 2720 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2721 ///
WiredHome 37:f19b7e7449dc 2722 RetCode_t fillcircle(loc_t x, loc_t y, dim_t radius, color_t color, fill_t fillit = FILL);
WiredHome 19:3f82c1161fd2 2723
WiredHome 125:7a0b70f56550 2724
WiredHome 19:3f82c1161fd2 2725 /// Draw a circle.
WiredHome 19:3f82c1161fd2 2726 ///
WiredHome 19:3f82c1161fd2 2727 /// Draws a circle using the foreground color setting.
WiredHome 19:3f82c1161fd2 2728 ///
WiredHome 72:ecffe56af969 2729 /// @param[in] x is the horizontal center of the circle.
WiredHome 72:ecffe56af969 2730 /// @param[in] y is the vertical center of the circle.
WiredHome 72:ecffe56af969 2731 /// @param[in] radius defines the size of the circle.
WiredHome 125:7a0b70f56550 2732 /// @param[in] fillit is optional to FILL the circle. default is NOFILL.
WiredHome 167:8aa3fb2a5a31 2733 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2734 ///
WiredHome 37:f19b7e7449dc 2735 RetCode_t circle(loc_t x, loc_t y, dim_t radius, fill_t fillit = NOFILL);
WiredHome 19:3f82c1161fd2 2736
WiredHome 19:3f82c1161fd2 2737 /// Draw an Ellipse using the specified color
WiredHome 19:3f82c1161fd2 2738 ///
WiredHome 19:3f82c1161fd2 2739 /// @note As a side effect, this changes the current
WiredHome 19:3f82c1161fd2 2740 /// foreground color for subsequent operations.
WiredHome 19:3f82c1161fd2 2741 ///
WiredHome 72:ecffe56af969 2742 /// @param[in] x is the horizontal center of the ellipse.
WiredHome 72:ecffe56af969 2743 /// @param[in] y is the vertical center of the ellipse.
WiredHome 72:ecffe56af969 2744 /// @param[in] radius1 defines the horizontal radius of the ellipse.
WiredHome 72:ecffe56af969 2745 /// @param[in] radius2 defines the vertical radius of the ellipse.
WiredHome 72:ecffe56af969 2746 /// @param[in] color defines the foreground color.
WiredHome 72:ecffe56af969 2747 /// @param[in] fillit defines whether the circle is filled or not.
WiredHome 167:8aa3fb2a5a31 2748 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2749 ///
WiredHome 190:3132b7dfad82 2750 RetCode_t ellipse(loc_t x, loc_t y, dim_t radius1, dim_t radius2,
WiredHome 19:3f82c1161fd2 2751 color_t color, fill_t fillit = NOFILL);
WiredHome 19:3f82c1161fd2 2752
WiredHome 125:7a0b70f56550 2753
WiredHome 25:9556a3a9b7cc 2754 /// Draw a filled Ellipse using the specified color
WiredHome 25:9556a3a9b7cc 2755 ///
WiredHome 25:9556a3a9b7cc 2756 /// @note As a side effect, this changes the current
WiredHome 25:9556a3a9b7cc 2757 /// foreground color for subsequent operations.
WiredHome 25:9556a3a9b7cc 2758 ///
WiredHome 72:ecffe56af969 2759 /// @param[in] x is the horizontal center of the ellipse.
WiredHome 72:ecffe56af969 2760 /// @param[in] y is the vertical center of the ellipse.
WiredHome 72:ecffe56af969 2761 /// @param[in] radius1 defines the horizontal radius of the ellipse.
WiredHome 72:ecffe56af969 2762 /// @param[in] radius2 defines the vertical radius of the ellipse.
WiredHome 72:ecffe56af969 2763 /// @param[in] color defines the foreground color.
WiredHome 72:ecffe56af969 2764 /// @param[in] fillit defines whether the circle is filled or not.
WiredHome 167:8aa3fb2a5a31 2765 /// @returns @ref RetCode_t value.
WiredHome 25:9556a3a9b7cc 2766 ///
WiredHome 190:3132b7dfad82 2767 RetCode_t fillellipse(loc_t x, loc_t y, dim_t radius1, dim_t radius2,
WiredHome 25:9556a3a9b7cc 2768 color_t color, fill_t fillit = FILL);
WiredHome 25:9556a3a9b7cc 2769
WiredHome 125:7a0b70f56550 2770
WiredHome 19:3f82c1161fd2 2771 /// Draw an Ellipse
WiredHome 19:3f82c1161fd2 2772 ///
WiredHome 19:3f82c1161fd2 2773 /// Draws it using the foreground color setting.
WiredHome 19:3f82c1161fd2 2774 ///
WiredHome 72:ecffe56af969 2775 /// @param[in] x is the horizontal center of the ellipse.
WiredHome 72:ecffe56af969 2776 /// @param[in] y is the vertical center of the ellipse.
WiredHome 72:ecffe56af969 2777 /// @param[in] radius1 defines the horizontal radius of the ellipse.
WiredHome 72:ecffe56af969 2778 /// @param[in] radius2 defines the vertical radius of the ellipse.
WiredHome 72:ecffe56af969 2779 /// @param[in] fillit defines whether the circle is filled or not.
WiredHome 167:8aa3fb2a5a31 2780 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2781 ///
WiredHome 37:f19b7e7449dc 2782 RetCode_t ellipse(loc_t x, loc_t y, dim_t radius1, dim_t radius2, fill_t fillit = NOFILL);
WiredHome 190:3132b7dfad82 2783
WiredHome 125:7a0b70f56550 2784
WiredHome 131:5bd6ba2ee4a1 2785
WiredHome 131:5bd6ba2ee4a1 2786 /// Block Move
WiredHome 131:5bd6ba2ee4a1 2787 ///
WiredHome 131:5bd6ba2ee4a1 2788 /// The Block Move API activates the RA8875 Block Transfer Engine. Due to the complex
WiredHome 131:5bd6ba2ee4a1 2789 /// set of possible operations, the user should read the related sections of the
WiredHome 131:5bd6ba2ee4a1 2790 /// RA8875 user manual.
WiredHome 131:5bd6ba2ee4a1 2791 ///
WiredHome 131:5bd6ba2ee4a1 2792 /// Some operations may require that other registers are configured, such as the
WiredHome 131:5bd6ba2ee4a1 2793 /// foreground and background color registers, and others. Those must be set
WiredHome 131:5bd6ba2ee4a1 2794 /// outside of this API.
WiredHome 131:5bd6ba2ee4a1 2795 ///
WiredHome 138:61e93bed397e 2796 /// @code
WiredHome 167:8aa3fb2a5a31 2797 /// // Block Move Demo
WiredHome 190:3132b7dfad82 2798 ///
WiredHome 154:ad2450fc3dc3 2799 /// // Calibrate the resistive touch screen, and store the data on the
WiredHome 154:ad2450fc3dc3 2800 /// // local file system.
WiredHome 154:ad2450fc3dc3 2801 /// //
WiredHome 154:ad2450fc3dc3 2802 /// void CalibrateTS(void)
WiredHome 154:ad2450fc3dc3 2803 /// {
WiredHome 154:ad2450fc3dc3 2804 /// FILE * fh;
WiredHome 154:ad2450fc3dc3 2805 /// tpMatrix_t matrix;
WiredHome 154:ad2450fc3dc3 2806 /// RetCode_t r;
WiredHome 154:ad2450fc3dc3 2807 /// Timer testperiod;
WiredHome 190:3132b7dfad82 2808 ///
WiredHome 154:ad2450fc3dc3 2809 /// r = lcd.TouchPanelCalibrate("Calibrate the touch panel", &matrix);
WiredHome 154:ad2450fc3dc3 2810 /// if (r == noerror) {
WiredHome 154:ad2450fc3dc3 2811 /// fh = fopen("/local/tpcal.cfg", "wb");
WiredHome 154:ad2450fc3dc3 2812 /// if (fh) {
WiredHome 154:ad2450fc3dc3 2813 /// fwrite(&matrix, sizeof(tpMatrix_t), 1, fh);
WiredHome 154:ad2450fc3dc3 2814 /// fclose(fh);
WiredHome 154:ad2450fc3dc3 2815 /// printf(" tp cal written.\r\n");
WiredHome 154:ad2450fc3dc3 2816 /// lcd.cls();
WiredHome 154:ad2450fc3dc3 2817 /// } else {
WiredHome 154:ad2450fc3dc3 2818 /// printf(" couldn't open tpcal file.\r\n");
WiredHome 154:ad2450fc3dc3 2819 /// }
WiredHome 154:ad2450fc3dc3 2820 /// } else {
WiredHome 154:ad2450fc3dc3 2821 /// printf("error return: %d\r\n", r);
WiredHome 154:ad2450fc3dc3 2822 /// }
WiredHome 154:ad2450fc3dc3 2823 /// lcd.cls();
WiredHome 154:ad2450fc3dc3 2824 /// }
WiredHome 190:3132b7dfad82 2825 ///
WiredHome 154:ad2450fc3dc3 2826 /// // Try to load a previous resistive touch screen calibration from storage. If it
WiredHome 154:ad2450fc3dc3 2827 /// // doesn't exist, activate the touch screen calibration process.
WiredHome 154:ad2450fc3dc3 2828 /// //
WiredHome 154:ad2450fc3dc3 2829 /// void InitTS(void)
WiredHome 154:ad2450fc3dc3 2830 /// {
WiredHome 154:ad2450fc3dc3 2831 /// FILE * fh;
WiredHome 154:ad2450fc3dc3 2832 /// tpMatrix_t matrix;
WiredHome 190:3132b7dfad82 2833 ///
WiredHome 154:ad2450fc3dc3 2834 /// fh = fopen("/local/tpcal.cfg", "rb");
WiredHome 154:ad2450fc3dc3 2835 /// if (fh) {
WiredHome 154:ad2450fc3dc3 2836 /// fread(&matrix, sizeof(tpMatrix_t), 1, fh);
WiredHome 154:ad2450fc3dc3 2837 /// fclose(fh);
WiredHome 154:ad2450fc3dc3 2838 /// lcd.TouchPanelSetMatrix(&matrix);
WiredHome 154:ad2450fc3dc3 2839 /// printf(" tp cal loaded.\r\n");
WiredHome 154:ad2450fc3dc3 2840 /// } else {
WiredHome 154:ad2450fc3dc3 2841 /// CalibrateTS();
WiredHome 154:ad2450fc3dc3 2842 /// }
WiredHome 154:ad2450fc3dc3 2843 /// }
WiredHome 154:ad2450fc3dc3 2844 ///
WiredHome 138:61e93bed397e 2845 /// int main()
WiredHome 138:61e93bed397e 2846 /// {
WiredHome 138:61e93bed397e 2847 /// point_t src;
WiredHome 138:61e93bed397e 2848 /// point_t dst;
WiredHome 138:61e93bed397e 2849 /// TouchCode_t touch;
WiredHome 138:61e93bed397e 2850 /// const dim_t RECT_W = 100;
WiredHome 138:61e93bed397e 2851 /// const dim_t RECT_H = 100;
WiredHome 190:3132b7dfad82 2852 ///
WiredHome 138:61e93bed397e 2853 /// pc.baud(460800); //I like a snappy terminal, so crank it up!
WiredHome 138:61e93bed397e 2854 /// pc.printf("\r\nRA8875 BTE Move Test - Build " __DATE__ " " __TIME__ "\r\n");
WiredHome 138:61e93bed397e 2855 /// lcd.init(LCD_W,LCD_H,LCD_C, BL_NORM);
WiredHome 138:61e93bed397e 2856 /// lcd.TouchPanelInit();
WiredHome 138:61e93bed397e 2857 /// #ifndef CAP_TOUCH
WiredHome 138:61e93bed397e 2858 /// InitTS(); // Calibration for resistive touch panel
WiredHome 138:61e93bed397e 2859 /// #endif
WiredHome 190:3132b7dfad82 2860 ///
WiredHome 138:61e93bed397e 2861 /// RetCode_t r = lcd.RenderImageFile(0,0,"/local/fullscrn.jpg");
WiredHome 138:61e93bed397e 2862 /// if (r) pc.printf(" Error: %d; %s\r\n", r, lcd.GetErrorMessage(r));
WiredHome 138:61e93bed397e 2863 /// while (1) {
WiredHome 138:61e93bed397e 2864 /// touch = lcd.TouchPanelReadable();
WiredHome 138:61e93bed397e 2865 /// if (touch) {
WiredHome 138:61e93bed397e 2866 /// point_t xy = lcd.TouchCoordinates();
WiredHome 138:61e93bed397e 2867 /// TouchCode_t t = lcd.TouchCode();
WiredHome 190:3132b7dfad82 2868 ///
WiredHome 138:61e93bed397e 2869 /// if (t == touch) {
WiredHome 138:61e93bed397e 2870 /// src = ComputeTopLeftOfRect(xy, RECT_W/2, RECT_H/2, LCD_W, LCD_H);
WiredHome 138:61e93bed397e 2871 /// } else if (t == release) {
WiredHome 138:61e93bed397e 2872 /// dst = ComputeTopLeftOfRect(xy, RECT_W/2, RECT_H/2, LCD_W, LCD_H);
WiredHome 138:61e93bed397e 2873 /// r = lcd.BlockMove(0,0,dst, 0,0,src, RECT_W,RECT_H, 0x2, 0xC);
WiredHome 138:61e93bed397e 2874 /// }
WiredHome 138:61e93bed397e 2875 /// }
WiredHome 138:61e93bed397e 2876 /// }
WiredHome 138:61e93bed397e 2877 /// }
WiredHome 138:61e93bed397e 2878 /// @endcode
WiredHome 138:61e93bed397e 2879 ///
WiredHome 139:99ec74e3273f 2880 /// @param[in] dstLayer layer [5B.7]. layer value is 0 or 1 representing layer 1 and 2.
WiredHome 131:5bd6ba2ee4a1 2881 /// @param[in] dstDataSelect [50.5] defines the destination data type 0: block, 1: linear.
WiredHome 131:5bd6ba2ee4a1 2882 /// @param[in] dstPoint [58-5B] is a point_t defining the destination coordinate.
WiredHome 139:99ec74e3273f 2883 /// @param[in] srcLayer layer [57.7]. layer value is 0 or 1 representing layer 1 and 2.
WiredHome 131:5bd6ba2ee4a1 2884 /// @param[in] srcDataSelect [50.6] defines the source data type 0: block, 1: linear.
WiredHome 131:5bd6ba2ee4a1 2885 /// @param[in] srcPoint [54-57] is a point_t defining the source coordinate.
WiredHome 131:5bd6ba2ee4a1 2886 /// @param[in] bte_width [5C-5D]. operation width.
WiredHome 131:5bd6ba2ee4a1 2887 /// @param[in] bte_height [5E-5F]. operation height.
WiredHome 190:3132b7dfad82 2888 /// @param[in] bte_op_code [51.3-0] defines the raster operation function
WiredHome 131:5bd6ba2ee4a1 2889 /// (write/read/move/...)
WiredHome 131:5bd6ba2ee4a1 2890 /// @param[in] bte_rop_code [51.7-4] defines what type of BTE operation to perform
WiredHome 131:5bd6ba2ee4a1 2891 /// (what is placed at the destination)
WiredHome 167:8aa3fb2a5a31 2892 /// @returns @ref RetCode_t value.
WiredHome 131:5bd6ba2ee4a1 2893 ///
WiredHome 131:5bd6ba2ee4a1 2894 RetCode_t BlockMove(uint8_t dstLayer, uint8_t dstDataSelect, point_t dstPoint,
WiredHome 131:5bd6ba2ee4a1 2895 uint8_t srcLayer, uint8_t srcDataSelect, point_t srcPoint,
WiredHome 137:9e09f6081ef1 2896 dim_t bte_width, dim_t bte_height,
WiredHome 131:5bd6ba2ee4a1 2897 uint8_t bte_op_code, uint8_t bte_rop_code);
WiredHome 131:5bd6ba2ee4a1 2898
WiredHome 131:5bd6ba2ee4a1 2899
WiredHome 19:3f82c1161fd2 2900 /// Control display power
WiredHome 19:3f82c1161fd2 2901 ///
WiredHome 72:ecffe56af969 2902 /// @param[in] on when set to true will turn on the display, when false it is turned off.
WiredHome 167:8aa3fb2a5a31 2903 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2904 ///
WiredHome 19:3f82c1161fd2 2905 RetCode_t Power(bool on);
WiredHome 19:3f82c1161fd2 2906
WiredHome 125:7a0b70f56550 2907
WiredHome 19:3f82c1161fd2 2908 /// Reset the display controller via the Software Reset interface.
WiredHome 19:3f82c1161fd2 2909 ///
WiredHome 167:8aa3fb2a5a31 2910 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2911 ///
WiredHome 19:3f82c1161fd2 2912 RetCode_t Reset(void);
WiredHome 190:3132b7dfad82 2913
WiredHome 125:7a0b70f56550 2914
WiredHome 19:3f82c1161fd2 2915 /// Set backlight brightness.
WiredHome 19:3f82c1161fd2 2916 ///
WiredHome 190:3132b7dfad82 2917 /// When the built-in PWM is used to control the backlight, this
WiredHome 19:3f82c1161fd2 2918 /// API can be used to set the brightness.
WiredHome 190:3132b7dfad82 2919 ///
WiredHome 72:ecffe56af969 2920 /// @param[in] brightness ranges from 0 (off) to 255 (full on)
WiredHome 167:8aa3fb2a5a31 2921 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2922 ///
WiredHome 131:5bd6ba2ee4a1 2923 RetCode_t Backlight_u8(uint8_t brightness);
WiredHome 125:7a0b70f56550 2924
WiredHome 190:3132b7dfad82 2925
WiredHome 86:e86b355940f4 2926 /// Get backlight brightness.
WiredHome 86:e86b355940f4 2927 ///
WiredHome 86:e86b355940f4 2928 /// @returns backlight setting from 0 (off) to 255 (full on).
WiredHome 190:3132b7dfad82 2929 ///
WiredHome 86:e86b355940f4 2930 uint8_t GetBacklight_u8(void);
WiredHome 86:e86b355940f4 2931
WiredHome 19:3f82c1161fd2 2932 /// Set backlight brightness.
WiredHome 19:3f82c1161fd2 2933 ///
WiredHome 190:3132b7dfad82 2934 /// When the built-in PWM is used to control the backlight, this
WiredHome 19:3f82c1161fd2 2935 /// API can be used to set the brightness.
WiredHome 190:3132b7dfad82 2936 ///
WiredHome 72:ecffe56af969 2937 /// @param[in] brightness ranges from 0.0 (off) to 1.0 (full on)
WiredHome 167:8aa3fb2a5a31 2938 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 2939 ///
WiredHome 19:3f82c1161fd2 2940 RetCode_t Backlight(float brightness);
WiredHome 19:3f82c1161fd2 2941
WiredHome 125:7a0b70f56550 2942
WiredHome 86:e86b355940f4 2943 /// Get backlight brightness.
WiredHome 86:e86b355940f4 2944 ///
WiredHome 86:e86b355940f4 2945 /// @returns backlight setting from 0 (off) to 1.0 (full on).
WiredHome 190:3132b7dfad82 2946 ///
WiredHome 86:e86b355940f4 2947 float GetBacklight(void);
WiredHome 86:e86b355940f4 2948
WiredHome 125:7a0b70f56550 2949
WiredHome 98:ecebed9b80b2 2950 /// Select a User Font for all subsequent text.
WiredHome 98:ecebed9b80b2 2951 ///
WiredHome 98:ecebed9b80b2 2952 /// @note Tool to create the fonts is accessible from its creator
WiredHome 190:3132b7dfad82 2953 /// available at http://www.mikroe.com.
WiredHome 98:ecebed9b80b2 2954 /// For version 1.2.0.0, choose the "Export for TFT and new GLCD"
WiredHome 98:ecebed9b80b2 2955 /// format.
WiredHome 98:ecebed9b80b2 2956 ///
WiredHome 98:ecebed9b80b2 2957 /// @param[in] font is a pointer to a specially formed font resource.
WiredHome 167:8aa3fb2a5a31 2958 /// @returns @ref RetCode_t value.
WiredHome 98:ecebed9b80b2 2959 ///
WiredHome 98:ecebed9b80b2 2960 virtual RetCode_t SelectUserFont(const uint8_t * font = NULL);
WiredHome 98:ecebed9b80b2 2961
WiredHome 127:db7f2c704693 2962 /// Get the currently selected user font.
WiredHome 127:db7f2c704693 2963 ///
WiredHome 127:db7f2c704693 2964 /// @returns a pointer to the font, or null, if no user font is selected.
WiredHome 127:db7f2c704693 2965 ///
WiredHome 127:db7f2c704693 2966 virtual const uint8_t * GetUserFont(void) { return font; }
WiredHome 19:3f82c1161fd2 2967
WiredHome 167:8aa3fb2a5a31 2968 /// Get the @ref color_t value from a DOS color index.
WiredHome 167:8aa3fb2a5a31 2969 ///
WiredHome 167:8aa3fb2a5a31 2970 /// See @ref PredefinedColors, @ref color_t.
WiredHome 190:3132b7dfad82 2971 ///
WiredHome 125:7a0b70f56550 2972 /// @code
WiredHome 125:7a0b70f56550 2973 /// color_t color = DOSColor(12);
WiredHome 125:7a0b70f56550 2974 /// @endcode
WiredHome 125:7a0b70f56550 2975 ///
WiredHome 167:8aa3fb2a5a31 2976 /// @param[in] i is the color index, in the range 0 to 15;
WiredHome 190:3132b7dfad82 2977 /// @returns the @ref color_t value of the selected index,
WiredHome 167:8aa3fb2a5a31 2978 /// or 0 (@ref Black) if the index is out of bounds.
WiredHome 19:3f82c1161fd2 2979 ///
WiredHome 19:3f82c1161fd2 2980 color_t DOSColor(int i);
WiredHome 19:3f82c1161fd2 2981
WiredHome 125:7a0b70f56550 2982
WiredHome 167:8aa3fb2a5a31 2983 /// Get the color name (string) from a DOS color index.
WiredHome 167:8aa3fb2a5a31 2984 ///
WiredHome 167:8aa3fb2a5a31 2985 /// See @ref PredefinedColors, @ref color_t.
WiredHome 190:3132b7dfad82 2986 ///
WiredHome 125:7a0b70f56550 2987 /// @code
WiredHome 125:7a0b70f56550 2988 /// printf("color is %s\n", DOSColorNames(12));
WiredHome 125:7a0b70f56550 2989 /// @endcode
WiredHome 125:7a0b70f56550 2990 ///
WiredHome 167:8aa3fb2a5a31 2991 /// @param[in] i is the color index, in the range 0 to 15;
WiredHome 19:3f82c1161fd2 2992 /// @returns a pointer to a string with the color name,
WiredHome 19:3f82c1161fd2 2993 /// or NULL if the index is out of bounds.
WiredHome 190:3132b7dfad82 2994 ///
WiredHome 19:3f82c1161fd2 2995 const char * DOSColorNames(int i);
WiredHome 19:3f82c1161fd2 2996
WiredHome 125:7a0b70f56550 2997
WiredHome 55:dfbabef7003e 2998 /// Advanced method indicating the start of a graphics stream.
WiredHome 55:dfbabef7003e 2999 ///
WiredHome 55:dfbabef7003e 3000 /// This is called prior to a stream of pixel data being sent.
WiredHome 55:dfbabef7003e 3001 /// This may cause register configuration changes in the derived
WiredHome 55:dfbabef7003e 3002 /// class in order to prepare the hardware to accept the streaming
WiredHome 55:dfbabef7003e 3003 /// data.
WiredHome 55:dfbabef7003e 3004 ///
WiredHome 106:c80828f5dea4 3005 /// Following this command, a series of See @ref _putp() commands can
WiredHome 55:dfbabef7003e 3006 /// be used to send individual pixels to the screen.
WiredHome 55:dfbabef7003e 3007 ///
WiredHome 106:c80828f5dea4 3008 /// To conclude the graphics stream, See @ref _EndGraphicsStream should
WiredHome 167:8aa3fb2a5a31 3009 /// be called.
WiredHome 167:8aa3fb2a5a31 3010 ///
WiredHome 167:8aa3fb2a5a31 3011 /// @returns @ref RetCode_t value.
WiredHome 55:dfbabef7003e 3012 ///
WiredHome 55:dfbabef7003e 3013 virtual RetCode_t _StartGraphicsStream(void);
WiredHome 125:7a0b70f56550 3014
WiredHome 190:3132b7dfad82 3015
WiredHome 55:dfbabef7003e 3016 /// Advanced method to put a single color pixel to the screen.
WiredHome 55:dfbabef7003e 3017 ///
WiredHome 190:3132b7dfad82 3018 /// This method may be called as many times as necessary after
WiredHome 190:3132b7dfad82 3019 /// See @ref _StartGraphicsStream() is called, and it should be followed
WiredHome 55:dfbabef7003e 3020 /// by _EndGraphicsStream.
WiredHome 55:dfbabef7003e 3021 ///
WiredHome 125:7a0b70f56550 3022 /// @code
WiredHome 125:7a0b70f56550 3023 /// _putp(DOSColor(12));
WiredHome 125:7a0b70f56550 3024 /// @endcode
WiredHome 125:7a0b70f56550 3025 ///
WiredHome 72:ecffe56af969 3026 /// @param[in] pixel is a color value to be put on the screen.
WiredHome 167:8aa3fb2a5a31 3027 /// @returns @ref RetCode_t value.
WiredHome 55:dfbabef7003e 3028 ///
WiredHome 55:dfbabef7003e 3029 virtual RetCode_t _putp(color_t pixel);
WiredHome 125:7a0b70f56550 3030
WiredHome 190:3132b7dfad82 3031
WiredHome 55:dfbabef7003e 3032 /// Advanced method indicating the end of a graphics stream.
WiredHome 55:dfbabef7003e 3033 ///
WiredHome 55:dfbabef7003e 3034 /// This is called to conclude a stream of pixel data that was sent.
WiredHome 55:dfbabef7003e 3035 /// This may cause register configuration changes in the derived
WiredHome 55:dfbabef7003e 3036 /// class in order to stop the hardware from accept the streaming
WiredHome 55:dfbabef7003e 3037 /// data.
WiredHome 55:dfbabef7003e 3038 ///
WiredHome 167:8aa3fb2a5a31 3039 /// @returns @ref RetCode_t value.
WiredHome 55:dfbabef7003e 3040 ///
WiredHome 55:dfbabef7003e 3041 virtual RetCode_t _EndGraphicsStream(void);
WiredHome 19:3f82c1161fd2 3042
WiredHome 125:7a0b70f56550 3043
WiredHome 57:bd53a9e165a1 3044 /// Set the SPI port frequency (in Hz).
WiredHome 57:bd53a9e165a1 3045 ///
WiredHome 66:468a11f05580 3046 /// This uses the mbed SPI driver, and is therefore dependent on
WiredHome 66:468a11f05580 3047 /// its capabilities. The RA8875 can accept writes via SPI faster
WiredHome 66:468a11f05580 3048 /// than a read can be performed. The frequency set by this API
WiredHome 66:468a11f05580 3049 /// is for the SPI writes. It will automatically reduce the SPI
WiredHome 190:3132b7dfad82 3050 /// clock rate when a read is performed, and restore it for the
WiredHome 68:ab08efabfc88 3051 /// next write. Alternately, the 2nd parameters permits setting
WiredHome 68:ab08efabfc88 3052 /// the read speed rather than letting it compute it automatically.
WiredHome 57:bd53a9e165a1 3053 ///
WiredHome 66:468a11f05580 3054 /// @note The primary effect of this is to recover more CPU cycles
WiredHome 66:468a11f05580 3055 /// for your application code. Keep in mind that when more than
WiredHome 66:468a11f05580 3056 /// one command is sent to the display controller, that it
WiredHome 66:468a11f05580 3057 /// will wait for the controller to finish the prior command.
WiredHome 66:468a11f05580 3058 /// In this case, the performance is limited by the RA8875.
WiredHome 57:bd53a9e165a1 3059 ///
WiredHome 72:ecffe56af969 3060 /// @param[in] Hz is the frequency in Hz, tested range includes the
WiredHome 66:468a11f05580 3061 /// range from 1,000,000 (1MHz) to 10,000,000 (10 MHz). Values
WiredHome 66:468a11f05580 3062 /// outside this range will be accepted, but operation may
WiredHome 76:c981284eb513 3063 /// be unreliable. This depends partially on your hardware design
WiredHome 76:c981284eb513 3064 /// and the wires connecting the display module.
WiredHome 76:c981284eb513 3065 /// The default value is 5,000,000, which should work for most
WiredHome 76:c981284eb513 3066 /// applications as a starting point.
WiredHome 72:ecffe56af969 3067 /// @param[in] Hz2 is an optional parameter and will set the read
WiredHome 68:ab08efabfc88 3068 /// speed independently of the write speed.
WiredHome 167:8aa3fb2a5a31 3069 /// @returns @ref RetCode_t value.
WiredHome 57:bd53a9e165a1 3070 ///
WiredHome 68:ab08efabfc88 3071 RetCode_t frequency(unsigned long Hz = RA8875_DEFAULT_SPI_FREQ, unsigned long Hz2 = 0);
WiredHome 125:7a0b70f56550 3072
WiredHome 125:7a0b70f56550 3073
WiredHome 72:ecffe56af969 3074 /// This method captures the specified area as a 24-bit bitmap file.
WiredHome 72:ecffe56af969 3075 ///
WiredHome 72:ecffe56af969 3076 /// Even though this is a 16-bit display, the stored image is in
WiredHome 72:ecffe56af969 3077 /// 24-bit format.
WiredHome 72:ecffe56af969 3078 ///
WiredHome 73:f22a18707b5e 3079 /// This method will interrogate the current display setting and
WiredHome 190:3132b7dfad82 3080 /// create a bitmap based on those settings. For instance, if
WiredHome 73:f22a18707b5e 3081 /// only layer 1 is visible, then the bitmap is only layer 1. However,
WiredHome 73:f22a18707b5e 3082 /// if there is some other operation in effect (transparent mode).
WiredHome 73:f22a18707b5e 3083 ///
WiredHome 149:c62c4b2d6a15 3084 /// If the idle callback is registered, it will be activated passing
WiredHome 149:c62c4b2d6a15 3085 /// a parameter indicating the percent complete, which may be of value.
WiredHome 149:c62c4b2d6a15 3086 ///
WiredHome 72:ecffe56af969 3087 /// @param[in] x is the left edge of the region to capture
WiredHome 72:ecffe56af969 3088 /// @param[in] y is the top edge of the region to capture
WiredHome 72:ecffe56af969 3089 /// @param[in] w is the width of the region to capture
WiredHome 72:ecffe56af969 3090 /// @param[in] h is the height of the region to capture.
WiredHome 163:17526689a3ed 3091 /// @param[in] Name_BMP is the filename to write the image to.
WiredHome 190:3132b7dfad82 3092 /// @param[in] bitsPerPixel is optional, defaults to 24, and only
WiredHome 163:17526689a3ed 3093 /// accepts the values 24, 8
WiredHome 164:76edd7d9cb68 3094 /// NOTE: The downscaling is CPU intensive, and the operation
WiredHome 164:76edd7d9cb68 3095 /// takes longer.
WiredHome 167:8aa3fb2a5a31 3096 /// @returns @ref RetCode_t value.
WiredHome 72:ecffe56af969 3097 ///
WiredHome 163:17526689a3ed 3098 RetCode_t PrintScreen(loc_t x, loc_t y, dim_t w, dim_t h, const char *Name_BMP, uint8_t bitsPerPixel = 24);
WiredHome 125:7a0b70f56550 3099
WiredHome 190:3132b7dfad82 3100
WiredHome 96:40b74dd3695b 3101 /// This method captures the specified area as a 24-bit bitmap file
WiredHome 96:40b74dd3695b 3102 /// and delivers it to the previously attached callback.
WiredHome 96:40b74dd3695b 3103 ///
WiredHome 96:40b74dd3695b 3104 /// Even though this is a 16-bit display, the stored image is in
WiredHome 96:40b74dd3695b 3105 /// 24-bit format.
WiredHome 96:40b74dd3695b 3106 ///
WiredHome 96:40b74dd3695b 3107 /// This method will interrogate the current display setting and
WiredHome 190:3132b7dfad82 3108 /// create a bitmap based on those settings. For instance, if
WiredHome 96:40b74dd3695b 3109 /// only layer 1 is visible, then the bitmap is only layer 1. However,
WiredHome 96:40b74dd3695b 3110 /// if there is some other operation in effect (transparent mode), it
WiredHome 96:40b74dd3695b 3111 /// will return the blended image.
WiredHome 96:40b74dd3695b 3112 ///
WiredHome 149:c62c4b2d6a15 3113 /// If the idle callback is registered, it will be activated passing
WiredHome 149:c62c4b2d6a15 3114 /// a parameter indicating the percent complete, which may be of value.
WiredHome 149:c62c4b2d6a15 3115 ///
WiredHome 96:40b74dd3695b 3116 /// @param[in] x is the left edge of the region to capture
WiredHome 96:40b74dd3695b 3117 /// @param[in] y is the top edge of the region to capture
WiredHome 96:40b74dd3695b 3118 /// @param[in] w is the width of the region to capture
WiredHome 96:40b74dd3695b 3119 /// @param[in] h is the height of the region to capture.
WiredHome 190:3132b7dfad82 3120 /// @param[in] bitsPerPixel is optional, defaults to 24, and only
WiredHome 164:76edd7d9cb68 3121 /// accepts the values 24, 8
WiredHome 164:76edd7d9cb68 3122 /// NOTE: The downscaling is CPU intensive, and the operation
WiredHome 164:76edd7d9cb68 3123 /// takes longer.
WiredHome 167:8aa3fb2a5a31 3124 /// @returns @ref RetCode_t value.
WiredHome 96:40b74dd3695b 3125 ///
WiredHome 164:76edd7d9cb68 3126 RetCode_t PrintScreen(loc_t x, loc_t y, dim_t w, dim_t h, uint8_t bitsPerPixel = 24);
WiredHome 125:7a0b70f56550 3127
WiredHome 190:3132b7dfad82 3128
WiredHome 96:40b74dd3695b 3129 /// PrintScreen callback registration.
WiredHome 96:40b74dd3695b 3130 ///
WiredHome 96:40b74dd3695b 3131 /// This method attaches a simple c-compatible callback of type PrintCallback_T.
WiredHome 96:40b74dd3695b 3132 /// Then, the PrintScreen(x,y,w,h) method is called. Each chunk of data in the
WiredHome 96:40b74dd3695b 3133 /// BMP file to be created is passed to this callback.
WiredHome 190:3132b7dfad82 3134 ///
WiredHome 123:2f45e80fec5f 3135 /// @param callback is the optional callback function. Without a callback function
WiredHome 123:2f45e80fec5f 3136 /// it will unregister the handler.
WiredHome 96:40b74dd3695b 3137 ///
WiredHome 123:2f45e80fec5f 3138 void AttachPrintHandler(PrintCallback_T callback = NULL) { c_callback = callback; }
WiredHome 96:40b74dd3695b 3139
WiredHome 125:7a0b70f56550 3140
WiredHome 96:40b74dd3695b 3141 /// PrintScreen callback registration.
WiredHome 96:40b74dd3695b 3142 ///
WiredHome 96:40b74dd3695b 3143 /// This method attaches a c++ class method as a callback of type PrintCallback_T.
WiredHome 96:40b74dd3695b 3144 /// Then, the PrintScreen(x,y,w,h) method is called. Each chunk of data in the
WiredHome 96:40b74dd3695b 3145 /// BMP file to be created is passed to this callback.
WiredHome 190:3132b7dfad82 3146 ///
WiredHome 96:40b74dd3695b 3147 /// @param object is the class hosting the callback function.
WiredHome 102:fc60bfa0199f 3148 /// @param method is the callback method in the object to activate.
WiredHome 96:40b74dd3695b 3149 ///
WiredHome 96:40b74dd3695b 3150 template <class T>
WiredHome 190:3132b7dfad82 3151 void AttachPrintHandler(T *object, RetCode_t (T::*method)(void)) {
WiredHome 190:3132b7dfad82 3152 obj_callback = (FPointerDummy *)object;
WiredHome 108:7415c405ee08 3153 method_callback = (uint32_t (FPointerDummy::*)(uint32_t, uint8_t *, uint16_t))method;
WiredHome 96:40b74dd3695b 3154 }
WiredHome 96:40b74dd3695b 3155
WiredHome 125:7a0b70f56550 3156
WiredHome 72:ecffe56af969 3157 /// This method captures the specified area as a 24-bit bitmap file,
WiredHome 72:ecffe56af969 3158 /// including the option of layer selection.
WiredHome 72:ecffe56af969 3159 ///
WiredHome 125:7a0b70f56550 3160 /// @note This method is deprecated as the alternate PrintScreen API
WiredHome 74:686faa218914 3161 /// automatically examines the display layer configuration.
WiredHome 74:686faa218914 3162 /// Therefore, calls to this API will ignore the layer parameter
WiredHome 74:686faa218914 3163 /// and automatically execute the other method.
WiredHome 74:686faa218914 3164 ///
WiredHome 72:ecffe56af969 3165 /// Even though this is a 16-bit display, the stored image is in
WiredHome 72:ecffe56af969 3166 /// 24-bit format.
WiredHome 72:ecffe56af969 3167 ///
WiredHome 72:ecffe56af969 3168 /// @param[in] layer is 0 or 1 to select the layer to extract.
WiredHome 72:ecffe56af969 3169 /// @param[in] x is the left edge of the region to capture
WiredHome 72:ecffe56af969 3170 /// @param[in] y is the top edge of the region to capture
WiredHome 72:ecffe56af969 3171 /// @param[in] w is the width of the region to capture
WiredHome 72:ecffe56af969 3172 /// @param[in] h is the height of the region to capture.
WiredHome 72:ecffe56af969 3173 /// @param[out] Name_BMP is the filename to write the image to.
WiredHome 167:8aa3fb2a5a31 3174 /// @returns @ref RetCode_t value.
WiredHome 72:ecffe56af969 3175 ///
WiredHome 72:ecffe56af969 3176 RetCode_t PrintScreen(uint16_t layer, loc_t x, loc_t y, dim_t w, dim_t h, const char *Name_BMP);
WiredHome 125:7a0b70f56550 3177
WiredHome 190:3132b7dfad82 3178
WiredHome 123:2f45e80fec5f 3179 /// idle callback registration.
WiredHome 123:2f45e80fec5f 3180 ///
WiredHome 125:7a0b70f56550 3181 /// This method attaches a simple c-compatible callback of type IdleCallback_T.
WiredHome 123:2f45e80fec5f 3182 /// Then, at any time when the display driver is waiting, it will call the
WiredHome 123:2f45e80fec5f 3183 /// registered function. This is probably most useful if you want to service
WiredHome 123:2f45e80fec5f 3184 /// a watchdog, when you may have called an API that will "hang" waiting
WiredHome 123:2f45e80fec5f 3185 /// on the user.
WiredHome 123:2f45e80fec5f 3186 ///
WiredHome 149:c62c4b2d6a15 3187 /// @code
WiredHome 149:c62c4b2d6a15 3188 /// RetCode_t myIdle_handler(RA8875::IdleReason_T reason, uint16_t param)
WiredHome 149:c62c4b2d6a15 3189 /// {
WiredHome 149:c62c4b2d6a15 3190 /// static uint16_t lastProgress = 0xFFFF;
WiredHome 149:c62c4b2d6a15 3191 ///
WiredHome 149:c62c4b2d6a15 3192 /// if (reason == RA8875::progress && param != lastProgress) {
WiredHome 149:c62c4b2d6a15 3193 /// printf("Progress %3d%%\r\n", param);
WiredHome 149:c62c4b2d6a15 3194 /// lastProgress = progress;
WiredHome 149:c62c4b2d6a15 3195 /// }
WiredHome 149:c62c4b2d6a15 3196 /// return noerror;
WiredHome 149:c62c4b2d6a15 3197 /// }
WiredHome 149:c62c4b2d6a15 3198 ///
WiredHome 149:c62c4b2d6a15 3199 /// ...
WiredHome 149:c62c4b2d6a15 3200 /// lcd.AttachIdleHandler(myIdle_handler);
WiredHome 149:c62c4b2d6a15 3201 /// ...
WiredHome 149:c62c4b2d6a15 3202 /// RetCode_t r = lcd.PrintScreen(0,0,LCD_W,LCD_H,"/local/print.bmp");
WiredHome 149:c62c4b2d6a15 3203 /// if (r ...)
WiredHome 149:c62c4b2d6a15 3204 /// @endcode
WiredHome 149:c62c4b2d6a15 3205 ///
WiredHome 149:c62c4b2d6a15 3206 ///
WiredHome 123:2f45e80fec5f 3207 /// @param callback is the idle callback function. Without a callback function
WiredHome 123:2f45e80fec5f 3208 /// it will unregister the handler.
WiredHome 123:2f45e80fec5f 3209 ///
WiredHome 123:2f45e80fec5f 3210 void AttachIdleHandler(IdleCallback_T callback = NULL) { idle_callback = callback; }
WiredHome 57:bd53a9e165a1 3211
WiredHome 133:e36dcfc2d756 3212
WiredHome 19:3f82c1161fd2 3213 #ifdef PERF_METRICS
WiredHome 19:3f82c1161fd2 3214 /// Clear the performance metrics to zero.
WiredHome 19:3f82c1161fd2 3215 void ClearPerformance();
WiredHome 190:3132b7dfad82 3216
WiredHome 66:468a11f05580 3217 /// Count idle time.
WiredHome 66:468a11f05580 3218 ///
WiredHome 72:ecffe56af969 3219 /// @param[in] t is the amount of idle time to accumulate.
WiredHome 66:468a11f05580 3220 ///
WiredHome 66:468a11f05580 3221 void CountIdleTime(uint32_t t);
WiredHome 190:3132b7dfad82 3222
WiredHome 19:3f82c1161fd2 3223 /// Report the performance metrics for drawing functions using
WiredHome 41:2956a0a221e5 3224 /// the available serial channel.
WiredHome 41:2956a0a221e5 3225 ///
WiredHome 72:ecffe56af969 3226 /// @param[in,out] pc is the serial channel to write to.
WiredHome 41:2956a0a221e5 3227 ///
WiredHome 41:2956a0a221e5 3228 void ReportPerformance(Serial & pc);
WiredHome 19:3f82c1161fd2 3229 #endif
WiredHome 19:3f82c1161fd2 3230
hexley 54:e117ad10fba6 3231
WiredHome 19:3f82c1161fd2 3232 private:
WiredHome 182:8832d03a2a29 3233 void InitAllMemberVars();
WiredHome 182:8832d03a2a29 3234
WiredHome 124:1690a7ae871c 3235 /// Touch panel parameters - common to both resistive and capacitive
WiredHome 190:3132b7dfad82 3236
WiredHome 124:1690a7ae871c 3237 /// Data type to indicate which TP, if any, is in use.
WiredHome 124:1690a7ae871c 3238 typedef enum {
WiredHome 124:1690a7ae871c 3239 TP_NONE, ///< no touch panel in use
WiredHome 124:1690a7ae871c 3240 TP_RES, ///< resistive touch panel using RA8875
WiredHome 165:695c24cc5197 3241 TP_FT5206, ///< Capacitive touch panel using FT5206
WiredHome 165:695c24cc5197 3242 TP_CAP=TP_FT5206, ///< DEPRECATED: used TP_CAP5206 for that chip-set
WiredHome 165:695c24cc5197 3243 TP_GSL1680, ///< Capacitive touch panel using GSL1680 chip
WiredHome 124:1690a7ae871c 3244 } WhichTP_T;
WiredHome 190:3132b7dfad82 3245
WiredHome 124:1690a7ae871c 3246 /// boolean flag set true when using Capacitive touch panel, and false
WiredHome 124:1690a7ae871c 3247 /// for resistive.
WiredHome 124:1690a7ae871c 3248 WhichTP_T useTouchPanel; ///< Indicates which TP is selected for use.
WiredHome 190:3132b7dfad82 3249
WiredHome 124:1690a7ae871c 3250 /// Touch State used by TouchPanelReadable. See @ref TouchCode_t.
WiredHome 124:1690a7ae871c 3251 TouchCode_t touchState;
WiredHome 124:1690a7ae871c 3252
WiredHome 124:1690a7ae871c 3253 ////////////////// Start of Capacitive Touch Panel parameters
WiredHome 190:3132b7dfad82 3254
WiredHome 162:a2d7f1988711 3255 int RoundUp(int value, int roundTo);
WiredHome 165:695c24cc5197 3256 uint8_t FT5206_TouchPositions(void);
WiredHome 165:695c24cc5197 3257 uint8_t FT5206_ReadRegU8(uint8_t reg);
WiredHome 165:695c24cc5197 3258 uint8_t GSL1680_TouchPositions(void);
WiredHome 165:695c24cc5197 3259 uint8_t GSL1680_ReadRegU8(uint8_t reg, uint8_t * buf, int count);
WiredHome 165:695c24cc5197 3260 RetCode_t FT5206_Init();
WiredHome 165:695c24cc5197 3261 RetCode_t GSL1680_Init();
WiredHome 165:695c24cc5197 3262
WiredHome 124:1690a7ae871c 3263 void TouchPanelISR(void);
WiredHome 124:1690a7ae871c 3264 uint16_t numberOfTouchPoints;
WiredHome 165:695c24cc5197 3265 uint8_t gesture; ///< Holds the reported gesture information (which doesn't work well for the FT5206)
WiredHome 190:3132b7dfad82 3266
WiredHome 124:1690a7ae871c 3267 /// Touch Information data structure
WiredHome 124:1690a7ae871c 3268 typedef struct {
WiredHome 124:1690a7ae871c 3269 uint8_t touchID; ///< Contains the touch ID, which is the "order" of touch, from 0 to n-1
WiredHome 124:1690a7ae871c 3270 TouchCode_t touchCode; ///< Contains the touch code; no_touch, touch, held, release
WiredHome 124:1690a7ae871c 3271 point_t coordinates; ///< Contains the X,Y coordinate of the touch
WiredHome 124:1690a7ae871c 3272 } touchInfo_T;
WiredHome 124:1690a7ae871c 3273
WiredHome 166:53fd4a876dac 3274 touchInfo_T * touchInfo; /// Storage allocated by the constructor to contains the touch information
WiredHome 124:1690a7ae871c 3275
WiredHome 155:b3f225ae572c 3276 #if MBED_VERSION >= MBED_ENCODE_VERSION(5,8,0)
WiredHome 155:b3f225ae572c 3277 Thread eventThread;
WiredHome 155:b3f225ae572c 3278 EventQueue queue;
WiredHome 155:b3f225ae572c 3279 #endif
WiredHome 124:1690a7ae871c 3280 InterruptIn * m_irq;
WiredHome 124:1690a7ae871c 3281 I2C * m_i2c;
WiredHome 165:695c24cc5197 3282 int m_addr; /// I2C Address of the Cap Touch Controller
WiredHome 165:695c24cc5197 3283 //uint8_t data[2]; /// Transfer data for the I2C interface
WiredHome 124:1690a7ae871c 3284
WiredHome 124:1690a7ae871c 3285 bool panelTouched;
WiredHome 190:3132b7dfad82 3286
WiredHome 124:1690a7ae871c 3287 ////////////////// Start of Resistive Touch Panel parameters
WiredHome 190:3132b7dfad82 3288
WiredHome 193:74f80834d59d 3289 #if 0
WiredHome 124:1690a7ae871c 3290 /// Resistive Touch Panel register name definitions
WiredHome 77:9206c13aa527 3291 #define TPCR0 0x70
WiredHome 77:9206c13aa527 3292 #define TPCR1 0x71
WiredHome 77:9206c13aa527 3293 #define TPXH 0x72
WiredHome 77:9206c13aa527 3294 #define TPYH 0x73
WiredHome 77:9206c13aa527 3295 #define TPXYL 0x74
WiredHome 77:9206c13aa527 3296 #define INTC1 0xF0
WiredHome 77:9206c13aa527 3297 #define INTC2 0xF1
WiredHome 193:74f80834d59d 3298 #endif
hexley 54:e117ad10fba6 3299
hexley 54:e117ad10fba6 3300 /// Specify the default settings for the Touch Panel, where different from the chip defaults
WiredHome 77:9206c13aa527 3301 #define TP_MODE_DEFAULT TP_MODE_AUTO
WiredHome 77:9206c13aa527 3302 #define TP_DEBOUNCE_DEFAULT TP_DEBOUNCE_ON
WiredHome 77:9206c13aa527 3303 #define TP_ADC_CLKDIV_DEFAULT TP_ADC_CLKDIV_8
hexley 54:e117ad10fba6 3304
WiredHome 77:9206c13aa527 3305 #define TP_ADC_SAMPLE_DEFAULT_CLKS TP_ADC_SAMPLE_8192_CLKS
hexley 54:e117ad10fba6 3306
hexley 54:e117ad10fba6 3307 /// Other Touch Panel params
WiredHome 77:9206c13aa527 3308 #define TPBUFSIZE 16 // Depth of the averaging buffers for x and y data
hexley 54:e117ad10fba6 3309
WiredHome 83:7bad0068cca0 3310 // Needs both a ticker and a timer. (could have created a timer from the ticker, but this is easier).
WiredHome 83:7bad0068cca0 3311 // on a touch, the timer is reset.
WiredHome 83:7bad0068cca0 3312 // the ticker monitors the timer to see if it has been a long time since
WiredHome 83:7bad0068cca0 3313 // a touch, and if so, it then clears the sample counter so it doesn't get partial old
WiredHome 83:7bad0068cca0 3314 // and partial new.
WiredHome 190:3132b7dfad82 3315
WiredHome 83:7bad0068cca0 3316 /// Touch Panel ticker
WiredHome 165:695c24cc5197 3317 /// This it bound to a timer to call the _TouchTicker() function periodically.
WiredHome 165:695c24cc5197 3318 ///
WiredHome 83:7bad0068cca0 3319 Ticker touchTicker;
WiredHome 190:3132b7dfad82 3320
WiredHome 83:7bad0068cca0 3321 /// Touch Panel timer
WiredHome 165:695c24cc5197 3322 /// Reset on a touch, to expire on a non-touch
WiredHome 165:695c24cc5197 3323 ///
WiredHome 165:695c24cc5197 3324 Timer timeSinceTouch;
WiredHome 190:3132b7dfad82 3325
WiredHome 83:7bad0068cca0 3326 /// keeps track of which sample we're collecting to filter out the noise.
WiredHome 83:7bad0068cca0 3327 int touchSample;
WiredHome 190:3132b7dfad82 3328
WiredHome 83:7bad0068cca0 3329 /// Private function for touch ticker callback.
WiredHome 83:7bad0068cca0 3330 void _TouchTicker(void);
WiredHome 190:3132b7dfad82 3331
WiredHome 77:9206c13aa527 3332 /// Touch Panel calibration matrix.
WiredHome 77:9206c13aa527 3333 tpMatrix_t tpMatrix;
hexley 54:e117ad10fba6 3334
WiredHome 157:1565f38ca44b 3335 /// RESISTIVE TP: The fully qualified filename for the RESISTIVE touch panel configuration settings.
WiredHome 157:1565f38ca44b 3336 const char * tpFQFN;
WiredHome 190:3132b7dfad82 3337
WiredHome 157:1565f38ca44b 3338 /// RESISTIVE TP: The text message shown to the user during the calibration process.
WiredHome 157:1565f38ca44b 3339 const char * tpCalMessage;
WiredHome 157:1565f38ca44b 3340
WiredHome 157:1565f38ca44b 3341 /// Internal method that performs the TS Cal when the user has so-configured it
WiredHome 157:1565f38ca44b 3342 RetCode_t _internal_ts_cal();
WiredHome 157:1565f38ca44b 3343
WiredHome 157:1565f38ca44b 3344
WiredHome 124:1690a7ae871c 3345 ////////////////// End of Touch Panel parameters
WiredHome 124:1690a7ae871c 3346
WiredHome 124:1690a7ae871c 3347
WiredHome 29:422616aa04bd 3348 /// Internal function to put a character using the built-in (internal) font engine
WiredHome 29:422616aa04bd 3349 ///
WiredHome 101:e0aad446094a 3350 /// @param[in] c is the character to put to the screen.
WiredHome 29:422616aa04bd 3351 /// @returns the character put.
WiredHome 29:422616aa04bd 3352 ///
WiredHome 29:422616aa04bd 3353 int _internal_putc(int c);
WiredHome 190:3132b7dfad82 3354
WiredHome 29:422616aa04bd 3355 /// Internal function to put a character using the external font engine
WiredHome 29:422616aa04bd 3356 ///
WiredHome 101:e0aad446094a 3357 /// @param[in] c is the character to put to the screen.
WiredHome 29:422616aa04bd 3358 /// @returns the character put.
WiredHome 29:422616aa04bd 3359 ///
WiredHome 29:422616aa04bd 3360 int _external_putc(int c);
WiredHome 190:3132b7dfad82 3361
WiredHome 101:e0aad446094a 3362 /// Internal function to get the actual width of a character when using the external font engine
WiredHome 101:e0aad446094a 3363 ///
WiredHome 101:e0aad446094a 3364 /// @param[in] c is the character to get the width.
WiredHome 101:e0aad446094a 3365 /// @returns the width in pixels of the character. zero if not found.
WiredHome 101:e0aad446094a 3366 ///
WiredHome 101:e0aad446094a 3367 int _external_getCharWidth(int c);
WiredHome 190:3132b7dfad82 3368
WiredHome 133:e36dcfc2d756 3369 /// Write color to an RGB register set
WiredHome 133:e36dcfc2d756 3370 ///
WiredHome 133:e36dcfc2d756 3371 /// This API takes a color value, and writes it into the specified
WiredHome 133:e36dcfc2d756 3372 /// color registers, which are a trio of 3 registers. The actual
WiredHome 133:e36dcfc2d756 3373 /// trio write is performed based on whether the display is configured
WiredHome 133:e36dcfc2d756 3374 /// for 8 or 16 bits per pixel.
WiredHome 133:e36dcfc2d756 3375 ///
WiredHome 133:e36dcfc2d756 3376 /// @param[in] regAddr is the register address starting the trio
WiredHome 133:e36dcfc2d756 3377 /// @param[in] color is the color to write
WiredHome 167:8aa3fb2a5a31 3378 /// @returns @ref RetCode_t value.
WiredHome 133:e36dcfc2d756 3379 ///
WiredHome 133:e36dcfc2d756 3380 RetCode_t _writeColorTrio(uint8_t regAddr, color_t color);
WiredHome 190:3132b7dfad82 3381
WiredHome 133:e36dcfc2d756 3382 /// Read color from an RGB register set
WiredHome 133:e36dcfc2d756 3383 ///
WiredHome 133:e36dcfc2d756 3384 /// This API reads a color value from a trio of registers. The actual
WiredHome 133:e36dcfc2d756 3385 /// trio write is performed based on whether the display is configured
WiredHome 133:e36dcfc2d756 3386 /// for 8 or 16 bits per pixel.
WiredHome 133:e36dcfc2d756 3387 ///
WiredHome 133:e36dcfc2d756 3388 /// @param[in] regAddr is the register address starting the trio
WiredHome 133:e36dcfc2d756 3389 /// @returns color_t value
WiredHome 133:e36dcfc2d756 3390 ///
WiredHome 133:e36dcfc2d756 3391 color_t _readColorTrio(uint8_t regAddr);
WiredHome 190:3132b7dfad82 3392
WiredHome 190:3132b7dfad82 3393
WiredHome 105:4f116006ba1f 3394 /// Convert a 16-bit color value to an 8-bit value
WiredHome 105:4f116006ba1f 3395 ///
WiredHome 105:4f116006ba1f 3396 /// @param[in] c16 is the 16-bit color value to convert.
WiredHome 105:4f116006ba1f 3397 /// @returns 8-bit color value.
WiredHome 105:4f116006ba1f 3398 ///
WiredHome 105:4f116006ba1f 3399 uint8_t _cvt16to8(color_t c16);
WiredHome 105:4f116006ba1f 3400
WiredHome 105:4f116006ba1f 3401 /// Convert an 8-bit color value to a 16-bit value
WiredHome 105:4f116006ba1f 3402 ///
WiredHome 105:4f116006ba1f 3403 /// @param[in] c8 is the 8-bit color value to convert.
WiredHome 105:4f116006ba1f 3404 /// @returns 16-bit color value.
WiredHome 105:4f116006ba1f 3405 ///
WiredHome 105:4f116006ba1f 3406 color_t _cvt8to16(uint8_t c8);
WiredHome 190:3132b7dfad82 3407
WiredHome 19:3f82c1161fd2 3408 /// Select the peripheral to use it.
WiredHome 19:3f82c1161fd2 3409 ///
WiredHome 72:ecffe56af969 3410 /// @param[in] chipsel when true will select the peripheral, and when false
WiredHome 19:3f82c1161fd2 3411 /// will deselect the chip. This is the logical selection, and
WiredHome 19:3f82c1161fd2 3412 /// the pin selection is the invert of this.
WiredHome 167:8aa3fb2a5a31 3413 /// @returns @ref RetCode_t value.
WiredHome 19:3f82c1161fd2 3414 ///
WiredHome 79:544eb4964795 3415 RetCode_t _select(bool chipsel);
WiredHome 19:3f82c1161fd2 3416
WiredHome 66:468a11f05580 3417 /// Wait while the status register indicates the controller is busy.
WiredHome 66:468a11f05580 3418 ///
WiredHome 72:ecffe56af969 3419 /// @param[in] mask is the mask of bits to monitor.
WiredHome 66:468a11f05580 3420 /// @returns true if a normal exit.
WiredHome 66:468a11f05580 3421 /// @returns false if a timeout exit.
WiredHome 66:468a11f05580 3422 ///
WiredHome 66:468a11f05580 3423 bool _WaitWhileBusy(uint8_t mask);
WiredHome 66:468a11f05580 3424
WiredHome 66:468a11f05580 3425 /// Wait while the the register anded with the mask is true.
WiredHome 66:468a11f05580 3426 ///
WiredHome 72:ecffe56af969 3427 /// @param[in] reg is the register to monitor
WiredHome 72:ecffe56af969 3428 /// @param[in] mask is the bit mask to monitor
WiredHome 66:468a11f05580 3429 /// @returns true if it was a normal exit
WiredHome 66:468a11f05580 3430 /// @returns false if it was a timeout that caused the exit.
WiredHome 66:468a11f05580 3431 ///
WiredHome 66:468a11f05580 3432 bool _WaitWhileReg(uint8_t reg, uint8_t mask);
WiredHome 66:468a11f05580 3433
WiredHome 68:ab08efabfc88 3434 /// set the spi port to either the write or the read speed.
WiredHome 68:ab08efabfc88 3435 ///
WiredHome 68:ab08efabfc88 3436 /// This is a private API used to toggle between the write
WiredHome 68:ab08efabfc88 3437 /// and the read speed for the SPI port to the RA8875, since
WiredHome 68:ab08efabfc88 3438 /// it can accept writes faster than reads.
WiredHome 68:ab08efabfc88 3439 ///
WiredHome 72:ecffe56af969 3440 /// @param[in] writeSpeed when true selects the write frequency,
WiredHome 68:ab08efabfc88 3441 /// and when false it selects the read frequency.
WiredHome 68:ab08efabfc88 3442 ///
WiredHome 68:ab08efabfc88 3443 void _setWriteSpeed(bool writeSpeed);
WiredHome 68:ab08efabfc88 3444
WiredHome 19:3f82c1161fd2 3445 /// The most primitive - to write a data value to the SPI interface.
WiredHome 19:3f82c1161fd2 3446 ///
WiredHome 72:ecffe56af969 3447 /// @param[in] data is the value to write.
WiredHome 19:3f82c1161fd2 3448 /// @returns a value read from the port, since SPI is often shift
WiredHome 19:3f82c1161fd2 3449 /// in while shifting out.
WiredHome 19:3f82c1161fd2 3450 ///
WiredHome 79:544eb4964795 3451 unsigned char _spiwrite(unsigned char data);
WiredHome 190:3132b7dfad82 3452
WiredHome 19:3f82c1161fd2 3453 /// The most primitive - to read a data value to the SPI interface.
WiredHome 19:3f82c1161fd2 3454 ///
WiredHome 19:3f82c1161fd2 3455 /// This is really just a specialcase of the write command, where
WiredHome 19:3f82c1161fd2 3456 /// the value zero is written in order to read.
WiredHome 19:3f82c1161fd2 3457 ///
WiredHome 19:3f82c1161fd2 3458 /// @returns a value read from the port, since SPI is often shift
WiredHome 19:3f82c1161fd2 3459 /// in while shifting out.
WiredHome 19:3f82c1161fd2 3460 ///
WiredHome 79:544eb4964795 3461 unsigned char _spiread();
WiredHome 190:3132b7dfad82 3462
WiredHome 75:ca78388cfd77 3463 const uint8_t * pKeyMap;
WiredHome 190:3132b7dfad82 3464
WiredHome 19:3f82c1161fd2 3465 SPI spi; ///< spi port
WiredHome 68:ab08efabfc88 3466 bool spiWriteSpeed; ///< indicates if the current mode is write or read
WiredHome 68:ab08efabfc88 3467 unsigned long spiwritefreq; ///< saved write freq
WiredHome 66:468a11f05580 3468 unsigned long spireadfreq; ///< saved read freq
WiredHome 165:695c24cc5197 3469 DigitalOut cs; ///< RA8875 chip select pin, assumed active low
WiredHome 165:695c24cc5197 3470 DigitalOut res; ///< RA8875 reset pin, assumed active low
WiredHome 165:695c24cc5197 3471 DigitalOut * m_wake; ///< GSL1680 wake pin
WiredHome 190:3132b7dfad82 3472
WiredHome 105:4f116006ba1f 3473 // display metrics to avoid lengthy spi read queries
WiredHome 105:4f116006ba1f 3474 uint8_t screenbpp; ///< configured bits per pixel
WiredHome 90:d113d71ae4f0 3475 dim_t screenwidth; ///< configured screen width
WiredHome 90:d113d71ae4f0 3476 dim_t screenheight; ///< configured screen height
WiredHome 190:3132b7dfad82 3477 rect_t windowrect; ///< window commands are held here for speed of access
WiredHome 90:d113d71ae4f0 3478 bool portraitmode; ///< set true when in portrait mode (w,h are reversed)
WiredHome 190:3132b7dfad82 3479 bool wordwrap; ///< set true when wordwrap is in effect for _puts()
WiredHome 19:3f82c1161fd2 3480 const unsigned char * font; ///< reference to an external font somewhere in memory
WiredHome 98:ecebed9b80b2 3481 uint8_t extFontHeight; ///< computed from the font table when the user sets the font
WiredHome 98:ecebed9b80b2 3482 uint8_t extFontWidth; ///< computed from the font table when the user sets the font
WiredHome 190:3132b7dfad82 3483 bool roundCap; ///< draw round end cap on thick lines when set.
WiredHome 90:d113d71ae4f0 3484 loc_t cursor_x, cursor_y; ///< used for external fonts only
WiredHome 190:3132b7dfad82 3485
WiredHome 19:3f82c1161fd2 3486 #ifdef PERF_METRICS
WiredHome 19:3f82c1161fd2 3487 typedef enum
WiredHome 19:3f82c1161fd2 3488 {
WiredHome 19:3f82c1161fd2 3489 PRF_CLS,
WiredHome 41:2956a0a221e5 3490 PRF_DRAWPIXEL,
WiredHome 41:2956a0a221e5 3491 PRF_PIXELSTREAM,
WiredHome 109:7b94f06f085b 3492 PRF_BOOLSTREAM,
WiredHome 41:2956a0a221e5 3493 PRF_READPIXEL,
WiredHome 41:2956a0a221e5 3494 PRF_READPIXELSTREAM,
WiredHome 19:3f82c1161fd2 3495 PRF_DRAWLINE,
WiredHome 19:3f82c1161fd2 3496 PRF_DRAWRECTANGLE,
WiredHome 19:3f82c1161fd2 3497 PRF_DRAWROUNDEDRECTANGLE,
WiredHome 19:3f82c1161fd2 3498 PRF_DRAWTRIANGLE,
WiredHome 19:3f82c1161fd2 3499 PRF_DRAWCIRCLE,
WiredHome 19:3f82c1161fd2 3500 PRF_DRAWELLIPSE,
WiredHome 131:5bd6ba2ee4a1 3501 PRF_BLOCKMOVE,
WiredHome 182:8832d03a2a29 3502 METRICCOUNT = PRF_BLOCKMOVE
WiredHome 19:3f82c1161fd2 3503 } method_e;
WiredHome 19:3f82c1161fd2 3504 unsigned long metrics[METRICCOUNT];
WiredHome 75:ca78388cfd77 3505 unsigned long idletime_usec;
WiredHome 19:3f82c1161fd2 3506 void RegisterPerformance(method_e method);
WiredHome 19:3f82c1161fd2 3507 Timer performance;
WiredHome 19:3f82c1161fd2 3508 #endif
WiredHome 190:3132b7dfad82 3509
WiredHome 96:40b74dd3695b 3510 RetCode_t _printCallback(RA8875::filecmd_t cmd, uint8_t * buffer, uint16_t size);
WiredHome 190:3132b7dfad82 3511
WiredHome 96:40b74dd3695b 3512 FILE * _printFH; ///< PrintScreen file handle
WiredHome 190:3132b7dfad82 3513
WiredHome 96:40b74dd3695b 3514 RetCode_t privateCallback(filecmd_t cmd, uint8_t * buffer, uint16_t size) {
WiredHome 96:40b74dd3695b 3515 if (c_callback != NULL) {
WiredHome 96:40b74dd3695b 3516 return (*c_callback)(cmd, buffer, size);
WiredHome 96:40b74dd3695b 3517 }
WiredHome 96:40b74dd3695b 3518 else {
WiredHome 96:40b74dd3695b 3519 if (obj_callback != NULL && method_callback != NULL) {
WiredHome 96:40b74dd3695b 3520 return (obj_callback->*method_callback)(cmd, buffer, size);
WiredHome 96:40b74dd3695b 3521 }
WiredHome 96:40b74dd3695b 3522 }
WiredHome 96:40b74dd3695b 3523 return noerror;
WiredHome 96:40b74dd3695b 3524 }
WiredHome 190:3132b7dfad82 3525
WiredHome 96:40b74dd3695b 3526 RetCode_t (* c_callback)(filecmd_t cmd, uint8_t * buffer, uint16_t size);
WiredHome 96:40b74dd3695b 3527 FPointerDummy *obj_callback;
WiredHome 96:40b74dd3695b 3528 RetCode_t (FPointerDummy::*method_callback)(filecmd_t cmd, uint8_t * buffer, uint16_t size);
WiredHome 149:c62c4b2d6a15 3529 RetCode_t (* idle_callback)(IdleReason_T reason, uint16_t param);
WiredHome 190:3132b7dfad82 3530
WiredHome 181:0032d1b8f5d4 3531 orientation_t screen_orientation;
WiredHome 181:0032d1b8f5d4 3532 point_t TranslateOrientation(point_t rawPoint);
WiredHome 19:3f82c1161fd2 3533 };
WiredHome 19:3f82c1161fd2 3534
WiredHome 96:40b74dd3695b 3535
WiredHome 19:3f82c1161fd2 3536 //} // namespace
WiredHome 19:3f82c1161fd2 3537
WiredHome 19:3f82c1161fd2 3538 //using namespace SW_graphics;
WiredHome 19:3f82c1161fd2 3539
WiredHome 23:a50ded45dbaf 3540
WiredHome 23:a50ded45dbaf 3541 #ifdef TESTENABLE
WiredHome 23:a50ded45dbaf 3542 // ______________ ______________ ______________ _______________
WiredHome 23:a50ded45dbaf 3543 // /_____ _____/ / ___________/ / ___________/ /_____ ______/
WiredHome 23:a50ded45dbaf 3544 // / / / / / / / /
WiredHome 23:a50ded45dbaf 3545 // / / / /___ / /__________ / /
WiredHome 23:a50ded45dbaf 3546 // / / / ____/ /__________ / / /
WiredHome 23:a50ded45dbaf 3547 // / / / / / / / /
WiredHome 23:a50ded45dbaf 3548 // / / / /__________ ___________/ / / /
WiredHome 23:a50ded45dbaf 3549 // /__/ /_____________/ /_____________/ /__/
WiredHome 23:a50ded45dbaf 3550
WiredHome 23:a50ded45dbaf 3551 #include "WebColors.h"
WiredHome 23:a50ded45dbaf 3552 #include <algorithm>
WiredHome 23:a50ded45dbaf 3553
WiredHome 23:a50ded45dbaf 3554 extern "C" void mbed_reset();
WiredHome 23:a50ded45dbaf 3555
WiredHome 190:3132b7dfad82 3556 /// This activates a small set of tests for the graphics library.
WiredHome 23:a50ded45dbaf 3557 ///
WiredHome 23:a50ded45dbaf 3558 /// Call this API and pass it the reference to the display class.
WiredHome 23:a50ded45dbaf 3559 /// It will then run a series of tests. It accepts interaction via
WiredHome 23:a50ded45dbaf 3560 /// stdin to switch from automatic test mode to manual, run a specific
WiredHome 23:a50ded45dbaf 3561 /// test, or to exit the test mode.
WiredHome 23:a50ded45dbaf 3562 ///
WiredHome 72:ecffe56af969 3563 /// @param[in] lcd is a reference to the display class.
WiredHome 72:ecffe56af969 3564 /// @param[in] pc is a reference to a serial interface, typically the USB to PC.
WiredHome 23:a50ded45dbaf 3565 ///
WiredHome 23:a50ded45dbaf 3566 void RunTestSet(RA8875 & lcd, Serial & pc);
WiredHome 23:a50ded45dbaf 3567
WiredHome 23:a50ded45dbaf 3568
WiredHome 23:a50ded45dbaf 3569 // To enable the test code, uncomment this section, or copy the
WiredHome 23:a50ded45dbaf 3570 // necessary pieces to your "main()".
WiredHome 23:a50ded45dbaf 3571 //
WiredHome 23:a50ded45dbaf 3572 // #include "mbed.h"
WiredHome 23:a50ded45dbaf 3573 // #include "RA8875.h"
WiredHome 23:a50ded45dbaf 3574 // RA8875 lcd(p5, p6, p7, p12, NC, "tft"); // MOSI, MISO, SCK, /ChipSelect, /reset, name
WiredHome 23:a50ded45dbaf 3575 // Serial pc(USBTX, USBRX);
WiredHome 23:a50ded45dbaf 3576 // extern "C" void mbed_reset();
WiredHome 23:a50ded45dbaf 3577 // int main()
WiredHome 23:a50ded45dbaf 3578 // {
WiredHome 23:a50ded45dbaf 3579 // pc.baud(460800); // I like a snappy terminal, so crank it up!
WiredHome 23:a50ded45dbaf 3580 // pc.printf("\r\nRA8875 Test - Build " __DATE__ " " __TIME__ "\r\n");
WiredHome 190:3132b7dfad82 3581 //
WiredHome 23:a50ded45dbaf 3582 // pc.printf("Turning on display\r\n");
WiredHome 101:e0aad446094a 3583 // lcd.init();
WiredHome 23:a50ded45dbaf 3584 // lcd.Reset();
WiredHome 23:a50ded45dbaf 3585 // lcd.Power(true); // display power is on, but the backlight is independent
WiredHome 23:a50ded45dbaf 3586 // lcd.Backlight(0.5);
WiredHome 23:a50ded45dbaf 3587 // RunTestSet(lcd, pc);
WiredHome 23:a50ded45dbaf 3588 // }
WiredHome 23:a50ded45dbaf 3589
WiredHome 23:a50ded45dbaf 3590 #endif // TESTENABLE
WiredHome 23:a50ded45dbaf 3591
WiredHome 56:7a85d226ad0d 3592 #endif