summaryrefslogtreecommitdiff
path: root/include/console.h
blob: b0d3f5b63ef40ac3f8c813cbde457d833b17b2f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

/* Debug console for Chrome EC */

#ifndef __CROS_EC_CONSOLE_H
#define __CROS_EC_CONSOLE_H

#include "common.h"

/* Console command; used by DECLARE_CONSOLE_COMMAND macro. */
struct console_command {
	/* Command name.  Case-insensitive. */
	const char *name;
	/* Handler for the command.  argv[0] will be the command name. */
	int (*handler)(int argc, char **argv);
};


/* Console channels */
enum console_channel {
	CC_COMMAND = 0,  /* Console command (interactive I/O).  Use this only
			  * inside a console command routine. */
	CC_CHARGER,
	CC_HOSTCMD,
	CC_I8042,
	CC_KEYBOARD,
	CC_KEYSCAN,
	CC_LIGHTBAR,
	CC_LPC,
	CC_PORT80,
	CC_POWERBTN,
	CC_SYSTEM,
	CC_TASK,
	CC_USBCHARGE,
	CC_X86POWER,
	/* Channel count; not itself a channel */
	CC_CHANNEL_COUNT
};

/* Put a string to the console channel. */
int cputs(enum console_channel channel, const char *outstr);

/* Print formatted output to the console channel.  See uart_vprintf() for
 * valid format codes. */
int cprintf(enum console_channel channel, const char *format, ...);

/* Flush the console output for all channels. */
void cflush(void);

/* Convenience macros for printing to the command channel.
 *
 * Modules may define similar macros in their .c files for their own use; it is
 * recommended those module-specific macros be named CPUTS and CPRINTF. */
#define ccputs(outstr) cputs(CC_COMMAND, outstr)
/* gcc allows variable arg lists in macros; see
 * http://gcc.gnu.org/onlinedocs/gcc/Variadic-Macros.html */
#define ccprintf(format, args...) cprintf(CC_COMMAND, format, ## args)


/* Called by UART when a line of input is pending. */
void console_has_input(void);


/* Register a console command handler */
#define DECLARE_CONSOLE_COMMAND(name, routine)			\
	static const char __con_cmd_label_##name[] = #name;	\
	const struct console_command __con_cmd_##name		\
		__attribute__((section(".rodata.cmds")))	\
		= {__con_cmd_label_##name, routine}

#endif  /* __CROS_EC_CONSOLE_H */