mirror of
https://github.com/cesanta/mongoose.git
synced 2024-12-15 01:29:00 +08:00
90 lines
2.5 KiB
C
90 lines
2.5 KiB
C
|
#include "main.h"
|
||
|
|
||
|
static void cli_wifi(const char *ssid, const char *pass) {
|
||
|
if (wifi_init(ssid, pass)) {
|
||
|
mg_file_printf(&mg_fs_posix, WIFI_FILE, "{%Q:%Q,%Q:%Q}\n", "ssid", ssid,
|
||
|
"pass", pass);
|
||
|
MG_INFO(("Reboot now"));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void cli_ls(void) {
|
||
|
DIR *dirp = opendir(FS_ROOT);
|
||
|
struct dirent *dp;
|
||
|
if (dirp == NULL) {
|
||
|
MG_ERROR(("Cannot open FS: %d", errno));
|
||
|
} else {
|
||
|
while ((dp = readdir(dirp)) != NULL) {
|
||
|
/* Do not show current and parent dirs */
|
||
|
if (strcmp((const char *) dp->d_name, ".") == 0 ||
|
||
|
strcmp((const char *) dp->d_name, "..") == 0) {
|
||
|
continue;
|
||
|
} else {
|
||
|
printf("%s\n", dp->d_name);
|
||
|
}
|
||
|
}
|
||
|
closedir(dirp);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void cli_cat(const char *fname) {
|
||
|
char path[MG_PATH_MAX];
|
||
|
snprintf(path, sizeof(path), "%s/%s", FS_ROOT, fname);
|
||
|
FILE *fp = fopen(path, "r");
|
||
|
if (fp != NULL) {
|
||
|
int ch;
|
||
|
while ((ch = fgetc(fp)) != EOF) putchar(ch);
|
||
|
fclose(fp);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void cli_rm(const char *fname) {
|
||
|
char path[100];
|
||
|
snprintf(path, sizeof(path), "%s/%s", FS_ROOT, fname);
|
||
|
remove(path);
|
||
|
}
|
||
|
|
||
|
void cli(uint8_t input_byte) {
|
||
|
static struct mg_iobuf in;
|
||
|
|
||
|
if (input_byte == 0 || input_byte == 0xff) return;
|
||
|
if (in.len >= 128) in.len = 0;
|
||
|
mg_iobuf_add(&in, in.len, &input_byte, sizeof(input_byte), 32);
|
||
|
|
||
|
if (input_byte == '\n') {
|
||
|
const char *arrow = "---";
|
||
|
char buf0[10], buf1[50], buf2[250];
|
||
|
|
||
|
in.buf[in.len] = '\0';
|
||
|
buf0[0] = buf1[0] = buf2[0] = '\0';
|
||
|
sscanf((char *) in.buf, "%9s %49s %249[^\r\n]", buf0, buf1, buf2);
|
||
|
|
||
|
printf("%s CLI command: '%s'\n", arrow, buf0);
|
||
|
if (strcmp(buf0, "reboot") == 0) {
|
||
|
esp_restart();
|
||
|
} else if (strcmp(buf0, "ls") == 0) {
|
||
|
cli_ls();
|
||
|
} else if (strcmp(buf0, "cat") == 0) {
|
||
|
cli_cat(buf1);
|
||
|
} else if (strcmp(buf0, "rm") == 0) {
|
||
|
cli_rm(buf1);
|
||
|
} else if (strcmp(buf0, "reboot") == 0) {
|
||
|
esp_restart();
|
||
|
} else if (strcmp(buf0, "ll") == 0) {
|
||
|
mg_log_set(buf1);
|
||
|
} else if (strcmp(buf0, "wifi") == 0) {
|
||
|
cli_wifi(buf1, buf2);
|
||
|
} else {
|
||
|
printf("%s %s\n", arrow, "Unknown command. Usage:");
|
||
|
printf("%s %s\n", arrow, " set NAME VALUE");
|
||
|
printf("%s %s\n", arrow, " rm FILENAME");
|
||
|
printf("%s %s\n", arrow, " cat FILENAME");
|
||
|
printf("%s %s\n", arrow, " ls");
|
||
|
printf("%s %s\n", arrow, " reboot");
|
||
|
printf("%s %s\n", arrow, " wifi WIFI_NET WIFI_PASS");
|
||
|
}
|
||
|
printf("%s %s\n", arrow, "CLI output end");
|
||
|
in.len = 0;
|
||
|
}
|
||
|
}
|