Prototipe

Dependents:   LPC1768_Noritake_SC16IS752 LPC1768_Noritake_v5-2 08_SCT_menu

Committer:
irsanjul
Date:
Fri Aug 12 04:36:36 2016 +0000
Revision:
1:1a088a2b53ec
Parent:
0:cbd2824917b1
My Prototipe

Who changed what in which revision?

UserRevisionLine numberNew contents of line
irsanjul 0:cbd2824917b1 1 #include "mbed.h"
irsanjul 0:cbd2824917b1 2 #include "query.h"
irsanjul 0:cbd2824917b1 3 #include <string.h>
irsanjul 0:cbd2824917b1 4
irsanjul 0:cbd2824917b1 5 extern Serial dbg;
irsanjul 0:cbd2824917b1 6
irsanjul 0:cbd2824917b1 7 Noritake_VFD_GU7000::Noritake_VFD_GU7000(PinName sda, PinName scl) : uart(sda, scl, SC16IS752_SA5, NC, SC16IS752::Channel_A)
irsanjul 0:cbd2824917b1 8 {
irsanjul 0:cbd2824917b1 9 if(!uart.init(38400))
irsanjul 1:1a088a2b53ec 10 dbg.printf("IC is not init\r\n");
irsanjul 0:cbd2824917b1 11 else dbg.printf("IC is ready\r\n");
irsanjul 0:cbd2824917b1 12 }
irsanjul 0:cbd2824917b1 13
irsanjul 0:cbd2824917b1 14 void Noritake_VFD_GU7000::hardReset()
irsanjul 0:cbd2824917b1 15 {
irsanjul 0:cbd2824917b1 16 uart.put(0x0c);
irsanjul 0:cbd2824917b1 17 wait_ms(200);
irsanjul 0:cbd2824917b1 18 uart.put(0x1f);
irsanjul 0:cbd2824917b1 19 uart.put(0x24);
irsanjul 0:cbd2824917b1 20 uart.put(0x00);
irsanjul 0:cbd2824917b1 21 uart.put(0x00);
irsanjul 0:cbd2824917b1 22 uart.put(0x00);
irsanjul 0:cbd2824917b1 23 uart.put(0x00);
irsanjul 0:cbd2824917b1 24 }
irsanjul 0:cbd2824917b1 25
irsanjul 0:cbd2824917b1 26
irsanjul 0:cbd2824917b1 27 void Noritake_VFD_GU7000::GU7000_back() {
irsanjul 0:cbd2824917b1 28 command(0x08);
irsanjul 0:cbd2824917b1 29 }
irsanjul 0:cbd2824917b1 30
irsanjul 0:cbd2824917b1 31 void Noritake_VFD_GU7000::GU7000_forward() {
irsanjul 0:cbd2824917b1 32 command(0x09);
irsanjul 0:cbd2824917b1 33 }
irsanjul 0:cbd2824917b1 34
irsanjul 0:cbd2824917b1 35 void Noritake_VFD_GU7000::GU7000_lineFeed() {
irsanjul 0:cbd2824917b1 36 command(0x0a);
irsanjul 0:cbd2824917b1 37 }
irsanjul 0:cbd2824917b1 38
irsanjul 0:cbd2824917b1 39 void Noritake_VFD_GU7000::GU7000_home() {
irsanjul 0:cbd2824917b1 40 command(0x0b);
irsanjul 0:cbd2824917b1 41 }
irsanjul 0:cbd2824917b1 42
irsanjul 0:cbd2824917b1 43 void Noritake_VFD_GU7000::GU7000_carriageReturn() {
irsanjul 0:cbd2824917b1 44 command(0x0d);
irsanjul 0:cbd2824917b1 45 }
irsanjul 0:cbd2824917b1 46
irsanjul 0:cbd2824917b1 47 void Noritake_VFD_GU7000::GU7000_setCursor(unsigned x, unsigned y) {
irsanjul 0:cbd2824917b1 48 command(0x1f);
irsanjul 0:cbd2824917b1 49 command('$');
irsanjul 0:cbd2824917b1 50 command_xy(x, y);
irsanjul 0:cbd2824917b1 51 }
irsanjul 0:cbd2824917b1 52
irsanjul 0:cbd2824917b1 53 void Noritake_VFD_GU7000::GU7000_clearScreen() {
irsanjul 0:cbd2824917b1 54 command(0x0c);
irsanjul 0:cbd2824917b1 55 }
irsanjul 0:cbd2824917b1 56
irsanjul 0:cbd2824917b1 57 void Noritake_VFD_GU7000::GU7000_cursorOn() {
irsanjul 0:cbd2824917b1 58 command(0x1f, 'C', 1);
irsanjul 0:cbd2824917b1 59 }
irsanjul 0:cbd2824917b1 60
irsanjul 0:cbd2824917b1 61 void Noritake_VFD_GU7000::GU7000_cursorOff() {
irsanjul 0:cbd2824917b1 62 command(0x1f, 'C', 0);
irsanjul 0:cbd2824917b1 63 }
irsanjul 0:cbd2824917b1 64
irsanjul 0:cbd2824917b1 65 void Noritake_VFD_GU7000::GU7000_init() {
irsanjul 0:cbd2824917b1 66 wait_us(NORITAKE_VFD_RESET_DELAY);
irsanjul 0:cbd2824917b1 67 command(0x1b);
irsanjul 0:cbd2824917b1 68 command('@');
irsanjul 0:cbd2824917b1 69 }
irsanjul 0:cbd2824917b1 70
irsanjul 0:cbd2824917b1 71 void Noritake_VFD_GU7000::GU7000_reset() {
irsanjul 0:cbd2824917b1 72 this->hardReset();
irsanjul 0:cbd2824917b1 73 }
irsanjul 0:cbd2824917b1 74
irsanjul 0:cbd2824917b1 75 void Noritake_VFD_GU7000::GU7000_useMultibyteChars(bool enable) {
irsanjul 0:cbd2824917b1 76 #if (NORITAKE_VFD_MODEL_CLASS-7000)/100==9 || (NORITAKE_VFD_MODEL_CLASS-7000)/100==1
irsanjul 0:cbd2824917b1 77 us_command('g', 0x02);
irsanjul 0:cbd2824917b1 78 command(enable);
irsanjul 0:cbd2824917b1 79 #endif
irsanjul 0:cbd2824917b1 80 }
irsanjul 0:cbd2824917b1 81
irsanjul 0:cbd2824917b1 82 void Noritake_VFD_GU7000::GU7000_setMultibyteCharset(uint8_t code) {
irsanjul 0:cbd2824917b1 83 #if (NORITAKE_VFD_MODEL_CLASS-7000)/100==9 || (NORITAKE_VFD_MODEL_CLASS-7000)/100==1
irsanjul 0:cbd2824917b1 84 us_command('g', 0x0f);
irsanjul 0:cbd2824917b1 85 command(code);
irsanjul 0:cbd2824917b1 86 #endif
irsanjul 0:cbd2824917b1 87 }
irsanjul 0:cbd2824917b1 88
irsanjul 0:cbd2824917b1 89 void Noritake_VFD_GU7000::GU7000_useCustomChars(bool enable) {
irsanjul 0:cbd2824917b1 90 command(0x1b, '%', enable);
irsanjul 0:cbd2824917b1 91 }
irsanjul 0:cbd2824917b1 92
irsanjul 0:cbd2824917b1 93 static inline uint8_t getColumn(const uint8_t *src, int col) {
irsanjul 0:cbd2824917b1 94 uint8_t out = 0;
irsanjul 0:cbd2824917b1 95 for (int i=0; i<8; i++)
irsanjul 0:cbd2824917b1 96 if (src[i] & (1<<(4-col))) out += 1<<(7-i);
irsanjul 0:cbd2824917b1 97 return out;
irsanjul 0:cbd2824917b1 98 }
irsanjul 0:cbd2824917b1 99
irsanjul 0:cbd2824917b1 100 void Noritake_VFD_GU7000::GU7000_defineCustomChar(uint8_t code, FontFormat format, const uint8_t *data) {
irsanjul 0:cbd2824917b1 101 command(0x1b, '&', 0x01);
irsanjul 0:cbd2824917b1 102 command(code);
irsanjul 0:cbd2824917b1 103 command(code);
irsanjul 0:cbd2824917b1 104
irsanjul 0:cbd2824917b1 105 switch (format) {
irsanjul 0:cbd2824917b1 106 case CUUFormat:
irsanjul 0:cbd2824917b1 107 command(5);
irsanjul 0:cbd2824917b1 108 for (uint8_t i=0; i<5; i++)
irsanjul 0:cbd2824917b1 109 command(getColumn(data, i));
irsanjul 0:cbd2824917b1 110 break;
irsanjul 0:cbd2824917b1 111
irsanjul 0:cbd2824917b1 112 case GU70005x7Format:
irsanjul 0:cbd2824917b1 113 command(5);
irsanjul 0:cbd2824917b1 114 print((const char*)data, 5);
irsanjul 0:cbd2824917b1 115 break;
irsanjul 0:cbd2824917b1 116 case GU70007x8Format:
irsanjul 0:cbd2824917b1 117 command(7);
irsanjul 0:cbd2824917b1 118 print((const char*)data, 7);
irsanjul 0:cbd2824917b1 119 break;
irsanjul 0:cbd2824917b1 120 }
irsanjul 0:cbd2824917b1 121 }
irsanjul 0:cbd2824917b1 122
irsanjul 0:cbd2824917b1 123 void Noritake_VFD_GU7000::GU7000_deleteCustomChar(uint8_t code) {
irsanjul 0:cbd2824917b1 124 command(0x01b, '?', 0x01);
irsanjul 0:cbd2824917b1 125 command(code);
irsanjul 0:cbd2824917b1 126 }
irsanjul 0:cbd2824917b1 127
irsanjul 0:cbd2824917b1 128 void Noritake_VFD_GU7000::GU7000_setAsciiVariant(AsciiVariant code) {
irsanjul 0:cbd2824917b1 129 command(0x1b, 'R', code);
irsanjul 0:cbd2824917b1 130 }
irsanjul 0:cbd2824917b1 131
irsanjul 0:cbd2824917b1 132 void Noritake_VFD_GU7000::GU7000_setCharset(Charset code) {
irsanjul 0:cbd2824917b1 133 command(0x1b, 't', code);
irsanjul 0:cbd2824917b1 134 }
irsanjul 0:cbd2824917b1 135
irsanjul 0:cbd2824917b1 136 void Noritake_VFD_GU7000::GU7000_setScrollMode(ScrollMode mode) {
irsanjul 0:cbd2824917b1 137 command(0x1f);
irsanjul 0:cbd2824917b1 138 command(mode);
irsanjul 0:cbd2824917b1 139 }
irsanjul 0:cbd2824917b1 140
irsanjul 0:cbd2824917b1 141 void Noritake_VFD_GU7000::GU7000_setHorizScrollSpeed(uint8_t speed) {
irsanjul 0:cbd2824917b1 142 command(0x1f, 's', speed);
irsanjul 0:cbd2824917b1 143 }
irsanjul 0:cbd2824917b1 144
irsanjul 0:cbd2824917b1 145 void Noritake_VFD_GU7000::GU7000_invertOff() {
irsanjul 0:cbd2824917b1 146 command(0x1f, 'r', 0);
irsanjul 0:cbd2824917b1 147 }
irsanjul 0:cbd2824917b1 148
irsanjul 0:cbd2824917b1 149 void Noritake_VFD_GU7000::GU7000_invertOn() {
irsanjul 0:cbd2824917b1 150 command(0x1f, 'r', 1);
irsanjul 0:cbd2824917b1 151 }
irsanjul 0:cbd2824917b1 152
irsanjul 0:cbd2824917b1 153 void Noritake_VFD_GU7000::GU7000_setCompositionMode(CompositionMode mode) {
irsanjul 0:cbd2824917b1 154 command(0x1f, 'w', mode);
irsanjul 0:cbd2824917b1 155 }
irsanjul 0:cbd2824917b1 156
irsanjul 0:cbd2824917b1 157 void Noritake_VFD_GU7000::GU7000_setScreenBrightness(unsigned level) {
irsanjul 0:cbd2824917b1 158 if (level == 0)
irsanjul 0:cbd2824917b1 159 GU7000_displayOff();
irsanjul 0:cbd2824917b1 160 else if (level <= 100) {
irsanjul 0:cbd2824917b1 161 GU7000_displayOn();
irsanjul 0:cbd2824917b1 162 command(0x1f, 'X', (level*10 + 120)/125);
irsanjul 0:cbd2824917b1 163 }
irsanjul 0:cbd2824917b1 164 }
irsanjul 0:cbd2824917b1 165
irsanjul 0:cbd2824917b1 166 void Noritake_VFD_GU7000::GU7000_wait(uint8_t time) {
irsanjul 0:cbd2824917b1 167 us_command('a', 0x01);
irsanjul 0:cbd2824917b1 168 command(time);
irsanjul 0:cbd2824917b1 169 }
irsanjul 0:cbd2824917b1 170
irsanjul 0:cbd2824917b1 171 void Noritake_VFD_GU7000::GU7000_scrollScreen(unsigned x, unsigned y, unsigned times, uint8_t speed) {
irsanjul 0:cbd2824917b1 172 unsigned pos = (x*NORITAKE_VFD_LINES)+(y/8);
irsanjul 0:cbd2824917b1 173 us_command('a', 0x10);
irsanjul 0:cbd2824917b1 174 command(pos);
irsanjul 0:cbd2824917b1 175 command(pos>>8);
irsanjul 0:cbd2824917b1 176 command(times);
irsanjul 0:cbd2824917b1 177 command(times>>8);
irsanjul 0:cbd2824917b1 178 command(speed);
irsanjul 0:cbd2824917b1 179 }
irsanjul 0:cbd2824917b1 180
irsanjul 0:cbd2824917b1 181 void Noritake_VFD_GU7000::GU7000_blinkScreen() {
irsanjul 0:cbd2824917b1 182 us_command('a', 0x11);
irsanjul 0:cbd2824917b1 183 command(0);
irsanjul 0:cbd2824917b1 184 command(0);
irsanjul 0:cbd2824917b1 185 command(0);
irsanjul 0:cbd2824917b1 186 command(0);
irsanjul 0:cbd2824917b1 187 }
irsanjul 0:cbd2824917b1 188
irsanjul 0:cbd2824917b1 189 void Noritake_VFD_GU7000::GU7000_blinkScreen(bool enable, bool reverse, uint8_t onTime, uint8_t offTime, uint8_t times) {
irsanjul 0:cbd2824917b1 190 us_command('a', 0x11);
irsanjul 0:cbd2824917b1 191 command(enable? (reverse? 2: 1): 0);
irsanjul 0:cbd2824917b1 192 command(onTime);
irsanjul 0:cbd2824917b1 193 command(offTime);
irsanjul 0:cbd2824917b1 194 command(times);
irsanjul 0:cbd2824917b1 195 }
irsanjul 0:cbd2824917b1 196
irsanjul 0:cbd2824917b1 197 void Noritake_VFD_GU7000::GU7000_displayOff() {
irsanjul 0:cbd2824917b1 198 us_command('a', 0x40);
irsanjul 0:cbd2824917b1 199 command(0);
irsanjul 0:cbd2824917b1 200 }
irsanjul 0:cbd2824917b1 201
irsanjul 0:cbd2824917b1 202 void Noritake_VFD_GU7000::GU7000_displayOn() {
irsanjul 0:cbd2824917b1 203 us_command('a', 0x40);
irsanjul 0:cbd2824917b1 204 command(0x01);
irsanjul 0:cbd2824917b1 205 }
irsanjul 0:cbd2824917b1 206
irsanjul 0:cbd2824917b1 207 void Noritake_VFD_GU7000::GU7000_screenSaver(ScreenSaver mode) {
irsanjul 0:cbd2824917b1 208 us_command('a', 0x40);
irsanjul 0:cbd2824917b1 209 command(mode);
irsanjul 0:cbd2824917b1 210 }
irsanjul 0:cbd2824917b1 211
irsanjul 0:cbd2824917b1 212 void Noritake_VFD_GU7000::GU7000_setFontStyle(bool proportional, bool evenSpacing) {
irsanjul 0:cbd2824917b1 213 us_command('g', 0x03);
irsanjul 0:cbd2824917b1 214 command(proportional*2 + evenSpacing);
irsanjul 0:cbd2824917b1 215 }
irsanjul 0:cbd2824917b1 216
irsanjul 0:cbd2824917b1 217 void Noritake_VFD_GU7000::GU7000_setFontSize(uint8_t x, uint8_t y, bool tall) {
irsanjul 0:cbd2824917b1 218 if (x<=4 && y<=2) {
irsanjul 0:cbd2824917b1 219 us_command('g', 0x40);
irsanjul 0:cbd2824917b1 220 command(x);
irsanjul 0:cbd2824917b1 221 command(y);
irsanjul 0:cbd2824917b1 222 #if (NORITAKE_VFD_MODEL_CLASS-7000)/100==9 || (NORITAKE_VFD_MODEL_CLASS-7000)/100==1
irsanjul 0:cbd2824917b1 223 us_command('g', 0x01);
irsanjul 0:cbd2824917b1 224 command(tall+1);
irsanjul 0:cbd2824917b1 225 #endif
irsanjul 0:cbd2824917b1 226 }
irsanjul 0:cbd2824917b1 227 }
irsanjul 0:cbd2824917b1 228
irsanjul 0:cbd2824917b1 229 void Noritake_VFD_GU7000::GU7000_selectWindow(uint8_t window) {
irsanjul 0:cbd2824917b1 230 if (window <= 4)
irsanjul 0:cbd2824917b1 231 command(0x10 + window);
irsanjul 0:cbd2824917b1 232 }
irsanjul 0:cbd2824917b1 233
irsanjul 0:cbd2824917b1 234 void Noritake_VFD_GU7000::GU7000_defineWindow(uint8_t window, unsigned x, unsigned y, unsigned width, unsigned height) {
irsanjul 0:cbd2824917b1 235 us_command('w', 0x02);
irsanjul 0:cbd2824917b1 236 command(window);
irsanjul 0:cbd2824917b1 237 command(0x01);
irsanjul 0:cbd2824917b1 238 command_xy(x, y);
irsanjul 0:cbd2824917b1 239 command_xy(width, height);
irsanjul 0:cbd2824917b1 240 }
irsanjul 0:cbd2824917b1 241
irsanjul 0:cbd2824917b1 242 void Noritake_VFD_GU7000::GU7000_deleteWindow(uint8_t window) {
irsanjul 0:cbd2824917b1 243 us_command('w', 0x02);
irsanjul 0:cbd2824917b1 244 command(window);
irsanjul 0:cbd2824917b1 245 command(0);
irsanjul 0:cbd2824917b1 246 command_xy(0, 0);
irsanjul 0:cbd2824917b1 247 command_xy(0, 0);
irsanjul 0:cbd2824917b1 248 }
irsanjul 0:cbd2824917b1 249
irsanjul 0:cbd2824917b1 250 void Noritake_VFD_GU7000::GU7000_joinScreens() {
irsanjul 0:cbd2824917b1 251 us_command('w', 0x10);
irsanjul 0:cbd2824917b1 252 command(0x01);
irsanjul 0:cbd2824917b1 253 }
irsanjul 0:cbd2824917b1 254
irsanjul 0:cbd2824917b1 255 void Noritake_VFD_GU7000::GU7000_separateScreens() {
irsanjul 0:cbd2824917b1 256 us_command('w', 0x10);
irsanjul 0:cbd2824917b1 257 command(0);
irsanjul 0:cbd2824917b1 258 }
irsanjul 0:cbd2824917b1 259
irsanjul 0:cbd2824917b1 260 void Noritake_VFD_GU7000::print(char c) {
irsanjul 0:cbd2824917b1 261 command(c);
irsanjul 0:cbd2824917b1 262 }
irsanjul 0:cbd2824917b1 263
irsanjul 1:1a088a2b53ec 264 void Noritake_VFD_GU7000::print(uint8_t c) {
irsanjul 1:1a088a2b53ec 265 command(c);
irsanjul 1:1a088a2b53ec 266 }
irsanjul 1:1a088a2b53ec 267
irsanjul 0:cbd2824917b1 268 void Noritake_VFD_GU7000::print(const char *str, ...) {
irsanjul 0:cbd2824917b1 269 while (*str)
irsanjul 1:1a088a2b53ec 270 command(*str++);
irsanjul 1:1a088a2b53ec 271 }
irsanjul 1:1a088a2b53ec 272
irsanjul 1:1a088a2b53ec 273 void Noritake_VFD_GU7000::print(const uint8_t *buffer, size_t size) {
irsanjul 1:1a088a2b53ec 274 commandBlock(buffer, size);
irsanjul 0:cbd2824917b1 275 }
irsanjul 0:cbd2824917b1 276
irsanjul 0:cbd2824917b1 277 void Noritake_VFD_GU7000::print(const char *buffer, size_t size) {
irsanjul 1:1a088a2b53ec 278 //while (size--)
irsanjul 1:1a088a2b53ec 279 //print(*buffer++);
irsanjul 1:1a088a2b53ec 280 commandBlock(buffer, size);
irsanjul 0:cbd2824917b1 281 }
irsanjul 0:cbd2824917b1 282
irsanjul 0:cbd2824917b1 283 void Noritake_VFD_GU7000::print(long number, uint8_t base) {
irsanjul 0:cbd2824917b1 284 if (number < 0) {
irsanjul 0:cbd2824917b1 285 print('-');
irsanjul 0:cbd2824917b1 286 number = -number;
irsanjul 0:cbd2824917b1 287 }
irsanjul 0:cbd2824917b1 288 printNumber(number, base);
irsanjul 0:cbd2824917b1 289 }
irsanjul 0:cbd2824917b1 290
irsanjul 0:cbd2824917b1 291 void Noritake_VFD_GU7000::print(int number, uint8_t base) {
irsanjul 0:cbd2824917b1 292 print((long)number, base);
irsanjul 0:cbd2824917b1 293 }
irsanjul 0:cbd2824917b1 294
irsanjul 0:cbd2824917b1 295 void Noritake_VFD_GU7000::print(unsigned long number, uint8_t base) {
irsanjul 0:cbd2824917b1 296 printNumber(number, base);
irsanjul 0:cbd2824917b1 297 }
irsanjul 0:cbd2824917b1 298
irsanjul 0:cbd2824917b1 299 void Noritake_VFD_GU7000::print(unsigned number, uint8_t base) {
irsanjul 0:cbd2824917b1 300 print((unsigned long)number, base);
irsanjul 0:cbd2824917b1 301 }
irsanjul 0:cbd2824917b1 302
irsanjul 1:1a088a2b53ec 303 void Noritake_VFD_GU7000::printAt(unsigned baris, unsigned kolom, const char* str) {
irsanjul 1:1a088a2b53ec 304 unsigned x,y;
irsanjul 1:1a088a2b53ec 305
irsanjul 1:1a088a2b53ec 306 x = (baris * 8) - 8;
irsanjul 1:1a088a2b53ec 307 y = (kolom * 8) - 8;
irsanjul 1:1a088a2b53ec 308
irsanjul 1:1a088a2b53ec 309 GU7000_setCursor(x,y);
irsanjul 1:1a088a2b53ec 310 commandBlock(str, strlen(str));
irsanjul 1:1a088a2b53ec 311 }
irsanjul 1:1a088a2b53ec 312
irsanjul 0:cbd2824917b1 313 void Noritake_VFD_GU7000::crlf() {
irsanjul 0:cbd2824917b1 314 GU7000_carriageReturn();
irsanjul 0:cbd2824917b1 315 GU7000_lineFeed();
irsanjul 0:cbd2824917b1 316 }
irsanjul 0:cbd2824917b1 317
irsanjul 0:cbd2824917b1 318 void Noritake_VFD_GU7000::println(char c) {
irsanjul 0:cbd2824917b1 319 print(c);
irsanjul 0:cbd2824917b1 320 crlf();
irsanjul 0:cbd2824917b1 321 }
irsanjul 0:cbd2824917b1 322
irsanjul 0:cbd2824917b1 323 void Noritake_VFD_GU7000::println(const char *str) {
irsanjul 0:cbd2824917b1 324 print(str);
irsanjul 0:cbd2824917b1 325 crlf();
irsanjul 0:cbd2824917b1 326 }
irsanjul 0:cbd2824917b1 327
irsanjul 0:cbd2824917b1 328 void Noritake_VFD_GU7000::println(const char *buffer, size_t size) {
irsanjul 0:cbd2824917b1 329 print(buffer, size);
irsanjul 0:cbd2824917b1 330 crlf();
irsanjul 0:cbd2824917b1 331 }
irsanjul 0:cbd2824917b1 332
irsanjul 0:cbd2824917b1 333 void Noritake_VFD_GU7000::println(long number, uint8_t base) {
irsanjul 0:cbd2824917b1 334 print(number, base);
irsanjul 0:cbd2824917b1 335 crlf();
irsanjul 0:cbd2824917b1 336 }
irsanjul 0:cbd2824917b1 337
irsanjul 0:cbd2824917b1 338 void Noritake_VFD_GU7000::println(int number, uint8_t base) {
irsanjul 0:cbd2824917b1 339 println((long) number, base);
irsanjul 0:cbd2824917b1 340 }
irsanjul 0:cbd2824917b1 341
irsanjul 0:cbd2824917b1 342 void Noritake_VFD_GU7000::println(unsigned long number, uint8_t base) {
irsanjul 0:cbd2824917b1 343 print(number, base);
irsanjul 0:cbd2824917b1 344 crlf();
irsanjul 0:cbd2824917b1 345 }
irsanjul 0:cbd2824917b1 346
irsanjul 0:cbd2824917b1 347 void Noritake_VFD_GU7000::println(unsigned number, uint8_t base) {
irsanjul 0:cbd2824917b1 348 println((unsigned long) number, base);
irsanjul 0:cbd2824917b1 349 }
irsanjul 0:cbd2824917b1 350
irsanjul 0:cbd2824917b1 351 void Noritake_VFD_GU7000::printNumber(unsigned long number, uint8_t base) {
irsanjul 0:cbd2824917b1 352 if (number/base)
irsanjul 0:cbd2824917b1 353 printNumber(number/base, base);
irsanjul 0:cbd2824917b1 354 number %= base;
irsanjul 1:1a088a2b53ec 355 //print(number + (number < 10? '0': 'A' - 10));
irsanjul 0:cbd2824917b1 356 }
irsanjul 0:cbd2824917b1 357
irsanjul 0:cbd2824917b1 358 void Noritake_VFD_GU7000::GU7000_setBacklightColor(uint8_t r, uint8_t g, uint8_t b) {
irsanjul 0:cbd2824917b1 359 #if NORITAKE_VFD_MODEL_CLASS==7040
irsanjul 0:cbd2824917b1 360 command(0x1f, 'L', 0x10);
irsanjul 0:cbd2824917b1 361 command(b & 0xf0);
irsanjul 0:cbd2824917b1 362 command(g & 0xf0);
irsanjul 0:cbd2824917b1 363 command(r & 0xf0);
irsanjul 0:cbd2824917b1 364 #endif
irsanjul 0:cbd2824917b1 365 }
irsanjul 0:cbd2824917b1 366
irsanjul 0:cbd2824917b1 367 void Noritake_VFD_GU7000::GU7000_setBacklightColor(unsigned rgb) {
irsanjul 0:cbd2824917b1 368 GU7000_setBacklightColor((rgb>>8 & 0x0f)*16, (rgb>>4 & 0x0f)*16, (rgb & 0x0f)*16);
irsanjul 0:cbd2824917b1 369 }
irsanjul 0:cbd2824917b1 370
irsanjul 0:cbd2824917b1 371 void Noritake_VFD_GU7000::GU7000_drawImage(unsigned width, uint8_t height, const uint8_t *data) {
irsanjul 0:cbd2824917b1 372 if (height > NORITAKE_VFD_HEIGHT) return;
irsanjul 1:1a088a2b53ec 373 us_command('f', 0x11);
irsanjul 0:cbd2824917b1 374 command_xy(width, height);
irsanjul 0:cbd2824917b1 375 command((uint8_t) 1);
irsanjul 1:1a088a2b53ec 376
irsanjul 0:cbd2824917b1 377 for (unsigned i = 0; i<(height/8)*width; i++)
irsanjul 0:cbd2824917b1 378 command(data[i]);
irsanjul 1:1a088a2b53ec 379
irsanjul 1:1a088a2b53ec 380 //commandBlock((const char *)data, width*8);
irsanjul 0:cbd2824917b1 381 }
irsanjul 0:cbd2824917b1 382
irsanjul 0:cbd2824917b1 383 void Noritake_VFD_GU7000::GU7000_drawFROMImage(unsigned long address, uint8_t srcHeight, unsigned width, uint8_t height) {
irsanjul 0:cbd2824917b1 384 #if (NORITAKE_VFD_MODEL_CLASS-7000)/100==9 || (NORITAKE_VFD_MODEL_CLASS-7000)/100==1
irsanjul 0:cbd2824917b1 385 if (height > NORITAKE_VFD_HEIGHT) return;
irsanjul 0:cbd2824917b1 386 us_command('f', 0x10);
irsanjul 0:cbd2824917b1 387 command(0x01);
irsanjul 0:cbd2824917b1 388 command(address);
irsanjul 0:cbd2824917b1 389 command(address>>8);
irsanjul 0:cbd2824917b1 390 command(address>>16);
irsanjul 0:cbd2824917b1 391 command(srcHeight/8);
irsanjul 0:cbd2824917b1 392 command((srcHeight/8)>>8);
irsanjul 0:cbd2824917b1 393 command_xy(width, height);
irsanjul 0:cbd2824917b1 394 command((uint8_t) 1);
irsanjul 0:cbd2824917b1 395 #endif
irsanjul 0:cbd2824917b1 396 }
irsanjul 0:cbd2824917b1 397
irsanjul 1:1a088a2b53ec 398 void Noritake_VFD_GU7000::GU7000_drawImageAt(unsigned x, unsigned y, unsigned width, uint8_t height, const uint8_t *data) {
irsanjul 1:1a088a2b53ec 399 GU7000_setCursor(x, y);
irsanjul 1:1a088a2b53ec 400 GU7000_drawImage(width, height, data);
irsanjul 1:1a088a2b53ec 401 }
irsanjul 1:1a088a2b53ec 402
irsanjul 0:cbd2824917b1 403 static unsigned min(unsigned x, unsigned y) { return x<y? x: y; }
irsanjul 0:cbd2824917b1 404
irsanjul 0:cbd2824917b1 405 void Noritake_VFD_GU7000::GU7000_fillRect(unsigned x0, unsigned y0, unsigned x1, unsigned y1, bool on) {
irsanjul 0:cbd2824917b1 406 x0 = min(NORITAKE_VFD_WIDTH, x0);
irsanjul 0:cbd2824917b1 407 x1 = min(NORITAKE_VFD_WIDTH, x1);
irsanjul 0:cbd2824917b1 408 y0 = min(NORITAKE_VFD_HEIGHT, y0);
irsanjul 0:cbd2824917b1 409 y1 = min(NORITAKE_VFD_HEIGHT, y1);
irsanjul 0:cbd2824917b1 410 if (y1<=y0 || x1<=x0) return;
irsanjul 0:cbd2824917b1 411 uint8_t bufw = 8, bufh = (y1-y0+7)/8*8;
irsanjul 0:cbd2824917b1 412 uint8_t *buf = (uint8_t*)alloca(bufh/8 * bufw);
irsanjul 0:cbd2824917b1 413 for (unsigned x = 0; x < x1-x0; x += bufw) {
irsanjul 0:cbd2824917b1 414 uint8_t part = (x + bufw < x1-x0)? bufw: (x1-x0) - x;
irsanjul 0:cbd2824917b1 415 memset(buf, 0, bufh/8 * bufw);
irsanjul 0:cbd2824917b1 416 if (on)
irsanjul 0:cbd2824917b1 417 for (uint8_t col = 0; col < part; col++) {
irsanjul 0:cbd2824917b1 418 for (uint8_t py = y0 % 8; py < y0 % 8 + min(y1-y0, 8); py++)
irsanjul 0:cbd2824917b1 419 buf[col*bufh/8] |= 1 << (7-py);
irsanjul 0:cbd2824917b1 420 for (uint8_t row = (y0+7)/8; row < y1/8; row++)
irsanjul 0:cbd2824917b1 421 buf[row - y0/8 + col*bufh/8] = 0xff;
irsanjul 0:cbd2824917b1 422 if (y0/8 != y1/8)
irsanjul 0:cbd2824917b1 423 for (uint8_t py = 0; py < y1 % 8; py++)
irsanjul 0:cbd2824917b1 424 buf[(y1-y0)/8 + col*bufh/8] |= 1 << (7-py);
irsanjul 0:cbd2824917b1 425 }
irsanjul 0:cbd2824917b1 426 GU7000_setCursor(x + x0, y0);
irsanjul 0:cbd2824917b1 427 GU7000_drawImage(bufw, bufh, buf);
irsanjul 0:cbd2824917b1 428 }
irsanjul 0:cbd2824917b1 429 }
irsanjul 0:cbd2824917b1 430
irsanjul 0:cbd2824917b1 431 void Noritake_VFD_GU7000::command(uint8_t data) {
irsanjul 1:1a088a2b53ec 432 uart.put(data);
irsanjul 1:1a088a2b53ec 433 }
irsanjul 1:1a088a2b53ec 434 void Noritake_VFD_GU7000::commandBlock(const char * data, int len){
irsanjul 1:1a088a2b53ec 435 uart.wrblock(data, len);
irsanjul 1:1a088a2b53ec 436 }
irsanjul 1:1a088a2b53ec 437 void Noritake_VFD_GU7000::commandBlock(const uint8_t * data, int len){
irsanjul 1:1a088a2b53ec 438 uart.wrblock(data, len);
irsanjul 0:cbd2824917b1 439 }
irsanjul 0:cbd2824917b1 440 void Noritake_VFD_GU7000::command_xy(unsigned x, unsigned y) {
irsanjul 0:cbd2824917b1 441 command(x);
irsanjul 0:cbd2824917b1 442 command(x>>8);
irsanjul 0:cbd2824917b1 443 y /= 8;
irsanjul 0:cbd2824917b1 444 command(y);
irsanjul 0:cbd2824917b1 445 command(y>>8);
irsanjul 0:cbd2824917b1 446 }
irsanjul 0:cbd2824917b1 447 void Noritake_VFD_GU7000::command_xy1(unsigned x, unsigned y) {
irsanjul 0:cbd2824917b1 448 command(x);
irsanjul 0:cbd2824917b1 449 command(x>>8);
irsanjul 0:cbd2824917b1 450 command(y);
irsanjul 0:cbd2824917b1 451 command(y>>8);
irsanjul 0:cbd2824917b1 452 }
irsanjul 0:cbd2824917b1 453
irsanjul 0:cbd2824917b1 454 void Noritake_VFD_GU7000::us_command(uint8_t group, uint8_t cmd) {
irsanjul 0:cbd2824917b1 455 command(0x1f);
irsanjul 0:cbd2824917b1 456 command(0x28);
irsanjul 0:cbd2824917b1 457 command(group);
irsanjul 0:cbd2824917b1 458 command(cmd);
irsanjul 0:cbd2824917b1 459 }
irsanjul 0:cbd2824917b1 460
irsanjul 0:cbd2824917b1 461 void Noritake_VFD_GU7000::command(uint8_t prefix, uint8_t group, uint8_t cmd) {
irsanjul 0:cbd2824917b1 462 command(prefix);
irsanjul 0:cbd2824917b1 463 command(group);
irsanjul 0:cbd2824917b1 464 command(cmd);
irsanjul 0:cbd2824917b1 465 }
irsanjul 0:cbd2824917b1 466
irsanjul 0:cbd2824917b1 467 void Noritake_VFD_GU7000::print(unsigned x, uint8_t y, const char *buffer, uint8_t len) {
irsanjul 0:cbd2824917b1 468 #if NORITAKE_VFD_GENERATION == 'B'
irsanjul 0:cbd2824917b1 469 us_command('d', 0x30);
irsanjul 0:cbd2824917b1 470 command_xy1(x, y);
irsanjul 0:cbd2824917b1 471 command(0);
irsanjul 0:cbd2824917b1 472 command(len);
irsanjul 0:cbd2824917b1 473 while (len--)
irsanjul 0:cbd2824917b1 474 command(*buffer++);
irsanjul 0:cbd2824917b1 475 #endif
irsanjul 0:cbd2824917b1 476 }
irsanjul 0:cbd2824917b1 477
irsanjul 0:cbd2824917b1 478 void Noritake_VFD_GU7000::print(unsigned x, uint8_t y, const char *str) {
irsanjul 0:cbd2824917b1 479 #if NORITAKE_VFD_GENERATION == 'B'
irsanjul 0:cbd2824917b1 480 print(x, y, str, strlen(str));
irsanjul 0:cbd2824917b1 481 #endif
irsanjul 0:cbd2824917b1 482 }
irsanjul 0:cbd2824917b1 483 void Noritake_VFD_GU7000::print(unsigned x, uint8_t y, char c) {
irsanjul 0:cbd2824917b1 484 #if NORITAKE_VFD_GENERATION == 'B'
irsanjul 0:cbd2824917b1 485 print(x, y, &c, 1);
irsanjul 0:cbd2824917b1 486 #endif
irsanjul 0:cbd2824917b1 487 }
irsanjul 0:cbd2824917b1 488 void Noritake_VFD_GU7000::print(unsigned x, uint8_t y, int number, uint8_t base) {
irsanjul 0:cbd2824917b1 489 #if NORITAKE_VFD_GENERATION == 'B'
irsanjul 0:cbd2824917b1 490 if (number < 0) {
irsanjul 0:cbd2824917b1 491 print(x, y, '-');
irsanjul 0:cbd2824917b1 492 print(-1, y, (unsigned)-number, base);
irsanjul 0:cbd2824917b1 493 } else
irsanjul 0:cbd2824917b1 494 print(x, y, (unsigned)number, base);
irsanjul 0:cbd2824917b1 495 #endif
irsanjul 0:cbd2824917b1 496 }
irsanjul 0:cbd2824917b1 497 void Noritake_VFD_GU7000::print(unsigned x, uint8_t y, unsigned number, uint8_t base) {
irsanjul 0:cbd2824917b1 498 #if NORITAKE_VFD_GENERATION == 'B'
irsanjul 0:cbd2824917b1 499 char buf[16], *p = buf + sizeof buf;
irsanjul 0:cbd2824917b1 500 do
irsanjul 0:cbd2824917b1 501 *--p = number % base + (number % base < 10? '0': 'A' - 10);
irsanjul 0:cbd2824917b1 502 while (number /= base);
irsanjul 0:cbd2824917b1 503 print(x, y, p, buf + sizeof buf - p);
irsanjul 0:cbd2824917b1 504 #endif
irsanjul 0:cbd2824917b1 505 }
irsanjul 0:cbd2824917b1 506 void Noritake_VFD_GU7000::GU7000_drawImage(unsigned x, uint8_t y, unsigned width, uint8_t height, const uint8_t *data) {
irsanjul 0:cbd2824917b1 507 #if NORITAKE_VFD_GENERATION == 'B'
irsanjul 0:cbd2824917b1 508 us_command('d', 0x21);
irsanjul 0:cbd2824917b1 509 command_xy1(x, y);
irsanjul 0:cbd2824917b1 510 command_xy1(width, height);
irsanjul 0:cbd2824917b1 511 command(0x01);
irsanjul 1:1a088a2b53ec 512
irsanjul 0:cbd2824917b1 513 for (unsigned i = 0; i<(height/8)*width; i++)
irsanjul 0:cbd2824917b1 514 command(data[i]);
irsanjul 1:1a088a2b53ec 515
irsanjul 0:cbd2824917b1 516 #endif
irsanjul 0:cbd2824917b1 517 }
irsanjul 0:cbd2824917b1 518 void Noritake_VFD_GU7000::GU7000_drawImage(unsigned x, uint8_t y, ImageMemoryArea area, unsigned long address, uint8_t srcHeight, unsigned width, uint8_t height, unsigned offsetx, unsigned offsety) {
irsanjul 0:cbd2824917b1 519 #if NORITAKE_VFD_GENERATION == 'B'
irsanjul 0:cbd2824917b1 520 if (height > NORITAKE_VFD_HEIGHT) return;
irsanjul 0:cbd2824917b1 521 us_command('d', 0x20);
irsanjul 0:cbd2824917b1 522 command_xy1(x, y);
irsanjul 0:cbd2824917b1 523 command(area);
irsanjul 0:cbd2824917b1 524 command(address);
irsanjul 0:cbd2824917b1 525 command(address>>8);
irsanjul 0:cbd2824917b1 526 command(address>>16);
irsanjul 0:cbd2824917b1 527 command(srcHeight/8);
irsanjul 0:cbd2824917b1 528 command(srcHeight/8>>8);
irsanjul 0:cbd2824917b1 529 command_xy1(offsetx, offsety);
irsanjul 0:cbd2824917b1 530 command_xy1(width, height);
irsanjul 0:cbd2824917b1 531 command(0x01);
irsanjul 0:cbd2824917b1 532 #endif
irsanjul 0:cbd2824917b1 533 }
irsanjul 0:cbd2824917b1 534
irsanjul 0:cbd2824917b1 535 void Noritake_VFD_GU7000::GU7000_drawImage(unsigned x, uint8_t y, ImageMemoryArea area, unsigned long address, unsigned width, uint8_t height) {
irsanjul 0:cbd2824917b1 536 #if NORITAKE_VFD_GENERATION == 'B'
irsanjul 0:cbd2824917b1 537 GU7000_drawImage(x, y, area, address, (height + 7) & ~7, width, height, 0, 0);
irsanjul 0:cbd2824917b1 538 #endif
irsanjul 0:cbd2824917b1 539 }
irsanjul 0:cbd2824917b1 540
irsanjul 0:cbd2824917b1 541 void Noritake_VFD_GU7000::print_p(const char *str) {
irsanjul 0:cbd2824917b1 542 while (pgm_read_byte(str))
irsanjul 1:1a088a2b53ec 543 command(pgm_read_byte(str++));
irsanjul 0:cbd2824917b1 544 }
irsanjul 0:cbd2824917b1 545 void Noritake_VFD_GU7000::print_p(unsigned x, uint8_t y, const char *buffer, uint8_t len) {
irsanjul 0:cbd2824917b1 546 #if NORITAKE_VFD_GENERATION == 'B'
irsanjul 0:cbd2824917b1 547 us_command('d', 0x30);
irsanjul 0:cbd2824917b1 548 command_xy1(x, y);
irsanjul 0:cbd2824917b1 549 command(0);
irsanjul 0:cbd2824917b1 550 command(len);
irsanjul 0:cbd2824917b1 551 while (len--)
irsanjul 0:cbd2824917b1 552 command(pgm_read_byte(buffer++));
irsanjul 0:cbd2824917b1 553 #endif
irsanjul 0:cbd2824917b1 554 }
irsanjul 0:cbd2824917b1 555
irsanjul 0:cbd2824917b1 556 void Noritake_VFD_GU7000::print_p(unsigned x, uint8_t y, const char *str) {
irsanjul 0:cbd2824917b1 557 #if NORITAKE_VFD_GENERATION == 'B'
irsanjul 0:cbd2824917b1 558 const char *end = str;
irsanjul 0:cbd2824917b1 559 while (pgm_read_byte(end)) end++;
irsanjul 0:cbd2824917b1 560 print_p(x, y, str, end - str);
irsanjul 0:cbd2824917b1 561 #endif
irsanjul 0:cbd2824917b1 562 }
irsanjul 0:cbd2824917b1 563
irsanjul 0:cbd2824917b1 564 void Noritake_VFD_GU7000::GU7000_drawImage_p(unsigned width, uint8_t height, const uint8_t *data) {
irsanjul 0:cbd2824917b1 565 if (height > NORITAKE_VFD_HEIGHT) return;
irsanjul 0:cbd2824917b1 566 us_command('f', 0x11);
irsanjul 0:cbd2824917b1 567 command_xy(width, height);
irsanjul 0:cbd2824917b1 568 command((uint8_t) 1);
irsanjul 1:1a088a2b53ec 569 /*
irsanjul 0:cbd2824917b1 570 for (unsigned i = 0; i<(height/8)*width; i++)
irsanjul 0:cbd2824917b1 571 command(pgm_read_byte(data+i));
irsanjul 1:1a088a2b53ec 572 */
irsanjul 1:1a088a2b53ec 573 commandBlock((const char *)data, width*8);
irsanjul 0:cbd2824917b1 574 }
irsanjul 0:cbd2824917b1 575
irsanjul 0:cbd2824917b1 576 void Noritake_VFD_GU7000::GU7000_drawImage_p(unsigned x, uint8_t y, unsigned width, uint8_t height, const uint8_t *data) {
irsanjul 0:cbd2824917b1 577 #if NORITAKE_VFD_GENERATION == 'B'
irsanjul 0:cbd2824917b1 578 us_command('d', 0x21);
irsanjul 0:cbd2824917b1 579 command_xy1(x, y);
irsanjul 0:cbd2824917b1 580 command_xy1(width, height);
irsanjul 0:cbd2824917b1 581 command(0x01);
irsanjul 0:cbd2824917b1 582 for (unsigned i = 0; i<(height/8)*width; i++)
irsanjul 0:cbd2824917b1 583 command(pgm_read_byte(data+i));
irsanjul 0:cbd2824917b1 584 #endif
irsanjul 0:cbd2824917b1 585 }
irsanjul 0:cbd2824917b1 586
irsanjul 0:cbd2824917b1 587
irsanjul 0:cbd2824917b1 588 /**
irsanjul 0:cbd2824917b1 589 Begin I2C Implementation for 16SCIS752 dual UART
irsanjul 0:cbd2824917b1 590 **/
irsanjul 0:cbd2824917b1 591 /*
irsanjul 0:cbd2824917b1 592 noritake_i2c::noritake_i2c(PinName sda, PinName scl): i2c(sda, scl, SC16IS752_SA5, NC, SC16IS752::Channel_A)
irsanjul 0:cbd2824917b1 593 {
irsanjul 0:cbd2824917b1 594 i2c.init(38400);
irsanjul 0:cbd2824917b1 595 }
irsanjul 0:cbd2824917b1 596
irsanjul 0:cbd2824917b1 597 noritake_i2c::~noritake_i2c()
irsanjul 0:cbd2824917b1 598 {
irsanjul 0:cbd2824917b1 599
irsanjul 0:cbd2824917b1 600 }
irsanjul 0:cbd2824917b1 601
irsanjul 0:cbd2824917b1 602 void noritake_i2c::writePort(uint8_t data)
irsanjul 0:cbd2824917b1 603 {
irsanjul 0:cbd2824917b1 604
irsanjul 0:cbd2824917b1 605 }
irsanjul 0:cbd2824917b1 606
irsanjul 0:cbd2824917b1 607 void noritake_i2c::hardReset()
irsanjul 0:cbd2824917b1 608 {
irsanjul 0:cbd2824917b1 609
irsanjul 0:cbd2824917b1 610 }*/