// Function used to print a string in the terminal by other tasks void echo (char *string, char Terminalbackup) { INT8U backup_cnt = 0; INT8U i = 0; char backup[(CONSOLE_BUFFER_SIZE/2)]; char *command_start = "echo "; char *command_end = "\n\r"; if (Terminalbackup == TRUE) { backup_cnt = TerminalBackup(&backup[0]); } SetSilentMode(TRUE); while (*command_start) { if (OSQueuePost(USB, *command_start++) == BUFFER_UNDERRUN) { // Problema: Estouro de buffer OSCleanQueue(USB); } } while (*string) { if (OSQueuePost(USB, *string++) == BUFFER_UNDERRUN) { // Problema: Estouro de buffer OSCleanQueue(USB); } } while (*command_end) { if (OSQueuePost(USB, *command_end++) == BUFFER_UNDERRUN) { // Problema: Estouro de buffer OSCleanQueue(USB); } } if (Terminalbackup == TRUE) { for(i=0;i<backup_cnt;i++) { if (OSQueuePost(USB, backup[i]) == BUFFER_UNDERRUN) { // Problema: Estouro de buffer OSCleanQueue(USB); } } } }
/***************************************************************************** * Name: * terminal_proces * In: * N/A * * Out: * N/A * * Description: * Main loop of terminal application. gathers input, and executes commands. * * Assumptions: * -- *****************************************************************************/ void usb_terminal_process(void) { INT8U data; char c; while(1) { (void)OSQueuePend(USB, &data, 0); c=(char)data; if ((c != '\n') && (c != '\r')) { if (c != 0x7F) { if (SilentMode == FALSE) { while(c!=(char)(*putch)(c)) {}; } } else { if (usb_cmd_line_ndx) { while(c!=(char)(*putch)(c)) {}; } } } /* Execute command if enter is received, or usb_cmd_line is full. */ if ((c=='\r') || (usb_cmd_line_ndx == sizeof(usb_cmd_line)-2)) { int usb_start = usb_skipp_space(usb_cmd_line, 0); int usb_end = usb_find_word(usb_cmd_line, usb_start); int usb_x; /* Separate command string from parameters, and close parameters string. */ usb_cmd_line[usb_end]=usb_cmd_line[usb_cmd_line_ndx]='\0'; /* Identify command. */ usb_x=usb_find_command(usb_cmd_line+usb_start); /* Command not found. */ if (usb_x == -1) { print_usb("\r\nUnknown command!\r\n"); } else { (*usb_cmds[usb_x]->func)(usb_cmd_line+usb_end+1); } usb_cmd_line_ndx=0; usb_print_prompt(); SetSilentMode(FALSE); } else { /* Put character to usb_cmd_line. */ if (c=='\b') { if (usb_cmd_line_ndx > 0) { usb_cmd_line[usb_cmd_line_ndx]='\0'; usb_cmd_line_ndx--; } } else if(c=='\n') { continue; } else { if (c == 0x7F) { if (usb_cmd_line_ndx) { usb_cmd_line[usb_cmd_line_ndx]=0; usb_cmd_line_ndx--; usb_cmd_line[usb_cmd_line_ndx]=0; } } else { usb_cmd_line[usb_cmd_line_ndx++]=c; } } } if (SilentMode == FALSE) { cdc_process(); } } }