#include "inttypes.h" #include "pvec.h" #include "keyboard.h" #include "tty_fs.h" #include "console.h" #include "string.h" #include "memory.h" char tty_buf[TTY_BUF_SIZE]; void tty_input(struct vfs_device_t *device, char c) { if (device != NULL) { struct tty_dev_data *data = (struct tty_dev_data *)device->fs_data; if (data->tty_buf_at == TTY_BUF_SIZE) { return; } data->tty_buf[data->tty_buf_at++] = c; if (data->echo == 1) { data->tty_write(&c, 1); // ECHO ON! } } } int tty_write_data(struct vfs_device_t *device, char *buffer, int len, int offset) { struct tty_dev_data *data = (struct tty_dev_data *)device->fs_data; data->tty_write(buffer, len); return len; } int tty_read_data(struct vfs_device_t *device, char *buffer, int len, int offset) { struct tty_dev_data *data = (struct tty_dev_data *)device->fs_data; if (len + offset > data->tty_buf_at) { len = data->tty_buf_at - offset; } if (len > 0) { memcpy(buffer, &(data->tty_buf)[offset], len); memcpy(&(data->tty_buf)[offset], &(data->tty_buf)[offset + len], data->tty_buf_at - len); data->tty_buf_at -= len; return len; } return 0; } int tty_init(struct vfs_device_t *device) { if (device->device == 0) { // console struct tty_dev_data *data = (struct tty_dev_data *)dbmalloc(sizeof(struct tty_dev_data), "tty init 1"); if (!data) { return 0; } data->tty_buf_at = 0; data->tty_write = putdata; data->echo = 1; device->fs_data = (void *)data; return 1; } return 0; }