protocol.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #ifndef PROTOCOL_H
  2. #define PROTOCOL_H
  3. #include <cJSON.h>
  4. #include <string>
  5. #include <functional>
  6. #include <chrono>
  7. struct BinaryProtocol3 {
  8. uint8_t type;
  9. uint8_t reserved;
  10. uint16_t payload_size;
  11. uint8_t payload[];
  12. } __attribute__((packed));
  13. enum AbortReason {
  14. kAbortReasonNone,
  15. kAbortReasonWakeWordDetected
  16. };
  17. enum ListeningMode {
  18. kListeningModeAutoStop,
  19. kListeningModeManualStop,
  20. kListeningModeAlwaysOn // 需要 AEC 支持
  21. };
  22. class Protocol {
  23. public:
  24. virtual ~Protocol() = default;
  25. inline int server_sample_rate() const {
  26. return server_sample_rate_;
  27. }
  28. inline const std::string& session_id() const {
  29. return session_id_;
  30. }
  31. void OnIncomingAudio(std::function<void(std::vector<uint8_t>&& data)> callback);
  32. void OnIncomingJson(std::function<void(const cJSON* root)> callback);
  33. void OnAudioChannelOpened(std::function<void()> callback);
  34. void OnAudioChannelClosed(std::function<void()> callback);
  35. void OnNetworkError(std::function<void(const std::string& message)> callback);
  36. virtual void Start() = 0;
  37. virtual bool OpenAudioChannel() = 0;
  38. virtual void CloseAudioChannel() = 0;
  39. virtual bool IsAudioChannelOpened() const = 0;
  40. virtual void SendAudio(const std::vector<uint8_t>& data) = 0;
  41. virtual void SendWakeWordDetected(const std::string& wake_word);
  42. virtual void SendStartListening(ListeningMode mode);
  43. virtual void SendStopListening();
  44. virtual void SendAbortSpeaking(AbortReason reason);
  45. virtual void SendIotDescriptors(const std::string& descriptors);
  46. virtual void SendIotStates(const std::string& states);
  47. protected:
  48. std::function<void(const cJSON* root)> on_incoming_json_;
  49. std::function<void(std::vector<uint8_t>&& data)> on_incoming_audio_;
  50. std::function<void()> on_audio_channel_opened_;
  51. std::function<void()> on_audio_channel_closed_;
  52. std::function<void(const std::string& message)> on_network_error_;
  53. int server_sample_rate_ = 16000;
  54. bool error_occurred_ = false;
  55. std::string session_id_;
  56. std::chrono::time_point<std::chrono::steady_clock> last_incoming_time_;
  57. virtual void SendText(const std::string& text) = 0;
  58. virtual void SetError(const std::string& message);
  59. virtual bool IsTimeout() const;
  60. };
  61. #endif // PROTOCOL_H