Committer:
paulg
Date:
Sun Jan 17 11:06:20 2010 +0000
Revision:
0:775da631eb9a

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
paulg 0:775da631eb9a 1 /* Test harness for TextStar serial LCD library
paulg 0:775da631eb9a 2 * Paul Griffith
paulg 0:775da631eb9a 3 * Last edit: 10 Jan 2010
paulg 0:775da631eb9a 4 */
paulg 0:775da631eb9a 5
paulg 0:775da631eb9a 6 #include "mbed.h"
paulg 0:775da631eb9a 7 #include "TextStar.h"
paulg 0:775da631eb9a 8
paulg 0:775da631eb9a 9 void bargraph_demo(int);
paulg 0:775da631eb9a 10 void printhelps(void);
paulg 0:775da631eb9a 11 void bad_args(void);
paulg 0:775da631eb9a 12
paulg 0:775da631eb9a 13 Serial pc(USBTX, USBRX);
paulg 0:775da631eb9a 14 TextStar lcd(p9, p10); // tx, rx
paulg 0:775da631eb9a 15
paulg 0:775da631eb9a 16 int main() {
paulg 0:775da631eb9a 17 char buf[120], *cp;
paulg 0:775da631eb9a 18 char arg1[50], arg2[50], arg3[50];
paulg 0:775da631eb9a 19 int argc, cnt = 0, i, j, k, l;
paulg 0:775da631eb9a 20
paulg 0:775da631eb9a 21
paulg 0:775da631eb9a 22 printf("TextStar Serial LCD test harness\n");
paulg 0:775da631eb9a 23 printf("Type ? for help\n");
paulg 0:775da631eb9a 24 lcd.printf("TextStar Serial\rLCD test harness");
paulg 0:775da631eb9a 25
paulg 0:775da631eb9a 26 while (1) {
paulg 0:775da631eb9a 27 printf("> ");
paulg 0:775da631eb9a 28 cp = buf;
paulg 0:775da631eb9a 29 while ( (*cp++ = putchar(getchar())) != '\r') ; //get a line of input
paulg 0:775da631eb9a 30 *cp = '\0'; //terminate buffer
paulg 0:775da631eb9a 31 printf("\n");
paulg 0:775da631eb9a 32 argc = sscanf(buf, "%s%s%s", arg1, arg2, arg3); //extract command and arguments
paulg 0:775da631eb9a 33 if (argc < 1)
paulg 0:775da631eb9a 34 continue;
paulg 0:775da631eb9a 35 switch (arg1[0]) {
paulg 0:775da631eb9a 36
paulg 0:775da631eb9a 37 case 'b': //bar graph demo
paulg 0:775da631eb9a 38 bargraph_demo(0);
paulg 0:775da631eb9a 39 wait(1.0);
paulg 0:775da631eb9a 40 bargraph_demo(1);
paulg 0:775da631eb9a 41 break;
paulg 0:775da631eb9a 42
paulg 0:775da631eb9a 43 case 'c': //clear display
paulg 0:775da631eb9a 44 lcd.cls();
paulg 0:775da631eb9a 45 break;
paulg 0:775da631eb9a 46
paulg 0:775da631eb9a 47 case 'C': //set cursor style
paulg 0:775da631eb9a 48 if (argc != 2) {
paulg 0:775da631eb9a 49 bad_args();
paulg 0:775da631eb9a 50 break;
paulg 0:775da631eb9a 51 }
paulg 0:775da631eb9a 52 sscanf(arg2, "%d", &i); //extract style number
paulg 0:775da631eb9a 53 lcd.set_cursor(i);
paulg 0:775da631eb9a 54 break;
paulg 0:775da631eb9a 55
paulg 0:775da631eb9a 56 case 'd': //move cursor down
paulg 0:775da631eb9a 57 j = 1;
paulg 0:775da631eb9a 58 if (argc == 2)
paulg 0:775da631eb9a 59 sscanf(arg2, "%d", &j);
paulg 0:775da631eb9a 60 for (i = 0; i < j; i++)
paulg 0:775da631eb9a 61 lcd.down();
paulg 0:775da631eb9a 62 break;
paulg 0:775da631eb9a 63
paulg 0:775da631eb9a 64 case 'D': //define custom character
paulg 0:775da631eb9a 65 sscanf(buf, "%s%d%x%x", arg1, &i, &j, &k); //extract arguments
paulg 0:775da631eb9a 66 arg3[0] = (j >> 24) & 0xFF;
paulg 0:775da631eb9a 67 arg3[1] = (j >> 16) & 0xFF;
paulg 0:775da631eb9a 68 arg3[2] = (j >> 8) & 0xFF;
paulg 0:775da631eb9a 69 arg3[3] = j & 0xFF;
paulg 0:775da631eb9a 70 arg3[4] = (k >> 24) & 0xFF;
paulg 0:775da631eb9a 71 arg3[5] = (k >> 16) & 0xFF;
paulg 0:775da631eb9a 72 arg3[6] = (k >> 8) & 0xFF;
paulg 0:775da631eb9a 73 arg3[7] = k & 0xFF;
paulg 0:775da631eb9a 74 lcd.custom_char(i, arg3);
paulg 0:775da631eb9a 75 lcd.cls();
paulg 0:775da631eb9a 76 lcd.printf("Custom chars");
paulg 0:775da631eb9a 77 lcd.locate(0, 1);
paulg 0:775da631eb9a 78 lcd.printf("128-135 %c%c%c%c%c%c%c%c", 0x80, 0x81,
paulg 0:775da631eb9a 79 0x82, 0x83, 0x84, 0x85, 0x86, 0x87);
paulg 0:775da631eb9a 80 break;
paulg 0:775da631eb9a 81
paulg 0:775da631eb9a 82 case 'e': //enter text at current position
paulg 0:775da631eb9a 83 if (argc < 2) {
paulg 0:775da631eb9a 84 bad_args();
paulg 0:775da631eb9a 85 break;
paulg 0:775da631eb9a 86 }
paulg 0:775da631eb9a 87 *--cp = '\0'; //get rid of \r at end of buffer
paulg 0:775da631eb9a 88 sscanf(buf, "%s%n", arg1, &i); //extract arguments
paulg 0:775da631eb9a 89 // cp = buf + i;
paulg 0:775da631eb9a 90 // while (*cp++ == ' ') ; //find start of text
paulg 0:775da631eb9a 91 // --cp;
paulg 0:775da631eb9a 92 cp = buf + i + 1; //allow leading white space
paulg 0:775da631eb9a 93 lcd.printf("%s", cp);
paulg 0:775da631eb9a 94 break;
paulg 0:775da631eb9a 95
paulg 0:775da631eb9a 96 case 'h': //cursor home
paulg 0:775da631eb9a 97 lcd.home();
paulg 0:775da631eb9a 98 break;
paulg 0:775da631eb9a 99
paulg 0:775da631eb9a 100 case 'k': //get key states
paulg 0:775da631eb9a 101 while (lcd.readable() )
paulg 0:775da631eb9a 102 lcd.getc(); //empty buffer
paulg 0:775da631eb9a 103 printf("Key states = ");
paulg 0:775da631eb9a 104 lcd.send_keys();
paulg 0:775da631eb9a 105 i = lcd.getc();
paulg 0:775da631eb9a 106 j = lcd.getc();
paulg 0:775da631eb9a 107 k = lcd.getc();
paulg 0:775da631eb9a 108 l = lcd.getc();
paulg 0:775da631eb9a 109 printf("%c%c%c%c\n", i, j, k, l);
paulg 0:775da631eb9a 110 break;
paulg 0:775da631eb9a 111
paulg 0:775da631eb9a 112 case 'K': //get key output until any char typed on pc
paulg 0:775da631eb9a 113 printf("Key output: ");
paulg 0:775da631eb9a 114 while (pc.readable() == 0) {
paulg 0:775da631eb9a 115 if (lcd.readable() )
paulg 0:775da631eb9a 116 pc.putc(lcd.getc() );
paulg 0:775da631eb9a 117 }
paulg 0:775da631eb9a 118 while (pc.readable() )
paulg 0:775da631eb9a 119 pc.getc();
paulg 0:775da631eb9a 120 printf("\nAll done\n");
paulg 0:775da631eb9a 121 break;
paulg 0:775da631eb9a 122
paulg 0:775da631eb9a 123 case 'o': //output demo
paulg 0:775da631eb9a 124 lcd.cls();
paulg 0:775da631eb9a 125 j = 20;
paulg 0:775da631eb9a 126 if (argc == 2) {
paulg 0:775da631eb9a 127 sscanf(arg2, "%d", &j);
paulg 0:775da631eb9a 128 }
paulg 0:775da631eb9a 129 for (i = 0; i < j; i++) {
paulg 0:775da631eb9a 130 lcd.printf("Count = %d\r", cnt++);
paulg 0:775da631eb9a 131 wait( (i == 0) ? 1.0 : 0.2);
paulg 0:775da631eb9a 132 }
paulg 0:775da631eb9a 133 break;
paulg 0:775da631eb9a 134
paulg 0:775da631eb9a 135 case 'l': //move cursor left
paulg 0:775da631eb9a 136 j = 1;
paulg 0:775da631eb9a 137 if (argc == 2)
paulg 0:775da631eb9a 138 sscanf(arg2, "%d", &j);
paulg 0:775da631eb9a 139 for (i = 0; i < j; i++)
paulg 0:775da631eb9a 140 lcd.left();
paulg 0:775da631eb9a 141 break;
paulg 0:775da631eb9a 142
paulg 0:775da631eb9a 143 case 'p': //set cursor position
paulg 0:775da631eb9a 144 if (argc < 3) {
paulg 0:775da631eb9a 145 bad_args();
paulg 0:775da631eb9a 146 break;
paulg 0:775da631eb9a 147 }
paulg 0:775da631eb9a 148 sscanf(buf, "%s%d%d", arg1, &i, &j); //extract arguments
paulg 0:775da631eb9a 149 lcd.locate(j, i);
paulg 0:775da631eb9a 150 break;
paulg 0:775da631eb9a 151
paulg 0:775da631eb9a 152 case 'q': //quit
paulg 0:775da631eb9a 153 exit(1);
paulg 0:775da631eb9a 154 break;
paulg 0:775da631eb9a 155
paulg 0:775da631eb9a 156 case 'r': //move cursor right
paulg 0:775da631eb9a 157 j = 1;
paulg 0:775da631eb9a 158 if (argc == 2)
paulg 0:775da631eb9a 159 sscanf(arg2, "%d", &j);
paulg 0:775da631eb9a 160 for (i = 0; i < j; i++)
paulg 0:775da631eb9a 161 lcd.right();
paulg 0:775da631eb9a 162 break;
paulg 0:775da631eb9a 163
paulg 0:775da631eb9a 164 case 'R': //reset display (and set autoblank (and autoscroll) )
paulg 0:775da631eb9a 165 if (argc == 1) {
paulg 0:775da631eb9a 166 lcd.reset();
paulg 0:775da631eb9a 167 }
paulg 0:775da631eb9a 168 else if (argc == 2) {
paulg 0:775da631eb9a 169 sscanf(arg2, "%d", &i);
paulg 0:775da631eb9a 170 lcd.reset(i);
paulg 0:775da631eb9a 171 }
paulg 0:775da631eb9a 172 else if (argc >= 3) {
paulg 0:775da631eb9a 173 sscanf(arg2, "%d", &i);
paulg 0:775da631eb9a 174 sscanf(arg3, "%d", &j);
paulg 0:775da631eb9a 175 lcd.reset(i, j);
paulg 0:775da631eb9a 176 }
paulg 0:775da631eb9a 177 break;
paulg 0:775da631eb9a 178
paulg 0:775da631eb9a 179 case 's': //scroll down
paulg 0:775da631eb9a 180 j = 1;
paulg 0:775da631eb9a 181 if (argc == 2)
paulg 0:775da631eb9a 182 sscanf(arg2, "%d", &j);
paulg 0:775da631eb9a 183 for (i = 0; i < j; i++)
paulg 0:775da631eb9a 184 lcd.scroll_down();
paulg 0:775da631eb9a 185 break;
paulg 0:775da631eb9a 186
paulg 0:775da631eb9a 187 case 'S': //scroll up
paulg 0:775da631eb9a 188 j = 1;
paulg 0:775da631eb9a 189 if (argc == 2)
paulg 0:775da631eb9a 190 sscanf(arg2, "%d", &j);
paulg 0:775da631eb9a 191 for (i = 0; i < j; i++)
paulg 0:775da631eb9a 192 lcd.scroll_up();
paulg 0:775da631eb9a 193 break;
paulg 0:775da631eb9a 194
paulg 0:775da631eb9a 195 case 'u': //move cursor up
paulg 0:775da631eb9a 196 j = 1;
paulg 0:775da631eb9a 197 if (argc == 2)
paulg 0:775da631eb9a 198 sscanf(arg2, "%d", &j);
paulg 0:775da631eb9a 199 for (i = 0; i < j; i++)
paulg 0:775da631eb9a 200 lcd.up();
paulg 0:775da631eb9a 201 break;
paulg 0:775da631eb9a 202
paulg 0:775da631eb9a 203 case 'v': //display firmware version
paulg 0:775da631eb9a 204 lcd.version();
paulg 0:775da631eb9a 205 break;
paulg 0:775da631eb9a 206
paulg 0:775da631eb9a 207
paulg 0:775da631eb9a 208 case 'w': //move visible window
paulg 0:775da631eb9a 209 if (argc != 2) {
paulg 0:775da631eb9a 210 bad_args();
paulg 0:775da631eb9a 211 break;
paulg 0:775da631eb9a 212 }
paulg 0:775da631eb9a 213 sscanf(arg2, "%d", &i); //extract line number
paulg 0:775da631eb9a 214 lcd.window(i);
paulg 0:775da631eb9a 215 break;
paulg 0:775da631eb9a 216
paulg 0:775da631eb9a 217 case 'x': //send hex data to display
paulg 0:775da631eb9a 218 argc = sscanf(buf, "%s%x%x%x%x", arg1, &i, &j, &k, &l); //extract arguments
paulg 0:775da631eb9a 219 if (argc > 1)
paulg 0:775da631eb9a 220 lcd.putc(i & 0xFF);
paulg 0:775da631eb9a 221 if (argc > 2)
paulg 0:775da631eb9a 222 lcd.putc(j & 0xFF);
paulg 0:775da631eb9a 223 if (argc > 3)
paulg 0:775da631eb9a 224 lcd.putc(k & 0xFF);
paulg 0:775da631eb9a 225 if (argc > 4)
paulg 0:775da631eb9a 226 lcd.putc(l & 0xFF);
paulg 0:775da631eb9a 227 break;
paulg 0:775da631eb9a 228
paulg 0:775da631eb9a 229 case '?': //print help
paulg 0:775da631eb9a 230 printhelps();
paulg 0:775da631eb9a 231 break;
paulg 0:775da631eb9a 232
paulg 0:775da631eb9a 233 default:
paulg 0:775da631eb9a 234 printf("?? Unknown command\n");
paulg 0:775da631eb9a 235 break;
paulg 0:775da631eb9a 236 }
paulg 0:775da631eb9a 237 }
paulg 0:775da631eb9a 238 }
paulg 0:775da631eb9a 239
paulg 0:775da631eb9a 240 //Command functions
paulg 0:775da631eb9a 241
paulg 0:775da631eb9a 242 void printhelps(void) {
paulg 0:775da631eb9a 243 printf("Command summary:\n");
paulg 0:775da631eb9a 244 printf("b bar graph demo\n");
paulg 0:775da631eb9a 245 printf("c clear display\n");
paulg 0:775da631eb9a 246 printf("C style set cursor style (0-4)\n");
paulg 0:775da631eb9a 247 printf("d [n] cursor down n times (default 1)\n");
paulg 0:775da631eb9a 248 printf("D n bm1 bm2 define custom char n (128-135) with bitmap in hex\n");
paulg 0:775da631eb9a 249 printf(" bm1 = bitmap rows 1-4, bm2 = rows 5-8\n");
paulg 0:775da631eb9a 250 printf("e text enter text at current position\n");
paulg 0:775da631eb9a 251 printf("h cursor home\n");
paulg 0:775da631eb9a 252 printf("k get key states\n");
paulg 0:775da631eb9a 253 printf("K show key output\n");
paulg 0:775da631eb9a 254 printf("l [n] cursor left n times (default 1)\n");
paulg 0:775da631eb9a 255 printf("o output demo\n");
paulg 0:775da631eb9a 256 printf("p line col set cursor position to line (0-15) and column (0-15)\n");
paulg 0:775da631eb9a 257 printf("q quit\n");
paulg 0:775da631eb9a 258 printf("r [n] cursor right n times (default 1)\n");
paulg 0:775da631eb9a 259 printf("R [ab] [as] reset display, set auto-blank (0/1) and auto-scroll (0/1)\n");
paulg 0:775da631eb9a 260 printf("s [n] scroll down n times (default 1)\n");
paulg 0:775da631eb9a 261 printf("S [n] scroll up n times (default 1)\n");
paulg 0:775da631eb9a 262 printf("u [n] cursor up n times (default 1)\n");
paulg 0:775da631eb9a 263 printf("v display firmware version\n");
paulg 0:775da631eb9a 264 printf("w line move display window to specified line (0-14)\n");
paulg 0:775da631eb9a 265 printf("x b b b b send hex data to display, up to 4 bytes\n");
paulg 0:775da631eb9a 266 }
paulg 0:775da631eb9a 267
paulg 0:775da631eb9a 268 void bargraph_demo(int capped) {
paulg 0:775da631eb9a 269
paulg 0:775da631eb9a 270 int i;
paulg 0:775da631eb9a 271
paulg 0:775da631eb9a 272 lcd.cls();
paulg 0:775da631eb9a 273 lcd.printf("BAR GRAPH DEMO %d", capped + 1);
paulg 0:775da631eb9a 274 for (i = 0; i <= 100; i++) {
paulg 0:775da631eb9a 275 lcd.locate(0, 1);
paulg 0:775da631eb9a 276 lcd.bar_graph(capped, 16, i);
paulg 0:775da631eb9a 277 wait( (i == 0) ? 1.0 : 0.02);
paulg 0:775da631eb9a 278 }
paulg 0:775da631eb9a 279 wait(1.0);
paulg 0:775da631eb9a 280 for (i = 100; i >= 0; i--) {
paulg 0:775da631eb9a 281 lcd.locate(0, 1);
paulg 0:775da631eb9a 282 lcd.bar_graph(capped, 16, i);
paulg 0:775da631eb9a 283 wait( (i == 0) ? 1.0 : 0.02);
paulg 0:775da631eb9a 284 }
paulg 0:775da631eb9a 285 }
paulg 0:775da631eb9a 286
paulg 0:775da631eb9a 287 void bad_args(void) {
paulg 0:775da631eb9a 288 printf("?? Bad arguments\n");
paulg 0:775da631eb9a 289 }
paulg 0:775da631eb9a 290