Skip to content

Commit 88db99f

Browse files
authored
Model DiscoveryCapabilitiesBitmask field (#589)
Added new DiscoveryCapabilitiesBitmask field to model
1 parent 9ceba1c commit 88db99f

File tree

16 files changed

+532
-182
lines changed

16 files changed

+532
-182
lines changed

docs/transactions.md

+4-1
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,8 @@ Not all fields can be edited (see `EDIT_MODEL`).
221221
- enhancedSetupFlowTCFileSize: `optional(uint32)` - enhancedSetupFlowTCFileSize SHALL indicate the total size of the Enhanced Setup Flow Terms and Conditions file in bytes, and SHALL be used to ensure the downloaded file size is within the bounds of EnhancedSetupFlowTCFileSize. This field SHALL be present if and only if the EnhancedSetupFlowOptions field has bit 0 set.
222222
- maintenanceUrl: `optional(string)` - maintenanceUrl SHALL identify a link to a vendor-specific URL which SHALL provide a manufacturer specific means to resolve any functionality limitations indicated by the TERMS_AND_CONDITIONS_CHANGED status code. This field SHALL be present if and only if the EnhancedSetupFlowOptions field has bit 0 set.
223223
- schemaVersion: `optional(uint16)` - Schema version to support backward/forward compatability. Should be equal to 0 (default 0)
224+
- discoveryCapabilitiesBitmask: `optional(uint16)` - Identifies the device's available technologies for device discovery (default 0). This field SHALL be populated if CommissioningFallbackUrl is populated
225+
- commissioningFallbackURL: `optional(string)` - This field SHALL identify a vendor-specific commissioning-fallback URL for the device model, which can be used by a Commissioner in case commissioning fails to direct the user to a manufacturer-provided mechanism to provide resolution to commissioning issues.
224226
- In State:
225227
- `model/Model/value/<vid>/<pid>`
226228
- `model/VendorProducts/value/<vid>`
@@ -237,7 +239,7 @@ dcld tx model add-model --vid=<uint16> --pid=<uint16> --deviceTypeID=<uint16> --
237239
```bash
238240
dcld tx model add-model --vid=<uint16> --pid=<uint16> --deviceTypeID=<uint16> --productName=<string> --productLabel=<string or path> --partNumber=<string>
239241
--commissioningCustomFlow=<uint8> --commissioningCustomFlowUrl=<string> --commissioningModeInitialStepsHint=<uint32> --commissioningModeInitialStepsInstruction=<string>
240-
--commissioningModeSecondaryStepsHint=<uint32> --commissioningModeSecondaryStepsInstruction=<string> --userManualURL=<string> --supportURL=<string> --productURL=<string> --lsfURL=<string>
242+
--commissioningModeSecondaryStepsHint=<uint32> --commissioningModeSecondaryStepsInstruction=<string> --userManualURL=<string> --supportURL=<string> --productURL=<string> --lsfURL=<string> --discoveryCapabilitiesBitmask=<uint16> --commissioningFallbackURL<string>
241243
--from=<account>
242244
```
243245

@@ -277,6 +279,7 @@ If one of EnhancedSetupFlow or MaintenanceUrl fields needs to be updated, ALL En
277279
- enhancedSetupFlowTCFileSize: `optional(uint32)` - enhancedSetupFlowTCFileSize SHALL indicate the total size of the Enhanced Setup Flow Terms and Conditions file in bytes, and SHALL be used to ensure the downloaded file size is within the bounds of EnhancedSetupFlowTCFileSize. This field SHALL be present if and only if the EnhancedSetupFlowOptions field has bit 0 set.
278280
- maintenanceUrl: `optional(string)` - maintenanceUrl SHALL identify a link to a vendor-specific URL which SHALL provide a manufacturer specific means to resolve any functionality limitations indicated by the TERMS_AND_CONDITIONS_CHANGED status code. This field SHALL be present if and only if the EnhancedSetupFlowOptions field has bit 0 set.
279281
- schemaVersion: `optional(uint16)` - Schema version to support backward/forward compatability. Should be equal to 0 (default 0)
282+
- commissioningFallbackURL: `optional(string)` - This field SHALL identify a vendor-specific commissioning-fallback URL for the device model, which can be used by a Commissioner in case commissioning fails to direct the user to a manufacturer-provided mechanism to provide resolution to commissioning issues.
280283
- In State: `model/Model/value/<vid>/<pid>`
281284
- Who can send:
282285
- Vendor account associated with the same vid who has created the model

integration_tests/cli/model-demo.sh

+9-2
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,12 @@ enhancedSetupFlowTCRevision=1
7575
enhancedSetupFlowTCDigest="MWRjNGE0NDA0MWRjYWYxMTU0NWI3NTQzZGZlOTQyZjQ3NDJmNTY4YmU2OGZlZTI3NTQ0MWIwOTJiYjYwZGVlZA=="
7676
enhancedSetupFlowTCFileSize=1024
7777
maintenanceUrl="https://example.org"
78+
commissioningFallbackUrl="https://url.commissioningfallbackurl.dclmodel"
79+
discoveryCapabilitiesBitmask=1
7880
echo "Add Model with VID: $vid_with_pids PID: $pid"
7981
result=$(echo "test1234" | dcld tx model add-model --vid=$vid_with_pids --pid=$pid --deviceTypeID=1 --productName=TestProduct --productLabel="$productLabel" --partNumber=1 --commissioningCustomFlow=0 --enhancedSetupFlowOptions=$enhancedSetupFlowOptions_1 \
80-
--enhancedSetupFlowTCUrl=$enhancedSetupFlowTCUrl --enhancedSetupFlowTCRevision=$enhancedSetupFlowTCRevision --enhancedSetupFlowTCDigest=$enhancedSetupFlowTCDigest --enhancedSetupFlowTCFileSize=$enhancedSetupFlowTCFileSize --maintenanceUrl=$maintenanceUrl --from=$vendor_account_with_pids --yes)
82+
--enhancedSetupFlowTCUrl=$enhancedSetupFlowTCUrl --enhancedSetupFlowTCRevision=$enhancedSetupFlowTCRevision --enhancedSetupFlowTCDigest=$enhancedSetupFlowTCDigest --enhancedSetupFlowTCFileSize=$enhancedSetupFlowTCFileSize --maintenanceUrl=$maintenanceUrl \
83+
--commissioningFallbackUrl=$commissioningFallbackUrl --discoveryCapabilitiesBitmask=$discoveryCapabilitiesBitmask --from=$vendor_account_with_pids --yes)
8184
result=$(get_txn_result "$result")
8285
check_response "$result" "\"code\": 0"
8386
echo "$result"
@@ -105,6 +108,8 @@ check_response "$result" "\"enhancedSetupFlowTCRevision\": $enhancedSetupFlowTCR
105108
check_response "$result" "\"enhancedSetupFlowTCDigest\": \"$enhancedSetupFlowTCDigest\""
106109
check_response "$result" "\"enhancedSetupFlowTCFileSize\": $enhancedSetupFlowTCFileSize"
107110
check_response "$result" "\"maintenanceUrl\": \"$maintenanceUrl\""
111+
check_response "$result" "\"commissioningFallbackUrl\": \"$commissioningFallbackUrl\""
112+
check_response "$result" "\"discoveryCapabilitiesBitmask\": $discoveryCapabilitiesBitmask"
108113
echo "$result"
109114

110115
test_divider
@@ -159,9 +164,10 @@ newEnhancedSetupFlowTCRevision=2
159164
newEnhancedSetupFlowTCDigest="MWRjM2E0MTA0MWRjYWYxMTU0NWI3NTQzZGZlOTQyZjQ3NDJmNTY4YmU2OGZlZTI3NTQ0MWIwOTJiYjYxZGVlZA=="
160165
newEnhancedSetupFlowTCFileSize=2048
161166
newMaintenanceUrl="https://example2.org"
167+
newCommissioningFallbackUrl="https://url.commissioningfallbackurl2.dclmodel"
162168
echo "Update Model with VID: ${vid_with_pids} PID: ${pid} with new description, enhancedSetupFlowTCUrl, enhancedSetupFlowTCRevision, enhancedSetupFlowTCDigest, enhancedSetupFlowTCFileSize and maintenanceUrl"
163169
result=$(echo "test1234" | dcld tx model update-model --vid=$vid_with_pids --pid=$pid --from $vendor_account_with_pids --yes --productLabel "$description" --enhancedSetupFlowOptions=$enhancedSetupFlowOptions_1 \
164-
--enhancedSetupFlowTCUrl=$newEnhancedSetupFlowTCUrl --enhancedSetupFlowTCRevision=$newEnhancedSetupFlowTCRevision --enhancedSetupFlowTCDigest=$newEnhancedSetupFlowTCDigest --enhancedSetupFlowTCFileSize=$newEnhancedSetupFlowTCFileSize --maintenanceUrl=$newMaintenanceUrl --from=$vendor_account_with_pids --yes)
170+
--enhancedSetupFlowTCUrl=$newEnhancedSetupFlowTCUrl --enhancedSetupFlowTCRevision=$newEnhancedSetupFlowTCRevision --enhancedSetupFlowTCDigest=$newEnhancedSetupFlowTCDigest --enhancedSetupFlowTCFileSize=$newEnhancedSetupFlowTCFileSize --maintenanceUrl=$newMaintenanceUrl --commissioningFallbackUrl=$newCommissioningFallbackUrl --from=$vendor_account_with_pids --yes)
165171
result=$(get_txn_result "$result")
166172
check_response "$result" "\"code\": 0"
167173
echo "$result"
@@ -189,6 +195,7 @@ check_response "$result" "\"enhancedSetupFlowTCRevision\": $newEnhancedSetupFlow
189195
check_response "$result" "\"enhancedSetupFlowTCDigest\": \"$newEnhancedSetupFlowTCDigest\""
190196
check_response "$result" "\"enhancedSetupFlowTCFileSize\": $newEnhancedSetupFlowTCFileSize"
191197
check_response "$result" "\"maintenanceUrl\": \"$newMaintenanceUrl\""
198+
check_response "$result" "\"commissioningFallbackUrl\": \"$newCommissioningFallbackUrl\""
192199
echo "$result"
193200

194201
test_divider

integration_tests/constants/constants.go

+2
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ var (
8787
EnhancedSetupFlowTCDigest = "MmNmMjRkYmE1ZmIwYTMwZTI2ZTgzYjJhYzViOWUyOWUxYjE2MWU1YzFmYTc0MjVlNzMwNDMzNjI5MzhiOTgyNA=="
8888
EnhancedSetupFlowTCFileSize = 1
8989
MaintenanceURL = "https://url.maintenanceurl.dclmodel"
90+
CommissioningFallbackURL = "https://url.commissioningfallbackurl.dclmodel"
91+
DiscoveryCapabilitiesBitmask uint32 = 0
9092
LsfURL = "https://url.lsfurl.dclmodel"
9193
DataURL = "https://url.data.dclmodel"
9294
DataURL2 = "https://url.data.dclmodel2"

integration_tests/grpc_rest/model/helpers.go

+12-10
Original file line numberDiff line numberDiff line change
@@ -54,16 +54,18 @@ func NewMsgCreateModel(vid int32, pid int32, signer string) *modeltypes.MsgCreat
5454
CommissioningModeInitialStepsInstruction: testconstants.CommissioningModeInitialStepsInstruction,
5555
CommissioningModeSecondaryStepsHint: testconstants.CommissioningModeSecondaryStepsHint,
5656
CommissioningModeSecondaryStepsInstruction: testconstants.CommissioningModeSecondaryStepsInstruction,
57-
UserManualUrl: testconstants.UserManualURL,
58-
SupportUrl: testconstants.SupportURL,
59-
ProductUrl: testconstants.ProductURL,
60-
LsfUrl: testconstants.LsfURL,
61-
EnhancedSetupFlowOptions: testconstants.EnhancedSetupFlowOptions,
62-
EnhancedSetupFlowTCUrl: testconstants.EnhancedSetupFlowTCURL,
63-
EnhancedSetupFlowTCRevision: int32(testconstants.EnhancedSetupFlowTCRevision),
64-
EnhancedSetupFlowTCDigest: testconstants.EnhancedSetupFlowTCDigest,
65-
EnhancedSetupFlowTCFileSize: uint32(testconstants.EnhancedSetupFlowTCFileSize),
66-
MaintenanceUrl: testconstants.MaintenanceURL,
57+
UserManualUrl: testconstants.UserManualURL,
58+
SupportUrl: testconstants.SupportURL,
59+
ProductUrl: testconstants.ProductURL,
60+
LsfUrl: testconstants.LsfURL,
61+
EnhancedSetupFlowOptions: testconstants.EnhancedSetupFlowOptions,
62+
EnhancedSetupFlowTCUrl: testconstants.EnhancedSetupFlowTCURL,
63+
EnhancedSetupFlowTCRevision: int32(testconstants.EnhancedSetupFlowTCRevision),
64+
EnhancedSetupFlowTCDigest: testconstants.EnhancedSetupFlowTCDigest,
65+
EnhancedSetupFlowTCFileSize: uint32(testconstants.EnhancedSetupFlowTCFileSize),
66+
MaintenanceUrl: testconstants.MaintenanceURL,
67+
CommissioningFallbackUrl: testconstants.CommissioningFallbackURL,
68+
DiscoveryCapabilitiesBitmask: testconstants.DiscoveryCapabilitiesBitmask,
6769
}
6870
}
6971

proto/zigbeealliance/distributedcomplianceledger/model/model.proto

+2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ message Model {
3232
string enhancedSetupFlowTCDigest = 23 [(gogoproto.moretags) = "validate:\"required_if_bit_0_set=EnhancedSetupFlowOptions,omitempty,max=128\""];
3333
uint32 enhancedSetupFlowTCFileSize = 24 [(gogoproto.moretags) = "validate:\"required_with=EnhancedSetupFlowTCUrl\""];;
3434
string maintenanceUrl = 25 [(gogoproto.moretags) = "validate:\"required_if_bit_0_set=EnhancedSetupFlowOptions,omitempty,url,startswith=https:,max=256\""];
35+
uint32 discoveryCapabilitiesBitmask = 26 [(gogoproto.moretags) = "validate:\"gte=0,lte=14\""];
36+
string commissioningFallbackUrl = 27 [(gogoproto.moretags) = "validate:\"omitempty,url,startsnotwith=http:,max=256\""];
3537

3638
}
3739

proto/zigbeealliance/distributedcomplianceledger/model/tx.proto

+3
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ message MsgCreateModel {
4747
string enhancedSetupFlowTCDigest = 22 [(gogoproto.moretags) = "validate:\"required_if_bit_0_set=EnhancedSetupFlowOptions,omitempty,max=128\""];
4848
uint32 enhancedSetupFlowTCFileSize = 23 [(gogoproto.moretags) = "validate:\"required_with=EnhancedSetupFlowTCUrl\""];;
4949
string maintenanceUrl = 24 [(gogoproto.moretags) = "validate:\"required_if_bit_0_set=EnhancedSetupFlowOptions,omitempty,url,startswith=https:,max=256\""];
50+
uint32 discoveryCapabilitiesBitmask = 25 [(gogoproto.moretags) = "validate:\"gte=0,lte=14\""];
51+
string commissioningFallbackUrl = 26 [(gogoproto.moretags) = "validate:\"omitempty,url,startsnotwith=http:,max=256\""];
5052
}
5153
message MsgCreateModelResponse {}
5254

@@ -74,6 +76,7 @@ message MsgUpdateModel {
7476
string enhancedSetupFlowTCDigest = 20 [(gogoproto.moretags) = "validate:\"required_if_bit_0_set=EnhancedSetupFlowOptions,omitempty,max=128\""];
7577
uint32 enhancedSetupFlowTCFileSize = 21 [(gogoproto.moretags) = "validate:\"required_with=EnhancedSetupFlowTCUrl\""];;
7678
string maintenanceUrl = 22 [(gogoproto.moretags) = "validate:\"required_if_bit_0_set=EnhancedSetupFlowOptions,omitempty,url,startswith=https:,max=256\""];
79+
string commissioningFallbackUrl = 23 [(gogoproto.moretags) = "validate:\"omitempty,url,startsnotwith=http:,max=256\""];
7780
}
7881
message MsgUpdateModelResponse {}
7982

x/model/client/cli/flags.go

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ const (
1010
FlagProductLabel = "productLabel"
1111
FlagProductLabelShortcut = "d"
1212
FlagPartNumber = "partNumber"
13+
FlagDiscoveryCapabilitiesBitmask = "discoveryCapabilitiesBitmask"
1314
FlagCommissioningCustomFlow = "commissioningCustomFlow"
1415
FlagCommissioningCustomFlowURL = "commissioningCustomFlowURL"
1516
FlagCommissioningModeInitialStepsHint = "commissioningModeInitialStepsHint"
@@ -27,6 +28,7 @@ const (
2728
FlagEnhancedSetupFlowTCDigest = "enhancedSetupFlowTCDigest"
2829
FlagEnhancedSetupFlowTCFileSize = "enhancedSetupFlowTCFileSize"
2930
FlagMaintenanceURL = "maintenanceUrl"
31+
FlagCommissioningFallbackURL = "commissioningFallbackUrl"
3032
// Flags for ModelVersion.
3133
FlagSoftwareVersion = "softwareVersion"
3234
FlagSoftwareVersionShortcut = "v"

x/model/client/cli/tx_model.go

+20
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ func CmdCreateModel() *cobra.Command {
1919
productName string
2020
productLabel string
2121
partNumber string
22+
discoveryCapabilitiesBitmask uint32
2223
commissioningCustomFlow int32
2324
commissioningCustomFlowURL string
2425
commissioningModeInitialStepsHint uint32
@@ -35,6 +36,7 @@ func CmdCreateModel() *cobra.Command {
3536
enhancedSetupFlowTCDigest string
3637
enhancedSetupFlowTCFileSize uint32
3738
maintenanceURL string
39+
commissioningFallbackURL string
3840
schemaVersion uint32
3941
)
4042

@@ -43,6 +45,13 @@ func CmdCreateModel() *cobra.Command {
4345
Short: "Add new Model",
4446
Args: cobra.ExactArgs(0),
4547
RunE: func(cmd *cobra.Command, args []string) (err error) {
48+
isCommissioningFallbackURLSpecified := cmd.Flags().Changed(FlagCommissioningFallbackURL)
49+
isDiscoveryCapabilitiesBitmaskSpecified := cmd.Flags().Changed(FlagDiscoveryCapabilitiesBitmask)
50+
51+
if isCommissioningFallbackURLSpecified && !isDiscoveryCapabilitiesBitmaskSpecified {
52+
return types.ErrFallbackURLRequiresBitmask
53+
}
54+
4655
clientCtx, err := client.GetClientTxContext(cmd)
4756
if err != nil {
4857
return err
@@ -61,6 +70,7 @@ func CmdCreateModel() *cobra.Command {
6170
productName,
6271
productLabel,
6372
partNumber,
73+
discoveryCapabilitiesBitmask,
6474
commissioningCustomFlow,
6575
commissioningCustomFlowURL,
6676
commissioningModeInitialStepsHint,
@@ -78,6 +88,7 @@ func CmdCreateModel() *cobra.Command {
7888
enhancedSetupFlowTCDigest,
7989
enhancedSetupFlowTCFileSize,
8090
maintenanceURL,
91+
commissioningFallbackURL,
8192
)
8293

8394
// validate basic will be called in GenerateOrBroadcastTxCLI
@@ -102,6 +113,9 @@ func CmdCreateModel() *cobra.Command {
102113
"Model description (string or path to file containing data)")
103114
cmd.Flags().StringVar(&partNumber, FlagPartNumber, "",
104115
"Model Part Number (or sku)")
116+
cmd.Flags().Uint32Var(&discoveryCapabilitiesBitmask, FlagDiscoveryCapabilitiesBitmask, 0,
117+
`This field identifies the device's available technologies for device discovery.
118+
This field SHALL be populated if CommissioningFallbackUrl is populated`)
105119
cmd.Flags().Int32Var(&commissioningCustomFlow, FlagCommissioningCustomFlow, 0,
106120
`A value of 1 indicates that user interaction with the device (pressing a button, for example) is
107121
required before commissioning can take place. When CommissioningCustomflow is set to a value of 2,
@@ -153,6 +167,8 @@ and for these values the commissioningModeSecondaryStepInstruction SHALL be set`
153167
"enhancedSetupFlowTCFileSize SHALL indicate the total size of the Enhanced Setup Flow Terms and Conditions file in bytes, and SHALL be used to ensure the downloaded file size is within the bounds of EnhancedSetupFlowTCFileSize. This field SHALL be present if and only if the EnhancedSetupFlowOptions field has bit 0 set.")
154168
cmd.Flags().StringVar(&maintenanceURL, FlagMaintenanceURL, "",
155169
"maintenanceURL SHALL identify a link to a vendor-specific URL which SHALL provide a manufacturer specific means to resolve any functionality limitations indicated by the TERMS_AND_CONDITIONS_CHANGED status code. This field SHALL be present if and only if the EnhancedSetupFlowOptions field has bit 0 set.")
170+
cmd.Flags().StringVar(&commissioningFallbackURL, FlagCommissioningFallbackURL, "",
171+
"This field SHALL identify a vendor-specific commissioning-fallback URL for the device model, which can be used by a Commissioner in case commissioning fails to direct the user to a manufacturer-provided mechanism to provide resolution to commissioning issues.")
156172

157173
_ = cmd.MarkFlagRequired(FlagVid)
158174
_ = cmd.MarkFlagRequired(FlagPid)
@@ -186,6 +202,7 @@ func CmdUpdateModel() *cobra.Command {
186202
enhancedSetupFlowTCDigest string
187203
enhancedSetupFlowTCFileSize uint32
188204
maintenanceURL string
205+
commissioningFallbackURL string
189206
)
190207

191208
cmd := &cobra.Command{
@@ -226,6 +243,7 @@ func CmdUpdateModel() *cobra.Command {
226243
enhancedSetupFlowTCDigest,
227244
enhancedSetupFlowTCFileSize,
228245
maintenanceURL,
246+
commissioningFallbackURL,
229247
)
230248

231249
// validate basic will be called in GenerateOrBroadcastTxCLI
@@ -289,6 +307,8 @@ will enter Commissioning Mode upon a power cycle. Note that this value cannot be
289307
"enhancedSetupFlowTCFileSize SHALL indicate the total size of the Enhanced Setup Flow Terms and Conditions file in bytes, and SHALL be used to ensure the downloaded file size is within the bounds of EnhancedSetupFlowTCFileSize. This field SHALL be present if and only if the EnhancedSetupFlowOptions field has bit 0 set.")
290308
cmd.Flags().StringVar(&maintenanceURL, FlagMaintenanceURL, "",
291309
"maintenanceURL SHALL identify a link to a vendor-specific URL which SHALL provide a manufacturer specific means to resolve any functionality limitations indicated by the TERMS_AND_CONDITIONS_CHANGED status code. This field SHALL be present if and only if the EnhancedSetupFlowOptions field has bit 0 set.")
310+
cmd.Flags().StringVar(&commissioningFallbackURL, FlagCommissioningFallbackURL, "",
311+
"This field SHALL identify a vendor-specific commissioning-fallback URL for the device model, which can be used by a Commissioner in case commissioning fails to direct the user to a manufacturer-provided mechanism to provide resolution to commissioning issues.")
292312

293313
cli.AddTxFlagsToCmd(cmd)
294314

0 commit comments

Comments
 (0)