Skip to content

Commit 570a31b

Browse files
committed
Add terminate sleep time
1 parent 8830a42 commit 570a31b

File tree

4 files changed

+45
-31
lines changed

4 files changed

+45
-31
lines changed

examples/java-matter-controller/java/src/com/matter/controller/commands/bdx/PairOnNetworkLongDownloadLogCommand.kt

+8
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.matter.controller.commands.pairing.PairingCommand
99
import com.matter.controller.commands.pairing.PairingModeType
1010
import com.matter.controller.commands.pairing.PairingNetworkType
1111
import java.io.File
12+
import java.util.concurrent.TimeUnit
1213
import java.util.logging.Level
1314
import java.util.logging.Logger
1415

@@ -85,12 +86,19 @@ class PairOnNetworkLongDownloadLogCommand(
8586
)
8687
logger.log(Level.INFO, "Waiting response : ${getTimeoutMillis()}")
8788
waitCompleteMs(getTimeoutMillis())
89+
// For waiting both side terminating.
90+
try {
91+
TimeUnit.SECONDS.sleep(WAIT_FOR_TERMINATE)
92+
} catch (e: InterruptedException) {
93+
throw RuntimeException(e)
94+
}
8895
}
8996

9097
companion object {
9198
private val logger = Logger.getLogger(PairOnNetworkLongDownloadLogCommand::class.java.name)
9299

93100
private const val MATTER_PORT = 5540
94101
private const val MS_TO_SEC = 1000
102+
private const val WAIT_FOR_TERMINATE = 1L
95103
}
96104
}

kotlin-detect-config.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ exceptions:
232232
TooGenericExceptionThrown:
233233
excludes:
234234
- "**/examples/java-matter-controller/java/src/com/matter/controller/commands/bdx/DownloadLogCommand.kt"
235+
- "**/examples/java-matter-controller/java/src/com/matter/controller/commands/bdx/PairOnNetworkLongDownloadLogCommand.kt"
235236
- "**/examples/java-matter-controller/java/src/com/matter/controller/commands/discover/DiscoverCommissionablesCommand.kt"
236237
- "**/src/controller/java/generated/java/**/*"
237238
ThrowingExceptionsWithoutMessageOrCause:

src/controller/java/AndroidLogDownloadFromNode.cpp

+33-30
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ CHIP_ERROR AndroidLogDownloadFromNode::SendRetrieveLogsRequest(Messaging::Exchan
9999
if (err != CHIP_NO_ERROR)
100100
{
101101
ChipLogError(Controller, "Make BDX URI failure : %" CHIP_ERROR_FORMAT, err.Format());
102-
FinishLogDownloadFromNode(err);
102+
FinishLogDownloadFromNode(static_cast<void *>(this), err);
103103
}
104104

105105
mBdxReceiver =
@@ -132,18 +132,14 @@ void AndroidLogDownloadFromNode::OnDeviceConnectedFn(void * context, Messaging::
132132
if (err != CHIP_NO_ERROR)
133133
{
134134
ChipLogError(Controller, "Log Download failure : %" CHIP_ERROR_FORMAT, err.Format());
135-
self->FinishLogDownloadFromNode(err);
135+
FinishLogDownloadFromNode(context, err);
136136
}
137137
}
138138

139139
void AndroidLogDownloadFromNode::OnDeviceConnectionFailureFn(void * context, const ScopedNodeId & peerId, CHIP_ERROR err)
140140
{
141141
ChipLogProgress(Controller, "OnDeviceConnectionFailureFn: %" CHIP_ERROR_FORMAT, err.Format());
142-
143-
auto * self = static_cast<AndroidLogDownloadFromNode *>(context);
144-
VerifyOrReturn(self != nullptr, ChipLogProgress(Controller, "Device connected failure callback with null context. Ignoring"));
145-
146-
self->FinishLogDownloadFromNode(err);
142+
FinishLogDownloadFromNode(context, err);
147143
}
148144

149145
void AndroidLogDownloadFromNode::OnResponseRetrieveLogs(void * context,
@@ -162,25 +158,25 @@ void AndroidLogDownloadFromNode::OnResponseRetrieveLogs(void * context,
162158
{
163159
CHIP_ERROR err = CHIP_NO_ERROR;
164160
self->OnTransferCallback(self->mController->GetFabricIndex(), self->mRemoteNodeId, data.logContent, &err);
165-
self->FinishLogDownloadFromNode(err);
161+
FinishLogDownloadFromNode(context, err);
166162
}
167163
else if (data.status == StatusEnum::kNoLogs)
168164
{
169165
CHIP_ERROR err = CHIP_NO_ERROR;
170166
self->OnTransferCallback(self->mController->GetFabricIndex(), self->mRemoteNodeId, ByteSpan(), &err);
171-
self->FinishLogDownloadFromNode(err);
167+
FinishLogDownloadFromNode(context, err);
172168
}
173169
else if (data.status == StatusEnum::kBusy)
174170
{
175-
self->FinishLogDownloadFromNode(CHIP_ERROR_BUSY);
171+
FinishLogDownloadFromNode(context, CHIP_ERROR_BUSY);
176172
}
177173
else if (data.status == StatusEnum::kDenied)
178174
{
179-
self->FinishLogDownloadFromNode(CHIP_ERROR_ACCESS_DENIED);
175+
FinishLogDownloadFromNode(context, CHIP_ERROR_ACCESS_DENIED);
180176
}
181177
else
182178
{
183-
self->FinishLogDownloadFromNode(CHIP_ERROR_INVALID_DATA_LIST);
179+
FinishLogDownloadFromNode(context, CHIP_ERROR_INVALID_DATA_LIST);
184180
}
185181
}
186182

@@ -191,53 +187,60 @@ void AndroidLogDownloadFromNode::OnCommandFailure(void * context, CHIP_ERROR err
191187
auto * self = static_cast<AndroidLogDownloadFromNode *>(context);
192188
VerifyOrReturn(self != nullptr, ChipLogProgress(Controller, "Send command failure callback with null context. Ignoring"));
193189

194-
self->FinishLogDownloadFromNode(err);
190+
FinishLogDownloadFromNode(context, err);
195191
}
196192

197-
void AndroidLogDownloadFromNode::FinishLogDownloadFromNode(CHIP_ERROR err)
193+
void AndroidLogDownloadFromNode::FinishLogDownloadFromNode(void * context, CHIP_ERROR err)
198194
{
199-
CHIP_ERROR jniErr = CHIP_NO_ERROR;
200-
if (mBdxReceiver != nullptr)
195+
auto * self = static_cast<AndroidLogDownloadFromNode *>(context);
196+
VerifyOrReturn(self != nullptr, ChipLogProgress(Controller, "Finish Log Download with null context. Ignoring"));
197+
198+
if (self->mBdxReceiver != nullptr)
201199
{
202-
if (mTimeout > 0)
200+
if (self->mTimeout > 0 && err != CHIP_ERROR_TIMEOUT)
203201
{
204-
mBdxReceiver->CancelBDXTransferTimeout();
202+
self->mBdxReceiver->CancelBDXTransferTimeout();
205203
}
206-
delete mBdxReceiver;
207-
mBdxReceiver = nullptr;
204+
delete self->mBdxReceiver;
205+
self->mBdxReceiver = nullptr;
208206
}
209207

210-
JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread();
208+
CHIP_ERROR jniErr = CHIP_NO_ERROR;
209+
JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread();
211210
JniLocalReferenceScope scope(env);
212211

212+
jobject jCallback = self->mJavaCallback.ObjectRef();
213+
jint jFabricIndex = self->mController->GetFabricIndex();
214+
jlong jremoteNodeId = self->mRemoteNodeId;
215+
216+
VerifyOrExit(env != nullptr, CHIP_ERROR_INCORRECT_STATE);
217+
213218
if (err == CHIP_NO_ERROR)
214219
{
215220
ChipLogProgress(Controller, "Log Download succeeded.");
216221
jmethodID onSuccessMethod;
217222
// Java method signature : boolean onSuccess(int fabricIndex, long nodeId)
218-
jniErr = JniReferences::GetInstance().FindMethod(env, mJavaCallback.ObjectRef(), "onSuccess", "(IJ)V", &onSuccessMethod);
223+
jniErr = JniReferences::GetInstance().FindMethod(env, jCallback, "onSuccess", "(IJ)V", &onSuccessMethod);
219224

220225
VerifyOrExit(jniErr == CHIP_NO_ERROR, ChipLogError(Controller, "Could not find onSuccess method"));
221226

222-
env->CallVoidMethod(mJavaCallback.ObjectRef(), onSuccessMethod, static_cast<jint>(mController->GetFabricIndex()),
223-
static_cast<jlong>(mRemoteNodeId));
227+
env->CallVoidMethod(jCallback, onSuccessMethod, jFabricIndex, jremoteNodeId);
224228
}
225229
else
226230
{
227231
ChipLogError(Controller, "Log Download Failed : %" CHIP_ERROR_FORMAT, err.Format());
228232

229233
jmethodID onErrorMethod;
230234
// Java method signature : void onError(int fabricIndex, long nodeId, long errorCode)
231-
jniErr = JniReferences::GetInstance().FindMethod(env, mJavaCallback.ObjectRef(), "onError", "(IJJ)V", &onErrorMethod);
235+
jniErr = JniReferences::GetInstance().FindMethod(env, jCallback, "onError", "(IJJ)V", &onErrorMethod);
232236
VerifyOrExit(jniErr == CHIP_NO_ERROR, ChipLogError(Controller, "Could not find onError method"));
233237

234-
env->CallVoidMethod(mJavaCallback.ObjectRef(), onErrorMethod, static_cast<jint>(mController->GetFabricIndex()),
235-
static_cast<jlong>(mRemoteNodeId), static_cast<jlong>(err.AsInteger()));
238+
env->CallVoidMethod(jCallback, onErrorMethod, jFabricIndex, jremoteNodeId, static_cast<jlong>(err.AsInteger()));
236239
}
237240

238241
exit:
239242
// Finish this function, this object will be deleted.
240-
delete this;
243+
delete self;
241244
}
242245

243246
void AndroidLogDownloadFromNode::OnBdxTransferCallback(void * context, FabricIndex fabricIndex, NodeId remoteNodeId,
@@ -282,7 +285,7 @@ void AndroidLogDownloadFromNode::OnBdxTransferSuccessCallback(void * context, Fa
282285
auto * self = static_cast<AndroidLogDownloadFromNode *>(context);
283286
VerifyOrReturn(self != nullptr, ChipLogProgress(Controller, "Send command failure callback with null context. Ignoring"));
284287

285-
self->FinishLogDownloadFromNode(CHIP_NO_ERROR);
288+
FinishLogDownloadFromNode(context, CHIP_NO_ERROR);
286289
}
287290

288291
void AndroidLogDownloadFromNode::OnBdxTransferFailureCallback(void * context, FabricIndex fabricIndex, NodeId remoteNodeId,
@@ -293,7 +296,7 @@ void AndroidLogDownloadFromNode::OnBdxTransferFailureCallback(void * context, Fa
293296
auto * self = static_cast<AndroidLogDownloadFromNode *>(context);
294297
VerifyOrReturn(self != nullptr, ChipLogProgress(Controller, "Send command failure callback with null context. Ignoring"));
295298

296-
self->FinishLogDownloadFromNode(status);
299+
FinishLogDownloadFromNode(context, status);
297300
}
298301
} // namespace Controller
299302
} // namespace chip

src/controller/java/AndroidLogDownloadFromNode.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ class AndroidLogDownloadFromNode
5454
AndroidLogDownloadFromNode(DeviceController * controller, NodeId remoteNodeId, app::Clusters::DiagnosticLogs::IntentEnum intent,
5555
uint16_t timeout, jobject javaCallback);
5656

57+
~AndroidLogDownloadFromNode() {}
58+
5759
DeviceController * mController = nullptr;
5860

5961
chip::Callback::Callback<OnDeviceConnected> mOnDeviceConnectedCallback;
@@ -76,7 +78,7 @@ class AndroidLogDownloadFromNode
7678
CHIP_ERROR SendRetrieveLogsRequest(Messaging::ExchangeManager & exchangeMgr, const SessionHandle & sessionHandle);
7779
void OnTransferCallback(FabricIndex fabricIndex, NodeId remoteNodeId, const chip::ByteSpan & data,
7880
CHIP_ERROR * errInfoOnFailure);
79-
void FinishLogDownloadFromNode(CHIP_ERROR err);
81+
static void FinishLogDownloadFromNode(void * context, CHIP_ERROR err);
8082

8183
static void OnDeviceConnectedFn(void * context, Messaging::ExchangeManager & exchangeMgr, const SessionHandle & sessionHandle);
8284
static void OnDeviceConnectionFailureFn(void * context, const ScopedNodeId & peerId, CHIP_ERROR error);

0 commit comments

Comments
 (0)