| | |
| | | SendText(message); |
| | | } |
| | | |
| | | void Protocol::SendWakeWordDetected(const std::string& wake_word) { |
| | | std::string json = "{\"session_id\":\"" + session_id_ + |
| | | "\",\"type\":\"listen\",\"state\":\"detect\",\"text\":\"" + wake_word + "\"}"; |
| | | SendText(json); |
| | | bool Protocol::SendWakeWordDetected(const std::string& wake_word) { |
| | | cJSON* root = cJSON_CreateObject(); |
| | | cJSON_AddStringToObject(root, "session_id", session_id_.c_str()); |
| | | cJSON_AddStringToObject(root, "type", "listen"); |
| | | cJSON_AddStringToObject(root, "state", "detect"); |
| | | cJSON_AddStringToObject(root, "text", wake_word.c_str()); |
| | | char* json = cJSON_PrintUnformatted(root); |
| | | cJSON_Delete(root); |
| | | if (json == nullptr) { |
| | | return false; |
| | | } |
| | | bool ok = SendText(json); |
| | | cJSON_free(json); |
| | | return ok; |
| | | } |
| | | |
| | | void Protocol::SendStartListening(ListeningMode mode) { |
| | |
| | | SendText(message); |
| | | } |
| | | |
| | | bool Protocol::IsAudioChannelConnected() const { |
| | | return IsAudioChannelOpened(); |
| | | } |
| | | |
| | | void Protocol::MarkIncomingActivity() { |
| | | last_incoming_time_ = std::chrono::steady_clock::now(); |
| | | } |
| | | |
| | | bool Protocol::IsTimeout() const { |
| | | const int kTimeoutSeconds = 120; |
| | | auto now = std::chrono::steady_clock::now(); |
| | | auto duration = std::chrono::duration_cast<std::chrono::seconds>(now - last_incoming_time_); |
| | | bool timeout = duration.count() > kTimeoutSeconds; |
| | | if (timeout) { |
| | | ESP_LOGE(TAG, "Channel timeout %ld seconds", (long)duration.count()); |
| | | ESP_LOGW(TAG, "Channel idle %ld seconds (socket may still be up)", (long)duration.count()); |
| | | } |
| | | return timeout; |
| | | } |