tty.hpp 1005 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #pragma once
  2. #include <kernel/event/evtqueue.hpp>
  3. #include <types/allocator.hpp>
  4. #include <types/buffer.hpp>
  5. #include <types/cplusplus.hpp>
  6. #include <types/stdint.h>
  7. class tty : public types::non_copyable {
  8. public:
  9. static constexpr size_t BUFFER_SIZE = 4096;
  10. static constexpr size_t NAME_SIZE = 32;
  11. public:
  12. tty();
  13. virtual void putchar(char c) = 0;
  14. virtual void recvchar(char c) = 0;
  15. void print(const char* str);
  16. size_t read(char* buf, size_t buf_size, size_t n);
  17. char name[NAME_SIZE];
  18. bool echo = true;
  19. protected:
  20. types::buffer<types::kernel_ident_allocator> buf;
  21. kernel::evtqueue blocklist;
  22. };
  23. class vga_tty : public virtual tty {
  24. public:
  25. vga_tty();
  26. virtual void putchar(char c) override;
  27. virtual void recvchar(char c) override;
  28. };
  29. class serial_tty : public virtual tty {
  30. public:
  31. serial_tty(int id);
  32. virtual void putchar(char c) override;
  33. virtual void recvchar(char c) override;
  34. public:
  35. uint16_t id;
  36. };
  37. inline tty* console;