Merge branch 'cmd' into dev
Conflicts: include/ucore/atomic.h include/ucore/dstr.h
This commit is contained in:
@@ -0,0 +1,48 @@
|
|||||||
|
#ifndef UC_CMD_H_
|
||||||
|
#define UC_CMD_H_
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
enum UCCmdResult {
|
||||||
|
UC_CMDRES_OK,
|
||||||
|
UC_CMDRES_WARN,
|
||||||
|
UC_CMDRES_ERR
|
||||||
|
};
|
||||||
|
|
||||||
|
struct UCCmdDef;
|
||||||
|
struct UCVTerm;
|
||||||
|
typedef enum UCCmdResult (*uc_cmd_handler)(struct UCCmd *cmd, struct UCVTerm *term, int arg, char *argv[]);
|
||||||
|
|
||||||
|
struct UCCmdDef {
|
||||||
|
uint32_t cmd_id;
|
||||||
|
uint32_t cmd_flags;
|
||||||
|
const char *cmd_syntax;
|
||||||
|
const char *cmd_desc;
|
||||||
|
uc_cmd_handler cmd_cb;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#define UC_DEF_CMD_DEF(id, flags, syntax, desc)\
|
||||||
|
static const struct UCCmdDef uc_cmd_def ## cmd_id {\
|
||||||
|
.cmd_id = cmd_id,\
|
||||||
|
.cmd_flags = flags,\
|
||||||
|
.cmd_syntax = syntax,\
|
||||||
|
.cmd_desc = desc,\
|
||||||
|
};
|
||||||
|
|
||||||
|
#define UC_DEF_CMD_FUNC(id)\
|
||||||
|
static enum UCCmdResult uc_cmd_func_ ## id (struct UCCmd *cmd, struct UCVTerm *term, int nargs, char *args[])
|
||||||
|
|
||||||
|
#define UC_DEF_CMD(id, flags, syntax, desc)\
|
||||||
|
UC_DEF_CMD_DEF(id, flags, syntax, desc)\
|
||||||
|
UC_DEF_CMD_FUNC(id)
|
||||||
|
|
||||||
|
UC_DEF_CMD(111, 0 ,
|
||||||
|
"show peers",
|
||||||
|
"Show all connected peers")
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
/
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
enum UCCmdRc {
|
||||||
|
/**Executed ok */
|
||||||
|
UC_CMD_OK,
|
||||||
|
/**Executed with warning */
|
||||||
|
UC_CMD_WARNING,
|
||||||
|
/*Not executed, incomplete command */
|
||||||
|
UC_CMD_INCOMPLETE,
|
||||||
|
/*Not executed, generic error */
|
||||||
|
UC_CMD_ERROR,
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef enum UCCmdRc (*uc_cmd_handler)(int narg, char *args[]);
|
||||||
|
typedef void (*uc_cmd_write_cfg)(void);
|
||||||
|
|
||||||
|
#define UC_CMD_FL_HIDDEN (1 << 0)
|
||||||
|
|
||||||
|
struct UCCmdNode;
|
||||||
|
struct UCCmdDef;
|
||||||
|
|
||||||
|
struct UCCmdSettings {
|
||||||
|
const char *name;
|
||||||
|
const char *version;
|
||||||
|
const char *boot_cfg_file;
|
||||||
|
|
||||||
|
struct UCCmdNode *initial_node;
|
||||||
|
struct UCCmdNode *node_head;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct UCCmdNode {
|
||||||
|
int id;
|
||||||
|
uc_cmd_write_cfg write_func;
|
||||||
|
struct UCCmdDef *cmd_head; //linked list of UCCmdDef
|
||||||
|
struct UCCmdNode *next;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct UCCmdDef {
|
||||||
|
const char *cmd;
|
||||||
|
const char **help;
|
||||||
|
size_t cmd_len;
|
||||||
|
uc_cmd_handler cb;
|
||||||
|
uint32_t flags;
|
||||||
|
|
||||||
|
struct UCCmdDef *next;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void uc_cmd_init(const char *app_name, const char *version);
|
||||||
|
int uc_cmd_read_config(const char *filename);
|
||||||
|
void uc_cmd_set_configfile(const char *filename);
|
||||||
|
void uc_cmd_add_cmd(struct UCCmdDef *cmd, int parent_node_id);
|
||||||
|
void uc_cmd_set_default_node(int node_id);
|
||||||
|
|
||||||
Reference in New Issue
Block a user