@@ -496,6 +496,160 @@ cluster BasicInformation = 40 {
496
496
command MfgSpecificPing(): DefaultSuccess = 0;
497
497
}
498
498
499
+ /** Provides an interface for providing OTA software updates */
500
+ cluster OtaSoftwareUpdateProvider = 41 {
501
+ revision 1; // NOTE: Default/not specifically set
502
+
503
+ enum ApplyUpdateActionEnum : enum8 {
504
+ kProceed = 0;
505
+ kAwaitNextAction = 1;
506
+ kDiscontinue = 2;
507
+ }
508
+
509
+ enum DownloadProtocolEnum : enum8 {
510
+ kBDXSynchronous = 0;
511
+ kBDXAsynchronous = 1;
512
+ kHTTPS = 2;
513
+ kVendorSpecific = 3;
514
+ }
515
+
516
+ enum StatusEnum : enum8 {
517
+ kUpdateAvailable = 0;
518
+ kBusy = 1;
519
+ kNotAvailable = 2;
520
+ kDownloadProtocolNotSupported = 3;
521
+ }
522
+
523
+ readonly attribute command_id generatedCommandList[] = 65528;
524
+ readonly attribute command_id acceptedCommandList[] = 65529;
525
+ readonly attribute event_id eventList[] = 65530;
526
+ readonly attribute attrib_id attributeList[] = 65531;
527
+ readonly attribute bitmap32 featureMap = 65532;
528
+ readonly attribute int16u clusterRevision = 65533;
529
+
530
+ request struct QueryImageRequest {
531
+ vendor_id vendorID = 0;
532
+ int16u productID = 1;
533
+ int32u softwareVersion = 2;
534
+ DownloadProtocolEnum protocolsSupported[] = 3;
535
+ optional int16u hardwareVersion = 4;
536
+ optional char_string<2> location = 5;
537
+ optional boolean requestorCanConsent = 6;
538
+ optional octet_string<512> metadataForProvider = 7;
539
+ }
540
+
541
+ response struct QueryImageResponse = 1 {
542
+ StatusEnum status = 0;
543
+ optional int32u delayedActionTime = 1;
544
+ optional char_string<256> imageURI = 2;
545
+ optional int32u softwareVersion = 3;
546
+ optional char_string<64> softwareVersionString = 4;
547
+ optional octet_string<32> updateToken = 5;
548
+ optional boolean userConsentNeeded = 6;
549
+ optional octet_string<512> metadataForRequestor = 7;
550
+ }
551
+
552
+ request struct ApplyUpdateRequestRequest {
553
+ octet_string<32> updateToken = 0;
554
+ int32u newVersion = 1;
555
+ }
556
+
557
+ response struct ApplyUpdateResponse = 3 {
558
+ ApplyUpdateActionEnum action = 0;
559
+ int32u delayedActionTime = 1;
560
+ }
561
+
562
+ request struct NotifyUpdateAppliedRequest {
563
+ octet_string<32> updateToken = 0;
564
+ int32u softwareVersion = 1;
565
+ }
566
+
567
+ /** Determine availability of a new Software Image */
568
+ command QueryImage(QueryImageRequest): QueryImageResponse = 0;
569
+ /** Determine next action to take for a downloaded Software Image */
570
+ command ApplyUpdateRequest(ApplyUpdateRequestRequest): ApplyUpdateResponse = 2;
571
+ /** Notify OTA Provider that an update was applied */
572
+ command NotifyUpdateApplied(NotifyUpdateAppliedRequest): DefaultSuccess = 4;
573
+ }
574
+
575
+ /** Provides an interface for downloading and applying OTA software updates */
576
+ cluster OtaSoftwareUpdateRequestor = 42 {
577
+ revision 1; // NOTE: Default/not specifically set
578
+
579
+ enum AnnouncementReasonEnum : enum8 {
580
+ kSimpleAnnouncement = 0;
581
+ kUpdateAvailable = 1;
582
+ kUrgentUpdateAvailable = 2;
583
+ }
584
+
585
+ enum ChangeReasonEnum : enum8 {
586
+ kUnknown = 0;
587
+ kSuccess = 1;
588
+ kFailure = 2;
589
+ kTimeOut = 3;
590
+ kDelayByProvider = 4;
591
+ }
592
+
593
+ enum UpdateStateEnum : enum8 {
594
+ kUnknown = 0;
595
+ kIdle = 1;
596
+ kQuerying = 2;
597
+ kDelayedOnQuery = 3;
598
+ kDownloading = 4;
599
+ kApplying = 5;
600
+ kDelayedOnApply = 6;
601
+ kRollingBack = 7;
602
+ kDelayedOnUserConsent = 8;
603
+ }
604
+
605
+ fabric_scoped struct ProviderLocation {
606
+ node_id providerNodeID = 1;
607
+ endpoint_no endpoint = 2;
608
+ fabric_idx fabricIndex = 254;
609
+ }
610
+
611
+ info event StateTransition = 0 {
612
+ UpdateStateEnum previousState = 0;
613
+ UpdateStateEnum newState = 1;
614
+ ChangeReasonEnum reason = 2;
615
+ nullable int32u targetSoftwareVersion = 3;
616
+ }
617
+
618
+ critical event VersionApplied = 1 {
619
+ int32u softwareVersion = 0;
620
+ int16u productID = 1;
621
+ }
622
+
623
+ info event DownloadError = 2 {
624
+ int32u softwareVersion = 0;
625
+ int64u bytesDownloaded = 1;
626
+ nullable int8u progressPercent = 2;
627
+ nullable int64s platformCode = 3;
628
+ }
629
+
630
+ attribute access(write: administer) ProviderLocation defaultOTAProviders[] = 0;
631
+ readonly attribute boolean updatePossible = 1;
632
+ readonly attribute UpdateStateEnum updateState = 2;
633
+ readonly attribute nullable int8u updateStateProgress = 3;
634
+ readonly attribute command_id generatedCommandList[] = 65528;
635
+ readonly attribute command_id acceptedCommandList[] = 65529;
636
+ readonly attribute event_id eventList[] = 65530;
637
+ readonly attribute attrib_id attributeList[] = 65531;
638
+ readonly attribute bitmap32 featureMap = 65532;
639
+ readonly attribute int16u clusterRevision = 65533;
640
+
641
+ request struct AnnounceOTAProviderRequest {
642
+ node_id providerNodeID = 0;
643
+ vendor_id vendorID = 1;
644
+ AnnouncementReasonEnum announcementReason = 2;
645
+ optional octet_string<512> metadataForNode = 3;
646
+ endpoint_no endpoint = 4;
647
+ }
648
+
649
+ /** Announce the presence of an OTA Provider */
650
+ command AnnounceOTAProvider(AnnounceOTAProviderRequest): DefaultSuccess = 0;
651
+ }
652
+
499
653
/** This cluster is used to manage global aspects of the Commissioning flow. */
500
654
cluster GeneralCommissioning = 48 {
501
655
revision 1; // NOTE: Default/not specifically set
@@ -1403,6 +1557,7 @@ provisional cluster ThreadBorderRouterManagement = 1106 {
1403
1557
endpoint 0 {
1404
1558
device type ma_rootdevice = 22, version 1;
1405
1559
1560
+ binding cluster OtaSoftwareUpdateProvider;
1406
1561
1407
1562
server cluster Descriptor {
1408
1563
callback attribute deviceTypeList;
@@ -1458,6 +1613,23 @@ endpoint 0 {
1458
1613
ram attribute clusterRevision default = 3;
1459
1614
}
1460
1615
1616
+ server cluster OtaSoftwareUpdateRequestor {
1617
+ emits event StateTransition;
1618
+ emits event VersionApplied;
1619
+ emits event DownloadError;
1620
+ callback attribute defaultOTAProviders;
1621
+ ram attribute updatePossible default = true;
1622
+ ram attribute updateState default = 0;
1623
+ ram attribute updateStateProgress;
1624
+ callback attribute generatedCommandList;
1625
+ callback attribute acceptedCommandList;
1626
+ callback attribute attributeList;
1627
+ ram attribute featureMap default = 0;
1628
+ ram attribute clusterRevision default = 1;
1629
+
1630
+ handle command AnnounceOTAProvider;
1631
+ }
1632
+
1461
1633
server cluster GeneralCommissioning {
1462
1634
ram attribute breadcrumb default = 0x0000000000000000;
1463
1635
callback attribute basicCommissioningInfo;
0 commit comments