1 #include <filesystem/devfs/devfs.h>
2 #include <filesystem/vfs/VFS.h>
3 #include "tty.h"
4
5 static struct devfs_private_inode_info_t * tty_inode_private_data_ptr; // 由devfs创建的inode私有信息指针
6 static int tty_private_data;
7
8 /**
9 * @brief 打开tty文件
10 *
11 * @param inode 所在的inode
12 * @param filp 文件指针
13 * @return long
14 */
tty_open(struct vfs_index_node_t * inode,struct vfs_file_t * filp)15 long tty_open(struct vfs_index_node_t *inode, struct vfs_file_t *filp)
16 {
17 filp->private_data = &tty_private_data;
18 return 0;
19 }
20
21 /**
22 * @brief 关闭tty文件
23 *
24 * @param inode 所在的inode
25 * @param filp 文件指针
26 * @return long
27 */
tty_close(struct vfs_index_node_t * inode,struct vfs_file_t * filp)28 long tty_close(struct vfs_index_node_t *inode, struct vfs_file_t *filp)
29 {
30 filp->private_data = NULL;
31 return 0;
32 }
33
34 /**
35 * @brief tty控制接口
36 *
37 * @param inode 所在的inode
38 * @param filp tty文件指针
39 * @param cmd 命令
40 * @param arg 参数
41 * @return long
42 */
tty_ioctl(struct vfs_index_node_t * inode,struct vfs_file_t * filp,uint64_t cmd,uint64_t arg)43 long tty_ioctl(struct vfs_index_node_t *inode, struct vfs_file_t *filp, uint64_t cmd, uint64_t arg)
44 {
45 switch (cmd)
46 {
47 default:
48 break;
49 }
50 return 0;
51 }
52
53 /**
54 * @brief 读取tty文件的操作接口
55 *
56 * @param filp 文件指针
57 * @param buf 输出缓冲区
58 * @param count 要读取的字节数
59 * @param position 读取的位置
60 * @return long 读取的字节数
61 */
tty_read(struct vfs_file_t * filp,char * buf,int64_t count,long * position)62 long tty_read(struct vfs_file_t *filp, char *buf, int64_t count, long *position)
63 {
64 return 0;
65 }
66
67 /**
68 * @brief tty文件写入接口(无作用,空)
69 *
70 * @param filp
71 * @param buf
72 * @param count
73 * @param position
74 * @return long
75 */
tty_write(struct vfs_file_t * filp,char * buf,int64_t count,long * position)76 long tty_write(struct vfs_file_t *filp, char *buf, int64_t count, long *position)
77 {
78 return 0;
79 }
80
81 struct vfs_file_operations_t tty_fops={
82 .open = tty_open,
83 .close = tty_close,
84 .ioctl = tty_ioctl,
85 .read = tty_read,
86 .write = tty_write,
87 };
88
tty_init()89 void tty_init(){
90 //注册devfs
91 devfs_register_device(DEV_TYPE_CHAR, CHAR_DEV_STYPE_TTY, &tty_fops, &tty_inode_private_data_ptr);
92 kinfo("tty driver registered. uuid=%d", tty_inode_private_data_ptr->uuid);
93 }