@@ -496,6 +496,221 @@ 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
+
653
+ /** Nodes should be expected to be deployed to any and all regions of the world. These global regions
654
+ may have differing common languages, units of measurements, and numerical formatting
655
+ standards. As such, Nodes that visually or audibly convey information need a mechanism by which
656
+ they can be configured to use a user’s preferred language, units, etc */
657
+ cluster LocalizationConfiguration = 43 {
658
+ revision 1; // NOTE: Default/not specifically set
659
+
660
+ attribute access(write: manage) char_string<35> activeLocale = 0;
661
+ readonly attribute char_string supportedLocales[] = 1;
662
+ readonly attribute command_id generatedCommandList[] = 65528;
663
+ readonly attribute command_id acceptedCommandList[] = 65529;
664
+ readonly attribute event_id eventList[] = 65530;
665
+ readonly attribute attrib_id attributeList[] = 65531;
666
+ readonly attribute bitmap32 featureMap = 65532;
667
+ readonly attribute int16u clusterRevision = 65533;
668
+ }
669
+
670
+ /** Nodes should be expected to be deployed to any and all regions of the world. These global regions
671
+ may have differing preferences for how dates and times are conveyed. As such, Nodes that visually
672
+ or audibly convey time information need a mechanism by which they can be configured to use a
673
+ user’s preferred format. */
674
+ cluster TimeFormatLocalization = 44 {
675
+ revision 1; // NOTE: Default/not specifically set
676
+
677
+ enum CalendarTypeEnum : enum8 {
678
+ kBuddhist = 0;
679
+ kChinese = 1;
680
+ kCoptic = 2;
681
+ kEthiopian = 3;
682
+ kGregorian = 4;
683
+ kHebrew = 5;
684
+ kIndian = 6;
685
+ kIslamic = 7;
686
+ kJapanese = 8;
687
+ kKorean = 9;
688
+ kPersian = 10;
689
+ kTaiwanese = 11;
690
+ kUseActiveLocale = 255;
691
+ }
692
+
693
+ enum HourFormatEnum : enum8 {
694
+ k12hr = 0;
695
+ k24hr = 1;
696
+ kUseActiveLocale = 255;
697
+ }
698
+
699
+ bitmap Feature : bitmap32 {
700
+ kCalendarFormat = 0x1;
701
+ }
702
+
703
+ attribute access(write: manage) HourFormatEnum hourFormat = 0;
704
+ attribute access(write: manage) optional CalendarTypeEnum activeCalendarType = 1;
705
+ readonly attribute optional CalendarTypeEnum supportedCalendarTypes[] = 2;
706
+ readonly attribute command_id generatedCommandList[] = 65528;
707
+ readonly attribute command_id acceptedCommandList[] = 65529;
708
+ readonly attribute event_id eventList[] = 65530;
709
+ readonly attribute attrib_id attributeList[] = 65531;
710
+ readonly attribute bitmap32 featureMap = 65532;
711
+ readonly attribute int16u clusterRevision = 65533;
712
+ }
713
+
499
714
/** This cluster is used to manage global aspects of the Commissioning flow. */
500
715
cluster GeneralCommissioning = 48 {
501
716
revision 1; // NOTE: Default/not specifically set
@@ -1403,6 +1618,7 @@ provisional cluster ThreadBorderRouterManagement = 1106 {
1403
1618
endpoint 0 {
1404
1619
device type ma_rootdevice = 22, version 1;
1405
1620
1621
+ binding cluster OtaSoftwareUpdateProvider;
1406
1622
1407
1623
server cluster Descriptor {
1408
1624
callback attribute deviceTypeList;
@@ -1458,6 +1674,39 @@ endpoint 0 {
1458
1674
ram attribute clusterRevision default = 3;
1459
1675
}
1460
1676
1677
+ server cluster OtaSoftwareUpdateRequestor {
1678
+ emits event StateTransition;
1679
+ emits event VersionApplied;
1680
+ emits event DownloadError;
1681
+ callback attribute defaultOTAProviders;
1682
+ ram attribute updatePossible default = true;
1683
+ ram attribute updateState default = 0;
1684
+ ram attribute updateStateProgress;
1685
+ callback attribute generatedCommandList;
1686
+ callback attribute acceptedCommandList;
1687
+ callback attribute eventList;
1688
+ callback attribute attributeList;
1689
+ ram attribute featureMap default = 0;
1690
+ ram attribute clusterRevision default = 1;
1691
+
1692
+ handle command AnnounceOTAProvider;
1693
+ }
1694
+
1695
+ server cluster LocalizationConfiguration {
1696
+ persist attribute activeLocale default = "en-US";
1697
+ callback attribute supportedLocales;
1698
+ ram attribute featureMap default = 0;
1699
+ ram attribute clusterRevision default = 1;
1700
+ }
1701
+
1702
+ server cluster TimeFormatLocalization {
1703
+ persist attribute hourFormat default = 0;
1704
+ persist attribute activeCalendarType default = 0;
1705
+ callback attribute supportedCalendarTypes;
1706
+ ram attribute featureMap default = 0;
1707
+ ram attribute clusterRevision default = 1;
1708
+ }
1709
+
1461
1710
server cluster GeneralCommissioning {
1462
1711
ram attribute breadcrumb default = 0x0000000000000000;
1463
1712
callback attribute basicCommissioningInfo;
0 commit comments