RT_Vterm.h 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. #ifndef RT_Vterm_H
  2. #define RT_Vterm_H
  3. #include "RT_tunnel.h"
  4. #include <stdarg.h>
  5. #include <stdlib.h>
  6. /**< tunnel handle for upstream data transmission */
  7. extern RT_tunnel_t up_tunnel;
  8. /**< tunnel handle for downstream data transmission */
  9. extern RT_tunnel_t down_tunnel;
  10. /**
  11. * @brief Write data to upstream buffer
  12. * @param[in] pBuffer Pointer to data buffer
  13. * @param[in] NumBytes Number of bytes to write
  14. * @retval uint32_t Actual bytes written
  15. */
  16. uint32_t RT_Vterm_Write(const void *pBuffer, uint32_t NumBytes);
  17. /**
  18. * @brief Write data to downstream buffer
  19. * @param[in] pBuffer Pointer to data buffer
  20. * @param[in] NumBytes Number of bytes to write
  21. * @retval uint32_t Actual bytes written
  22. */
  23. uint32_t RT_Vterm_WriteDownBuffer(const void *pBuffer, uint32_t NumBytes);
  24. /**
  25. * @brief Read data from upstream buffer
  26. * @param[out] pData Buffer to store read data
  27. * @param[in] BufferSize Maximum bytes to read
  28. * @retval uint32_t Actual bytes read
  29. */
  30. uint32_t RT_Vterm_ReadUpBuffer(void *pData, uint32_t BufferSize);
  31. /**
  32. * @brief Read data from downstream buffer
  33. * @param[out] pData Buffer to store read data
  34. * @param[in] BufferSize Maximum bytes to read
  35. * @retval uint32_t Actual bytes read
  36. */
  37. uint32_t RT_Vterm_Read(void *pData, uint32_t BufferSize);
  38. /**
  39. * @brief Write a single character to upstream buffer
  40. * @param[in] c Character to write
  41. * @retval uint32_t 1 if successful, 0 otherwise
  42. */
  43. uint32_t RT_Vterm_PutChar(char c);
  44. /**
  45. * @brief Write a single character to upstream buffer (direct operation)
  46. * @param[in] c Character to write
  47. * @retval uint32_t 1 if successful, 0 otherwise
  48. */
  49. uint32_t RT_Vterm_PutCharSkip(char c);
  50. /**
  51. * @brief Check available data in downstream buffer
  52. * @retval uint32_t Number of used bytes in downstream buffer
  53. */
  54. uint32_t RT_Vterm_HasData(void);
  55. /**
  56. * @brief Check available data in upstream buffer
  57. * @retval uint32_t Number of used bytes in upstream buffer
  58. */
  59. uint32_t RT_Vterm_HasDataUp(void);
  60. /**
  61. * @brief Check if there's available key data in downstream buffer
  62. * @retval int 1 if data exists, 0 otherwise
  63. */
  64. int RT_Vterm_HasKey(void);
  65. /**
  66. * @brief Block until a key is available in downstream buffer, then return it
  67. * @retval int The received character (as unsigned char)
  68. */
  69. int RT_Vterm_WaitKey(void);
  70. /**
  71. * @brief Read a key from downstream buffer (non-blocking)
  72. * @retval int The received character (as unsigned char) if available, -1 otherwise
  73. */
  74. int RT_Vterm_GetKey(void);
  75. /**
  76. * @brief Get available write space in upstream buffer
  77. * @retval uint32_t Number of free bytes in upstream buffer
  78. */
  79. uint32_t RT_Vterm_GetAvailWriteSpace(void);
  80. /**
  81. * @brief Formatted output to virtual terminal (upstream)
  82. * @param[in] sFormat Format string
  83. * @param[in] ... Variable arguments
  84. * @retval int Number of characters written, negative on error
  85. */
  86. int RT_Vterm_printf(const char *sFormat, ...);
  87. /**
  88. * @brief Formatted output with va_list to virtual terminal (upstream)
  89. * @param[in] sFormat Format string
  90. * @param[in] pParamList Pointer to va_list
  91. * @retval int Number of characters written, negative on error
  92. */
  93. int RT_Vterm_vprintf(const char *sFormat, va_list *pParamList);
  94. /**
  95. * @brief Callback function type for virtual terminal commands
  96. * @param[in] input Command input string
  97. */
  98. typedef void (*vterm_cmd_callback_t)(const char *input);
  99. /**
  100. * @struct vterm_cmd_entry_t
  101. * @brief Structure for virtual terminal command registration
  102. */
  103. typedef struct
  104. {
  105. char cmd[32]; /**< Command string (max 31 characters) */
  106. vterm_cmd_callback_t callback; /**< Corresponding callback function */
  107. } vterm_cmd_entry_t;
  108. /**
  109. * @brief Switch to virtual terminal mode
  110. */
  111. void vterm_console(void);
  112. /**
  113. * @brief Restore original terminal mode
  114. */
  115. void restore_original(void);
  116. /**
  117. * @brief Initialize virtual terminal
  118. * @retval int 0 on success, negative error code otherwise
  119. */
  120. int RT_Vterm_Init(void);
  121. /**< Default mode: Do not block, skip output when buffer is full */
  122. #define RT_Vterm_MODE_NO_BLOCK_SKIP (0)
  123. /**< Mode: Do not block, write partial data when buffer space is insufficient */
  124. #define RT_Vterm_MODE_NO_BLOCK_TRIM (1)
  125. /**< Mode: Block execution if buffer is full until space is available */
  126. #define RT_Vterm_MODE_BLOCK_IF_FIFO_FULL (2)
  127. /**< Mode: Overwrite old data when buffer is full */
  128. #define RT_Vterm_MODE_OVERWRITE (3)
  129. #endif
  130. /*************************** End of file ****************************/