blob: b5d532a8aea722a8c482e823de2a25f49b37b8e6 [file] [log] [blame]
/*
*
* Copyright (c) 2021 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include <AppMainLoop.h>
#include <app/server/Server.h>
#include <controller/CommissionerDiscoveryController.h>
#include <crypto/RawKeySessionKeystore.h>
#include <lib/core/CHIPError.h>
#include <lib/core/DataModelTypes.h>
#include <lib/core/Optional.h>
#include <platform/CHIPDeviceLayer.h>
#include <platform/PlatformManager.h>
#include <transport/TransportMgr.h>
#include "Options.h"
// Applications can optionally provide the endpoint id of a secondary network
// commissioning endpoint, if one is supported.
int ChipLinuxAppInit(int argc, char * const argv[], chip::ArgParser::OptionSet * customOptions = nullptr,
const chip::Optional<chip::EndpointId> secondaryNetworkCommissioningEndpoit = chip::NullOptional);
class DefaultAppMainLoopImplementation : public AppMainLoopImplementation
{
public:
void RunMainLoop() override { chip::DeviceLayer::PlatformMgr().RunEventLoop(); }
void SignalSafeStopMainLoop() override
{
chip::Server::GetInstance().GenerateShutDownEvent();
TEMPORARY_RETURN_IGNORED chip::DeviceLayer::PlatformMgr().ScheduleWork(
[](intptr_t) { TEMPORARY_RETURN_IGNORED chip::DeviceLayer::PlatformMgr().StopEventLoopTask(); });
}
};
/**
* Get default server initialization parameters for Linux example apps.
*
* Returns a reference to a static CommonCaseDeviceServerInitParams instance that has been
* initialized with default resources, including the CodegenDataModelProvider.
*
* This is suitable for most Linux example applications. Apps that need to customize
* initialization can create their own ServerInitParams and pass it to ChipLinuxAppMainLoop().
*/
chip::CommonCaseDeviceServerInitParams & ChipLinuxDefaultServerInitParams();
/**
* Start up the Linux app, optionally with custom server initialization parameters
* and/or main loop implementation.
*
* This overload allows apps to provide their own ServerInitParams for cases where
* custom configuration is needed before server initialization.
*
* @param initParams Server initialization parameters to use
* @param impl Optional main loop implementation
*/
void ChipLinuxAppMainLoop(chip::ServerInitParams & initParams = ChipLinuxDefaultServerInitParams(),
AppMainLoopImplementation * impl = nullptr);
inline void ChipLinuxAppMainLoop(AppMainLoopImplementation * impl)
{
ChipLinuxAppMainLoop(ChipLinuxDefaultServerInitParams(), impl);
}
// For extra init calls, the function will be called right before running Matter main loop.
void ApplicationInit();
// For extra shutdown calls, the function will be called before any of the core Matter objects are shut down.
void ApplicationShutdown();