/** * \page cmd_interior Command Engine, Interior Protocol \section cmd_def_ascii ASCII Command definition and usage

Use the #COMMAND macro to easily create a new terminal command. The first two parameters define the name and usage of the command. The last two define the name of parameters passed to the command function.

Providing the parameter names in the macro has been introduced to make the available variables more transparent than in previous versions.

When a command as invoked, args points the null-terminated argument string passed with the command. replyBuffer points to a buffer of #TERM_BUFSIZE size and is empty. If nothing is written to this buffer, a positive response "OK" is generated.

Example:

@code
COMMAND(test, CMDFLAG_NONE, args, replyBuffer) {
	String_write(replyBuffer, "test");
}
@endcode

will generate a function term_test_cmd as follows.

@code
void term_test_cmd(char (*const args ), char (*const replyBuffer))) {
	String_write(replyBuffer, "test");
}
@endcode
\subsection cmd_ascdocs Documenting

See the documentation page on how to document your commands.

\subsection cmd_ascargs Handling argument strings

Argument strings are ASCII strings that can be either command specific, but are usually a space separated list of strings To handle the latter you should use the provided functions (:Cmd_SplitArgs and :Cmd_GetNextArg) to navigate through the argument list.

\section cmd_def_linker Command Declaration internals

Besides creating the function header each command macro creates a forward declaration which is then needed in the following definition of a command_t in the .commands segment. Because all those command_t entries are put into a special segment, commands can be declared anywhere in the code. This way the command lookup-table is defined.

*/