Compare commits

...

2 Commits

Author SHA1 Message Date
Merlijn Wajer fe3b178d3c HACK: add console_init_fd 4 years ago
Merlijn Wajer ff82126348 HACK: main: open admin console on pty via arg 1 4 years ago
  1. 2
      include/console.h
  2. 28
      source/main.c
  3. 28
      source/platform/usart.c

@ -9,10 +9,12 @@
#endif #endif
struct console { struct console {
FILE *read_fp;
FILE *fp; FILE *fp;
}; };
struct console *console_init(unsigned dev_id); struct console *console_init(unsigned dev_id);
struct console *console_init_fd(unsigned dev_id, FILE* rfd, FILE* wfd);
int console_peek(char *c, struct console *console, int block); int console_peek(char *c, struct console *console, int block);
int console_getc(char *c, struct console *console); int console_getc(char *c, struct console *console);
int console_getline(struct console *console, char *buf, size_t n); int console_getline(struct console *console, char *buf, size_t n);

@ -80,7 +80,8 @@ struct cmd admin_cmds[] = {
{ NULL, NULL }, { NULL, NULL },
}; };
int main(void) //int main(void)
int main(int argc, char **argv)
{ {
size_t i; size_t i;
@ -92,8 +93,18 @@ int main(void)
buzzer_init(buzzers + i); buzzer_init(buzzers + i);
} }
user_con = console_init(1); FILE *admin_out = fopen(argv[1], "w");
admin_con = console_init(0); if (admin_out == NULL) {
perror("admin_out cannot be opened");
return 1;
}
FILE *admin_in = fopen(argv[1], "r");
if (admin_in == NULL) {
perror("admin_in cannot be opened");
return 1;
}
//user_con = console_init_fd(1, user_in, user_out);
admin_con = console_init_fd(0, admin_in, admin_out);
if ((flash = flash_probe())) { if ((flash = flash_probe())) {
flash = ftl_mount(flash); flash = ftl_mount(flash);
@ -102,16 +113,19 @@ int main(void)
fprintf(admin_con->fp, "error: unable to probe flash chip.\n"); fprintf(admin_con->fp, "error: unable to probe flash chip.\n");
} }
fprintf(user_con->fp, "TBM-dev (built on " BUILD_VERSION ")\n"); fprintf(stderr, "fds opened\n");
//fprintf(user_con->fp, "TBM-dev (built on " BUILD_VERSION ")\n");
fprintf(admin_con->fp, "TBM-dev (built on " BUILD_VERSION ")\n"); fprintf(admin_con->fp, "TBM-dev (built on " BUILD_VERSION ")\n");
//fflush(user_con->fp);
fflush(admin_con->fp);
shell_init(&user_shell, user_cmds, user_con, "tbm $", //shell_init(&user_shell, user_cmds, user_con, "tbm $",
SHELL_SHOW_EXIT_CODE); // SHELL_SHOW_EXIT_CODE);
shell_init(&admin_shell, admin_cmds, admin_con, "tbm #", shell_init(&admin_shell, admin_cmds, admin_con, "tbm #",
SHELL_SHOW_EXIT_CODE); SHELL_SHOW_EXIT_CODE);
while (1) { while (1) {
shell_parse(&user_shell); //shell_parse(&user_shell);
shell_parse(&admin_shell); shell_parse(&admin_shell);
} }

@ -94,6 +94,14 @@ int console_peek(char *c, struct console *console_, int block)
int console_getc(char *c, struct console *console_) int console_getc(char *c, struct console *console_)
{ {
*c = fgetc(console_->read_fp);
if (*c == EOF) {
return -1;
}
fprintf(stderr, "fgetc on %d gives %x\n", fileno(console_->read_fp), *c);
return 0;
#if 0
struct usart_console *console = container_of(console_, struct usart_console *console = container_of(console_,
struct usart_console, console); struct usart_console, console);
@ -106,6 +114,7 @@ int console_getc(char *c, struct console *console_)
} }
return 0; return 0;
#endif
} }
int console_getline(struct console *console_, char *buf, size_t n) int console_getline(struct console *console_, char *buf, size_t n)
@ -159,6 +168,8 @@ int console_getline(struct console *console_, char *buf, size_t n)
ssize_t console_read(struct console *console, char *buf, size_t n) ssize_t console_read(struct console *console, char *buf, size_t n)
{ {
return fread(buf, n, 1, console->read_fp);
#if 0
char *p = buf; char *p = buf;
char c; char c;
@ -178,6 +189,7 @@ ssize_t console_read(struct console *console, char *buf, size_t n)
} }
return p - buf; return p - buf;
#endif
} }
static ssize_t usart_write(void *cookie, const char *buf, size_t n) static ssize_t usart_write(void *cookie, const char *buf, size_t n)
@ -236,14 +248,28 @@ static int usart_init(struct usart_console *console)
return 0; return 0;
} }
struct console *console_init_fd(unsigned dev_id, FILE* rfd, FILE* wfd) {
struct usart_console *console;
console = usart + dev_id;
console->console.read_fp = rfd;
console->console.fp = wfd;
setvbuf(console->console.fp, NULL, _IONBF, 0);
return &console->console;
}
struct console *console_init(unsigned dev_id) struct console *console_init(unsigned dev_id)
{ {
#if 0
cookie_io_functions_t fops = { cookie_io_functions_t fops = {
.read = NULL, .read = NULL,
.write = usart_write, .write = usart_write,
.seek = NULL, .seek = NULL,
.close = NULL, .close = NULL,
}; };
#endif
struct usart_console *console; struct usart_console *console;
console = usart + dev_id; console = usart + dev_id;
@ -261,8 +287,10 @@ struct console *console_init(unsigned dev_id)
usart_init(console); usart_init(console);
#if 0
console->console.fp = fopencookie(console, "w", fops); console->console.fp = fopencookie(console, "w", fops);
setvbuf(console->console.fp, NULL, _IONBF, 0); setvbuf(console->console.fp, NULL, _IONBF, 0);
#endif
return &console->console; return &console->console;
} }

Loading…
Cancel
Save