@@ -27,6 +27,7 @@ import chip.devicecontroller.model.ChipEventPath
27
27
import chip.devicecontroller.model.ChipPathId
28
28
import chip.devicecontroller.model.InvokeElement
29
29
import chip.devicecontroller.model.NodeState
30
+ import chip.jsontlv.putJsonString
30
31
import chip.tlv.AnonymousTag
31
32
import chip.tlv.ContextSpecificTag
32
33
import chip.tlv.TlvReader
@@ -305,19 +306,6 @@ class WildcardFragment : Fragment() {
305
306
val endpointId = getChipPathIdForText(binding.endpointIdEd.text.toString())
306
307
val clusterId = getChipPathIdForText(binding.clusterIdEd.text.toString())
307
308
val attributeId = getChipPathIdForText(binding.attributeIdEd.text.toString())
308
- val tlvWriter = TlvWriter ()
309
- val values = writeValue.split(" ," )
310
-
311
- if (values.size > 1 ) tlvWriter.startArray(AnonymousTag )
312
- for (value in values) {
313
- try {
314
- TLV_MAP [writeValueType]?.generate(tlvWriter, value.trim())
315
- } catch (ex: Exception ) {
316
- Log .e(TAG , " Invalid Data Type" , ex)
317
- return
318
- }
319
- }
320
- if (values.size > 1 ) tlvWriter.endArray()
321
309
322
310
val version =
323
311
if (dataVersion == null ) {
@@ -326,14 +314,35 @@ class WildcardFragment : Fragment() {
326
314
Optional .of(dataVersion)
327
315
}
328
316
329
- val writeRequest =
330
- AttributeWriteRequest .newInstance(
331
- endpointId,
332
- clusterId,
333
- attributeId,
334
- tlvWriter.getEncoded(),
335
- version
336
- )
317
+ lateinit var writeRequest: AttributeWriteRequest
318
+
319
+ if (writeValueType == " json" ) {
320
+ writeRequest = AttributeWriteRequest .newInstance(endpointId, clusterId, attributeId, writeValue, version)
321
+ } else {
322
+ val tlvWriter = TlvWriter ()
323
+ val values = writeValue.split(" ," )
324
+
325
+ if (values.size > 1 ) tlvWriter.startArray(AnonymousTag )
326
+ for (value in values) {
327
+ try {
328
+ TLV_MAP [writeValueType]?.generate(tlvWriter, value.trim())
329
+ } catch (ex: Exception ) {
330
+ Log .e(TAG , " Invalid Data Type" , ex)
331
+ return
332
+ }
333
+ }
334
+ if (values.size > 1 ) tlvWriter.endArray()
335
+
336
+ writeRequest =
337
+ AttributeWriteRequest .newInstance(
338
+ endpointId,
339
+ clusterId,
340
+ attributeId,
341
+ tlvWriter.getEncoded(),
342
+ version
343
+ )
344
+ }
345
+
337
346
deviceController.write(
338
347
writeAttributeCallback,
339
348
ChipClient .getConnectedDevicePointer(requireContext(), addressUpdateFragment.deviceId),
@@ -343,35 +352,16 @@ class WildcardFragment : Fragment() {
343
352
)
344
353
}
345
354
346
- private suspend fun invoke (invokeField : String , timedRequestTimeoutMs : Int , imTimeoutMs : Int ) {
355
+ private suspend fun invoke (invokeJson : String , timedRequestTimeoutMs : Int , imTimeoutMs : Int ) {
347
356
val endpointId = getChipPathIdForText(binding.endpointIdEd.text.toString())
348
357
val clusterId = getChipPathIdForText(binding.clusterIdEd.text.toString())
349
358
val commandId = getChipPathIdForText(binding.commandIdEd.text.toString())
350
359
351
- val tlvWriter = TlvWriter ()
352
- val fields =
353
- if (invokeField.isEmpty()) {
354
- listOf ()
355
- } else {
356
- invokeField.split(" ," )
357
- }
358
- var count = 0
359
- tlvWriter.startStructure(AnonymousTag )
360
- for (field in fields) {
361
- try {
362
- val type = field.split(" :" )[0 ]
363
- val value = field.split(" :" )[1 ]
364
-
365
- Log .d(TAG , " value : $type - $value " )
366
- TLV_MAP [type]?.generate(tlvWriter, value.trim(), ContextSpecificTag (count++ ))
367
- } catch (ex: Exception ) {
368
- Log .e(TAG , " Invalid value" , ex)
369
- return
370
- }
360
+ val jsonString = invokeJson.ifEmpty {
361
+ " {}"
371
362
}
372
- tlvWriter.endStructure()
373
363
val invokeElement =
374
- InvokeElement .newInstance(endpointId, clusterId, commandId, tlvWriter.getEncoded(), null )
364
+ InvokeElement .newInstance(endpointId, clusterId, commandId, null , jsonString )
375
365
deviceController.invoke(
376
366
invokeCallback,
377
367
ChipClient .getConnectedDevicePointer(requireContext(), addressUpdateFragment.deviceId),
@@ -652,6 +642,12 @@ class WildcardFragment : Fragment() {
652
642
653
643
private val TLV_MAP =
654
644
mapOf (
645
+ " json" to
646
+ object : TlvWriterInterface {
647
+ override fun generate (writer : TlvWriter , value : String , tag : chip.tlv.Tag ) {
648
+ writer.putJsonString(tag, value)
649
+ }
650
+ },
655
651
" UnsignedInt" to
656
652
object : TlvWriterInterface {
657
653
override fun generate (writer : TlvWriter , value : String , tag : chip.tlv.Tag ) {
0 commit comments