65 lines
1.4 KiB
C
65 lines
1.4 KiB
C
#include "keyboard.h"
|
|
#include "tty_fs.h"
|
|
#include "console.h"
|
|
#include "string.h"
|
|
#include "memory.h"
|
|
|
|
char tty_buf[TTY_BUF_SIZE];
|
|
|
|
|
|
struct tty_dev_data {
|
|
int tty_buf_at;
|
|
char tty_buf[TTY_BUF_SIZE];
|
|
void (*tty_write)(char *data, int len);
|
|
};
|
|
|
|
void tty_input(struct vfs_device_t *device, char c) {
|
|
if (device != (void *)0) {
|
|
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;
|
|
}
|
|
}
|
|
|
|
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 *)malloc(sizeof(struct tty_dev_data));
|
|
|
|
if (!data) {
|
|
return 0;
|
|
}
|
|
|
|
data->tty_buf_at = 0;
|
|
data->tty_write = putdata;
|
|
device->fs_data = (void *)data;
|
|
|
|
return 1;
|
|
}
|
|
} |