static void actfunc_cursor_head( vtparse_t *parser, vtparse_action_t action, unsigned char ch) { SERIAL_WRITE(parser, "\x1b[80D", 5); SERIAL_WRITE(parser, ">", 1); text_editor_cursor_head(GET_EDITOR(parser)); }
static void actfunc_cancel( vtparse_t *parser, vtparse_action_t action, unsigned char ch) { SERIAL_WRITE(parser, "^C\r\n", 4); text_editor_clear(GET_EDITOR(parser)); SERIAL_WRITE(parser, ">", 1); }
void serialWrite(uint8_t uart, unsigned char c) { if (uart == 0) { SERIAL_WRITE(0, c); } #if defined(__AVR_ATmega644P__) else { SERIAL_WRITE(1, c); } #endif }
static void actfunc_enter( vtparse_t *parser, vtparse_action_t action, unsigned char ch) { char txt[TEXTEDITOR_MAXLEN]; text_editor_get_text(GET_EDITOR(parser), &txt[0], sizeof(txt)); text_editor_clear(GET_EDITOR(parser)); text_history_write(GET_HISTORY(parser), txt); SERIAL_WRITE(parser, "\r\n", 2); CALLBACK(parser, txt); SERIAL_WRITE(parser, ">", 1); }
static void actfunc_cursor_tail( vtparse_t *parser, vtparse_action_t action, unsigned char ch) { char buf[TEXTEDITOR_MAXLEN]; int len; text_editor_get_text(GET_EDITOR(parser), buf, sizeof(buf)); len = ntlibc_strlen((const char *)buf); SERIAL_WRITE(parser, "\x1b[80D", 5); SERIAL_WRITE(parser, ">", 1); SERIAL_WRITE(parser, buf, len); text_editor_cursor_tail(GET_EDITOR(parser)); }
static void actfunc_history_next( vtparse_t *parser, vtparse_action_t action, unsigned char ch) { if (text_history_read_point_next(GET_HISTORY(parser))) { char txt[TEXTHISTORY_MAXLEN]; int n = text_history_read(GET_HISTORY(parser), &txt[0], sizeof(txt)); if (0 < n) { SERIAL_WRITE(parser, "\x1b[2K", 4); SERIAL_WRITE(parser, "\x1b[80D", 5); SERIAL_WRITE(parser, ">", 1); SERIAL_WRITE(parser, txt, n); text_editor_set_text(GET_EDITOR(parser), txt); } } }
void ntshell_execute( ntshell_t *p, int (*func_read)(char *buf, int cnt), int (*func_write)(const char *buf, int cnt), int (*func_cb)(const char *text)) { ntshell_user_data_t user_data; user_data.editor = &(p->editor); user_data.history = &(p->history); user_data.func_read = func_read; user_data.func_write = func_write; user_data.func_cb = func_cb; p->parser.user_data = &user_data; vtparse_init(&(p->parser), parser_callback); text_editor_init(GET_EDITOR(&(p->parser))); text_history_init(GET_HISTORY(&(p->parser))); SUGGEST_INDEX(&(p->parser)) = -1; SERIAL_WRITE(&(p->parser), ">", 1); while(1) { unsigned char ch; SERIAL_READ(&(p->parser), (char *)&ch, sizeof(ch)); vtparse(&(p->parser), &ch, sizeof(ch)); } }
static void actfunc_cursor_right( vtparse_t *parser, vtparse_action_t action, unsigned char ch) { if (text_editor_cursor_right(GET_EDITOR(parser))) { SERIAL_WRITE(parser, "\x1b[1C", 4); } }
static void actfunc_insert( vtparse_t *parser, vtparse_action_t action, unsigned char ch) { SUGGEST_INDEX(parser) = -1; if (text_editor_insert(GET_EDITOR(parser), ch)) { char txt[TEXTEDITOR_MAXLEN]; int len = text_editor_get_text(GET_EDITOR(parser), &txt[0], sizeof(txt)); int pos = text_editor_cursor_get_position(GET_EDITOR(parser)); SERIAL_WRITE(parser, (char *)&ch, sizeof(ch)); int n = len - pos; if (n > 0) { int i; SERIAL_WRITE(parser, txt + pos, len - pos); for (i = 0; i < n; i++) { SERIAL_WRITE(parser, "\x1b[1D", 4); } } } }
int putDebugChar(unsigned char byte) { if (!remoteDebugInitialized) { remoteDebugInitialized = 1; debugInit(YOSEMITE_BAUD_115200, YOSEMITE_DATA_8BIT, YOSEMITE_PARITY_NONE, YOSEMITE_STOP_1BIT); } while ((SERIAL_READ(SERIAL_LINE_STATUS) & 0x20) == 0); SERIAL_WRITE(SERIAL_SEND_BUFFER, byte); return 1; }
/* Initialize the serial port for KGDB debugging */ void debugInit(unsigned int baud, unsigned char data, unsigned char parity, unsigned char stop) { /* Disable Interrupts */ SERIAL_WRITE(SERIAL_LINE_CONTROL, 0x0); SERIAL_WRITE(SERIAL_INTR_ENABLE, 0x0); { unsigned int divisor; SERIAL_WRITE(SERIAL_LINE_CONTROL, 0x80); divisor = TITAN_SERIAL_BASE_BAUD / baud; SERIAL_WRITE(SERIAL_DIVISOR_LSB, divisor & 0xff); SERIAL_WRITE(SERIAL_DIVISOR_MSB, (divisor & 0xff00) >> 8); SERIAL_WRITE(SERIAL_LINE_CONTROL, 0x0); } SERIAL_WRITE(SERIAL_DATA_FORMAT, data | parity | stop); }
static void actfunc_backspace( vtparse_t *parser, vtparse_action_t action, unsigned char ch) { if (text_editor_backspace(GET_EDITOR(parser))) { char txt[TEXTEDITOR_MAXLEN]; SERIAL_WRITE(parser, "\x1b[1D", 4); int len = text_editor_get_text(GET_EDITOR(parser), &txt[0], sizeof(txt)); int pos = text_editor_cursor_get_position(GET_EDITOR(parser)); int n = len - pos; if (n > 0) { int i; SERIAL_WRITE(parser, txt + pos, len - pos); SERIAL_WRITE(parser, " ", 1); for (i = 0; i < n + 1; i++) { SERIAL_WRITE(parser, "\x1b[1D", 4); } } else { SERIAL_WRITE(parser, " ", 1); SERIAL_WRITE(parser, "\x1b[1D", 4); } } }
void remote_reset(void) { SERIAL_WRITE(remote_desc, "+", 1); }
static void actfunc_suggest( vtparse_t *parser, vtparse_action_t action, unsigned char ch) { char buf[TEXTEDITOR_MAXLEN]; if (SUGGEST_INDEX(parser) < 0) { if (text_editor_get_text( GET_EDITOR(parser), SUGGEST_SOURCE(parser), sizeof(SUGGEST_SOURCE(parser))) > 0) { SUGGEST_INDEX(parser) = 0; if (text_history_find( GET_HISTORY(parser), SUGGEST_INDEX(parser), SUGGEST_SOURCE(parser), buf, sizeof(buf)) == 0) { int n = ntlibc_strlen((const char *)buf); SERIAL_WRITE(parser, "\x1b[2K", 4); SERIAL_WRITE(parser, "\x1b[80D", 5); SERIAL_WRITE(parser, ">", 1); SERIAL_WRITE(parser, buf, n); text_editor_set_text(GET_EDITOR(parser), buf); } else { SUGGEST_INDEX(parser) = -1; } } } else { SUGGEST_INDEX(parser) = SUGGEST_INDEX(parser) + 1; if (text_history_find( GET_HISTORY(parser), SUGGEST_INDEX(parser), SUGGEST_SOURCE(parser), buf, sizeof(buf)) == 0) { int n = ntlibc_strlen((const char *)buf); SERIAL_WRITE(parser, "\x1b[2K", 4); SERIAL_WRITE(parser, "\x1b[80D", 5); SERIAL_WRITE(parser, ">", 1); SERIAL_WRITE(parser, buf, n); text_editor_set_text(GET_EDITOR(parser), buf); } else { int n = ntlibc_strlen(SUGGEST_SOURCE(parser)); SERIAL_WRITE(parser, "\x1b[2K", 4); SERIAL_WRITE(parser, "\x1b[80D", 5); SERIAL_WRITE(parser, ">", 1); SERIAL_WRITE(parser, SUGGEST_SOURCE(parser), n); text_editor_set_text(GET_EDITOR(parser), SUGGEST_SOURCE(parser)); SUGGEST_INDEX(parser) = -1; } } }