annotate Debug/cli/cli.c @ 395:e581daa76a14

Write whole debug cli command to history Previously the command was being modified in place in order to find the command name. This was happening before saving to the history. Fixes #70
author Eric Mertens <emertens@gmail.com>
date Mon, 26 Oct 2015 17:55:41 -0700
parents d8f61e15aca1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
294
834d69d22d47 Adding list of modified files to the cli version command.
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
1 /* Copyright (C) 2014-2015 by Jacob Alexander
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
2 *
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
3 * Permission is hereby granted, free of charge, to any person obtaining a copy
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
4 * of this software and associated documentation files (the "Software"), to deal
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
5 * in the Software without restriction, including without limitation the rights
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
6 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
7 * copies of the Software, and to permit persons to whom the Software is
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
8 * furnished to do so, subject to the following conditions:
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
9 *
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
10 * The above copyright notice and this permission notice shall be included in
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
11 * all copies or substantial portions of the Software.
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
12 *
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
16 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
18 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
19 * THE SOFTWARE.
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
20 */
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
21
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
22 // ----- Includes -----
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
23
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
24 // Project Includes
109
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
25 #include <buildvars.h>
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
26 #include "cli.h"
109
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
27 #include <led.h>
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
28 #include <print.h>
385
d8f61e15aca1 Adding jump to bootloader key
Jacob Alexander <haata@kiibohd.com>
parents: 358
diff changeset
29 #include <kll_defs.h>
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
30
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
31
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
32
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
33 // ----- Variables -----
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
34
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
35 // Basic command dictionary
316
a0ad3a172269 Add Clear CLI function
Rowan Decker <Smasher816@gmail.com>
parents: 294
diff changeset
36 CLIDict_Entry( clear, "Clear the screen.");
239
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
37 CLIDict_Entry( cliDebug, "Enables/Disables hex output of the most recent cli input." );
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
38 CLIDict_Entry( help, "You're looking at it :P" );
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
39 CLIDict_Entry( led, "Enables/Disables indicator LED. Try a couple times just in case the LED is in an odd state.\r\n\t\t\033[33mWarning\033[0m: May adversely affect some modules..." );
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
40 CLIDict_Entry( reload, "Signals microcontroller to reflash/reload." );
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
41 CLIDict_Entry( reset, "Resets the terminal back to initial settings." );
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
42 CLIDict_Entry( restart, "Sends a software restart, should be similar to powering on the device." );
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
43 CLIDict_Entry( version, "Version information about this firmware." );
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
44
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
45 CLIDict_Def( basicCLIDict, "General Commands" ) = {
316
a0ad3a172269 Add Clear CLI function
Rowan Decker <Smasher816@gmail.com>
parents: 294
diff changeset
46 CLIDict_Item( clear ),
239
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
47 CLIDict_Item( cliDebug ),
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
48 CLIDict_Item( help ),
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
49 CLIDict_Item( led ),
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
50 CLIDict_Item( reload ),
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
51 CLIDict_Item( reset ),
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
52 CLIDict_Item( restart ),
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
53 CLIDict_Item( version ),
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
54 { 0, 0, 0 } // Null entry for dictionary end
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
55 };
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
56
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
57
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
58
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
59 // ----- Functions -----
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
60
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
61 inline void prompt()
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
62 {
114
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
63 print("\033[2K\r"); // Erases the current line and resets cursor to beginning of line
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
64 print("\033[1;34m:\033[0m "); // Blue bold prompt
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
65 }
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
66
110
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
67 // Initialize the CLI
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
68 inline void CLI_init()
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
69 {
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
70 // Reset the Line Buffer
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
71 CLILineBufferCurrent = 0;
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
72
318
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
73 // History starts empty
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
74 CLIHistoryHead = 0;
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
75 CLIHistoryCurrent = 0;
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
76 CLIHistoryTail = 0;
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
77
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
78 // Set prompt
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
79 prompt();
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
80
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
81 // Register first dictionary
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
82 CLIDictionariesUsed = 0;
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
83 CLI_registerDictionary( basicCLIDict, basicCLIDictName );
109
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
84
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
85 // Initialize main LED
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
86 init_errorLED();
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
87 CLILEDState = 0;
110
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
88
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
89 // Hex debug mode is off by default
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
90 CLIHexDebugMode = 0;
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
91 }
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
92
110
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
93 // Query the serial input buffer for any new characters
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
94 void CLI_process()
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
95 {
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
96 // Current buffer position
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
97 uint8_t prev_buf_pos = CLILineBufferCurrent;
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
98
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
99 // Process each character while available
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
100 while ( 1 )
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
101 {
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
102 // No more characters to process
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
103 if ( Output_availablechar() == 0 )
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
104 break;
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
105
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 121
diff changeset
106 // Retrieve from output module
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
107 char cur_char = (char)Output_getchar();
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
108
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
109 // Make sure buffer isn't full
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
110 if ( CLILineBufferCurrent >= CLILineBufferMaxSize )
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
111 {
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
112 print( NL );
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
113 erro_print("Serial line buffer is full, dropping character and resetting...");
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
114
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
115 // Clear buffer
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
116 CLILineBufferCurrent = 0;
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
117
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
118 // Reset the prompt
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
119 prompt();
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
120
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
121 return;
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
122 }
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
123
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
124 // Place into line buffer
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
125 CLILineBuffer[CLILineBufferCurrent++] = cur_char;
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
126 }
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
127
110
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
128 // Display Hex Key Input if enabled
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
129 if ( CLIHexDebugMode && CLILineBufferCurrent > prev_buf_pos )
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
130 {
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
131 print("\033[s\r\n"); // Save cursor position, and move to the next line
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
132 print("\033[2K"); // Erases the current line
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
133
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
134 uint8_t pos = prev_buf_pos;
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
135 while ( CLILineBufferCurrent > pos )
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
136 {
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
137 printHex( CLILineBuffer[pos++] );
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
138 print(" ");
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
139 }
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
140
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
141 print("\033[u"); // Restore cursor position
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
142 }
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
143
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
144 // If buffer has changed, output to screen while there are still characters in the buffer not displayed
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
145 while ( CLILineBufferCurrent > prev_buf_pos )
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
146 {
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
147 // Check for control characters
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
148 switch ( CLILineBuffer[prev_buf_pos] )
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
149 {
328
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
150 // Enter
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
151 case 0x0A: // LF
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
152 case 0x0D: // CR
121
71430b08fe81 Force curve gauge is feature complete!!
Jacob Alexander <haata@kiibohd.com>
parents: 114
diff changeset
153 CLILineBuffer[CLILineBufferCurrent - 1] = ' '; // Replace Enter with a space (resolves a bug in args)
71430b08fe81 Force curve gauge is feature complete!!
Jacob Alexander <haata@kiibohd.com>
parents: 114
diff changeset
154
71430b08fe81 Force curve gauge is feature complete!!
Jacob Alexander <haata@kiibohd.com>
parents: 114
diff changeset
155 // Remove the space if there is no command
71430b08fe81 Force curve gauge is feature complete!!
Jacob Alexander <haata@kiibohd.com>
parents: 114
diff changeset
156 if ( CLILineBufferCurrent == 1 )
328
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
157 {
121
71430b08fe81 Force curve gauge is feature complete!!
Jacob Alexander <haata@kiibohd.com>
parents: 114
diff changeset
158 CLILineBufferCurrent--;
328
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
159 }
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
160 else
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
161 {
395
e581daa76a14 Write whole debug cli command to history
Eric Mertens <emertens@gmail.com>
parents: 385
diff changeset
162 // Add the command to the history
e581daa76a14 Write whole debug cli command to history
Eric Mertens <emertens@gmail.com>
parents: 385
diff changeset
163 CLI_saveHistory( CLILineBuffer );
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
164
328
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
165 // Process the current line buffer
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
166 CLI_commandLookup();
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
167
328
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
168 // Keep the array circular, discarding the older entries
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
169 if ( CLIHistoryTail < CLIHistoryHead )
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
170 CLIHistoryHead = ( CLIHistoryHead + 1 ) % CLIMaxHistorySize;
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
171 CLIHistoryTail++;
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
172 if ( CLIHistoryTail == CLIMaxHistorySize )
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
173 {
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
174 CLIHistoryTail = 0;
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
175 CLIHistoryHead = 1;
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
176 }
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
177
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
178 CLIHistoryCurrent = CLIHistoryTail; // 'Up' starts at the last item
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
179 CLI_saveHistory( NULL ); // delete the old temp buffer
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
180
318
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
181 }
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
182
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
183 // Reset the buffer
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
184 CLILineBufferCurrent = 0;
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
185
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
186 // Reset the prompt after processing has finished
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
187 print( NL );
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
188 prompt();
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
189
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
190 // XXX There is a potential bug here when resetting the buffer (losing valid keypresses)
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
191 // Doesn't look like it will happen *that* often, so not handling it for now -HaaTa
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
192 return;
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
193
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
194 case 0x09: // Tab
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
195 // Tab completion for the current command
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
196 CLI_tabCompletion();
114
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
197
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
198 CLILineBufferCurrent--; // Remove the Tab
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
199
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
200 // XXX There is a potential bug here when resetting the buffer (losing valid keypresses)
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
201 // Doesn't look like it will happen *that* often, so not handling it for now -HaaTa
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
202 return;
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
203
318
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
204 case 0x1B: // Esc / Escape codes
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
205 // Check for other escape sequence
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
206
328
9dd55aa71d76 Avoid putting blank entries in history, allow linefeed for enter
Matt Ventura <mattventura@mattventura.net>
parents: 321
diff changeset
207 // \e[ is an escape code in vt100 compatible terminals
319
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
208 if ( CLILineBufferCurrent >= prev_buf_pos + 3
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
209 && CLILineBuffer[ prev_buf_pos ] == 0x1B
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
210 && CLILineBuffer[ prev_buf_pos + 1] == 0x5B )
318
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
211 {
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
212 // Arrow Keys: A (0x41) = Up, B (0x42) = Down, C (0x43) = Right, D (0x44) = Left
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
213
319
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
214 if ( CLILineBuffer[ prev_buf_pos + 2 ] == 0x41 ) // Hist prev
318
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
215 {
319
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
216 if ( CLIHistoryCurrent == CLIHistoryTail )
318
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
217 {
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
218 // Is first time pressing arrow. Save the current buffer
319
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
219 CLILineBuffer[ prev_buf_pos ] = '\0';
321
18c3c4924f20 Code cleanup from cli changes.
Jacob Alexander <haata@kiibohd.com>
parents: 319
diff changeset
220 CLI_saveHistory( CLILineBuffer );
318
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
221 }
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
222
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
223 // Grab the previus item from the history if there is one
319
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
224 if ( RING_PREV( CLIHistoryCurrent ) != RING_PREV( CLIHistoryHead ) )
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
225 CLIHistoryCurrent = RING_PREV( CLIHistoryCurrent );
321
18c3c4924f20 Code cleanup from cli changes.
Jacob Alexander <haata@kiibohd.com>
parents: 319
diff changeset
226 CLI_retreiveHistory( CLIHistoryCurrent );
318
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
227 }
319
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
228 if ( CLILineBuffer[ prev_buf_pos + 2 ] == 0x42 ) // Hist next
318
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
229 {
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
230 // Grab the next item from the history if it exists
319
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
231 if ( RING_NEXT( CLIHistoryCurrent ) != RING_NEXT( CLIHistoryTail ) )
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
232 CLIHistoryCurrent = RING_NEXT( CLIHistoryCurrent );
321
18c3c4924f20 Code cleanup from cli changes.
Jacob Alexander <haata@kiibohd.com>
parents: 319
diff changeset
233 CLI_retreiveHistory( CLIHistoryCurrent );
318
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
234 }
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
235 }
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
236 return;
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
237
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
238 case 0x08:
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
239 case 0x7F: // Backspace
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
240 // TODO - Does not handle case for arrow editing (arrows disabled atm)
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
241 CLILineBufferCurrent--; // Remove the backspace
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
242
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
243 // If there are characters in the buffer
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
244 if ( CLILineBufferCurrent > 0 )
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
245 {
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
246 // Remove character from current position in the line buffer
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
247 CLILineBufferCurrent--;
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
248
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
249 // Remove character from tty
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
250 print("\b \b");
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
251 }
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
252
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
253 break;
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
254
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
255 default:
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
256 // Place a null on the end (to use with string print)
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
257 CLILineBuffer[CLILineBufferCurrent] = '\0';
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
258
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
259 // Output buffer to screen
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
260 dPrint( &CLILineBuffer[prev_buf_pos] );
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
261
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
262 // Buffer reset
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
263 prev_buf_pos++;
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
264
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
265 break;
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
266 }
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
267 }
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
268 }
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
269
108
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
270 // Takes a string, returns two pointers
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
271 // One to the first non-space character
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
272 // The second to the next argument (first NULL if there isn't an argument). delimited by a space
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
273 // Places a NULL at the first space after the first argument
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
274 void CLI_argumentIsolation( char* string, char** first, char** second )
108
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
275 {
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
276 // Mark out the first argument
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
277 // This is done by finding the first space after a list of non-spaces and setting it NULL
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
278 char* cmdPtr = string - 1;
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
279 while ( *++cmdPtr == ' ' ); // Skips leading spaces, and points to first character of cmd
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
280
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
281 // Locates first space delimiter
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
282 char* argPtr = cmdPtr + 1;
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
283 while ( *argPtr != ' ' && *argPtr != '\0' )
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
284 argPtr++;
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
285
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
286 // Point to the first character of args or a NULL (no args) and set the space delimiter as a NULL
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
287 (++argPtr)[-1] = '\0';
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
288
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
289 // Set return variables
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
290 *first = cmdPtr;
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
291 *second = argPtr;
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
292 }
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
293
110
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
294 // Scans the CLILineBuffer for any valid commands
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
295 void CLI_commandLookup()
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
296 {
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
297 // Ignore command if buffer is 0 length
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
298 if ( CLILineBufferCurrent == 0 )
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
299 return;
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
300
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
301 // Set the last+1 character of the buffer to NULL for string processing
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
302 CLILineBuffer[CLILineBufferCurrent] = '\0';
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
303
108
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
304 // Retrieve pointers to command and beginning of arguments
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
305 // Places a NULL at the first space after the command
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
306 char* cmdPtr;
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
307 char* argPtr;
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
308 CLI_argumentIsolation( CLILineBuffer, &cmdPtr, &argPtr );
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
309
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
310 // Scan array of dictionaries for a valid command match
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
311 for ( uint8_t dict = 0; dict < CLIDictionariesUsed; dict++ )
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
312 {
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
313 // Parse each cmd until a null command entry is found, or an argument match
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
314 for ( uint8_t cmd = 0; CLIDict[dict][cmd].name != 0; cmd++ )
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
315 {
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
316 // Compare the first argument and each command entry
239
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
317 if ( eqStr( cmdPtr, (char*)CLIDict[dict][cmd].name ) == -1 )
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
318 {
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
319 // Run the specified command function pointer
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
320 // argPtr is already pointing at the first character of the arguments
239
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
321 (*(void (*)(char*))CLIDict[dict][cmd].function)( argPtr );
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
322
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
323 return;
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
324 }
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
325 }
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
326 }
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
327
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
328 // No match for the command...
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
329 print( NL );
108
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
330 erro_dPrint("\"", CLILineBuffer, "\" is not a valid command...type \033[35mhelp\033[0m");
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
331 }
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
332
110
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
333 // Registers a command dictionary with the CLI
192
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 126
diff changeset
334 void CLI_registerDictionary( const CLIDictItem *cmdDict, const char* dictName )
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
335 {
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
336 // Make sure this max limit of dictionaries hasn't been reached
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
337 if ( CLIDictionariesUsed >= CLIMaxDictionaries )
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
338 {
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
339 erro_print("Max number of dictionaries defined already...");
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
340 return;
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
341 }
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
342
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
343 // Add dictionary
192
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 126
diff changeset
344 CLIDictNames[CLIDictionariesUsed] = (char*)dictName;
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 126
diff changeset
345 CLIDict[CLIDictionariesUsed++] = (CLIDictItem*)cmdDict;
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
346 }
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
347
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
348 inline void CLI_tabCompletion()
114
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
349 {
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
350 // Ignore command if buffer is 0 length
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
351 if ( CLILineBufferCurrent == 0 )
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
352 return;
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
353
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
354 // Set the last+1 character of the buffer to NULL for string processing
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
355 CLILineBuffer[CLILineBufferCurrent] = '\0';
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
356
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
357 // Retrieve pointers to command and beginning of arguments
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
358 // Places a NULL at the first space after the command
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
359 char* cmdPtr;
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
360 char* argPtr;
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
361 CLI_argumentIsolation( CLILineBuffer, &cmdPtr, &argPtr );
114
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
362
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
363 // Tab match pointer
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
364 char* tabMatch = 0;
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
365 uint8_t matches = 0;
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
366
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
367 // Scan array of dictionaries for a valid command match
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
368 for ( uint8_t dict = 0; dict < CLIDictionariesUsed; dict++ )
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
369 {
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
370 // Parse each cmd until a null command entry is found, or an argument match
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
371 for ( uint8_t cmd = 0; CLIDict[dict][cmd].name != 0; cmd++ )
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
372 {
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
373 // Compare the first argument piece to each command entry to see if it is "like"
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
374 // NOTE: To save on processing, we only care about the commands and ignore the arguments
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
375 // If there are arguments, and a valid tab match is found, buffer is cleared (args lost)
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
376 // Also ignores full matches
239
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
377 if ( eqStr( cmdPtr, (char*)CLIDict[dict][cmd].name ) == 0 )
114
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
378 {
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
379 // TODO Make list of commands if multiple matches
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
380 matches++;
239
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
381 tabMatch = (char*)CLIDict[dict][cmd].name;
114
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
382 }
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
383 }
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
384 }
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
385
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
386 // Only tab complete if there was 1 match
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
387 if ( matches == 1 )
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
388 {
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
389 // Reset the buffer
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
390 CLILineBufferCurrent = 0;
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
391
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
392 // Reprint the prompt (automatically clears the line)
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
393 prompt();
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
394
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
395 // Display the command
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
396 dPrint( tabMatch );
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
397
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
398 // There are no index counts, so just copy the whole string to the input buffer
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
399 while ( *tabMatch != '\0' )
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
400 {
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
401 CLILineBuffer[CLILineBufferCurrent++] = *tabMatch++;
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
402 }
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
403 }
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
404 }
c57ec00a0abc Adding basic Tab completion.
Jacob Alexander <haata@kiibohd.com>
parents: 113
diff changeset
405
319
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
406 inline int CLI_wrap( int kX, int const kLowerBound, int const kUpperBound )
318
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
407 {
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
408 int range_size = kUpperBound - kLowerBound + 1;
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
409
319
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
410 if ( kX < kLowerBound )
318
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
411 kX += range_size * ((kLowerBound - kX) / range_size + 1);
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
412
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
413 return kLowerBound + (kX - kLowerBound) % range_size;
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
414 }
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
415
319
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
416 inline void CLI_saveHistory( char *buff )
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
417 {
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
418 if ( buff == NULL )
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
419 {
318
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
420 //clear the item
319
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
421 CLIHistoryBuffer[ CLIHistoryTail ][ 0 ] = '\0';
318
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
422 return;
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
423 }
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
424
395
e581daa76a14 Write whole debug cli command to history
Eric Mertens <emertens@gmail.com>
parents: 385
diff changeset
425 // Don't write empty lines to the history
e581daa76a14 Write whole debug cli command to history
Eric Mertens <emertens@gmail.com>
parents: 385
diff changeset
426 const char *cursor = buff;
e581daa76a14 Write whole debug cli command to history
Eric Mertens <emertens@gmail.com>
parents: 385
diff changeset
427 while (*cursor == ' ') { cursor++; } // advance past the leading whitespace
e581daa76a14 Write whole debug cli command to history
Eric Mertens <emertens@gmail.com>
parents: 385
diff changeset
428 if (*cursor == '\0') { return ; }
e581daa76a14 Write whole debug cli command to history
Eric Mertens <emertens@gmail.com>
parents: 385
diff changeset
429
318
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
430 // Copy the line to the history
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
431 int i;
319
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
432 for (i = 0; i < CLILineBufferCurrent; i++)
318
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
433 {
319
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
434 CLIHistoryBuffer[ CLIHistoryTail ][ i ] = CLILineBuffer[ i ];
318
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
435 }
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
436 }
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
437
319
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
438 void CLI_retreiveHistory( int index )
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
439 {
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
440 char *histMatch = CLIHistoryBuffer[ index ];
318
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
441
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
442 // Reset the buffer
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
443 CLILineBufferCurrent = 0;
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
444
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
445 // Reprint the prompt (automatically clears the line)
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
446 prompt();
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
447
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
448 // Display the command
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
449 dPrint( histMatch );
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
450
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
451 // There are no index counts, so just copy the whole string to the input buffe
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
452 CLILineBufferCurrent = 0;
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
453 while ( *histMatch != '\0' )
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
454 {
319
3994a5a68793 Cleanup CLI history
Rowan Decker <Smasher816@gmail.com>
parents: 318
diff changeset
455 CLILineBuffer[ CLILineBufferCurrent++ ] = *histMatch++;
318
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
456 }
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
457 }
217e7bd8a0a4 Add CLI History
Rowan Decker <Smasher816@gmail.com>
parents: 316
diff changeset
458
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
459
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
460
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
461 // ----- CLI Command Functions -----
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
462
316
a0ad3a172269 Add Clear CLI function
Rowan Decker <Smasher816@gmail.com>
parents: 294
diff changeset
463 void cliFunc_clear( char* args)
a0ad3a172269 Add Clear CLI function
Rowan Decker <Smasher816@gmail.com>
parents: 294
diff changeset
464 {
a0ad3a172269 Add Clear CLI function
Rowan Decker <Smasher816@gmail.com>
parents: 294
diff changeset
465 print("\033[2J\033[H\r"); // Erases the whole screen
a0ad3a172269 Add Clear CLI function
Rowan Decker <Smasher816@gmail.com>
parents: 294
diff changeset
466 }
a0ad3a172269 Add Clear CLI function
Rowan Decker <Smasher816@gmail.com>
parents: 294
diff changeset
467
109
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
468 void cliFunc_cliDebug( char* args )
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
469 {
110
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
470 // Toggle Hex Debug Mode
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
471 if ( CLIHexDebugMode )
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
472 {
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
473 print( NL );
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
474 info_print("Hex debug mode disabled...");
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
475 CLIHexDebugMode = 0;
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
476 }
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
477 else
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
478 {
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
479 print( NL );
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
480 info_print("Hex debug mode enabled...");
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
481 CLIHexDebugMode = 1;
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
482 }
109
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
483 }
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
484
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
485 void cliFunc_help( char* args )
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
486 {
108
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
487 // Scan array of dictionaries and print every description
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
488 // (no alphabetical here, too much processing/memory to sort...)
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
489 for ( uint8_t dict = 0; dict < CLIDictionariesUsed; dict++ )
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
490 {
112
0cb43cb8f683 Adding dictionary titles.
Jacob Alexander <haata@kiibohd.com>
parents: 110
diff changeset
491 // Print the name of each dictionary as a title
239
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
492 print( NL "\033[1;32m" );
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
493 _print( CLIDictNames[dict] ); // This print is requride by AVR (flash)
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
494 print( "\033[0m" NL );
108
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
495
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
496 // Parse each cmd/description until a null command entry is found
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
497 for ( uint8_t cmd = 0; CLIDict[dict][cmd].name != 0; cmd++ )
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
498 {
109
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
499 dPrintStrs(" \033[35m", CLIDict[dict][cmd].name, "\033[0m");
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
500
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
501 // Determine number of spaces to tab by the length of the command and TabAlign
239
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
502 uint8_t padLength = CLIEntryTabAlign - lenStr( (char*)CLIDict[dict][cmd].name );
109
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
503 while ( padLength-- > 0 )
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
504 print(" ");
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
505
239
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
506 _print( CLIDict[dict][cmd].description ); // This print is required by AVR (flash)
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
507 print( NL );
108
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
508 }
ecb57880e3bc Added help command and function'ized the arugmentIsolator.
Jacob Alexander <haata@kiibohd.com>
parents: 107
diff changeset
509 }
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
510 }
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
511
109
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
512 void cliFunc_led( char* args )
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
513 {
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
514 CLILEDState ^= 1 << 1; // Toggle between 0 and 1
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
515 errorLED( CLILEDState ); // Enable/Disable error LED
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
516 }
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
517
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
518 void cliFunc_reload( char* args )
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
519 {
385
d8f61e15aca1 Adding jump to bootloader key
Jacob Alexander <haata@kiibohd.com>
parents: 358
diff changeset
520 if ( flashModeEnabled_define == 0 )
d8f61e15aca1 Adding jump to bootloader key
Jacob Alexander <haata@kiibohd.com>
parents: 358
diff changeset
521 {
d8f61e15aca1 Adding jump to bootloader key
Jacob Alexander <haata@kiibohd.com>
parents: 358
diff changeset
522 print( NL );
d8f61e15aca1 Adding jump to bootloader key
Jacob Alexander <haata@kiibohd.com>
parents: 358
diff changeset
523 warn_print("flashModeEnabled not set, cancelling firmware reload...");
d8f61e15aca1 Adding jump to bootloader key
Jacob Alexander <haata@kiibohd.com>
parents: 358
diff changeset
524 info_msg("Set flashModeEnabled to 1 in your kll configuration.");
d8f61e15aca1 Adding jump to bootloader key
Jacob Alexander <haata@kiibohd.com>
parents: 358
diff changeset
525 return;
d8f61e15aca1 Adding jump to bootloader key
Jacob Alexander <haata@kiibohd.com>
parents: 358
diff changeset
526 }
d8f61e15aca1 Adding jump to bootloader key
Jacob Alexander <haata@kiibohd.com>
parents: 358
diff changeset
527
109
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
528 // Request to output module to be set into firmware reload mode
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
529 Output_firmwareReload();
109
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
530 }
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
531
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
532 void cliFunc_reset( char* args )
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
533 {
110
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
534 print("\033c"); // Resets the terminal
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
535 }
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
536
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
537 void cliFunc_restart( char* args )
98d940b60d12 Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
538 {
109
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
539 // Trigger an overall software reset
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
540 Output_softReset();
109
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
541 }
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
542
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
543 void cliFunc_version( char* args )
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
544 {
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
545 print( NL );
109
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
546 print( " \033[1mRevision:\033[0m " CLI_Revision NL );
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
547 print( " \033[1mBranch:\033[0m " CLI_Branch NL );
294
834d69d22d47 Adding list of modified files to the cli version command.
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
548 print( " \033[1mTree Status:\033[0m " CLI_ModifiedStatus CLI_ModifiedFiles NL );
109
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
549 print( " \033[1mRepo Origin:\033[0m " CLI_RepoOrigin NL );
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
550 print( " \033[1mCommit Date:\033[0m " CLI_CommitDate NL );
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
551 print( " \033[1mCommit Author:\033[0m " CLI_CommitAuthor NL );
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
552 print( " \033[1mBuild Date:\033[0m " CLI_BuildDate NL );
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
553 print( " \033[1mBuild OS:\033[0m " CLI_BuildOS NL );
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
554 print( " \033[1mArchitecture:\033[0m " CLI_Arch NL );
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
555 print( " \033[1mChip:\033[0m " CLI_Chip NL );
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
556 print( " \033[1mCPU:\033[0m " CLI_CPU NL );
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
557 print( " \033[1mDevice:\033[0m " CLI_Device NL );
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 108
diff changeset
558 print( " \033[1mModules:\033[0m " CLI_Modules NL );
358
32dfab699fc0 Add Unique Id to version information
Jacob Alexander <haata@kiibohd.com>
parents: 328
diff changeset
559 #if defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
32dfab699fc0 Add Unique Id to version information
Jacob Alexander <haata@kiibohd.com>
parents: 328
diff changeset
560 print( " \033[1mUnique Id:\033[0m " );
32dfab699fc0 Add Unique Id to version information
Jacob Alexander <haata@kiibohd.com>
parents: 328
diff changeset
561 printHex32_op( SIM_UIDH, 4 );
32dfab699fc0 Add Unique Id to version information
Jacob Alexander <haata@kiibohd.com>
parents: 328
diff changeset
562 printHex32_op( SIM_UIDMH, 4 );
32dfab699fc0 Add Unique Id to version information
Jacob Alexander <haata@kiibohd.com>
parents: 328
diff changeset
563 printHex32_op( SIM_UIDML, 4 );
32dfab699fc0 Add Unique Id to version information
Jacob Alexander <haata@kiibohd.com>
parents: 328
diff changeset
564 printHex32_op( SIM_UIDL, 4 );
32dfab699fc0 Add Unique Id to version information
Jacob Alexander <haata@kiibohd.com>
parents: 328
diff changeset
565 #elif defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_)
32dfab699fc0 Add Unique Id to version information
Jacob Alexander <haata@kiibohd.com>
parents: 328
diff changeset
566 #else
32dfab699fc0 Add Unique Id to version information
Jacob Alexander <haata@kiibohd.com>
parents: 328
diff changeset
567 #error "No unique id defined."
32dfab699fc0 Add Unique Id to version information
Jacob Alexander <haata@kiibohd.com>
parents: 328
diff changeset
568 #endif
106
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
569 }
15961894eaeb Adding basic CLI functionality.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
570