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:
Wed Aug 28 17:17:56 2019 +0000
Revision:
186:910fc2335c45
Parent:
185:cb7591a43f44
Child:
190:3132b7dfad82
Correct a defect in SetTextFontControl, and update BrightYellow.

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