Skip to content

Commit 2e53fdf

Browse files
sharadb-amazonpull[bot]
authored andcommitted
tv-casting-app: Fixing issues passing uniqueIDs and Video player caching (#24745)
* tv-casting-app/android: Updates to how the rotatingDeviceIdUniqueId is passed * tv-casting-app: Fixing persistence logic
1 parent ea8f195 commit 2e53fdf

File tree

4 files changed

+57
-19
lines changed

4 files changed

+57
-19
lines changed

examples/tv-casting-app/android/App/app/src/main/jni/com/chip/casting/AppParameters.java

+16-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,12 @@
1717
*/
1818
package com.chip.casting;
1919

20+
import android.util.Log;
21+
import java.math.BigInteger;
22+
import java.util.Arrays;
23+
2024
public class AppParameters {
25+
private static final String TAG = AppParameters.class.getSimpleName();
2126
public static final int MIN_ROTATING_DEVICE_ID_UNIQUE_ID_LENGTH = 16;
2227
private static final int TEST_SETUP_PASSCODE = 20202021;
2328
private static final int TEST_DISCRIMINATOR = 0xF00;
@@ -32,11 +37,20 @@ public class AppParameters {
3237
private int discriminator = TEST_DISCRIMINATOR;
3338

3439
public void setRotatingDeviceIdUniqueId(byte[] rotatingDeviceIdUniqueId) {
35-
this.rotatingDeviceIdUniqueId = rotatingDeviceIdUniqueId;
40+
Log.d(
41+
TAG,
42+
"AppParameters.setRotatingDeviceIdUniqueId called with "
43+
+ new BigInteger(1, rotatingDeviceIdUniqueId).toString(16));
44+
this.rotatingDeviceIdUniqueId =
45+
Arrays.copyOf(rotatingDeviceIdUniqueId, rotatingDeviceIdUniqueId.length);
3646
}
3747

3848
public byte[] getRotatingDeviceIdUniqueId() {
39-
return rotatingDeviceIdUniqueId;
49+
Log.d(
50+
TAG,
51+
"AppParameters.getRotatingDeviceIdUniqueId returning copyOf "
52+
+ new BigInteger(1, rotatingDeviceIdUniqueId).toString(16));
53+
return Arrays.copyOf(rotatingDeviceIdUniqueId, rotatingDeviceIdUniqueId.length);
4054
}
4155

4256
public DACProvider getDacProvider() {

examples/tv-casting-app/android/App/app/src/main/jni/cpp/ConversionUtils.cpp

+19-4
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,27 @@ CHIP_ERROR convertJAppParametersToCppAppParams(jobject appParameters, AppParams
3232
ReturnErrorOnFailure(
3333
chip::JniReferences::GetInstance().GetClassRef(env, "com/chip/casting/AppParameters", jAppParametersClass));
3434

35-
jfieldID jRotatingDeviceIdUniqueIdField = env->GetFieldID(jAppParametersClass, "rotatingDeviceIdUniqueId", "[B");
36-
jobject jRotatingDeviceIdUniqueId = env->GetObjectField(appParameters, jRotatingDeviceIdUniqueIdField);
35+
jmethodID getRotatingDeviceIdUniqueIdMethod = env->GetMethodID(jAppParametersClass, "getRotatingDeviceIdUniqueId", "()[B");
36+
if (getRotatingDeviceIdUniqueIdMethod == nullptr)
37+
{
38+
ChipLogError(Zcl, "Failed to access AppParameters 'getRotatingDeviceIdUniqueId' method");
39+
env->ExceptionClear();
40+
}
41+
42+
jobject jRotatingDeviceIdUniqueId = (jobject) env->CallObjectMethod(appParameters, getRotatingDeviceIdUniqueIdMethod);
43+
if (env->ExceptionCheck())
44+
{
45+
ChipLogError(Zcl, "Java exception in AppParameters::getRotatingDeviceIdUniqueId");
46+
env->ExceptionDescribe();
47+
env->ExceptionClear();
48+
return CHIP_ERROR_INCORRECT_STATE;
49+
}
50+
3751
if (jRotatingDeviceIdUniqueId != nullptr)
3852
{
39-
chip::JniByteArray jniRotatingDeviceIdUniqueIdByteArray(env, static_cast<jbyteArray>(jRotatingDeviceIdUniqueId));
40-
outAppParams.SetRotatingDeviceIdUniqueId(MakeOptional(jniRotatingDeviceIdUniqueIdByteArray.byteSpan()));
53+
chip::JniByteArray * jniRotatingDeviceIdUniqueIdByteArray =
54+
new chip::JniByteArray(env, static_cast<jbyteArray>(jRotatingDeviceIdUniqueId));
55+
outAppParams.SetRotatingDeviceIdUniqueId(MakeOptional(jniRotatingDeviceIdUniqueIdByteArray->byteSpan()));
4156
}
4257

4358
return CHIP_NO_ERROR;

examples/tv-casting-app/tv-casting-common/include/CHIPProjectAppConfig.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,4 @@
6060

6161
#define CHIP_ENABLE_ROTATING_DEVICE_ID 1
6262

63-
#define CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID_LENGTH 64
63+
#define CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID_LENGTH 128

examples/tv-casting-app/tv-casting-common/src/PersistenceManager.cpp

+21-12
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,17 @@ CHIP_ERROR PersistenceManager::AddVideoPlayer(TargetVideoPlayerInfo * targetVide
4646
// found the same video player, overwrite the data
4747
if (cachedVideoPlayers[i] == *targetVideoPlayerInfo)
4848
{
49+
ChipLogProgress(AppServer,
50+
"PersistenceManager::AddVideoPlayer found video player already cached. Overwriting at position: %lu",
51+
static_cast<unsigned long>(i));
4952
cachedVideoPlayers[i] = *targetVideoPlayerInfo;
5053
newVideoPlayer = false;
5154
}
5255
}
5356
if (newVideoPlayer)
5457
{
58+
ChipLogProgress(AppServer, "PersistenceManager::AddVideoPlayer writing new video player at position: %lu",
59+
static_cast<unsigned long>(i));
5560
VerifyOrReturnError(i < kMaxCachedVideoPlayers, CHIP_ERROR_BUFFER_TOO_SMALL);
5661
cachedVideoPlayers[i] = *targetVideoPlayerInfo;
5762
}
@@ -78,7 +83,8 @@ CHIP_ERROR PersistenceManager::WriteAllVideoPlayers(TargetVideoPlayerInfo videoP
7883
ReturnErrorOnFailure(
7984
tlvWriter.StartContainer(TLV::ContextTag(kVideoPlayersContainerTag), TLV::kTLVType_Structure, videoPlayersContainerType));
8085

81-
for (size_t videoPlayerIndex = 0; videoPlayerIndex < kMaxCachedVideoPlayers && videoPlayers[videoPlayerIndex].IsInitialized();
86+
size_t videoPlayerIndex;
87+
for (videoPlayerIndex = 0; videoPlayerIndex < kMaxCachedVideoPlayers && videoPlayers[videoPlayerIndex].IsInitialized();
8288
videoPlayerIndex++)
8389
{
8490
TargetVideoPlayerInfo * videoPlayer = &videoPlayers[videoPlayerIndex];
@@ -146,19 +152,19 @@ CHIP_ERROR PersistenceManager::WriteAllVideoPlayers(TargetVideoPlayerInfo videoP
146152
// Content app endpoints container ends
147153
ReturnErrorOnFailure(tlvWriter.EndContainer(contentAppEndpointsContainerType));
148154
}
149-
// Video Players container ends
150-
ReturnErrorOnFailure(tlvWriter.EndContainer(videoPlayersContainerType));
151-
ReturnErrorOnFailure(tlvWriter.EndContainer(outerContainerType));
152-
153-
ReturnErrorOnFailure(tlvWriter.Finalize());
154-
ChipLogProgress(AppServer,
155-
"PersistenceManager::WriteAllVideoPlayers TLV(CastingData).LengthWritten: %d bytes and version: %d",
156-
tlvWriter.GetLengthWritten(), kCurrentCastingDataVersion);
157-
return chip::DeviceLayer::PersistedStorage::KeyValueStoreMgr().Put(kCastingDataKey, castingData,
158-
tlvWriter.GetLengthWritten());
159155
}
160156
}
161-
return CHIP_NO_ERROR;
157+
158+
// Video Players container ends
159+
ReturnErrorOnFailure(tlvWriter.EndContainer(videoPlayersContainerType));
160+
ReturnErrorOnFailure(tlvWriter.EndContainer(outerContainerType));
161+
162+
ReturnErrorOnFailure(tlvWriter.Finalize());
163+
ChipLogProgress(AppServer,
164+
"PersistenceManager::WriteAllVideoPlayers TLV(CastingData).LengthWritten: %d bytes, video player count: %lu "
165+
"and version: %d",
166+
tlvWriter.GetLengthWritten(), static_cast<unsigned long>(videoPlayerIndex), kCurrentCastingDataVersion);
167+
return chip::DeviceLayer::PersistedStorage::KeyValueStoreMgr().Put(kCastingDataKey, castingData, tlvWriter.GetLengthWritten());
162168
}
163169

164170
CHIP_ERROR PersistenceManager::ReadAllVideoPlayers(TargetVideoPlayerInfo outVideoPlayers[])
@@ -379,6 +385,9 @@ CHIP_ERROR PersistenceManager::ReadAllVideoPlayers(TargetVideoPlayerInfo outVide
379385
VerifyOrReturnError(err == CHIP_END_OF_TLV, err);
380386
ReturnErrorOnFailure(reader.ExitContainer(videoPlayersContainerType));
381387
ReturnErrorOnFailure(reader.ExitContainer(outerContainerType));
388+
389+
ChipLogProgress(AppServer, "PersistenceManager::ReadAllVideoPlayers Video player read count: %lu",
390+
static_cast<unsigned long>(videoPlayerIndex));
382391
return CHIP_NO_ERROR;
383392
}
384393

0 commit comments

Comments
 (0)