blob: 7f81dfa47c4200f46f7731a5b2c6ddc775e24144 [file]
/*
*
* Copyright (c) 2022 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.
*/
/**
* @file casting-CHIPEventTLVValueDecoder.cpp
*
* Slim event TLV decoder for the TV Casting App.
* Contains DecodeEventValue() cases for ONLY the casting clusters.
*
* === Included Clusters (18) ===
* AccountLogin, ApplicationBasic, ApplicationLauncher, AudioOutput,
* Binding, Channel, ContentAppObserver, ContentControl,
* ContentLauncher, Descriptor, KeypadInput, LevelControl,
* LowPower, MediaInput, MediaPlayback, OnOff,
* TargetNavigator, WakeOnLAN
*
* To add a cluster:
* 1. Copy its case block from zap-generated/CHIPEventTLVValueDecoder.cpp
* 2. Add it to the switch statement below (keep alphabetical order)
* 3. Update this cluster list
* 4. Ensure the cluster's .ipp files are included in casting-cluster-objects.cpp
*/
#include <controller/java/CHIPAttributeTLVValueDecoder.h>
#include <app-common/zap-generated/cluster-objects.h>
#include <app-common/zap-generated/ids/Clusters.h>
#include <app-common/zap-generated/ids/Events.h>
#include <app/data-model/DecodableList.h>
#include <app/data-model/Decode.h>
#include <jni.h>
#include <lib/support/JniReferences.h>
#include <lib/support/JniTypeWrappers.h>
#include <lib/support/TypeTraits.h>
namespace chip {
jobject DecodeEventValue(const app::ConcreteEventPath & aPath, TLV::TLVReader & aReader, CHIP_ERROR * aError)
{
JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread();
CHIP_ERROR err = CHIP_NO_ERROR;
switch (aPath.mClusterId)
{
// --- AccountLogin (0x050E) ---
case app::Clusters::AccountLogin::Id: {
using namespace app::Clusters::AccountLogin;
switch (aPath.mEventId)
{
case Events::LoggedOut::Id: {
Events::LoggedOut::DecodableType cppValue;
*aError = app::DataModel::Decode(aReader, cppValue);
if (*aError != CHIP_NO_ERROR)
{
return nullptr;
}
jobject value_node;
if (!cppValue.node.HasValue())
{
TEMPORARY_RETURN_IGNORED chip::JniReferences::GetInstance().CreateOptional(nullptr, value_node);
}
else
{
jobject value_nodeInsideOptional;
std::string value_nodeInsideOptionalClassName = "java/lang/Long";
std::string value_nodeInsideOptionalCtorSignature = "(J)V";
jlong jnivalue_nodeInsideOptional = static_cast<jlong>(cppValue.node.Value());
TEMPORARY_RETURN_IGNORED chip::JniReferences::GetInstance().CreateBoxedObject<jlong>(
value_nodeInsideOptionalClassName.c_str(), value_nodeInsideOptionalCtorSignature.c_str(),
jnivalue_nodeInsideOptional, value_nodeInsideOptional);
TEMPORARY_RETURN_IGNORED chip::JniReferences::GetInstance().CreateOptional(value_nodeInsideOptional, value_node);
}
jobject value_fabricIndex;
std::string value_fabricIndexClassName = "java/lang/Integer";
std::string value_fabricIndexCtorSignature = "(I)V";
jint jnivalue_fabricIndex = static_cast<jint>(cppValue.fabricIndex);
TEMPORARY_RETURN_IGNORED chip::JniReferences::GetInstance().CreateBoxedObject<jint>(
value_fabricIndexClassName.c_str(), value_fabricIndexCtorSignature.c_str(), jnivalue_fabricIndex,
value_fabricIndex);
jclass loggedOutStructClass;
err = chip::JniReferences::GetInstance().GetLocalClassRef(
env, "chip/devicecontroller/ChipEventStructs$AccountLoginClusterLoggedOutEvent", loggedOutStructClass);
if (err != CHIP_NO_ERROR)
{
ChipLogError(Zcl, "Could not find class ChipEventStructs$AccountLoginClusterLoggedOutEvent");
return nullptr;
}
jmethodID loggedOutStructCtor;
err = chip::JniReferences::GetInstance().FindMethod(env, loggedOutStructClass, "<init>",
"(Ljava/util/Optional;Ljava/lang/Integer;)V", &loggedOutStructCtor);
if (err != CHIP_NO_ERROR || loggedOutStructCtor == nullptr)
{
ChipLogError(Zcl, "Could not find ChipEventStructs$AccountLoginClusterLoggedOutEvent constructor");
return nullptr;
}
jobject value = env->NewObject(loggedOutStructClass, loggedOutStructCtor, value_node, value_fabricIndex);
return value;
}
default:
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
break;
}
break;
}
// --- ApplicationBasic (0x050D) ---
case app::Clusters::ApplicationBasic::Id: {
using namespace app::Clusters::ApplicationBasic;
switch (aPath.mEventId)
{
default:
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
break;
}
break;
}
// --- ApplicationLauncher (0x050C) ---
case app::Clusters::ApplicationLauncher::Id: {
using namespace app::Clusters::ApplicationLauncher;
switch (aPath.mEventId)
{
default:
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
break;
}
break;
}
// --- AudioOutput (0x050B) ---
case app::Clusters::AudioOutput::Id: {
using namespace app::Clusters::AudioOutput;
switch (aPath.mEventId)
{
default:
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
break;
}
break;
}
// --- Binding (0x001E) ---
case app::Clusters::Binding::Id: {
using namespace app::Clusters::Binding;
switch (aPath.mEventId)
{
default:
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
break;
}
break;
}
// --- Channel (0x0504) ---
case app::Clusters::Channel::Id: {
using namespace app::Clusters::Channel;
switch (aPath.mEventId)
{
default:
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
break;
}
break;
}
// --- ContentAppObserver (0x0510) ---
case app::Clusters::ContentAppObserver::Id: {
using namespace app::Clusters::ContentAppObserver;
switch (aPath.mEventId)
{
default:
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
break;
}
break;
}
// --- ContentControl (0x050F) ---
case app::Clusters::ContentControl::Id: {
using namespace app::Clusters::ContentControl;
switch (aPath.mEventId)
{
case Events::RemainingScreenTimeExpired::Id: {
Events::RemainingScreenTimeExpired::DecodableType cppValue;
*aError = app::DataModel::Decode(aReader, cppValue);
if (*aError != CHIP_NO_ERROR)
{
return nullptr;
}
jclass remainingScreenTimeExpiredStructClass;
err = chip::JniReferences::GetInstance().GetLocalClassRef(
env, "chip/devicecontroller/ChipEventStructs$ContentControlClusterRemainingScreenTimeExpiredEvent",
remainingScreenTimeExpiredStructClass);
if (err != CHIP_NO_ERROR)
{
ChipLogError(Zcl, "Could not find class ChipEventStructs$ContentControlClusterRemainingScreenTimeExpiredEvent");
return nullptr;
}
jmethodID remainingScreenTimeExpiredStructCtor;
err = chip::JniReferences::GetInstance().FindMethod(env, remainingScreenTimeExpiredStructClass, "<init>", "()V",
&remainingScreenTimeExpiredStructCtor);
if (err != CHIP_NO_ERROR || remainingScreenTimeExpiredStructCtor == nullptr)
{
ChipLogError(Zcl,
"Could not find ChipEventStructs$ContentControlClusterRemainingScreenTimeExpiredEvent constructor");
return nullptr;
}
jobject value = env->NewObject(remainingScreenTimeExpiredStructClass, remainingScreenTimeExpiredStructCtor);
return value;
}
case Events::EnteringBlockContentTimeWindow::Id: {
Events::EnteringBlockContentTimeWindow::DecodableType cppValue;
*aError = app::DataModel::Decode(aReader, cppValue);
if (*aError != CHIP_NO_ERROR)
{
return nullptr;
}
jclass enteringBlockContentTimeWindowStructClass;
err = chip::JniReferences::GetInstance().GetLocalClassRef(
env, "chip/devicecontroller/ChipEventStructs$ContentControlClusterEnteringBlockContentTimeWindowEvent",
enteringBlockContentTimeWindowStructClass);
if (err != CHIP_NO_ERROR)
{
ChipLogError(Zcl, "Could not find class ChipEventStructs$ContentControlClusterEnteringBlockContentTimeWindowEvent");
return nullptr;
}
jmethodID enteringBlockContentTimeWindowStructCtor;
err = chip::JniReferences::GetInstance().FindMethod(env, enteringBlockContentTimeWindowStructClass, "<init>", "()V",
&enteringBlockContentTimeWindowStructCtor);
if (err != CHIP_NO_ERROR || enteringBlockContentTimeWindowStructCtor == nullptr)
{
ChipLogError(
Zcl, "Could not find ChipEventStructs$ContentControlClusterEnteringBlockContentTimeWindowEvent constructor");
return nullptr;
}
jobject value = env->NewObject(enteringBlockContentTimeWindowStructClass, enteringBlockContentTimeWindowStructCtor);
return value;
}
default:
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
break;
}
break;
}
// --- ContentLauncher (0x050A) ---
case app::Clusters::ContentLauncher::Id: {
using namespace app::Clusters::ContentLauncher;
switch (aPath.mEventId)
{
default:
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
break;
}
break;
}
// --- Descriptor (0x001D) ---
case app::Clusters::Descriptor::Id: {
using namespace app::Clusters::Descriptor;
switch (aPath.mEventId)
{
default:
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
break;
}
break;
}
// --- KeypadInput (0x0509) ---
case app::Clusters::KeypadInput::Id: {
using namespace app::Clusters::KeypadInput;
switch (aPath.mEventId)
{
default:
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
break;
}
break;
}
// --- LevelControl (0x0008) ---
case app::Clusters::LevelControl::Id: {
using namespace app::Clusters::LevelControl;
switch (aPath.mEventId)
{
default:
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
break;
}
break;
}
// --- LowPower (0x0508) ---
case app::Clusters::LowPower::Id: {
using namespace app::Clusters::LowPower;
switch (aPath.mEventId)
{
default:
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
break;
}
break;
}
// --- MediaInput (0x0507) ---
case app::Clusters::MediaInput::Id: {
using namespace app::Clusters::MediaInput;
switch (aPath.mEventId)
{
default:
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
break;
}
break;
}
// --- MediaPlayback (0x0506) ---
case app::Clusters::MediaPlayback::Id: {
using namespace app::Clusters::MediaPlayback;
switch (aPath.mEventId)
{
case Events::StateChanged::Id: {
Events::StateChanged::DecodableType cppValue;
*aError = app::DataModel::Decode(aReader, cppValue);
if (*aError != CHIP_NO_ERROR)
{
return nullptr;
}
jobject value_currentState;
std::string value_currentStateClassName = "java/lang/Integer";
std::string value_currentStateCtorSignature = "(I)V";
jint jnivalue_currentState = static_cast<jint>(cppValue.currentState);
TEMPORARY_RETURN_IGNORED chip::JniReferences::GetInstance().CreateBoxedObject<jint>(
value_currentStateClassName.c_str(), value_currentStateCtorSignature.c_str(), jnivalue_currentState,
value_currentState);
jobject value_startTime;
std::string value_startTimeClassName = "java/lang/Long";
std::string value_startTimeCtorSignature = "(J)V";
jlong jnivalue_startTime = static_cast<jlong>(cppValue.startTime);
TEMPORARY_RETURN_IGNORED chip::JniReferences::GetInstance().CreateBoxedObject<jlong>(
value_startTimeClassName.c_str(), value_startTimeCtorSignature.c_str(), jnivalue_startTime, value_startTime);
jobject value_duration;
std::string value_durationClassName = "java/lang/Long";
std::string value_durationCtorSignature = "(J)V";
jlong jnivalue_duration = static_cast<jlong>(cppValue.duration);
TEMPORARY_RETURN_IGNORED chip::JniReferences::GetInstance().CreateBoxedObject<jlong>(
value_durationClassName.c_str(), value_durationCtorSignature.c_str(), jnivalue_duration, value_duration);
jobject value_sampledPosition;
jobject value_sampledPosition_updatedAt;
std::string value_sampledPosition_updatedAtClassName = "java/lang/Long";
std::string value_sampledPosition_updatedAtCtorSignature = "(J)V";
jlong jnivalue_sampledPosition_updatedAt = static_cast<jlong>(cppValue.sampledPosition.updatedAt);
TEMPORARY_RETURN_IGNORED chip::JniReferences::GetInstance().CreateBoxedObject<jlong>(
value_sampledPosition_updatedAtClassName.c_str(), value_sampledPosition_updatedAtCtorSignature.c_str(),
jnivalue_sampledPosition_updatedAt, value_sampledPosition_updatedAt);
jobject value_sampledPosition_position;
if (cppValue.sampledPosition.position.IsNull())
{
value_sampledPosition_position = nullptr;
}
else
{
std::string value_sampledPosition_positionClassName = "java/lang/Long";
std::string value_sampledPosition_positionCtorSignature = "(J)V";
jlong jnivalue_sampledPosition_position = static_cast<jlong>(cppValue.sampledPosition.position.Value());
TEMPORARY_RETURN_IGNORED chip::JniReferences::GetInstance().CreateBoxedObject<jlong>(
value_sampledPosition_positionClassName.c_str(), value_sampledPosition_positionCtorSignature.c_str(),
jnivalue_sampledPosition_position, value_sampledPosition_position);
}
{
jclass playbackPositionStructStructClass_0;
err = chip::JniReferences::GetInstance().GetLocalClassRef(
env, "chip/devicecontroller/ChipStructs$MediaPlaybackClusterPlaybackPositionStruct",
playbackPositionStructStructClass_0);
if (err != CHIP_NO_ERROR)
{
ChipLogError(Zcl, "Could not find class ChipStructs$MediaPlaybackClusterPlaybackPositionStruct");
return nullptr;
}
jmethodID playbackPositionStructStructCtor_0;
err = chip::JniReferences::GetInstance().FindMethod(env, playbackPositionStructStructClass_0, "<init>",
"(Ljava/lang/Long;Ljava/lang/Long;)V",
&playbackPositionStructStructCtor_0);
if (err != CHIP_NO_ERROR || playbackPositionStructStructCtor_0 == nullptr)
{
ChipLogError(Zcl, "Could not find ChipStructs$MediaPlaybackClusterPlaybackPositionStruct constructor");
return nullptr;
}
value_sampledPosition = env->NewObject(playbackPositionStructStructClass_0, playbackPositionStructStructCtor_0,
value_sampledPosition_updatedAt, value_sampledPosition_position);
}
jobject value_playbackSpeed;
std::string value_playbackSpeedClassName = "java/lang/Float";
std::string value_playbackSpeedCtorSignature = "(F)V";
jfloat jnivalue_playbackSpeed = static_cast<jfloat>(cppValue.playbackSpeed);
TEMPORARY_RETURN_IGNORED chip::JniReferences::GetInstance().CreateBoxedObject<jfloat>(
value_playbackSpeedClassName.c_str(), value_playbackSpeedCtorSignature.c_str(), jnivalue_playbackSpeed,
value_playbackSpeed);
jobject value_seekRangeEnd;
std::string value_seekRangeEndClassName = "java/lang/Long";
std::string value_seekRangeEndCtorSignature = "(J)V";
jlong jnivalue_seekRangeEnd = static_cast<jlong>(cppValue.seekRangeEnd);
TEMPORARY_RETURN_IGNORED chip::JniReferences::GetInstance().CreateBoxedObject<jlong>(
value_seekRangeEndClassName.c_str(), value_seekRangeEndCtorSignature.c_str(), jnivalue_seekRangeEnd,
value_seekRangeEnd);
jobject value_seekRangeStart;
std::string value_seekRangeStartClassName = "java/lang/Long";
std::string value_seekRangeStartCtorSignature = "(J)V";
jlong jnivalue_seekRangeStart = static_cast<jlong>(cppValue.seekRangeStart);
TEMPORARY_RETURN_IGNORED chip::JniReferences::GetInstance().CreateBoxedObject<jlong>(
value_seekRangeStartClassName.c_str(), value_seekRangeStartCtorSignature.c_str(), jnivalue_seekRangeStart,
value_seekRangeStart);
jobject value_data;
if (!cppValue.data.HasValue())
{
TEMPORARY_RETURN_IGNORED chip::JniReferences::GetInstance().CreateOptional(nullptr, value_data);
}
else
{
jobject value_dataInsideOptional;
jbyteArray value_dataInsideOptionalByteArray = env->NewByteArray(static_cast<jsize>(cppValue.data.Value().size()));
env->SetByteArrayRegion(value_dataInsideOptionalByteArray, 0, static_cast<jsize>(cppValue.data.Value().size()),
reinterpret_cast<const jbyte *>(cppValue.data.Value().data()));
value_dataInsideOptional = value_dataInsideOptionalByteArray;
TEMPORARY_RETURN_IGNORED chip::JniReferences::GetInstance().CreateOptional(value_dataInsideOptional, value_data);
}
jobject value_audioAdvanceUnmuted;
std::string value_audioAdvanceUnmutedClassName = "java/lang/Boolean";
std::string value_audioAdvanceUnmutedCtorSignature = "(Z)V";
jboolean jnivalue_audioAdvanceUnmuted = static_cast<jboolean>(cppValue.audioAdvanceUnmuted);
TEMPORARY_RETURN_IGNORED chip::JniReferences::GetInstance().CreateBoxedObject<jboolean>(
value_audioAdvanceUnmutedClassName.c_str(), value_audioAdvanceUnmutedCtorSignature.c_str(),
jnivalue_audioAdvanceUnmuted, value_audioAdvanceUnmuted);
jclass stateChangedStructClass;
err = chip::JniReferences::GetInstance().GetLocalClassRef(
env, "chip/devicecontroller/ChipEventStructs$MediaPlaybackClusterStateChangedEvent", stateChangedStructClass);
if (err != CHIP_NO_ERROR)
{
ChipLogError(Zcl, "Could not find class ChipEventStructs$MediaPlaybackClusterStateChangedEvent");
return nullptr;
}
jmethodID stateChangedStructCtor;
err = chip::JniReferences::GetInstance().FindMethod(
env, stateChangedStructClass, "<init>",
"(Ljava/lang/Integer;Ljava/lang/Long;Ljava/lang/Long;Lchip/devicecontroller/"
"ChipStructs$MediaPlaybackClusterPlaybackPositionStruct;Ljava/lang/Float;Ljava/lang/Long;Ljava/lang/Long;Ljava/"
"util/Optional;Ljava/lang/Boolean;)V",
&stateChangedStructCtor);
if (err != CHIP_NO_ERROR || stateChangedStructCtor == nullptr)
{
ChipLogError(Zcl, "Could not find ChipEventStructs$MediaPlaybackClusterStateChangedEvent constructor");
return nullptr;
}
jobject value = env->NewObject(stateChangedStructClass, stateChangedStructCtor, value_currentState, value_startTime,
value_duration, value_sampledPosition, value_playbackSpeed, value_seekRangeEnd,
value_seekRangeStart, value_data, value_audioAdvanceUnmuted);
return value;
}
default:
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
break;
}
break;
}
// --- OnOff (0x0006) ---
case app::Clusters::OnOff::Id: {
using namespace app::Clusters::OnOff;
switch (aPath.mEventId)
{
default:
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
break;
}
break;
}
// --- TargetNavigator (0x0505) ---
case app::Clusters::TargetNavigator::Id: {
using namespace app::Clusters::TargetNavigator;
switch (aPath.mEventId)
{
case Events::TargetUpdated::Id: {
Events::TargetUpdated::DecodableType cppValue;
*aError = app::DataModel::Decode(aReader, cppValue);
if (*aError != CHIP_NO_ERROR)
{
return nullptr;
}
jobject value_targetList;
TEMPORARY_RETURN_IGNORED chip::JniReferences::GetInstance().CreateArrayList(value_targetList);
auto iter_value_targetList_0 = cppValue.targetList.begin();
while (iter_value_targetList_0.Next())
{
auto & entry_0 = iter_value_targetList_0.GetValue();
jobject newElement_0;
jobject newElement_0_identifier;
std::string newElement_0_identifierClassName = "java/lang/Integer";
std::string newElement_0_identifierCtorSignature = "(I)V";
jint jninewElement_0_identifier = static_cast<jint>(entry_0.identifier);
TEMPORARY_RETURN_IGNORED chip::JniReferences::GetInstance().CreateBoxedObject<jint>(
newElement_0_identifierClassName.c_str(), newElement_0_identifierCtorSignature.c_str(),
jninewElement_0_identifier, newElement_0_identifier);
jobject newElement_0_name;
LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(entry_0.name, newElement_0_name));
{
jclass targetInfoStructStructClass_1;
err = chip::JniReferences::GetInstance().GetLocalClassRef(
env, "chip/devicecontroller/ChipStructs$TargetNavigatorClusterTargetInfoStruct",
targetInfoStructStructClass_1);
if (err != CHIP_NO_ERROR)
{
ChipLogError(Zcl, "Could not find class ChipStructs$TargetNavigatorClusterTargetInfoStruct");
return nullptr;
}
jmethodID targetInfoStructStructCtor_1;
err = chip::JniReferences::GetInstance().FindMethod(env, targetInfoStructStructClass_1, "<init>",
"(Ljava/lang/Integer;Ljava/lang/String;)V",
&targetInfoStructStructCtor_1);
if (err != CHIP_NO_ERROR || targetInfoStructStructCtor_1 == nullptr)
{
ChipLogError(Zcl, "Could not find ChipStructs$TargetNavigatorClusterTargetInfoStruct constructor");
return nullptr;
}
newElement_0 = env->NewObject(targetInfoStructStructClass_1, targetInfoStructStructCtor_1,
newElement_0_identifier, newElement_0_name);
}
TEMPORARY_RETURN_IGNORED chip::JniReferences::GetInstance().AddToList(value_targetList, newElement_0);
}
jobject value_currentTarget;
std::string value_currentTargetClassName = "java/lang/Integer";
std::string value_currentTargetCtorSignature = "(I)V";
jint jnivalue_currentTarget = static_cast<jint>(cppValue.currentTarget);
TEMPORARY_RETURN_IGNORED chip::JniReferences::GetInstance().CreateBoxedObject<jint>(
value_currentTargetClassName.c_str(), value_currentTargetCtorSignature.c_str(), jnivalue_currentTarget,
value_currentTarget);
jobject value_data;
jbyteArray value_dataByteArray = env->NewByteArray(static_cast<jsize>(cppValue.data.size()));
env->SetByteArrayRegion(value_dataByteArray, 0, static_cast<jsize>(cppValue.data.size()),
reinterpret_cast<const jbyte *>(cppValue.data.data()));
value_data = value_dataByteArray;
jclass targetUpdatedStructClass;
err = chip::JniReferences::GetInstance().GetLocalClassRef(
env, "chip/devicecontroller/ChipEventStructs$TargetNavigatorClusterTargetUpdatedEvent", targetUpdatedStructClass);
if (err != CHIP_NO_ERROR)
{
ChipLogError(Zcl, "Could not find class ChipEventStructs$TargetNavigatorClusterTargetUpdatedEvent");
return nullptr;
}
jmethodID targetUpdatedStructCtor;
err = chip::JniReferences::GetInstance().FindMethod(
env, targetUpdatedStructClass, "<init>", "(Ljava/util/ArrayList;Ljava/lang/Integer;[B)V", &targetUpdatedStructCtor);
if (err != CHIP_NO_ERROR || targetUpdatedStructCtor == nullptr)
{
ChipLogError(Zcl, "Could not find ChipEventStructs$TargetNavigatorClusterTargetUpdatedEvent constructor");
return nullptr;
}
jobject value = env->NewObject(targetUpdatedStructClass, targetUpdatedStructCtor, value_targetList, value_currentTarget,
value_data);
return value;
}
default:
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
break;
}
break;
}
// --- WakeOnLAN (0x0503) ---
case app::Clusters::WakeOnLan::Id: {
using namespace app::Clusters::WakeOnLan;
switch (aPath.mEventId)
{
default:
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
break;
}
break;
}
default:
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
break;
}
return nullptr;
}
} // namespace chip