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 }