| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_CONNECTIVITY_WEAVE_ADAPTATION_THREAD_STACK_MANAGER_DELEGATE_IMPL_H_ |
| #define SRC_CONNECTIVITY_WEAVE_ADAPTATION_THREAD_STACK_MANAGER_DELEGATE_IMPL_H_ |
| |
| #include <fuchsia/lowpan/device/cpp/fidl.h> |
| #include <fuchsia/lowpan/thread/cpp/fidl.h> |
| #include <lib/async/cpp/task.h> |
| |
| // clang-format off |
| #pragma GCC diagnostic push |
| #pragma GCC diagnostic ignored "-Wextra-semi" |
| #include <Weave/DeviceLayer/internal/WeaveDeviceLayerInternal.h> |
| #include <Weave/DeviceLayer/internal/DeviceNetworkInfo.h> |
| #include <Weave/DeviceLayer/ThreadStackManager.h> |
| #pragma GCC diagnostic pop |
| // clang-format on |
| |
| namespace nl { |
| namespace Weave { |
| namespace DeviceLayer { |
| |
| class NL_DLL_EXPORT ThreadStackManagerDelegateImpl : public ThreadStackManagerImpl::Delegate { |
| public: |
| ThreadStackManagerDelegateImpl() = default; |
| |
| // ThreadStackManager implementations. |
| |
| WEAVE_ERROR InitThreadStack() override; |
| bool HaveRouteToAddress(const IPAddress& destAddr) override; |
| void OnPlatformEvent(const WeaveDeviceEvent* event) override; |
| bool IsThreadEnabled() override; |
| WEAVE_ERROR SetThreadEnabled(bool val) override; |
| bool IsThreadProvisioned() override; |
| bool IsThreadAttached() override; |
| WEAVE_ERROR GetThreadProvision(Internal::DeviceNetworkInfo& netInfo, |
| bool includeCredentials) override; |
| WEAVE_ERROR SetThreadProvision(const Internal::DeviceNetworkInfo& netInfo) override; |
| void ClearThreadProvision() override; |
| ConnectivityManager::ThreadDeviceType GetThreadDeviceType() override; |
| bool HaveMeshConnectivity() override; |
| WEAVE_ERROR GetAndLogThreadStatsCounters() override; |
| WEAVE_ERROR GetAndLogThreadTopologyMinimal() override; |
| WEAVE_ERROR GetAndLogThreadTopologyFull() override; |
| std::string GetInterfaceName() const override; |
| bool IsThreadSupported() const override; |
| WEAVE_ERROR GetPrimary802154MACAddress(uint8_t* mac_address) override; |
| WEAVE_ERROR SetThreadJoinable(bool enable) override; |
| |
| nl::Weave::Profiles::DataManagement::event_id_t LogNetworkWpanStatsEvent( |
| Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::NetworkWpanStatsEvent* event) |
| override; |
| |
| private: |
| std::string interface_name_; |
| bool is_thread_supported_ = false; |
| |
| zx_status_t GetProtocols(fuchsia::lowpan::device::Protocols protocols); |
| zx_status_t GetDevice(fuchsia::lowpan::device::DeviceSyncPtr& device); |
| zx_status_t GetDeviceState(fuchsia::lowpan::device::DeviceState& device_state); |
| |
| // Thread-joining-on-startup related functionality and state. |
| WEAVE_ERROR StartThreadJoining(); |
| WEAVE_ERROR StartThreadJoiningIteration(); |
| void StopThreadJoining(); |
| WEAVE_ERROR GetJoinParams(fuchsia::lowpan::JoinParams& join_params); |
| virtual WEAVE_ERROR StartJoiningTimeout(uint32_t delay_milliseconds, |
| fit::function<void()> callback); |
| virtual WEAVE_ERROR StartJoiningRetry(uint32_t delay_milliseconds, |
| fit::function<void()> callback); |
| virtual void CancelJoiningTimeout(); |
| virtual void CancelJoiningRetry(); |
| void HandleJoiningTimeout(); |
| void HandleJoiningRetryDelay(); |
| void HandleProvisioningProgress( |
| fuchsia::lowpan::device::ProvisioningMonitor_WatchProgress_Result); |
| |
| async::TaskClosure joining_timeout_; |
| async::TaskClosure joining_retry_delay_; |
| fuchsia::lowpan::device::ProvisioningMonitorPtr provisioning_monitor_; |
| bool joining_in_progress_ = false; |
| bool joining_timeout_expired_ = false; |
| }; |
| |
| } // namespace DeviceLayer |
| } // namespace Weave |
| } // namespace nl |
| |
| #endif // SRC_CONNECTIVITY_WEAVE_ADAPTATION_THREAD_STACK_MANAGER_DELEGATE_IMPL_H_ |