Skip to content

Commit

Permalink
Changes for mDNS latest in balloted spec (#6298)
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisdecenzo authored and pull[bot] committed Jun 7, 2021
1 parent 552c428 commit 2194111
Show file tree
Hide file tree
Showing 25 changed files with 1,087 additions and 170 deletions.
2 changes: 1 addition & 1 deletion examples/all-clusters-app/esp32/main/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ class SetupListModel : public ListScreen::Model
}
else if (i == 2)
{
app::Mdns::AdvertiseCommisionable();
app::Mdns::AdvertiseCommissionableNode();
OpenDefaultPairingWindow(ResetAdmins::kNo, PairingWindowAdvertisement::kMdns);
}
}
Expand Down
1 change: 1 addition & 0 deletions examples/lighting-app/linux/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ config("includes") {
executable("chip-lighting-app") {
sources = [
"LightingManager.cpp",
"include/CHIPProjectAppConfig.h",
"include/LightingManager.h",
"main.cpp",
]
Expand Down
10 changes: 10 additions & 0 deletions examples/lighting-app/linux/args.gni
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,16 @@
# See the License for the specific language governing permissions and
# limitations under the License.

# CHIPProjectConfig.h

import("//build_overrides/chip.gni")

import("${chip_root}/config/standalone/args.gni")

chip_device_project_config_include = "<CHIPProjectAppConfig.h>"
chip_project_config_include = "<CHIPProjectAppConfig.h>"
chip_system_project_config_include = "<SystemProjectConfig.h>"

chip_project_config_include_dirs =
[ "${chip_root}/examples/lighting-app/linux/include" ]
chip_project_config_include_dirs += [ "${chip_root}/config/standalone" ]
43 changes: 43 additions & 0 deletions examples/lighting-app/linux/include/CHIPProjectAppConfig.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
*
* Copyright (c) 2020 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/**
* @file
* Example project configuration file for CHIP.
*
* This is a place to put application or project-specific overrides
* to the default configuration values for general CHIP features.
*
*/

#pragma once

// include the CHIPProjectConfig from config/standalone
#include <CHIPProjectConfig.h>

#define CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONER_DISCOVERY 0

#define CHIP_DEVICE_CONFIG_ENABLE_EXTENDED_DISCOVERY 1

#define CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONABLE_DEVICE_TYPE 1

#define CHIP_DEVICE_CONFIG_DEVICE_TYPE 257 // 0x0101 = 257 = Dimmable Bulb

#define CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONABLE_DEVICE_NAME 1

#define CHIP_DEVICE_CONFIG_DEVICE_NAME "Test Bulb"
6 changes: 5 additions & 1 deletion examples/minimal-mdns/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,11 @@ Example runs:
```

```sh
./out/minimal_mdns/mdns-advertiser -4 -m commisioning --vendor-id 123 --product-id 456
./out/minimal_mdns/mdns-advertiser -4 -m commissionable-node --vendor-id 123 --product-id 456
```

```sh
./out/minimal_mdns/mdns-advertiser -4 -m commissioner --vendor-id 123 --product-id 456 --device-type 35
```

see
Expand Down
110 changes: 79 additions & 31 deletions examples/minimal-mdns/advertiser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,25 +32,30 @@ namespace {

enum class AdvertisingMode
{
kCommisioning,
kCommissionableNode,
kOperational,
kCommisionable,
kCommissioner,
};

struct Options
{
bool enableIpV4 = false;
AdvertisingMode advertisingMode = AdvertisingMode::kCommisioning;
AdvertisingMode advertisingMode = AdvertisingMode::kCommissionableNode;

// commisioning/commisionable params
uint8_t shortDiscriminator = 52;
uint16_t longDiscriminator = 840;
// commissionable node / commissioner params
Optional<uint16_t> vendorId;
Optional<uint16_t> productId;

// commisionable params
Optional<uint16_t> deviceType;
Optional<const char *> deviceName;

// commisionable node params
uint8_t shortDiscriminator = 52;
uint16_t longDiscriminator = 840;
bool commissioningMode = false;
bool commissioningModeOpenWindow = false;
Optional<const char *> rotatingId;
Optional<const char *> pairingInstr;
Optional<uint8_t> pairingHint;
Optional<uint16_t> pairingHint;

// operational params
uint64_t fabricId = 12345;
Expand All @@ -70,6 +75,11 @@ constexpr uint16_t kOptionCommisioningVendorId = 0x100; // v is used b
constexpr uint16_t kOptionCommisioningProductId = 'p';
constexpr uint16_t kOptionCommisioningPairingInstr = 0x200; // Just use the long format
constexpr uint16_t kOptionCommisioningPairingHint = 0x300;
constexpr uint16_t kOptionCommisioningDeviceType = 0x400;
constexpr uint16_t kOptionCommisioningDeviceName = 0x500;
constexpr uint16_t kOptionCommisioningMode = 0x600;
constexpr uint16_t kOptionCommisioningModeOpenWindow = 0x700;
constexpr uint16_t kOptionCommisioningRotatingId = 0x800;

constexpr uint16_t kOptionOperationalFabricId = 'f';
constexpr uint16_t kOptionOperationalNodeId = 'n';
Expand All @@ -86,13 +96,13 @@ bool HandleOptions(const char * aProgram, OptionSet * aOptions, int aIdentifier,
{
gOptions.advertisingMode = AdvertisingMode::kOperational;
}
else if (strcmp(aValue, "commisioning") == 0)
else if (strcmp(aValue, "commissionable-node") == 0)
{
gOptions.advertisingMode = AdvertisingMode::kCommisioning;
gOptions.advertisingMode = AdvertisingMode::kCommissionableNode;
}
else if (strcmp(aValue, "commisionable") == 0)
else if (strcmp(aValue, "commissioner") == 0)
{
gOptions.advertisingMode = AdvertisingMode::kCommisionable;
gOptions.advertisingMode = AdvertisingMode::kCommissioner;
}
else
{
Expand All @@ -113,11 +123,26 @@ bool HandleOptions(const char * aProgram, OptionSet * aOptions, int aIdentifier,
case kOptionCommisioningProductId:
gOptions.productId = Optional<uint16_t>::Value(static_cast<uint16_t>(atoi(aValue)));
return true;
case kOptionCommisioningMode:
gOptions.commissioningMode = true;
return true;
case kOptionCommisioningModeOpenWindow:
gOptions.commissioningModeOpenWindow = true;
return true;
case kOptionCommisioningDeviceType:
gOptions.deviceType = Optional<uint16_t>::Value(static_cast<uint16_t>(atoi(aValue)));
return true;
case kOptionCommisioningDeviceName:
gOptions.deviceName = Optional<const char *>::Value(static_cast<const char *>(aValue));
return true;
case kOptionCommisioningRotatingId:
gOptions.rotatingId = Optional<const char *>::Value(static_cast<const char *>(aValue));
return true;
case kOptionCommisioningPairingInstr:
gOptions.pairingInstr = Optional<const char *>::Value(static_cast<const char *>(aValue));
return true;
case kOptionCommisioningPairingHint:
gOptions.pairingHint = Optional<uint8_t>::Value(static_cast<uint8_t>(atoi(aValue)));
gOptions.pairingHint = Optional<uint16_t>::Value(static_cast<uint16_t>(atoi(aValue)));
return true;
case kOptionOperationalFabricId:
if (sscanf(aValue, "%" SCNx64, &gOptions.fabricId) != 1)
Expand Down Expand Up @@ -149,6 +174,11 @@ OptionDef cmdLineOptionsDef[] = {
{ "long-discriminator", kArgumentRequired, kOptionCommisioningLongDiscriminaotr },
{ "vendor-id", kArgumentRequired, kOptionCommisioningVendorId },
{ "product-id", kArgumentRequired, kOptionCommisioningProductId },
{ "commissioning-mode-enabled", kNoArgument, kOptionCommisioningMode },
{ "commissioning-mode-open-window", kNoArgument, kOptionCommisioningModeOpenWindow },
{ "device-type", kArgumentRequired, kOptionCommisioningDeviceType },
{ "device-name", kArgumentRequired, kOptionCommisioningDeviceName },
{ "rotating-id", kArgumentRequired, kOptionCommisioningRotatingId },
{ "pairing-instruction", kArgumentRequired, kOptionCommisioningPairingInstr },
{ "pairing-hint", kArgumentRequired, kOptionCommisioningPairingHint },

Expand All @@ -165,7 +195,7 @@ OptionSet cmdLineOptions = { HandleOptions, cmdLineOptionsDef, "PROGRAM OPTIONS"
#endif
" -m <mode>\n"
" --advertising-mode <mode>\n"
" Advertise in this mode (operational or commisioning or commisionable).\n"
" Advertise in this mode (operational or commissionable-node or commissioner).\n"
" --short-discriminator <value>\n"
" -s <value>\n"
" Commisioning/commisionable short discriminator.\n"
Expand All @@ -177,6 +207,16 @@ OptionSet cmdLineOptions = { HandleOptions, cmdLineOptionsDef, "PROGRAM OPTIONS"
" --product-id <value>\n"
" -p <value>\n"
" Commisioning/commisionable product id.\n"
" --commissioning-mode-enabled\n"
" Commissioning Mode Enabled.\n"
" --commissioning-mode-open-window\n"
" Commissioning Mode as a result of Open Commissioning Window.\n"
" --device-type <value>\n"
" Device type id.\n"
" --device-name <value>\n"
" Name of device.\n"
" --rotating-id <value>\n"
" Rotating Id.\n"
" --pairing-instruction <value>\n"
" Commisionable pairing instruction.\n"
" --pairing-hint <value>\n"
Expand Down Expand Up @@ -222,16 +262,24 @@ int main(int argc, char ** args)

CHIP_ERROR err;

if (gOptions.advertisingMode == AdvertisingMode::kCommisioning)
if (gOptions.advertisingMode == AdvertisingMode::kCommissionableNode)
{
err = chip::Mdns::ServiceAdvertiser::Instance().Advertise(chip::Mdns::CommissionAdvertisingParameters()
.EnableIpV4(gOptions.enableIpV4)
.SetPort(CHIP_PORT)
.SetShortDiscriminator(gOptions.shortDiscriminator)
.SetLongDiscrimininator(gOptions.longDiscriminator)
.SetMac(chip::ByteSpan(gOptions.mac, 6))
.SetVendorId(gOptions.vendorId)
.SetProductId(gOptions.productId));
printf("Advertise Commissionable Node\n");
err = chip::Mdns::ServiceAdvertiser::Instance().Advertise(
chip::Mdns::CommissionAdvertisingParameters()
.EnableIpV4(gOptions.enableIpV4)
.SetPort(CHIP_PORT)
.SetShortDiscriminator(gOptions.shortDiscriminator)
.SetLongDiscrimininator(gOptions.longDiscriminator)
.SetMac(chip::ByteSpan(gOptions.mac, 6))
.SetVendorId(gOptions.vendorId)
.SetProductId(gOptions.productId)
.SetCommissioningMode(gOptions.commissioningMode, gOptions.commissioningModeOpenWindow)
.SetDeviceType(gOptions.deviceType)
.SetDeviceName(gOptions.deviceName)
.SetRotatingId(gOptions.rotatingId)
.SetPairingInstr(gOptions.pairingInstr)
.SetPairingHint(gOptions.pairingHint));
}
else if (gOptions.advertisingMode == AdvertisingMode::kOperational)
{
Expand All @@ -242,19 +290,19 @@ int main(int argc, char ** args)
.SetMac(chip::ByteSpan(gOptions.mac, 6))
.SetPeerId(PeerId().SetFabricId(gOptions.fabricId).SetNodeId(gOptions.nodeId)));
}
else if (gOptions.advertisingMode == AdvertisingMode::kCommisionable)
else if (gOptions.advertisingMode == AdvertisingMode::kCommissioner)
{
printf("Advertise Commissioner\n");
err = chip::Mdns::ServiceAdvertiser::Instance().Advertise(
chip::Mdns::CommissionAdvertisingParameters()
.EnableIpV4(gOptions.enableIpV4)
.SetPort(CHIP_PORT)
.SetShortDiscriminator(gOptions.shortDiscriminator)
.SetLongDiscrimininator(gOptions.longDiscriminator)
.SetMac(chip::ByteSpan(gOptions.mac, 6))
.SetVendorId(gOptions.vendorId)
.SetProductId(gOptions.productId)
.SetPairingInstr(gOptions.pairingInstr)
.SetPairingHint(gOptions.pairingHint)
.SetCommissionAdvertiseMode(chip::Mdns::CommssionAdvertiseMode::kCommissionable));
.SetDeviceType(gOptions.deviceType)
.SetDeviceName(gOptions.deviceName)
.SetCommissionAdvertiseMode(chip::Mdns::CommssionAdvertiseMode::kCommissioner));
}
else
{
Expand All @@ -264,7 +312,7 @@ int main(int argc, char ** args)

if (err != CHIP_NO_ERROR)
{
fprintf(stderr, "FAILED to setup advertisement parameters\n");
fprintf(stderr, "FAILED to setup advertisement parameters err=%s\n", chip::ErrorStr(err));
return 1;
}

Expand Down
1 change: 1 addition & 0 deletions examples/tv-app/linux/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ assert(chip_build_tools)

executable("chip-tv-app") {
sources = [
"${chip_root}/examples/tv-app/tv-common/include/CHIPProjectAppConfig.h",
"include/account-login/AccountLoginManager.cpp",
"include/account-login/AccountLoginManager.h",
"include/application-basic/ApplicationBasicManager.cpp",
Expand Down
8 changes: 8 additions & 0 deletions examples/tv-app/linux/args.gni
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,11 @@
import("//build_overrides/chip.gni")

import("${chip_root}/config/standalone/args.gni")

chip_device_project_config_include = "<CHIPProjectAppConfig.h>"
chip_project_config_include = "<CHIPProjectAppConfig.h>"
chip_system_project_config_include = "<SystemProjectConfig.h>"

chip_project_config_include_dirs =
[ "${chip_root}/examples/tv-app/tv-common/include" ]
chip_project_config_include_dirs += [ "${chip_root}/config/standalone" ]
43 changes: 43 additions & 0 deletions examples/tv-app/tv-common/include/CHIPProjectAppConfig.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
*
* Copyright (c) 2020 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/**
* @file
* Example project configuration file for CHIP.
*
* This is a place to put application or project-specific overrides
* to the default configuration values for general CHIP features.
*
*/

#pragma once

// include the CHIPProjectConfig from config/standalone
#include <CHIPProjectConfig.h>

#define CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONER_DISCOVERY 1

#define CHIP_DEVICE_CONFIG_ENABLE_EXTENDED_DISCOVERY 1

#define CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONABLE_DEVICE_TYPE 1

#define CHIP_DEVICE_CONFIG_DEVICE_TYPE 35 // 0x0023 = 35 = Video Player

#define CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONABLE_DEVICE_NAME 1

#define CHIP_DEVICE_CONFIG_DEVICE_NAME "Test TV"
Loading

0 comments on commit 2194111

Please sign in to comment.