blob: dc511fdacadeaa95efc0b8b8aab668fa5d471863 [file] [log] [blame]
/*
*
* Copyright (c) 2023 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 <app-common/zap-generated/cluster-objects.h>
namespace chip {
namespace app {
namespace Clusters {
namespace DiagnosticLogs {
typedef uint16_t LogSessionHandle;
// The value UINT16_MAX will be used as an invalid log session handle and must not be used as a valid value for LogSessionHandle
constexpr LogSessionHandle kInvalidLogSessionHandle = UINT16_MAX;
/** @brief
* Defines methods for implementing application-specific logic for getting the log data from the diagnostic logs provider
* DiagnosticLogsProviderDelegate.
*/
class DiagnosticLogsProviderDelegate
{
public:
DiagnosticLogsProviderDelegate() = default;
virtual ~DiagnosticLogsProviderDelegate() = default;
/**
* Called to start log collection for the log type passed in.
*
* @param[in] intent The type of log for which the start of log collection is requested.
* @param[out] outHandle The unique log session handle that identifies the log collection session that has been started.
* @param[out] outTimeStamp An optional value with the timestamp of the oldest log entry
* @param[out] outTimeSinceBoot An optional value with the time since boot of the oldest log entry
* Returns kInvalidLogSessionHandle if there are no logs of the intent.
*/
virtual CHIP_ERROR StartLogCollection(IntentEnum intent, LogSessionHandle & outHandle, Optional<uint64_t> & outTimeStamp,
Optional<uint64_t> & outTimeSinceBoot) = 0;
/**
* Called to end log collection for the log session identified by sessionHandle.
* This must be called if StartLogCollection happens successfully and a valid sessionHandle has been
* returned from StartLogCollection.
*
* @param[in] sessionHandle The unique handle for this log session returned from a call to StartLogCollection.
*
*/
virtual CHIP_ERROR EndLogCollection(LogSessionHandle sessionHandle) = 0;
/**
* Called to get the next chunk for the log session identified by sessionHandle.
* The outBuffer is resized to the actual size of data that was successfully read from the file.
* Should return CHIP_NO_ERROR if we were able to read successfully from the file into the buffer, otherwise
* an appropriate error code is returned.
*
* @param[in] sessionHandle The unique handle for this log session returned from a call to StartLogCollection.
* @param[out] outBuffer The buffer thats passed in by the caller to write to.
* @param[out] outIsEndOfLog Set to true if there is no more log data otherwise set to false.
*/
virtual CHIP_ERROR CollectLog(LogSessionHandle sessionHandle, MutableByteSpan & outBuffer, bool & outIsEndOfLog) = 0;
/**
* Called to get the file size for the log type passed in.
*
* @param[in] intent The type of log for which the file size is requested.
*
* Returns the size of the logs for the target intent. Retuns 0 if there are no logs for the given intent, otherwise returns the
* size in bytes.
*/
virtual size_t GetSizeForIntent(IntentEnum intent) = 0;
/**
* Called to get the newest diagnostic log entries for the target intent.
*
* @param[in] intent The intent for which the log size is requested.
* @param[out] outBuffer The buffer thats passed in by the caller to write to.
* @param[out] outTimeStamp An optional value with the timestamp of the oldest log entry
* @param[out] outTimeSinceBoot An optional value with the time since boot of the oldest log entry
*
*/
virtual CHIP_ERROR GetLogForIntent(IntentEnum intent, MutableByteSpan & outBuffer, Optional<uint64_t> & outTimeStamp,
Optional<uint64_t> & outTimeSinceBoot) = 0;
};
} // namespace DiagnosticLogs
} // namespace Clusters
} // namespace app
} // namespace chip