// CC BY // code by SASANO Takayoshi #include #define ETX 0x03 #define BS 0x08 #define LF 0x0a #define CR 0x0d #define DEL 0x7f void serial_out(char c); char serial_in(void); void serial_init(void); void putch(int c) { if (c == BS) { serial_out(BS); serial_out(' '); } serial_out(c); } void putstring(char *str) { while (*str) { putch(*str); str++; } } static void getstring_main(char *buf, int bufsize, int echo) { char c; int n = 0; do { c = serial_in(); if (c == CR || c == ETX) c = LF; if (c == DEL) c = BS; if (c == BS) { if (n > 0) { if (echo) putch(c); n--; } continue; } if (c == LF) { if (n == 0) continue; if (echo) putch(c); break; } if (echo) putch(c); buf[n++] = c; } while (n < (bufsize - 1)); buf[n] = '\0'; } void getstring(char *buf, int bufsize) { getstring_main(buf, bufsize, 1); } void getstring_noecho(char *buf, int bufsize) { getstring_main(buf, bufsize, 0); } void printhex(uint32_t hex, int digit) { static char hexchar[] = "0123456789ABCDEF"; for (; digit > 0; digit--) { putch(hexchar[(hex >> ((digit - 1) * 4)) & 0x0f]); } } void cons_init(void) { serial_init(); }