Add TFT commands

Fork of DigoleSerialDisp by Michael Shimniok

Committer:
pinfred
Date:
Fri Nov 11 20:40:55 2016 +0000
Revision:
7:783f39600291
Parent:
6:3ed9cddf46d0
add for write return code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shimniok 0:3cf7c2683c3a 1 /** Digole Serial Display library
shimniok 0:3cf7c2683c3a 2 *
shimniok 0:3cf7c2683c3a 3 * @Author: Digole Digital Solutions : www.digole.com ported to mbed by Michael Shimniok www.bot-thoughts.com
shimniok 0:3cf7c2683c3a 4 */
shimniok 0:3cf7c2683c3a 5
shimniok 0:3cf7c2683c3a 6 #include "mbed.h"
shimniok 0:3cf7c2683c3a 7 #include "DigoleSerialDisp.h"
shimniok 0:3cf7c2683c3a 8 #include <stdio.h>
shimniok 0:3cf7c2683c3a 9 #include <string.h>
shimniok 0:3cf7c2683c3a 10 #include <inttypes.h>
shimniok 0:3cf7c2683c3a 11
shimniok 0:3cf7c2683c3a 12 char null = 0;
shimniok 0:3cf7c2683c3a 13
shimniok 0:3cf7c2683c3a 14
shimniok 0:3cf7c2683c3a 15 // that resetting the Arduino doesn't reset the LCD, so we
shimniok 0:3cf7c2683c3a 16 // can't assume that its in that state when a sketch starts (and the
shimniok 0:3cf7c2683c3a 17 // LiquidCrystal constructor is called).
shimniok 0:3cf7c2683c3a 18
shimniok 0:3cf7c2683c3a 19 //UART function
shimniok 0:3cf7c2683c3a 20
shimniok 0:3cf7c2683c3a 21 char buf[128];
shimniok 0:3cf7c2683c3a 22 char tmp[128];
shimniok 0:3cf7c2683c3a 23
shimniok 0:3cf7c2683c3a 24 DigoleSerialDisp::DigoleSerialDisp(PinName sda, PinName scl, uint8_t address):
shimniok 0:3cf7c2683c3a 25 _device(sda, scl)
shimniok 0:3cf7c2683c3a 26 {
shimniok 0:3cf7c2683c3a 27 _address = (address<<1);
pinfred 5:920614dc6fca 28 _device.frequency(300000);
pinfred 5:920614dc6fca 29 _Comdelay=70;//70;
shimniok 0:3cf7c2683c3a 30 }
shimniok 0:3cf7c2683c3a 31
shimniok 0:3cf7c2683c3a 32 size_t DigoleSerialDisp::write(const char x)
shimniok 0:3cf7c2683c3a 33 {
shimniok 0:3cf7c2683c3a 34 _device.write(_address, (char *) &x, 1);
shimniok 0:3cf7c2683c3a 35
shimniok 0:3cf7c2683c3a 36 return 1;
shimniok 0:3cf7c2683c3a 37 }
shimniok 0:3cf7c2683c3a 38
shimniok 0:3cf7c2683c3a 39 size_t DigoleSerialDisp::write(const char *str)
shimniok 0:3cf7c2683c3a 40 {
shimniok 0:3cf7c2683c3a 41 if (str == NULL) return 0;
shimniok 0:3cf7c2683c3a 42 return write(str, strlen(str));
shimniok 0:3cf7c2683c3a 43 }
shimniok 0:3cf7c2683c3a 44
shimniok 0:3cf7c2683c3a 45 size_t DigoleSerialDisp::write(const char *buffer, size_t size)
shimniok 0:3cf7c2683c3a 46 {
shimniok 0:3cf7c2683c3a 47 int len = 0;
shimniok 0:3cf7c2683c3a 48 if (buffer != NULL) {
pinfred 7:783f39600291 49 len = _device.write(_address, (char *) buffer, size);
pinfred 7:783f39600291 50 if (len == 0){
pinfred 7:783f39600291 51 len = size;
pinfred 7:783f39600291 52 }else{
pinfred 7:783f39600291 53 len = -1;
pinfred 7:783f39600291 54 }
shimniok 0:3cf7c2683c3a 55 delay(7);
shimniok 0:3cf7c2683c3a 56 }
shimniok 0:3cf7c2683c3a 57 return len;
shimniok 0:3cf7c2683c3a 58 }
shimniok 0:3cf7c2683c3a 59
shimniok 0:3cf7c2683c3a 60
shimniok 0:3cf7c2683c3a 61 size_t DigoleSerialDisp::print(const char c)
shimniok 0:3cf7c2683c3a 62 {
shimniok 0:3cf7c2683c3a 63 buf[0] = 'T';
shimniok 0:3cf7c2683c3a 64 buf[1] = 'T';
shimniok 0:3cf7c2683c3a 65 buf[2] = c;
shimniok 0:3cf7c2683c3a 66 buf[3] = 0;
shimniok 0:3cf7c2683c3a 67 write(buf);
shimniok 0:3cf7c2683c3a 68 write(null);
shimniok 0:3cf7c2683c3a 69 return 1;
shimniok 0:3cf7c2683c3a 70 }
shimniok 0:3cf7c2683c3a 71
shimniok 0:3cf7c2683c3a 72 size_t DigoleSerialDisp::print(const char s[])
shimniok 0:3cf7c2683c3a 73 {
shimniok 0:3cf7c2683c3a 74 int len = strlen(s);
shimniok 0:3cf7c2683c3a 75
shimniok 0:3cf7c2683c3a 76 if (s == NULL) return 0;
shimniok 0:3cf7c2683c3a 77
shimniok 0:3cf7c2683c3a 78 buf[0] = 'T';
shimniok 0:3cf7c2683c3a 79 buf[1] = 'T';
shimniok 0:3cf7c2683c3a 80 buf[2] = 0;
shimniok 0:3cf7c2683c3a 81 strncat(buf, s, 125);
shimniok 0:3cf7c2683c3a 82 write(buf);
shimniok 0:3cf7c2683c3a 83 write(null);
shimniok 0:3cf7c2683c3a 84 return len;
shimniok 0:3cf7c2683c3a 85 }
shimniok 0:3cf7c2683c3a 86
shimniok 0:3cf7c2683c3a 87 size_t DigoleSerialDisp::println(const char s[])
shimniok 0:3cf7c2683c3a 88 {
shimniok 0:3cf7c2683c3a 89 return print(s);
shimniok 0:3cf7c2683c3a 90 }
shimniok 0:3cf7c2683c3a 91
shimniok 0:3cf7c2683c3a 92 /*
shimniok 0:3cf7c2683c3a 93 Print.cpp - Base class that provides print() and println()
shimniok 0:3cf7c2683c3a 94 Copyright (c) 2008 David A. Mellis. All right reserved.
shimniok 0:3cf7c2683c3a 95
shimniok 0:3cf7c2683c3a 96 This library is free software; you can redistribute it and/or
shimniok 0:3cf7c2683c3a 97 modify it under the terms of the GNU Lesser General Public
shimniok 0:3cf7c2683c3a 98 License as published by the Free Software Foundation; either
shimniok 0:3cf7c2683c3a 99 version 2.1 of the License, or (at your option) any later version.
shimniok 0:3cf7c2683c3a 100
shimniok 0:3cf7c2683c3a 101 This library is distributed in the hope that it will be useful,
shimniok 0:3cf7c2683c3a 102 but WITHOUT ANY WARRANTY; without even the implied warranty of
shimniok 0:3cf7c2683c3a 103 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
shimniok 0:3cf7c2683c3a 104 Lesser General Public License for more details.
shimniok 0:3cf7c2683c3a 105
shimniok 0:3cf7c2683c3a 106 You should have received a copy of the GNU Lesser General Public
shimniok 0:3cf7c2683c3a 107 License along with this library; if not, write to the Free Software
shimniok 0:3cf7c2683c3a 108 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
shimniok 0:3cf7c2683c3a 109
shimniok 0:3cf7c2683c3a 110 Modified 23 November 2006 by David A. Mellis
shimniok 0:3cf7c2683c3a 111 */
shimniok 0:3cf7c2683c3a 112
shimniok 0:3cf7c2683c3a 113 size_t DigoleSerialDisp::print(unsigned char b, int base)
shimniok 0:3cf7c2683c3a 114 {
shimniok 0:3cf7c2683c3a 115 return print((unsigned long) b, base);
shimniok 0:3cf7c2683c3a 116 }
shimniok 0:3cf7c2683c3a 117
shimniok 0:3cf7c2683c3a 118 size_t DigoleSerialDisp::print(int n, int base)
shimniok 0:3cf7c2683c3a 119 {
shimniok 0:3cf7c2683c3a 120 return print((long) n, base);
shimniok 0:3cf7c2683c3a 121 }
shimniok 0:3cf7c2683c3a 122
shimniok 0:3cf7c2683c3a 123 size_t DigoleSerialDisp::print(unsigned int n, int base)
shimniok 0:3cf7c2683c3a 124 {
shimniok 0:3cf7c2683c3a 125 return print((unsigned long) n, base);
shimniok 0:3cf7c2683c3a 126 }
shimniok 0:3cf7c2683c3a 127
shimniok 0:3cf7c2683c3a 128 size_t DigoleSerialDisp::print(long n, int base)
shimniok 0:3cf7c2683c3a 129 {
shimniok 0:3cf7c2683c3a 130 if (base == 0) {
shimniok 0:3cf7c2683c3a 131 return write(n);
shimniok 0:3cf7c2683c3a 132 } else if (base == 10) {
shimniok 0:3cf7c2683c3a 133 if (n < 0) {
shimniok 0:3cf7c2683c3a 134 int t = print('-');
shimniok 0:3cf7c2683c3a 135 n = -n;
shimniok 0:3cf7c2683c3a 136 return printNumber(n, 10) + t;
shimniok 0:3cf7c2683c3a 137 }
shimniok 0:3cf7c2683c3a 138 return printNumber(n, 10);
shimniok 0:3cf7c2683c3a 139 } else {
shimniok 0:3cf7c2683c3a 140 return printNumber(n, base);
shimniok 0:3cf7c2683c3a 141 }
shimniok 0:3cf7c2683c3a 142 }
shimniok 0:3cf7c2683c3a 143
shimniok 0:3cf7c2683c3a 144 size_t DigoleSerialDisp::print(unsigned long n, int base)
shimniok 0:3cf7c2683c3a 145 {
shimniok 0:3cf7c2683c3a 146 if (base == 0) return write(n);
shimniok 0:3cf7c2683c3a 147 else return printNumber(n, base);
shimniok 0:3cf7c2683c3a 148 }
shimniok 0:3cf7c2683c3a 149
shimniok 0:3cf7c2683c3a 150 size_t DigoleSerialDisp::print(double n, int digits)
shimniok 0:3cf7c2683c3a 151 {
shimniok 0:3cf7c2683c3a 152 return printFloat(n, digits);
shimniok 0:3cf7c2683c3a 153 }
shimniok 0:3cf7c2683c3a 154
shimniok 0:3cf7c2683c3a 155 size_t DigoleSerialDisp::println(unsigned char b, int base)
shimniok 0:3cf7c2683c3a 156 {
shimniok 0:3cf7c2683c3a 157 size_t n = print(b, base);
shimniok 0:3cf7c2683c3a 158 n += println();
shimniok 0:3cf7c2683c3a 159 return n;
shimniok 0:3cf7c2683c3a 160 }
shimniok 0:3cf7c2683c3a 161
shimniok 0:3cf7c2683c3a 162 size_t DigoleSerialDisp::println(int num, int base)
shimniok 0:3cf7c2683c3a 163 {
shimniok 0:3cf7c2683c3a 164 size_t n = print(num, base);
shimniok 0:3cf7c2683c3a 165 n += println();
shimniok 0:3cf7c2683c3a 166 return n;
shimniok 0:3cf7c2683c3a 167 }
shimniok 0:3cf7c2683c3a 168
shimniok 0:3cf7c2683c3a 169 size_t DigoleSerialDisp::println(unsigned int num, int base)
shimniok 0:3cf7c2683c3a 170 {
shimniok 0:3cf7c2683c3a 171 size_t n = print(num, base);
shimniok 0:3cf7c2683c3a 172 n += println();
shimniok 0:3cf7c2683c3a 173 return n;
shimniok 0:3cf7c2683c3a 174 }
shimniok 0:3cf7c2683c3a 175
shimniok 0:3cf7c2683c3a 176 size_t DigoleSerialDisp::println(long num, int base)
shimniok 0:3cf7c2683c3a 177 {
shimniok 0:3cf7c2683c3a 178 size_t n = print(num, base);
shimniok 0:3cf7c2683c3a 179 n += println();
shimniok 0:3cf7c2683c3a 180 return n;
shimniok 0:3cf7c2683c3a 181 }
shimniok 0:3cf7c2683c3a 182
shimniok 0:3cf7c2683c3a 183 size_t DigoleSerialDisp::println(unsigned long num, int base)
shimniok 0:3cf7c2683c3a 184 {
shimniok 0:3cf7c2683c3a 185 size_t n = print(num, base);
shimniok 0:3cf7c2683c3a 186 n += println();
shimniok 0:3cf7c2683c3a 187 return n;
shimniok 0:3cf7c2683c3a 188 }
shimniok 0:3cf7c2683c3a 189
shimniok 0:3cf7c2683c3a 190 size_t DigoleSerialDisp::println(double num, int digits)
shimniok 0:3cf7c2683c3a 191 {
shimniok 0:3cf7c2683c3a 192 size_t n = print(num, digits);
shimniok 0:3cf7c2683c3a 193 n += println();
shimniok 0:3cf7c2683c3a 194 return n;
shimniok 0:3cf7c2683c3a 195 }
shimniok 0:3cf7c2683c3a 196
shimniok 0:3cf7c2683c3a 197 size_t DigoleSerialDisp::println(void)
shimniok 0:3cf7c2683c3a 198 {
shimniok 0:3cf7c2683c3a 199 return 1;
shimniok 0:3cf7c2683c3a 200 }
shimniok 0:3cf7c2683c3a 201
shimniok 0:3cf7c2683c3a 202 // Private Methods /////////////////////////////////////////////////////////////
shimniok 0:3cf7c2683c3a 203
shimniok 0:3cf7c2683c3a 204 size_t DigoleSerialDisp::printNumber(unsigned long n, uint8_t base) {
shimniok 0:3cf7c2683c3a 205 char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte.
shimniok 0:3cf7c2683c3a 206 char *str = &buf[sizeof(buf) - 1];
shimniok 0:3cf7c2683c3a 207
shimniok 0:3cf7c2683c3a 208 *str = '\0';
shimniok 0:3cf7c2683c3a 209
shimniok 0:3cf7c2683c3a 210 // prevent crash if called with base == 1
shimniok 0:3cf7c2683c3a 211 if (base < 2) base = 10;
shimniok 0:3cf7c2683c3a 212
shimniok 0:3cf7c2683c3a 213 do {
shimniok 0:3cf7c2683c3a 214 unsigned long m = n;
shimniok 0:3cf7c2683c3a 215 n /= base;
shimniok 0:3cf7c2683c3a 216 char c = m - base * n;
shimniok 0:3cf7c2683c3a 217 *--str = c < 10 ? c + '0' : c + 'A' - 10;
shimniok 0:3cf7c2683c3a 218 } while(n);
shimniok 0:3cf7c2683c3a 219
shimniok 0:3cf7c2683c3a 220 return write(str);
shimniok 0:3cf7c2683c3a 221 }
shimniok 0:3cf7c2683c3a 222
shimniok 0:3cf7c2683c3a 223 size_t DigoleSerialDisp::printFloat(double number, uint8_t digits)
shimniok 0:3cf7c2683c3a 224 {
shimniok 0:3cf7c2683c3a 225 size_t n = 0;
shimniok 0:3cf7c2683c3a 226
shimniok 0:3cf7c2683c3a 227 if (isnan(number)) return print("nan");
shimniok 0:3cf7c2683c3a 228 if (isinf(number)) return print("inf");
shimniok 0:3cf7c2683c3a 229 if (number > 4294967040.0) return print ("ovf"); // constant determined empirically
shimniok 0:3cf7c2683c3a 230 if (number <-4294967040.0) return print ("ovf"); // constant determined empirically
shimniok 0:3cf7c2683c3a 231
shimniok 0:3cf7c2683c3a 232 // Handle negative numbers
shimniok 0:3cf7c2683c3a 233 if (number < 0.0)
shimniok 0:3cf7c2683c3a 234 {
shimniok 0:3cf7c2683c3a 235 n += print('-');
shimniok 0:3cf7c2683c3a 236 number = -number;
shimniok 0:3cf7c2683c3a 237 }
shimniok 0:3cf7c2683c3a 238
shimniok 0:3cf7c2683c3a 239 // Round correctly so that print(1.999, 2) prints as "2.00"
shimniok 0:3cf7c2683c3a 240 double rounding = 0.5;
shimniok 0:3cf7c2683c3a 241 for (uint8_t i=0; i<digits; ++i)
shimniok 0:3cf7c2683c3a 242 rounding /= 10.0;
shimniok 0:3cf7c2683c3a 243
shimniok 0:3cf7c2683c3a 244 number += rounding;
shimniok 0:3cf7c2683c3a 245
shimniok 0:3cf7c2683c3a 246 // Extract the integer part of the number and print it
shimniok 0:3cf7c2683c3a 247 unsigned long int_part = (unsigned long)number;
shimniok 0:3cf7c2683c3a 248 double remainder = number - (double)int_part;
shimniok 0:3cf7c2683c3a 249 n += print(int_part);
shimniok 0:3cf7c2683c3a 250
shimniok 0:3cf7c2683c3a 251 // Print the decimal point, but only if there are digits beyond
shimniok 0:3cf7c2683c3a 252 if (digits > 0) {
shimniok 0:3cf7c2683c3a 253 n += print(".");
shimniok 0:3cf7c2683c3a 254 }
shimniok 0:3cf7c2683c3a 255
shimniok 0:3cf7c2683c3a 256 // Extract digits from the remainder one at a time
shimniok 0:3cf7c2683c3a 257 while (digits-- > 0)
shimniok 0:3cf7c2683c3a 258 {
shimniok 0:3cf7c2683c3a 259 remainder *= 10.0;
shimniok 0:3cf7c2683c3a 260 int toPrint = int(remainder);
shimniok 0:3cf7c2683c3a 261 n += print(toPrint);
shimniok 0:3cf7c2683c3a 262 remainder -= toPrint;
shimniok 0:3cf7c2683c3a 263 }
shimniok 0:3cf7c2683c3a 264
shimniok 0:3cf7c2683c3a 265 return n;
shimniok 0:3cf7c2683c3a 266 }
shimniok 0:3cf7c2683c3a 267
shimniok 0:3cf7c2683c3a 268 /*---------functions for Text and Graphic LCD adapters---------*/
shimniok 0:3cf7c2683c3a 269 void DigoleSerialDisp::disableCursor(void)
shimniok 0:3cf7c2683c3a 270 {
shimniok 0:3cf7c2683c3a 271 write("CS");
shimniok 0:3cf7c2683c3a 272 write(null);
shimniok 0:3cf7c2683c3a 273 }
shimniok 0:3cf7c2683c3a 274
shimniok 0:3cf7c2683c3a 275 void DigoleSerialDisp::enableCursor(void)
shimniok 0:3cf7c2683c3a 276 {
shimniok 0:3cf7c2683c3a 277 write("CS");
shimniok 0:3cf7c2683c3a 278 write(1);
shimniok 0:3cf7c2683c3a 279 }
shimniok 0:3cf7c2683c3a 280
shimniok 0:3cf7c2683c3a 281 void DigoleSerialDisp::drawStr(uint8_t x, uint8_t y, const char *s)
shimniok 0:3cf7c2683c3a 282 {
shimniok 0:3cf7c2683c3a 283 write("TP");
shimniok 0:3cf7c2683c3a 284 write(x);
shimniok 0:3cf7c2683c3a 285 write(y);
shimniok 0:3cf7c2683c3a 286 write("TT");
shimniok 0:3cf7c2683c3a 287 write(s);
shimniok 0:3cf7c2683c3a 288 write(null);
shimniok 0:3cf7c2683c3a 289 }
shimniok 0:3cf7c2683c3a 290
shimniok 0:3cf7c2683c3a 291 void DigoleSerialDisp::setPrintPos(uint8_t x, uint8_t y, uint8_t graph)
shimniok 0:3cf7c2683c3a 292 {
shimniok 0:3cf7c2683c3a 293 if (graph == _TEXT_) {
shimniok 0:3cf7c2683c3a 294 write("TP");
shimniok 0:3cf7c2683c3a 295 write(x);
shimniok 0:3cf7c2683c3a 296 write(y);
shimniok 0:3cf7c2683c3a 297 } else {
shimniok 0:3cf7c2683c3a 298 write("GP");
shimniok 0:3cf7c2683c3a 299 write(x);
shimniok 0:3cf7c2683c3a 300 write(y);
shimniok 0:3cf7c2683c3a 301 }
shimniok 0:3cf7c2683c3a 302 }
shimniok 0:3cf7c2683c3a 303
shimniok 0:3cf7c2683c3a 304 void DigoleSerialDisp::clearScreen(void)
shimniok 0:3cf7c2683c3a 305 {
shimniok 0:3cf7c2683c3a 306 //write(null);
shimniok 0:3cf7c2683c3a 307 write("CL");
shimniok 0:3cf7c2683c3a 308 }
shimniok 0:3cf7c2683c3a 309
pinfred 6:3ed9cddf46d0 310
shimniok 0:3cf7c2683c3a 311 void DigoleSerialDisp::setLCDColRow(uint8_t col, uint8_t row)
shimniok 0:3cf7c2683c3a 312 {
shimniok 0:3cf7c2683c3a 313 write("STCR");
shimniok 0:3cf7c2683c3a 314 write(col);
shimniok 0:3cf7c2683c3a 315 write(row);
shimniok 0:3cf7c2683c3a 316 write("\x80\xC0\x94\xD4");
shimniok 0:3cf7c2683c3a 317 }
shimniok 0:3cf7c2683c3a 318
shimniok 0:3cf7c2683c3a 319 void DigoleSerialDisp::setI2CAddress(uint8_t add)
shimniok 0:3cf7c2683c3a 320 {
shimniok 0:3cf7c2683c3a 321 write("SI2CA");
shimniok 0:3cf7c2683c3a 322 write(add);
shimniok 0:3cf7c2683c3a 323 _address = (add<<1);
shimniok 0:3cf7c2683c3a 324 }
shimniok 0:3cf7c2683c3a 325
shimniok 0:3cf7c2683c3a 326 void DigoleSerialDisp::displayConfig(uint8_t v)
shimniok 0:3cf7c2683c3a 327 {
shimniok 0:3cf7c2683c3a 328 write("DC");
shimniok 0:3cf7c2683c3a 329 write(v);
shimniok 0:3cf7c2683c3a 330 }
shimniok 0:3cf7c2683c3a 331
shimniok 0:3cf7c2683c3a 332 void DigoleSerialDisp::preprint(void)
shimniok 0:3cf7c2683c3a 333 {
shimniok 0:3cf7c2683c3a 334 //print("TT");
shimniok 0:3cf7c2683c3a 335 }
shimniok 0:3cf7c2683c3a 336
shimniok 0:3cf7c2683c3a 337 /*----------Functions for Graphic LCD/OLED adapters only---------*/
shimniok 0:3cf7c2683c3a 338 void DigoleSerialDisp::drawBitmap(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *bitmap) {
shimniok 0:3cf7c2683c3a 339 uint8_t i = 0;
shimniok 0:3cf7c2683c3a 340 if ((w & 7) != 0)
shimniok 0:3cf7c2683c3a 341 i = 1;
shimniok 0:3cf7c2683c3a 342 write("DIM");
shimniok 0:3cf7c2683c3a 343 write(x); //x;
shimniok 0:3cf7c2683c3a 344 write(y);
shimniok 0:3cf7c2683c3a 345 write(w);
shimniok 0:3cf7c2683c3a 346 write(h);
shimniok 0:3cf7c2683c3a 347 for (int j = 0; j < h * ((w >> 3) + i); j++) {
pinfred 7:783f39600291 348 write( bitmap[j] );
shimniok 0:3cf7c2683c3a 349 delay(1);
shimniok 0:3cf7c2683c3a 350 }
shimniok 0:3cf7c2683c3a 351 }
shimniok 0:3cf7c2683c3a 352
pinfred 5:920614dc6fca 353 void DigoleSerialDisp::drawBitmap256(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *bitmap) {
pinfred 5:920614dc6fca 354 write("EDIM1");
pinfred 5:920614dc6fca 355 write(x); //x;
pinfred 5:920614dc6fca 356 write(y);
pinfred 5:920614dc6fca 357 write(w);
pinfred 5:920614dc6fca 358 write(h);
pinfred 5:920614dc6fca 359 for (int j = 0; j < h * w; j++) {
pinfred 7:783f39600291 360 write(bitmap[j]);
pinfred 5:920614dc6fca 361 delay(1);
pinfred 5:920614dc6fca 362 }
pinfred 5:920614dc6fca 363 }
pinfred 5:920614dc6fca 364
shimniok 0:3cf7c2683c3a 365 void DigoleSerialDisp::setRot90(void) {
shimniok 0:3cf7c2683c3a 366 write("SD1");
shimniok 0:3cf7c2683c3a 367 }
shimniok 0:3cf7c2683c3a 368
shimniok 0:3cf7c2683c3a 369 void DigoleSerialDisp::setRot180(void) {
shimniok 0:3cf7c2683c3a 370 write("SD2");
shimniok 0:3cf7c2683c3a 371 }
shimniok 0:3cf7c2683c3a 372
shimniok 0:3cf7c2683c3a 373 void DigoleSerialDisp::setRot270(void) {
shimniok 0:3cf7c2683c3a 374 write("SD3");
shimniok 0:3cf7c2683c3a 375 }
shimniok 0:3cf7c2683c3a 376
shimniok 0:3cf7c2683c3a 377 void DigoleSerialDisp::undoRotation(void) {
shimniok 0:3cf7c2683c3a 378 write("SD0");
shimniok 0:3cf7c2683c3a 379 }
shimniok 0:3cf7c2683c3a 380
shimniok 0:3cf7c2683c3a 381 void DigoleSerialDisp::setRotation(uint8_t d) {
shimniok 0:3cf7c2683c3a 382 write("SD");
shimniok 0:3cf7c2683c3a 383 write(d);
shimniok 0:3cf7c2683c3a 384 }
shimniok 0:3cf7c2683c3a 385
shimniok 0:3cf7c2683c3a 386 void DigoleSerialDisp::setContrast(uint8_t c) {
shimniok 0:3cf7c2683c3a 387 write("CT");
shimniok 0:3cf7c2683c3a 388 write(c);
shimniok 0:3cf7c2683c3a 389 }
shimniok 0:3cf7c2683c3a 390
shimniok 0:3cf7c2683c3a 391 void DigoleSerialDisp::drawBox(uint8_t x, uint8_t y, uint8_t w, uint8_t h) {
shimniok 0:3cf7c2683c3a 392 write("FR");
shimniok 0:3cf7c2683c3a 393 write(x);
shimniok 0:3cf7c2683c3a 394 write(y);
shimniok 0:3cf7c2683c3a 395 write(x + w);
shimniok 0:3cf7c2683c3a 396 write(y + h);
shimniok 0:3cf7c2683c3a 397 }
shimniok 0:3cf7c2683c3a 398
shimniok 0:3cf7c2683c3a 399 void DigoleSerialDisp::drawCircle(uint8_t x, uint8_t y, uint8_t r, uint8_t f) {
shimniok 0:3cf7c2683c3a 400 write("CC");
shimniok 0:3cf7c2683c3a 401 write(x);
shimniok 0:3cf7c2683c3a 402 write(y);
shimniok 0:3cf7c2683c3a 403 write(r);
shimniok 0:3cf7c2683c3a 404 write(f);
shimniok 0:3cf7c2683c3a 405 }
shimniok 0:3cf7c2683c3a 406
shimniok 0:3cf7c2683c3a 407 void DigoleSerialDisp::drawDisc(uint8_t x, uint8_t y, uint8_t r) {
shimniok 0:3cf7c2683c3a 408 drawCircle(x, y, r, 1);
shimniok 0:3cf7c2683c3a 409 }
shimniok 0:3cf7c2683c3a 410
shimniok 0:3cf7c2683c3a 411 void DigoleSerialDisp::drawFrame(uint8_t x, uint8_t y, uint8_t w, uint8_t h) {
shimniok 0:3cf7c2683c3a 412 write("DR");
shimniok 0:3cf7c2683c3a 413 write(x);
shimniok 0:3cf7c2683c3a 414 write(y);
shimniok 0:3cf7c2683c3a 415 write(x + w);
shimniok 0:3cf7c2683c3a 416 write(y + h);
shimniok 0:3cf7c2683c3a 417 }
shimniok 0:3cf7c2683c3a 418
shimniok 0:3cf7c2683c3a 419 void DigoleSerialDisp::drawPixel(uint8_t x, uint8_t y, uint8_t color) {
shimniok 0:3cf7c2683c3a 420 write("DP");
shimniok 0:3cf7c2683c3a 421 write(x);
shimniok 0:3cf7c2683c3a 422 write(y);
shimniok 0:3cf7c2683c3a 423 write(color);
shimniok 0:3cf7c2683c3a 424 }
shimniok 0:3cf7c2683c3a 425
shimniok 0:3cf7c2683c3a 426 void DigoleSerialDisp::drawLine(uint8_t x, uint8_t y, uint8_t x1, uint8_t y1) {
shimniok 0:3cf7c2683c3a 427 write("LN");
shimniok 0:3cf7c2683c3a 428 write(x);
shimniok 0:3cf7c2683c3a 429 write(y);
shimniok 0:3cf7c2683c3a 430 write(x1);
shimniok 0:3cf7c2683c3a 431 write(y1);
shimniok 0:3cf7c2683c3a 432 }
shimniok 0:3cf7c2683c3a 433
shimniok 0:3cf7c2683c3a 434 void DigoleSerialDisp::drawLineTo(uint8_t x, uint8_t y) {
shimniok 0:3cf7c2683c3a 435 write("LT");
shimniok 0:3cf7c2683c3a 436 write(x);
shimniok 0:3cf7c2683c3a 437 write(y);
shimniok 0:3cf7c2683c3a 438 }
shimniok 0:3cf7c2683c3a 439
shimniok 0:3cf7c2683c3a 440 void DigoleSerialDisp::drawHLine(uint8_t x, uint8_t y, uint8_t w) {
shimniok 0:3cf7c2683c3a 441 drawLine(x, y, x + w, y);
shimniok 0:3cf7c2683c3a 442 }
shimniok 0:3cf7c2683c3a 443
shimniok 0:3cf7c2683c3a 444 void DigoleSerialDisp::drawVLine(uint8_t x, uint8_t y, uint8_t h) {
shimniok 0:3cf7c2683c3a 445 drawLine(x, y, x, y + h);
shimniok 0:3cf7c2683c3a 446 }
shimniok 0:3cf7c2683c3a 447
shimniok 0:3cf7c2683c3a 448 void DigoleSerialDisp::nextTextLine(void) {
shimniok 0:3cf7c2683c3a 449 write(null);
shimniok 0:3cf7c2683c3a 450 write("TRT");
shimniok 0:3cf7c2683c3a 451 }
shimniok 0:3cf7c2683c3a 452
shimniok 0:3cf7c2683c3a 453 void DigoleSerialDisp::setFont(uint8_t font) {
shimniok 0:3cf7c2683c3a 454 write("SF");
shimniok 0:3cf7c2683c3a 455 write(font);
shimniok 0:3cf7c2683c3a 456 }
shimniok 0:3cf7c2683c3a 457
shimniok 0:3cf7c2683c3a 458 void DigoleSerialDisp::setColor(uint8_t color) {
shimniok 0:3cf7c2683c3a 459 write("SC");
shimniok 0:3cf7c2683c3a 460 write(color);
shimniok 0:3cf7c2683c3a 461 }
shimniok 0:3cf7c2683c3a 462
pinfred 5:920614dc6fca 463 void DigoleSerialDisp::setBgColor(uint8_t color) {
pinfred 5:920614dc6fca 464 write("BGC");
pinfred 5:920614dc6fca 465 write(color);
pinfred 5:920614dc6fca 466 }
pinfred 5:920614dc6fca 467
shimniok 0:3cf7c2683c3a 468 void DigoleSerialDisp::backLightOn(void) {
shimniok 0:3cf7c2683c3a 469 write("BL");
shimniok 0:3cf7c2683c3a 470 write(1);
shimniok 0:3cf7c2683c3a 471 }
shimniok 0:3cf7c2683c3a 472
shimniok 0:3cf7c2683c3a 473 void DigoleSerialDisp::backLightOff(void) {
shimniok 0:3cf7c2683c3a 474 write("BL");
shimniok 0:3cf7c2683c3a 475 write(null);
shimniok 0:3cf7c2683c3a 476 }
shimniok 0:3cf7c2683c3a 477
shimniok 0:3cf7c2683c3a 478 void DigoleSerialDisp::directCommand(uint8_t d) {
shimniok 0:3cf7c2683c3a 479 write("MCD");
shimniok 0:3cf7c2683c3a 480 write(d);
shimniok 0:3cf7c2683c3a 481 }
shimniok 0:3cf7c2683c3a 482
shimniok 0:3cf7c2683c3a 483 void DigoleSerialDisp::directData(uint8_t d) {
shimniok 0:3cf7c2683c3a 484 write("MDT");
shimniok 0:3cf7c2683c3a 485 write(d);
shimniok 0:3cf7c2683c3a 486 }
shimniok 0:3cf7c2683c3a 487
shimniok 0:3cf7c2683c3a 488 void DigoleSerialDisp::moveArea(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, char xoffset, char yoffset) {
shimniok 0:3cf7c2683c3a 489 write("MA");
shimniok 0:3cf7c2683c3a 490 write(x0);
shimniok 0:3cf7c2683c3a 491 write(y0);
shimniok 0:3cf7c2683c3a 492 write(x1);
shimniok 0:3cf7c2683c3a 493 write(y1);
shimniok 0:3cf7c2683c3a 494 write(xoffset);
shimniok 0:3cf7c2683c3a 495 write(yoffset);
shimniok 0:3cf7c2683c3a 496 }
shimniok 0:3cf7c2683c3a 497
shimniok 0:3cf7c2683c3a 498
pinfred 7:783f39600291 499 int DigoleSerialDisp::displayStartScreen(uint8_t m) {
pinfred 7:783f39600291 500 int ret =0;
pinfred 7:783f39600291 501 ret = write("DSS");
pinfred 7:783f39600291 502 if (ret == -1) return -1;
shimniok 0:3cf7c2683c3a 503 write(m);
pinfred 7:783f39600291 504 return 0;
shimniok 0:3cf7c2683c3a 505 } //display start screen
shimniok 0:3cf7c2683c3a 506
shimniok 0:3cf7c2683c3a 507
shimniok 0:3cf7c2683c3a 508 void DigoleSerialDisp::setMode(uint8_t m) {
shimniok 0:3cf7c2683c3a 509 write("DM");
shimniok 0:3cf7c2683c3a 510 write(m);
shimniok 0:3cf7c2683c3a 511 } //set display mode
shimniok 0:3cf7c2683c3a 512
shimniok 0:3cf7c2683c3a 513
shimniok 0:3cf7c2683c3a 514 void DigoleSerialDisp::setTextPosBack(void) {
shimniok 0:3cf7c2683c3a 515 write("ETB");
shimniok 0:3cf7c2683c3a 516 } //set text position back to previous, only one back allowed
shimniok 0:3cf7c2683c3a 517
shimniok 0:3cf7c2683c3a 518
shimniok 0:3cf7c2683c3a 519 void DigoleSerialDisp::setTextPosOffset(char xoffset, char yoffset) {
shimniok 0:3cf7c2683c3a 520 write("ETO");
shimniok 0:3cf7c2683c3a 521 write(xoffset);
shimniok 0:3cf7c2683c3a 522 write(yoffset);
shimniok 0:3cf7c2683c3a 523 }
shimniok 0:3cf7c2683c3a 524
shimniok 0:3cf7c2683c3a 525
shimniok 0:3cf7c2683c3a 526 void DigoleSerialDisp::setTextPosAbs(uint8_t x, uint8_t y) {
shimniok 0:3cf7c2683c3a 527 write("ETP");
shimniok 0:3cf7c2683c3a 528 write(x);
shimniok 0:3cf7c2683c3a 529 write(y);
shimniok 0:3cf7c2683c3a 530 }
shimniok 0:3cf7c2683c3a 531
shimniok 0:3cf7c2683c3a 532
shimniok 0:3cf7c2683c3a 533 void DigoleSerialDisp::setLinePattern(uint8_t pattern) {
shimniok 0:3cf7c2683c3a 534 write("SLP");
shimniok 0:3cf7c2683c3a 535 write(pattern);
shimniok 0:3cf7c2683c3a 536 }
shimniok 0:3cf7c2683c3a 537
shimniok 0:3cf7c2683c3a 538
shimniok 0:3cf7c2683c3a 539 void DigoleSerialDisp::setLCDChip(uint8_t chip) { //only for universal LCD adapter
shimniok 0:3cf7c2683c3a 540 write("SLCD");
shimniok 0:3cf7c2683c3a 541 write(chip);
shimniok 0:3cf7c2683c3a 542 }
shimniok 0:3cf7c2683c3a 543
shimniok 0:3cf7c2683c3a 544
pinfred 7:783f39600291 545 void DigoleSerialDisp::setDrawWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) {
pinfred 7:783f39600291 546 write("DWWIN");
pinfred 7:783f39600291 547 write(x);
pinfred 7:783f39600291 548 write(y);
pinfred 7:783f39600291 549 write(w);
pinfred 7:783f39600291 550 write(h);
pinfred 7:783f39600291 551 }
pinfred 7:783f39600291 552
pinfred 7:783f39600291 553 void DigoleSerialDisp::resetDrawWindow() {
pinfred 7:783f39600291 554 write("RSTDW");
pinfred 7:783f39600291 555 }
pinfred 7:783f39600291 556
pinfred 7:783f39600291 557 void DigoleSerialDisp::cleanDrawWindow() {
pinfred 7:783f39600291 558 write("WINC");
pinfred 7:783f39600291 559 }
pinfred 7:783f39600291 560
pinfred 7:783f39600291 561
pinfred 7:783f39600291 562
shimniok 0:3cf7c2683c3a 563 void DigoleSerialDisp::uploadStartScreen(int lon, const unsigned char *data)
shimniok 0:3cf7c2683c3a 564 {
shimniok 0:3cf7c2683c3a 565 int j;
shimniok 0:3cf7c2683c3a 566 uint8_t c;
shimniok 0:3cf7c2683c3a 567 write("SSS");
shimniok 0:3cf7c2683c3a 568 write((uint8_t) (lon % 256));
shimniok 0:3cf7c2683c3a 569 write((uint8_t) (lon / 256));
shimniok 0:3cf7c2683c3a 570 for (j = 0; j < lon;j++) {
shimniok 0:3cf7c2683c3a 571 if((j%32)==0)
shimniok 0:3cf7c2683c3a 572 delay(10);
shimniok 0:3cf7c2683c3a 573 delay(_Comdelay);
shimniok 0:3cf7c2683c3a 574 c = data[j];
shimniok 0:3cf7c2683c3a 575 write(c);
shimniok 0:3cf7c2683c3a 576 }
shimniok 0:3cf7c2683c3a 577 }
shimniok 0:3cf7c2683c3a 578
shimniok 0:3cf7c2683c3a 579
shimniok 0:3cf7c2683c3a 580 void DigoleSerialDisp::uploadUserFont(int lon, const unsigned char *data, uint8_t sect) {
shimniok 0:3cf7c2683c3a 581 uint8_t c;
shimniok 0:3cf7c2683c3a 582 write("SUF");
shimniok 0:3cf7c2683c3a 583 write(sect);
shimniok 0:3cf7c2683c3a 584 write((uint8_t) (lon % 256));
shimniok 0:3cf7c2683c3a 585 write((uint8_t) (lon / 256));
shimniok 0:3cf7c2683c3a 586 for (int j = 0; j < lon; j++) {
shimniok 0:3cf7c2683c3a 587 if((j%32)==0)
shimniok 0:3cf7c2683c3a 588 delay(10);
shimniok 0:3cf7c2683c3a 589 delay(_Comdelay);
shimniok 0:3cf7c2683c3a 590 c = data[j];
shimniok 0:3cf7c2683c3a 591 write(c);
shimniok 0:3cf7c2683c3a 592 }
shimniok 0:3cf7c2683c3a 593 }
shimniok 0:3cf7c2683c3a 594
shimniok 0:3cf7c2683c3a 595 void DigoleSerialDisp::digitalOutput(uint8_t x)
shimniok 0:3cf7c2683c3a 596 {
shimniok 0:3cf7c2683c3a 597 write("DOUT");
shimniok 0:3cf7c2683c3a 598 write(x);
shimniok 0:3cf7c2683c3a 599 }