Skip to content

Commit 516044e

Browse files
Merge branch 'master' into feature/icd_register_unregister
2 parents 426d8fb + 92f8cd0 commit 516044e

19 files changed

+288
-290
lines changed

scripts/spec_xml/generate_spec_xml.py

+77-26
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import re
2121
import subprocess
2222
import sys
23+
import xml.etree.ElementTree as ElementTree
24+
from pathlib import Path
2325

2426
import click
2527

@@ -36,6 +38,20 @@ def get_xml_path(filename, output_dir):
3638
return os.path.abspath(os.path.join(output_dir, xml))
3739

3840

41+
def make_asciidoc(target: str, include_in_progress: bool, spec_dir: str, dry_run: bool) -> str:
42+
cmd = ['make', 'PRINT_FILENAMES=1']
43+
if include_in_progress:
44+
cmd.append('INCLUDE_IN_PROGRESS=1')
45+
cmd.append(target)
46+
if dry_run:
47+
print(cmd)
48+
return ''
49+
else:
50+
ret = subprocess.check_output(cmd, cwd=spec_dir).decode('UTF-8').rstrip()
51+
print(ret)
52+
return ret
53+
54+
3955
@click.command()
4056
@click.option(
4157
'--scraper',
@@ -56,16 +72,21 @@ def get_xml_path(filename, output_dir):
5672
default=False,
5773
is_flag=True,
5874
help='Flag for dry run')
59-
def main(scraper, spec_root, output_dir, dry_run):
75+
@click.option(
76+
'--include-in-progress',
77+
default=True,
78+
type=bool,
79+
help='Include in-progress items from spec')
80+
def main(scraper, spec_root, output_dir, dry_run, include_in_progress):
6081
# Clusters need to be scraped first because the cluster directory is passed to the device type directory
61-
scrape_clusters(scraper, spec_root, output_dir, dry_run)
62-
scrape_device_types(scraper, spec_root, output_dir, dry_run)
82+
scrape_clusters(scraper, spec_root, output_dir, dry_run, include_in_progress)
83+
scrape_device_types(scraper, spec_root, output_dir, dry_run, include_in_progress)
6384
if not dry_run:
6485
dump_versions(scraper, spec_root, output_dir)
6586
dump_cluster_ids(output_dir)
6687

6788

68-
def scrape_clusters(scraper, spec_root, output_dir, dry_run):
89+
def scrape_clusters(scraper, spec_root, output_dir, dry_run, include_in_progress):
6990
src_dir = os.path.abspath(os.path.join(spec_root, 'src'))
7091
sdm_clusters_dir = os.path.abspath(
7192
os.path.join(src_dir, 'service_device_management'))
@@ -74,42 +95,64 @@ def scrape_clusters(scraper, spec_root, output_dir, dry_run):
7495
media_clusters_dir = os.path.abspath(
7596
os.path.join(app_clusters_dir, 'media'))
7697
clusters_output_dir = os.path.abspath(os.path.join(output_dir, 'clusters'))
77-
dm_clusters_list = ['ACL-Cluster.adoc', 'Binding-Cluster.adoc', 'bridge-clusters.adoc',
78-
'Descriptor-Cluster.adoc', 'Group-Key-Management-Cluster.adoc', 'ICDManagement.adoc',
79-
'Label-Cluster.adoc']
80-
sdm_exclude_list = ['AdminAssistedCommissioningFlows.adoc', 'BulkDataExchange.adoc', 'CommissioningFlows.adoc',
81-
'DeviceCommissioningFlows.adoc', 'DistributedComplianceLedger.adoc', 'OTAFileFormat.adoc']
82-
app_exclude_list = ['appliances.adoc', 'closures.adoc', 'general.adoc',
83-
'hvac.adoc', 'lighting.adoc', 'meas_and_sense.adoc', 'robots.adoc']
84-
media_exclude_list = ['media.adoc', 'VideoPlayerArchitecture.adoc']
8598

8699
if not os.path.exists(clusters_output_dir):
87100
os.makedirs(clusters_output_dir)
88101

102+
print('Generating main spec to get file include list - this make take a few minutes')
103+
main_out = make_asciidoc('pdf', include_in_progress, spec_root, dry_run)
104+
print('Generating cluster spec to get file include list - this make take a few minutes')
105+
cluster_out = make_asciidoc('pdf-appclusters-book', include_in_progress, spec_root, dry_run)
106+
89107
def scrape_cluster(filename: str) -> None:
108+
base = Path(filename).stem
109+
if base not in main_out and base not in cluster_out:
110+
print(f'skipping file: {base} as it is not compiled into the asciidoc')
111+
return
90112
xml_path = get_xml_path(filename, clusters_output_dir)
91113
cmd = [scraper, 'cluster', '-i', filename, '-o',
92-
xml_path, '-nd', '--define', 'in-progress']
114+
xml_path, '-nd']
115+
if include_in_progress:
116+
cmd.extend(['--define', 'in-progress'])
93117
if dry_run:
94118
print(cmd)
95119
else:
96120
subprocess.run(cmd)
97121

98122
def scrape_all_clusters(dir: str, exclude_list: list[str] = []) -> None:
99123
for filename in glob.glob(f'{dir}/*.adoc'):
100-
if os.path.basename(filename) in exclude_list:
101-
continue
102124
scrape_cluster(filename)
103125

104-
scrape_all_clusters(sdm_clusters_dir, sdm_exclude_list)
105-
scrape_all_clusters(app_clusters_dir, app_exclude_list)
106-
scrape_all_clusters(media_clusters_dir, media_exclude_list)
107-
for f in dm_clusters_list:
108-
filename = f'{dm_clusters_dir}/{f}'
109-
scrape_cluster(filename)
110-
111-
112-
def scrape_device_types(scraper, spec_root, output_dir, dry_run):
126+
scrape_all_clusters(dm_clusters_dir)
127+
scrape_all_clusters(sdm_clusters_dir)
128+
scrape_all_clusters(app_clusters_dir)
129+
scrape_all_clusters(media_clusters_dir)
130+
131+
for xml_path in glob.glob(f'{clusters_output_dir}/*.xml'):
132+
tree = ElementTree.parse(f'{xml_path}')
133+
root = tree.getroot()
134+
cluster = next(root.iter('cluster'))
135+
# If there's no cluster ID table, this isn't a cluster
136+
try:
137+
next(cluster.iter('clusterIds'))
138+
except StopIteration:
139+
# If there's no cluster ID table, this isn't a cluster just some kind of intro adoc
140+
print(f'Removing file {xml_path} as it does not include any cluster definitions')
141+
os.remove(xml_path)
142+
continue
143+
# For now, we're going to manually remove the word "Cluster" from the cluster name field
144+
# to make the diff easier. The update to 1.2.4 of the scraper added this.
145+
# TODO: submit a separate PR with JUST this change revered and remove this code.
146+
with open(xml_path, 'rb') as input:
147+
xml_str = input.read()
148+
149+
original_name = bytes(cluster.attrib['name'], 'utf-8')
150+
replacement_name = bytes(cluster.attrib['name'].removesuffix(" Cluster"), 'utf-8')
151+
with open(xml_path, 'wb') as output:
152+
output.write(xml_str.replace(original_name, replacement_name))
153+
154+
155+
def scrape_device_types(scraper, spec_root, output_dir, dry_run, include_in_progress):
113156
device_type_dir = os.path.abspath(
114157
os.path.join(spec_root, 'src', 'device_types'))
115158
device_types_output_dir = os.path.abspath(
@@ -119,9 +162,16 @@ def scrape_device_types(scraper, spec_root, output_dir, dry_run):
119162
if not os.path.exists(device_types_output_dir):
120163
os.makedirs(device_types_output_dir)
121164

165+
print('Generating device type library to get file include list - this make take a few minutes')
166+
device_type_output = make_asciidoc('pdf-devicelibrary-book', include_in_progress, spec_root, dry_run)
167+
122168
def scrape_device_type(filename: str) -> None:
169+
base = Path(filename).stem
170+
if base not in device_type_output:
171+
print(f'skipping file: {filename} as it is not compiled into the asciidoc')
172+
return
123173
xml_path = get_xml_path(filename, device_types_output_dir)
124-
cmd = [scraper, 'devicetype', '-c', clusters_output_dir,
174+
cmd = [scraper, 'devicetype', '-c', '-cls', clusters_output_dir,
125175
'-nd', '-i', filename, '-o', xml_path]
126176
if dry_run:
127177
print(cmd)
@@ -187,7 +237,8 @@ def dump_cluster_ids(output_dir):
187237

188238
json_file = os.path.join(clusters_output_dir, 'cluster_ids.json')
189239
with open(json_file, "w") as outfile:
190-
json.dump(json_dict, outfile, indent=2)
240+
json.dump(json_dict, outfile, indent=4)
241+
outfile.write('\n')
191242

192243

193244
if __name__ == '__main__':

src/app/tests/AppTestContext.cpp

+12
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,18 @@ void AppContext::SetUpTestSuite()
4949

5050
void AppContext::TearDownTestSuite()
5151
{
52+
// Some test suites finish with unprocessed work left in the platform manager event queue.
53+
// This can particularly be a problem when this unprocessed work involves reporting engine runs,
54+
// since those can take a while and cause later tests to not reach their queued work before
55+
// their timeouts hit. This is only an issue in setups where all unit tests are compiled into
56+
// a single file (e.g. nRF CI (Zephyr native_posix)).
57+
//
58+
// Work around this issue by doing a DrainAndServiceIO() here to attempt to flush out any queued-up work.
59+
//
60+
// TODO: Solve the underlying issue where test suites leave unprocessed work. Or is this actually
61+
// the right solution?
62+
LoopbackMessagingContext::DrainAndServiceIO();
63+
5264
chip::DeviceLayer::PlatformMgr().Shutdown();
5365
LoopbackMessagingContext::TearDownTestSuite();
5466
}

src/app/tests/BUILD.gn

+2-12
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ chip_test_suite_using_nltest("tests") {
123123
output_name = "libAppTests"
124124

125125
test_sources = [
126+
"TestAclAttribute.cpp",
126127
"TestAclEvent.cpp",
127128
"TestAttributeAccessInterfaceCache.cpp",
128129
"TestAttributePathExpandIterator.cpp",
@@ -151,6 +152,7 @@ chip_test_suite_using_nltest("tests") {
151152
"TestPendingResponseTrackerImpl.cpp",
152153
"TestPowerSourceCluster.cpp",
153154
"TestReadInteraction.cpp",
155+
"TestReportScheduler.cpp",
154156
"TestReportingEngine.cpp",
155157
"TestStatusIB.cpp",
156158
"TestStatusResponseMessage.cpp",
@@ -164,8 +166,6 @@ chip_test_suite_using_nltest("tests") {
164166
test_sources += [ "TestFailSafeContext.cpp" ]
165167
}
166168

167-
test_sources += [ "TestAclAttribute.cpp" ]
168-
169169
# DefaultICDClientStorage assumes that raw AES key is used by the application
170170
if (chip_crypto != "psa") {
171171
test_sources += [ "TestDefaultICDClientStorage.cpp" ]
@@ -189,16 +189,6 @@ chip_test_suite_using_nltest("tests") {
189189
test_sources += [ "TestEventLogging.cpp" ]
190190
}
191191

192-
# The platform manager is not properly clearing queues in test teardown, which results in
193-
# DrainIO calls not being able to run in expected time (5seconds) if unprocessed reported engine
194-
# runs are remaining, causing tests to crash in Open IoT SDK and Zephyr tests since they are
195-
# running all tests in one file. We need to figure out how to properly clean the event queues
196-
# before enabling this test for these platforms.
197-
if (chip_device_platform != "nrfconnect" &&
198-
chip_device_platform != "openiotsdk") {
199-
test_sources += [ "TestReportScheduler.cpp" ]
200-
}
201-
202192
cflags = [ "-Wconversion" ]
203193

204194
public_deps = [

src/ble/BLEEndPoint.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ void BLEEndPoint::FinalizeClose(uint8_t oldState, uint8_t flags, CHIP_ERROR err)
389389
// Indicate close of chipConnection to peripheral via GATT unsubscribe. Keep end point allocated until
390390
// unsubscribe completes or times out, so platform doesn't close underlying BLE connection before
391391
// we're really sure the unsubscribe request has been sent.
392-
if (!mBle->mPlatformDelegate->UnsubscribeCharacteristic(mConnObj, &CHIP_BLE_SVC_ID, &mBle->CHIP_BLE_CHAR_2_ID))
392+
if (!mBle->mPlatformDelegate->UnsubscribeCharacteristic(mConnObj, &CHIP_BLE_SVC_ID, &CHIP_BLE_CHAR_2_UUID))
393393
{
394394
ChipLogError(Ble, "BtpEngine unsub failed");
395395

@@ -750,7 +750,7 @@ CHIP_ERROR BLEEndPoint::HandleHandshakeConfirmationReceived()
750750
{
751751
// Subscribe to characteristic which peripheral will use to send indications. Prompts peripheral to send
752752
// BLE transport capabilities indication.
753-
VerifyOrExit(mBle->mPlatformDelegate->SubscribeCharacteristic(mConnObj, &CHIP_BLE_SVC_ID, &mBle->CHIP_BLE_CHAR_2_ID),
753+
VerifyOrExit(mBle->mPlatformDelegate->SubscribeCharacteristic(mConnObj, &CHIP_BLE_SVC_ID, &CHIP_BLE_CHAR_2_UUID),
754754
err = BLE_ERROR_GATT_SUBSCRIBE_FAILED);
755755

756756
// We just sent a GATT subscribe request, so make sure to attempt unsubscribe on close.
@@ -1313,14 +1313,14 @@ bool BLEEndPoint::SendWrite(PacketBufferHandle && buf)
13131313
{
13141314
mConnStateFlags.Set(ConnectionStateFlag::kGattOperationInFlight);
13151315

1316-
return mBle->mPlatformDelegate->SendWriteRequest(mConnObj, &CHIP_BLE_SVC_ID, &mBle->CHIP_BLE_CHAR_1_ID, std::move(buf));
1316+
return mBle->mPlatformDelegate->SendWriteRequest(mConnObj, &CHIP_BLE_SVC_ID, &CHIP_BLE_CHAR_1_UUID, std::move(buf));
13171317
}
13181318

13191319
bool BLEEndPoint::SendIndication(PacketBufferHandle && buf)
13201320
{
13211321
mConnStateFlags.Set(ConnectionStateFlag::kGattOperationInFlight);
13221322

1323-
return mBle->mPlatformDelegate->SendIndication(mConnObj, &CHIP_BLE_SVC_ID, &mBle->CHIP_BLE_CHAR_2_ID, std::move(buf));
1323+
return mBle->mPlatformDelegate->SendIndication(mConnObj, &CHIP_BLE_SVC_ID, &CHIP_BLE_CHAR_2_UUID, std::move(buf));
13241324
}
13251325

13261326
CHIP_ERROR BLEEndPoint::StartConnectTimer()

src/ble/BleLayer.cpp

+8-22
Original file line numberDiff line numberDiff line change
@@ -138,20 +138,6 @@ class BleEndPointPool
138138
//
139139
static BleEndPointPool sBLEEndPointPool;
140140

141-
// UUIDs used internally by BleLayer:
142-
143-
const ChipBleUUID BleLayer::CHIP_BLE_CHAR_1_ID = { { // 18EE2EF5-263D-4559-959F-4F9C429F9D11
144-
0x18, 0xEE, 0x2E, 0xF5, 0x26, 0x3D, 0x45, 0x59, 0x95, 0x9F, 0x4F, 0x9C, 0x42,
145-
0x9F, 0x9D, 0x11 } };
146-
147-
const ChipBleUUID BleLayer::CHIP_BLE_CHAR_2_ID = { { // 18EE2EF5-263D-4559-959F-4F9C429F9D12
148-
0x18, 0xEE, 0x2E, 0xF5, 0x26, 0x3D, 0x45, 0x59, 0x95, 0x9F, 0x4F, 0x9C, 0x42,
149-
0x9F, 0x9D, 0x12 } };
150-
151-
const ChipBleUUID BleLayer::CHIP_BLE_CHAR_3_ID = { { // 64630238-8772-45F2-B87D-748A83218F04
152-
0x64, 0x63, 0x02, 0x38, 0x87, 0x72, 0x45, 0xF2, 0xB8, 0x7D, 0x74, 0x8A, 0x83,
153-
0x21, 0x8F, 0x04 } };
154-
155141
// BleTransportCapabilitiesRequestMessage implementation:
156142

157143
void BleTransportCapabilitiesRequestMessage::SetSupportedProtocolVersion(uint8_t index, uint8_t version)
@@ -486,7 +472,7 @@ bool BleLayer::HandleWriteReceived(BLE_CONNECTION_OBJECT connObj, const ChipBleU
486472
PacketBufferHandle && pBuf)
487473
{
488474
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_SVC_ID, svcId), false, ChipLogError(Ble, "Write received on unknown svc"));
489-
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_CHAR_1_ID, charId), false, ChipLogError(Ble, "Write received on unknown char"));
475+
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_CHAR_1_UUID, charId), false, ChipLogError(Ble, "Write received on unknown char"));
490476
VerifyOrReturnError(!pBuf.IsNull(), false, ChipLogError(Ble, "Write received null buffer"));
491477

492478
// Find matching connection end point.
@@ -512,7 +498,7 @@ bool BleLayer::HandleIndicationReceived(BLE_CONNECTION_OBJECT connObj, const Chi
512498
PacketBufferHandle && pBuf)
513499
{
514500
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_SVC_ID, svcId), false, ChipLogError(Ble, "Indication received on unknown svc"));
515-
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_CHAR_2_ID, charId), false, ChipLogError(Ble, "Indication received on unknown char"));
501+
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_CHAR_2_UUID, charId), false, ChipLogError(Ble, "Indication received on unknown char"));
516502
VerifyOrReturnError(!pBuf.IsNull(), false, ChipLogError(Ble, "Indication received null buffer"));
517503

518504
// Find matching connection end point.
@@ -528,7 +514,7 @@ bool BleLayer::HandleIndicationReceived(BLE_CONNECTION_OBJECT connObj, const Chi
528514
bool BleLayer::HandleWriteConfirmation(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId)
529515
{
530516
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_SVC_ID, svcId), false, ChipLogError(Ble, "Write confirmation on unknown svc"));
531-
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_CHAR_1_ID, charId), false, ChipLogError(Ble, "Write confirmation on unknown char"));
517+
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_CHAR_1_UUID, charId), false, ChipLogError(Ble, "Write confirmation on unknown char"));
532518

533519
HandleAckReceived(connObj);
534520
return true;
@@ -537,7 +523,7 @@ bool BleLayer::HandleWriteConfirmation(BLE_CONNECTION_OBJECT connObj, const Chip
537523
bool BleLayer::HandleIndicationConfirmation(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId)
538524
{
539525
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_SVC_ID, svcId), false, ChipLogError(Ble, "Indication confirmation on unknown svc"));
540-
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_CHAR_2_ID, charId), false,
526+
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_CHAR_2_UUID, charId), false,
541527
ChipLogError(Ble, "Indication confirmation on unknown char"));
542528

543529
HandleAckReceived(connObj);
@@ -558,7 +544,7 @@ void BleLayer::HandleAckReceived(BLE_CONNECTION_OBJECT connObj)
558544
bool BleLayer::HandleSubscribeReceived(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId)
559545
{
560546
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_SVC_ID, svcId), false, ChipLogError(Ble, "Subscribe received on unknown svc"));
561-
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_CHAR_2_ID, charId) || UUIDsMatch(&CHIP_BLE_CHAR_3_ID, charId), false,
547+
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_CHAR_2_UUID, charId) || UUIDsMatch(&CHIP_BLE_CHAR_3_UUID, charId), false,
562548
ChipLogError(Ble, "Subscribe received on unknown char"));
563549

564550
// Find end point already associated with BLE connection, if any.
@@ -572,7 +558,7 @@ bool BleLayer::HandleSubscribeReceived(BLE_CONNECTION_OBJECT connObj, const Chip
572558
bool BleLayer::HandleSubscribeComplete(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId)
573559
{
574560
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_SVC_ID, svcId), false, ChipLogError(Ble, "Subscribe complete on unknown svc"));
575-
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_CHAR_2_ID, charId) || UUIDsMatch(&CHIP_BLE_CHAR_3_ID, charId), false,
561+
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_CHAR_2_UUID, charId) || UUIDsMatch(&CHIP_BLE_CHAR_3_UUID, charId), false,
576562
ChipLogError(Ble, "Subscribe complete on unknown char"));
577563

578564
BLEEndPoint * endPoint = sBLEEndPointPool.Find(connObj);
@@ -585,7 +571,7 @@ bool BleLayer::HandleSubscribeComplete(BLE_CONNECTION_OBJECT connObj, const Chip
585571
bool BleLayer::HandleUnsubscribeReceived(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId)
586572
{
587573
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_SVC_ID, svcId), false, ChipLogError(Ble, "Unsubscribe received on unknown svc"));
588-
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_CHAR_2_ID, charId) || UUIDsMatch(&CHIP_BLE_CHAR_3_ID, charId), false,
574+
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_CHAR_2_UUID, charId) || UUIDsMatch(&CHIP_BLE_CHAR_3_UUID, charId), false,
589575
ChipLogError(Ble, "Unsubscribe received on unknown char"));
590576

591577
// Find end point already associated with BLE connection, if any.
@@ -599,7 +585,7 @@ bool BleLayer::HandleUnsubscribeReceived(BLE_CONNECTION_OBJECT connObj, const Ch
599585
bool BleLayer::HandleUnsubscribeComplete(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId)
600586
{
601587
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_SVC_ID, svcId), false, ChipLogError(Ble, "Unsubscribe complete on unknown svc"));
602-
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_CHAR_2_ID, charId) || UUIDsMatch(&CHIP_BLE_CHAR_3_ID, charId), false,
588+
VerifyOrReturnError(UUIDsMatch(&CHIP_BLE_CHAR_2_UUID, charId) || UUIDsMatch(&CHIP_BLE_CHAR_3_UUID, charId), false,
603589
ChipLogError(Ble, "Unsubscribe complete on unknown char"));
604590

605591
// Find end point already associated with BLE connection, if any.

src/ble/BleLayer.h

-7
Original file line numberDiff line numberDiff line change
@@ -313,13 +313,6 @@ class DLL_EXPORT BleLayer
313313
private:
314314
// Private data members:
315315

316-
// UUID of CHIP service characteristic used for central writes.
317-
static const ChipBleUUID CHIP_BLE_CHAR_1_ID;
318-
// UUID of CHIP service characteristic used for peripheral indications.
319-
static const ChipBleUUID CHIP_BLE_CHAR_2_ID;
320-
// UUID of CHIP service characteristic used for additional data
321-
static const ChipBleUUID CHIP_BLE_CHAR_3_ID;
322-
323316
BleConnectionDelegate * mConnectionDelegate;
324317
BlePlatformDelegate * mPlatformDelegate;
325318
BleApplicationDelegate * mApplicationDelegate;

0 commit comments

Comments
 (0)