|  | /* | 
|  | * | 
|  | *    Copyright (c) 2020-2021 Project CHIP Authors | 
|  | * | 
|  | *    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/BufferedReadCallback.h> | 
|  | #include <app/ReadClient.h> | 
|  | #include <controller/CHIPDeviceController.h> | 
|  | #include <jni.h> | 
|  | #include <lib/core/CHIPError.h> | 
|  | #include <list> | 
|  | #include <utility> | 
|  |  | 
|  | namespace chip { | 
|  | namespace Controller { | 
|  |  | 
|  | // Callback for success and failure cases of GetConnectedDevice(). | 
|  | struct GetConnectedDeviceCallback | 
|  | { | 
|  | GetConnectedDeviceCallback(jobject wrapperCallback, jobject javaCallback); | 
|  | ~GetConnectedDeviceCallback(); | 
|  |  | 
|  | static void OnDeviceConnectedFn(void * context, Messaging::ExchangeManager & exchangeMgr, const SessionHandle & sessionHandle); | 
|  | static void OnDeviceConnectionFailureFn(void * context, const ScopedNodeId & peerId, CHIP_ERROR error); | 
|  |  | 
|  | Callback::Callback<OnDeviceConnected> mOnSuccess; | 
|  | Callback::Callback<OnDeviceConnectionFailure> mOnFailure; | 
|  | jobject mWrapperCallbackRef = nullptr; | 
|  | jobject mJavaCallbackRef    = nullptr; | 
|  | }; | 
|  |  | 
|  | struct ReportCallback : public app::ClusterStateCache::Callback | 
|  | { | 
|  | /** Subscription established callback can be nullptr. */ | 
|  | ReportCallback(jobject wrapperCallback, jobject subscriptionEstablishedCallback, jobject reportCallback, | 
|  | jobject resubscriptionAttemptCallback); | 
|  | ~ReportCallback(); | 
|  |  | 
|  | void OnReportBegin() override; | 
|  |  | 
|  | void OnReportEnd() override; | 
|  |  | 
|  | void OnAttributeData(const app::ConcreteDataAttributePath & aPath, TLV::TLVReader * apData, | 
|  | const app::StatusIB & aStatus) override; | 
|  | void OnEventData(const app::EventHeader & aEventHeader, TLV::TLVReader * apData, const app::StatusIB * apStatus) override; | 
|  |  | 
|  | void OnError(CHIP_ERROR aError) override; | 
|  |  | 
|  | void OnDone(app::ReadClient *) override; | 
|  |  | 
|  | void OnSubscriptionEstablished(SubscriptionId aSubscriptionId) override; | 
|  |  | 
|  | CHIP_ERROR OnResubscriptionNeeded(app::ReadClient * apReadClient, CHIP_ERROR aTerminationCause) override; | 
|  |  | 
|  | /** Report errors back to Java layer. attributePath may be nullptr for general errors. */ | 
|  | void ReportError(jobject attributePath, jobject eventPath, CHIP_ERROR err); | 
|  | void ReportError(jobject attributePath, jobject eventPath, Protocols::InteractionModel::Status status); | 
|  | void ReportError(jobject attributePath, jobject eventPath, const char * message, ChipError::StorageType errorCode); | 
|  |  | 
|  | CHIP_ERROR CreateChipAttributePath(const app::ConcreteDataAttributePath & aPath, jobject & outObj); | 
|  |  | 
|  | CHIP_ERROR CreateChipEventPath(const app::ConcreteEventPath & aPath, jobject & outObj); | 
|  |  | 
|  | void UpdateClusterDataVersion(); | 
|  |  | 
|  | app::ReadClient * mReadClient = nullptr; | 
|  |  | 
|  | app::ClusterStateCache mClusterCacheAdapter; | 
|  | jobject mWrapperCallbackRef                 = nullptr; | 
|  | jobject mSubscriptionEstablishedCallbackRef = nullptr; | 
|  | jobject mResubscriptionAttemptCallbackRef   = nullptr; | 
|  | jobject mReportCallbackRef                  = nullptr; | 
|  | // NodeState Java object that will be returned to the application. | 
|  | jobject mNodeStateObj = nullptr; | 
|  | jclass mNodeStateCls  = nullptr; | 
|  | }; | 
|  |  | 
|  | struct ReportEventCallback : public app::ReadClient::Callback | 
|  | { | 
|  | /** Subscription established callback can be nullptr. */ | 
|  | ReportEventCallback(jobject wrapperCallback, jobject subscriptionEstablishedCallback, jobject reportCallback, | 
|  | jobject resubscriptionAttemptCallback); | 
|  | ~ReportEventCallback(); | 
|  |  | 
|  | void OnReportBegin() override; | 
|  |  | 
|  | void OnReportEnd() override; | 
|  |  | 
|  | void OnEventData(const app::EventHeader & aEventHeader, TLV::TLVReader * apData, const app::StatusIB * apStatus) override; | 
|  |  | 
|  | void OnError(CHIP_ERROR aError) override; | 
|  |  | 
|  | void OnDone(app::ReadClient *) override; | 
|  |  | 
|  | void OnSubscriptionEstablished(SubscriptionId aSubscriptionId) override; | 
|  |  | 
|  | CHIP_ERROR OnResubscriptionNeeded(app::ReadClient * apReadClient, CHIP_ERROR aTerminationCause) override; | 
|  |  | 
|  | /** Report errors back to Java layer. attributePath may be nullptr for general errors. */ | 
|  | void ReportError(jobject eventPath, CHIP_ERROR err); | 
|  | void ReportError(jobject eventPath, Protocols::InteractionModel::Status status); | 
|  | void ReportError(jobject eventPath, const char * message, ChipError::StorageType errorCode); | 
|  |  | 
|  | CHIP_ERROR CreateChipEventPath(const app::ConcreteEventPath & aPath, jobject & outObj); | 
|  |  | 
|  | app::ReadClient * mReadClient = nullptr; | 
|  |  | 
|  | app::BufferedReadCallback mBufferedReadAdapter; | 
|  | jobject mWrapperCallbackRef                 = nullptr; | 
|  | jobject mSubscriptionEstablishedCallbackRef = nullptr; | 
|  | jobject mResubscriptionAttemptCallbackRef   = nullptr; | 
|  | jobject mReportCallbackRef                  = nullptr; | 
|  | // NodeState Java object that will be returned to the application. | 
|  | jobject mNodeStateObj = nullptr; | 
|  | jclass mNodeStateCls  = nullptr; | 
|  | }; | 
|  |  | 
|  | } // namespace Controller | 
|  | } // namespace chip |