Driver for the Digole Serial universal LCD display adapter

Dependents:   DataBus

Committer:
shimniok
Date:
Mon May 27 13:25:12 2013 +0000
Revision:
5:a78901fe6a7b
Parent:
0:3cf7c2683c3a
Minor tweaks

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