char xgetc_n (void) { char c; c = 0; if (uart0_test()) c = uart0_get(); return c; }
boolean bitman() { unsigned char data[16]; decode((unsigned char*)"0098e41f1fe49800", data); decode((unsigned char*)"0884e43e3ee48408", data + 8); int ptn = 0; for (int i = 0; i < 100 * 6; i++) { setMatrix((char*)(data + ptn * 8)); if (i % 100 == 99) ptn = 1 - ptn; if (uart0_test()) return 0; } return 1; }
void uart() { #define SIZE_BUF 128 char buf[SIZE_BUF]; int nbuf = 0; for (int i = 0; i < SIZE_BUF; i++) buf[i] = 0; // init_frame(); // load(); // 初回はデータクリアいるかも? int mode = 1; unsigned char data[8]; for (int i = 0; i < 8; i++) data[i] = 0; int n = 0; int cnt = 0; int nframe = 0; for (int i = 0;; i++) { while (uart0_test()) { int c = uart0_getc(); // println(buf); if (c == '\n') { buf[nbuf] = '\0'; if (startsWith(buf, "MATLED SHOW ")) { decode(buf + (9 + 3), data); println("SHOW"); } else if (startsWith(buf, "MATLED SET ")) { char* pbuf = buf + 11; int nf = parseInt(pbuf); if (nf >= 0 && nf <= N_FRAME) { int n = indexOf(pbuf, ' '); if (n >= 0) { pbuf += n + 1; // println(pbuf); decode(pbuf, fr->frame[nf]); decode(pbuf, data); // 停止時の画面にも表示 n = indexOf(pbuf, ' '); int nw = 100; if (n >= 0) { pbuf += n + 1; nw = parseInt(pbuf); } fr->waitms[nf] = nw; } } } else if (startsWith(buf, "MATLED CLEAR")) { mode = 0; init_frame(); } else if (startsWith(buf, "MATLED RUN")) { mode = 1; println("RUN"); } else if (startsWith(buf, "MATLED STOP")) { mode = 0; println("STOP"); } else if (startsWith(buf, "MATLED SAVE")) { save(); println("SAVE"); } else if (startsWith(buf, "MATLED LOAD")) { load(); println("LOAD"); } nbuf = 0; continue; } else if (c == '\r') { } else { if (nbuf < SIZE_BUF - 1) buf[nbuf++] = c; } } if (mode == 0) { setMatrix(data); } else { setMatrix(fr->frame[nframe]); cnt++; if (cnt >= fr->waitms[nframe]) { cnt = 0; int bknframe = nframe; for (;;) { nframe++; if (nframe == N_FRAME) nframe = 0; if (fr->waitms[nframe]) break; if (bknframe == nframe) { mode = 0; break; } } } } } }