3 * Copyright (c) 2020 Project CHIP Authors
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
20 #include <platform/ConnectivityManager.h>
21 #include <platform/internal/GenericConnectivityManagerImpl.h>
22 #if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
23 #include <platform/internal/GenericConnectivityManagerImpl_BLE.h>
25 #include <platform/internal/GenericConnectivityManagerImpl_NoBLE.h>
27 #if CHIP_DEVICE_CONFIG_ENABLE_THREAD
28 #include <platform/internal/GenericConnectivityManagerImpl_Thread.h>
30 #include <platform/internal/GenericConnectivityManagerImpl_NoThread.h>
32 #include <platform/internal/GenericConnectivityManagerImpl_NoWiFi.h>
34 #include <support/logging/CHIPLogging.h>
43 namespace DeviceLayer {
46 * Concrete implementation of the ConnectivityManager singleton object for Zephyr platforms.
48 class ConnectivityManagerImpl final : public ConnectivityManager,
49 public Internal::GenericConnectivityManagerImpl<ConnectivityManagerImpl>,
50 #if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
51 public Internal::GenericConnectivityManagerImpl_BLE<ConnectivityManagerImpl>,
53 public Internal::GenericConnectivityManagerImpl_NoBLE<ConnectivityManagerImpl>,
55 #if CHIP_DEVICE_CONFIG_ENABLE_THREAD
56 public Internal::GenericConnectivityManagerImpl_Thread<ConnectivityManagerImpl>,
58 public Internal::GenericConnectivityManagerImpl_NoThread<ConnectivityManagerImpl>,
60 public Internal::GenericConnectivityManagerImpl_NoWiFi<ConnectivityManagerImpl>
62 // Allow the ConnectivityManager interface class to delegate method calls to
63 // the implementation methods provided by this class.
64 friend class ConnectivityManager;
67 // ===== Members that implement the ConnectivityManager abstract interface.
69 bool _HaveIPv4InternetConnectivity(void);
70 bool _HaveIPv6InternetConnectivity(void);
71 bool _HaveServiceConnectivity(void);
72 CHIP_ERROR _Init(void);
73 void _OnPlatformEvent(const ChipDeviceEvent * event);
75 // ===== Members for internal use by the following friends.
77 friend ConnectivityManager & ConnectivityMgr(void);
78 friend ConnectivityManagerImpl & ConnectivityMgrImpl(void);
80 static ConnectivityManagerImpl sInstance;
83 inline bool ConnectivityManagerImpl::_HaveIPv4InternetConnectivity(void)
88 inline bool ConnectivityManagerImpl::_HaveIPv6InternetConnectivity(void)
93 inline bool ConnectivityManagerImpl::_HaveServiceConnectivity(void)
95 return _HaveServiceConnectivityViaThread();
99 * Returns the public interface of the ConnectivityManager singleton object.
101 * chip applications should use this to access features of the ConnectivityManager object
102 * that are common to all platforms.
104 inline ConnectivityManager & ConnectivityMgr(void)
106 return ConnectivityManagerImpl::sInstance;
110 * Returns the platform-specific implementation of the ConnectivityManager singleton object.
112 * chip applications can use this to gain access to features of the ConnectivityManager
113 * that are specific to the ESP32 platform.
115 inline ConnectivityManagerImpl & ConnectivityMgrImpl(void)
117 return ConnectivityManagerImpl::sInstance;
120 } // namespace DeviceLayer