Add a controller factory to vend controllers per Fabric (#9872)
* Add a controller factory to vend controllers per Fabric
* Remove the UDP port from CHIPDeviceController and CHIPDevice
* fix style
diff --git a/src/controller/CHIPDeviceController.h b/src/controller/CHIPDeviceController.h
index f449e07..81d3adc 100644
--- a/src/controller/CHIPDeviceController.h
+++ b/src/controller/CHIPDeviceController.h
@@ -32,6 +32,7 @@
#include <controller-clusters/zap-generated/CHIPClientCallbacks.h>
#include <controller/AbstractMdnsDiscoveryController.h>
#include <controller/CHIPDevice.h>
+#include <controller/CHIPDeviceControllerSystemState.h>
#include <controller/DeviceControllerInteractionModelDelegate.h>
#include <controller/OperationalCredentialsDelegate.h>
#include <credentials/CHIPOperationalCredentials.h>
@@ -83,15 +84,9 @@
struct ControllerInitParams
{
PersistentStorageDelegate * storageDelegate = nullptr;
- System::Layer * systemLayer = nullptr;
- Inet::InetLayer * inetLayer = nullptr;
-
-#if CONFIG_NETWORK_LAYER_BLE
- Ble::BleLayer * bleLayer = nullptr;
-#endif
- DeviceControllerInteractionModelDelegate * imDelegate = nullptr;
+ DeviceControllerSystemState * systemState = nullptr;
#if CHIP_DEVICE_CONFIG_ENABLE_MDNS
- DeviceAddressUpdateDelegate * mDeviceAddressUpdateDelegate = nullptr;
+ DeviceAddressUpdateDelegate * deviceAddressUpdateDelegate = nullptr;
#endif
OperationalCredentialsDelegate * operationalCredentialsDelegate = nullptr;
@@ -106,9 +101,7 @@
uint16_t controllerVendorId;
- /* The port used for operational communication to listen for and send messages over UDP/TCP.
- * The default value of `0` will pick any available port. */
- uint16_t listenPort = 0;
+ FabricId fabricId = kUndefinedFabricId;
};
enum CommissioningStage : uint8_t
@@ -248,22 +241,12 @@
void PersistDevice(Device * device);
- CHIP_ERROR SetUdpListenPort(uint16_t listenPort);
-
virtual void ReleaseDevice(Device * device);
#if CHIP_DEVICE_CONFIG_ENABLE_MDNS
void RegisterDeviceAddressUpdateDelegate(DeviceAddressUpdateDelegate * delegate) { mDeviceAddressUpdateDelegate = delegate; }
#endif
- // ----- IO -----
- /**
- * @brief
- * Start the event loop task within the CHIP stack
- * @return CHIP_ERROR The return status
- */
- CHIP_ERROR ServiceEvents();
-
/**
* @brief Get the Compressed Fabric ID assigned to the device.
*/
@@ -274,7 +257,14 @@
*/
uint64_t GetFabricId() const { return mFabricId; }
- DeviceControllerInteractionModelDelegate * GetInteractionModelDelegate() { return mInteractionModelDelegate; }
+ DeviceControllerInteractionModelDelegate * GetInteractionModelDelegate()
+ {
+ if (mSystemState != nullptr)
+ {
+ return mSystemState->IMDelegate();
+ }
+ return nullptr;
+ }
protected:
enum class State
@@ -297,26 +287,15 @@
PeerId mLocalId = PeerId();
FabricId mFabricId = kUndefinedFabricId;
- DeviceTransportMgr * mTransportMgr = nullptr;
- SessionManager * mSessionManager = nullptr;
- Messaging::ExchangeManager * mExchangeMgr = nullptr;
- secure_channel::MessageCounterManager * mMessageCounterManager = nullptr;
- PersistentStorageDelegate * mStorageDelegate = nullptr;
- DeviceControllerInteractionModelDelegate * mDefaultIMDelegate = nullptr;
+ PersistentStorageDelegate * mStorageDelegate = nullptr;
#if CHIP_DEVICE_CONFIG_ENABLE_MDNS
DeviceAddressUpdateDelegate * mDeviceAddressUpdateDelegate = nullptr;
// TODO(cecille): Make this configuarable.
static constexpr int kMaxCommissionableNodes = 10;
Mdns::DiscoveredNodeData mCommissionableNodes[kMaxCommissionableNodes];
#endif
- Inet::InetLayer * mInetLayer = nullptr;
-#if CONFIG_NETWORK_LAYER_BLE
- Ble::BleLayer * mBleLayer = nullptr;
-#endif
- System::Layer * mSystemLayer = nullptr;
- DeviceControllerInteractionModelDelegate * mInteractionModelDelegate = nullptr;
+ DeviceControllerSystemState * mSystemState = nullptr;
- uint16_t mListenPort;
uint16_t GetInactiveDeviceIndex();
uint16_t FindDeviceIndex(SessionHandle session);
uint16_t FindDeviceIndex(NodeId id);
@@ -329,7 +308,6 @@
void PersistNextKeyId();
FabricIndex mFabricIndex = Transport::kMinValidFabricIndex;
- Transport::FabricTable mFabrics;
OperationalCredentialsDelegate * mOperationalCredentialsDelegate;