tty.hpp 1.2 KB

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