硬刚matter源代码(涨经验)
崩溃
golang的代码无论多大,都不会有崩溃的感觉。 但是c++的代码总是给人这种感觉。 因为涉及的底层太多, 代码思路, 编译思路, debug流程, 细节都很多。
我相信但凡有点源代码阅读能力的, 都知道一个法宝: 视而不见。 绕过去,再绕过去, 重新绕一遍。
我试着找一个好的入门方案, 看是不是有第三方整理好了, 比如matter的源代码编译出so,然后让python来调用, 比如ESP32的教程是不是会更简单。 我不得不赞赏ESP对matter重新封装了一下,但是我依然要应对绕进来的其他风险, 购买,选型, 编译,调试, ESP的方案我肯定是要试用的,应该晚一些。
我期望是一个干净通用的平台, 不是专门定制过的os。 我期望学到的东西是能给所有板子上使用都有用的知识。
我甚至下载了matter的官方文档, 然后用谷歌翻译成中文。 还是硬刚一下代码吧。 或许硬刚能收获更快。 最直接。 不用绕,用自己的思想去理解代码。
我相信matter的代码质量。 let‘s go!
好方法很重要
我读过各种复杂度的代码,有一些大型代码的快速阅读经验。 希望大家能学到,然后分享给朋友们。 微信订阅号可以看个大概。有感性认识, 同时我博客也分享了这个文章给电脑上实验的朋友们。 https://antriver.com 我放在物联网分类下
大概率还是要猜,然后进行验证,读者的能力和作者的能力进行碰撞,会让读者水平提高很快。 建议在linux/macos下实验
前提
- 根据官方文档, 使用git clone的方式下载。 然后能够编译成功。 参考 matter官方源代码初体验
代码太复杂,我找的信息可能来自编译结果。
整体认识代码量
文件数量
connectedhomeip % tree -L 1
.
├── BUILD.gn
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── NOTICE
├── README.md
├── REVIEWERS.md
├── SPECIFICATION_VERSION
├── build
├── build_overrides
├── config
├── credentials
├── data_model
├── docs
├── examples
├── gn_build.sh
├── integrations
├── kotlin-detect-config.yaml
├── lgtm.yml
├── out
├── scripts
├── src
├── third_party
├── venv
├── venv310
└── zzz_generated
先看一下第一层目录。 记住我用的tree命令。 我不会提前剧透。 我非常不喜欢剧透的作者。 他们总是让你们没法面对真实情况。 看起来看懂了,实际上用的时候发现,还是没学会。 当然, 所有剧透的作者都是在秀优越感,你看我知道吧,你要来看我写的吧。 实际上破坏了探索的美感。
看不懂, 模糊, 不理解是正常的。 初学者谁不是这样。 硬刚就好了。
docs: 这种看起来是文档。
examples:看起来是例子。
src:里面放源代码。
third_party: 第三方的代码。
上面的我认为都能猜出来。其他的是啥,不重要。 这些是啥,其实也不重要。 每个人或多或少都能猜出几个目录来。
猜是一个重要流程。一猜就对, 提高读代码能力。
其实最重要的点, 也不一定在这里。 我们目标要找到一根线,然后能跟着他看完我们想看的部分。 这个很重要
connectedhomeip % find src | more
src
src/test_driver
...
src/test_driver/mbed/integration_tests/lighting-app
src/test_driver/mbed/integration_tests/lighting-app/__init__.py
src/test_driver/mbed/integration_tests/lighting-app/test_app.py
src/test_driver/mbed/integration_tests/conftest.py
src/test_driver/mbed/integration_tests/pytest.ini
src/test_driver/mbed/integration_tests/shell
src/test_driver/mbed/integration_tests/shell/__init__.py
src/test_driver/mbed/integration_tests/shell/test_app.py
src/test_driver/mbed/integration_tests/unit-tests
src/test_driver/mbed/integration_tests/unit-tests/test_app.py
src/test_driver/mbed/integration_tests/pigweed-app
src/test_driver/mbed/integration_tests/pigweed-app/__init__.py
src/test_driver/mbed/integration_tests/pigweed-app/test_app.py
...
粗测一下, 看看文件都是啥样的。大家可以自己试试。不需要用很专业的文件统计方法, 糙一点不要紧。 关键是不要有压力。
文档就用examples/all-clusters-app/linux做的例子。 所以这里面的文件类型应该是比较全的
connectedhomeip % find examples/all-clusters-app/linux
examples/all-clusters-app/linux
examples/all-clusters-app/linux/AppOptions.cpp
examples/all-clusters-app/linux/args.gni
examples/all-clusters-app/linux/WindowCoveringManager.cpp
examples/all-clusters-app/linux/BUILD.gn
examples/all-clusters-app/linux/AllClustersCommandDelegate.h
examples/all-clusters-app/linux/AppOptions.h
examples/all-clusters-app/linux/.gn
examples/all-clusters-app/linux/Dockerfile
examples/all-clusters-app/linux/include
examples/all-clusters-app/linux/include/CHIPProjectAppConfig.h
examples/all-clusters-app/linux/include/tv-callbacks.h
examples/all-clusters-app/linux/include/tv-callbacks.cpp
examples/all-clusters-app/linux/AllClustersCommandDelegate.cpp
examples/all-clusters-app/linux/README.md
examples/all-clusters-app/linux/WindowCoveringManager.h
examples/all-clusters-app/linux/entitlements
examples/all-clusters-app/linux/entitlements/codesign.py
examples/all-clusters-app/linux/third_party
examples/all-clusters-app/linux/third_party/connectedhomeip
examples/all-clusters-app/linux/build_overrides
examples/all-clusters-app/linux/fuzzing-main.cpp
examples/all-clusters-app/linux/entrypoint.sh
examples/all-clusters-app/linux/main-common.cpp
examples/all-clusters-app/linux/main.cpp
看起来可以直接关注cpp文件就好了。 没有c和cpp混合。简单点py咱们就不看了。 大概率是编译辅助。
connectedhomeip % find . | grep cpp | wc -l
10797
connectedhomeip % find examples | grep cpp | wc -l
839
connectedhomeip % find src | grep cpp | wc -l
1246
connectedhomeip % find third_party | grep cpp | wc -l
6917
connectedhomeip %
大约有这么多文件, 肯定看不过来。 咱们要抓重点。 看规模的目标是防止后面看代码的时候走偏。 要有一个防火墙。遇到哪些文件就要小心了。 当然, 最大的目标就是给大家信心。 你看一万个文件一把抓肯定干不完。 但是一千个是不是就放心一点了。 至少第三方库的几千个文件,可以不用看了。 其实1246个文件, 大概率也是看不完的。 那就继续递归一下。
你知道该怎么做吗? 下面是第二轮排查。方法和上面完全一样。 加深印象。
src目录文件数量
src % tree -L 1
.
├── BUILD.gn
├── CMakeLists.txt
├── README.md
├── access
├── app
├── ble
├── controller
├── credentials
├── crypto
├── darwin
├── include
├── inet
├── lib
├── lwip
├── messaging
├── platform
├── protocols
├── pybindings
├── python_testing
├── qrcodetool
├── setup_payload
├── system
├── test_driver
├── tools
├── tracing
└── transport
呃, 打脸了。 我要发挥害死猫的功力了。 这里要有好奇心了。 因为我手贱点了一下 README.md
Directory Structure
The CHIP
src
directory is structured as follows:
File / Folder Contents app Application Layer – Zigbee Cluster Library (ZCL) ble BLE Layer – Bluetooth Transport Protocol (BTP) controller Controller API crypto Cryptography libraries darwin Darwin Framework (iOS and macOS) include Public headers inet Network Layer – TCP and UDP endpoints lib Core and Support libraries lwip Lightweight IP adaptation (to third_party library) platform Device Layer – platform portability adaptations qrcodetool QR code tool setup_payload QR code setup data encode / decode library system System Layer – common APIs for mem, work, etc. test_driver Framework for on-device testing
开源的牛x之处, 就是你在猜, 他知道你再猜。然后他摊牌了。给你写明白了。
上面看到大约1200行代码。 那继续猜,那个文件夹最多, 你的兴趣应该是那个文件夹?
我感觉我应该更习惯lib文件夹, 很可能这个最多。 马上验证看看会不会打脸。
src % find lib | grep cpp | wc -l
196
src % find controller | grep cpp | wc -l
74
src % find platform | grep cpp | wc -l
479
src % find system | grep cpp | wc -l
21
src % find test_driver | grep cpp | wc -l
5
src % find lwip | grep cpp | wc -l
0
src % find inet | grep cpp | wc -l
30
src % find ble | grep cpp | wc -l
7
src % find app | grep cpp | wc -l
257
src % find darwin | grep cpp | wc -l
0
src % find crypto | grep cpp | wc -l
16
src % find include | grep cpp | wc -l
0
过程还是很搞笑的。 lib的核心代码文件数量的确不多。 然后我发现和互联网一样命名的controller, 看了一下依然不多。 不过感觉还开心。 要是太多, 后面看起来就更费劲了。 然后验证platform 文档上说上设备的适配。 那他文件多,但是代码应该不多。没有让喜欢适配大量代码。 后面一顿试验都发现没几个文件。 看样上面的问题我估计是要不及格了。 但是验证了我对这个matter的预期,就不应该代码量太大。 后面再验证一下, 初学者打脸才是常态。 总能猜对那你是大师了。 上面有几个脑残的验证, 我就留着了。 一个是lwip 文档说是第三方库,大概率是没下载的。 打脸了。 还有一个是include,里面不应该有cpp, 所以也是0. 之所以放上去是让大家知道, 要相信自己的某些正确的逻辑。对的就是对的,不是猜的。
第二轮验证完了。加密库暂时不看。 platform 往后推, 从业务到设备还需要时间, zigbee, ble协议先放一下。 先看wifi。 但是网络应该是通用的inet也不用看。 剩下的 lib, controller,一共280个文件。进行代码量验证。
如果代码没有覆盖全,后面再补
src % find lib | grep cpp | xargs cat | wc -l
52940
src % find controller | grep cpp | xargs cat | wc -l
159637
File / Folder Contents controller Controller API lib Core and Support libraries
咱们看到core支持的代码量只需要5w,但是api却需求16w行代码。
C++的质量好的库, 10w行一下都不用担心。 15w行只需要努力一下即可。不要害怕。
从1w个文件, 到20w行代码。 我觉得已经是很好的筛选了。当然,我还有更好用的命令清晰的展现一下这两个文件夹。
上结果: 一定要把这一串命令都看明白啊。 把cat去掉了。
第一列是文件行数!!!
src % find lib | grep cpp | xargs wc -l
436 lib/asn1/ASN1Reader.cpp
487 lib/asn1/ASN1Writer.cpp
587 lib/asn1/tests/TestASN1.cpp
129 lib/asn1/ASN1OID.cpp
147 lib/asn1/ASN1Time.cpp
98 lib/asn1/ASN1Error.cpp
335 lib/core/TLVCircularBuffer.cpp
176 lib/core/OTAImageHeader.cpp
361 lib/core/CHIPKeyIds.cpp
463 lib/core/CHIPError.cpp
21 lib/core/tests/FuzzTlvReader.cpp
4727 lib/core/tests/TestTLV.cpp
246 lib/core/tests/TestCATValues.cpp
265 lib/core/tests/TestOptional.cpp
132 lib/core/tests/TestReferenceCounted.cpp
272 lib/core/tests/TestCHIPCallback.cpp
218 lib/core/tests/TestOTAImageHeader.cpp
241 lib/core/tests/TestCHIPErrorStr.cpp
202 lib/core/ErrorStr.cpp
433 lib/core/TLVUtilities.cpp
1095 lib/core/TLVReader.cpp
250 lib/core/TLVUpdater.cpp
805 lib/core/TLVWriter.cpp
48 lib/core/TLVTags.cpp
378 lib/core/TLVDebug.cpp
144 lib/shell/streamer_esp32.cpp
79 lib/shell/streamer_ameba.cpp
62 lib/shell/streamer_mbed.cpp
91 lib/shell/streamer.cpp
107 lib/shell/streamer_mw320.cpp
73 lib/shell/streamer_mt793x.cpp
213 lib/shell/MainLoopDefault.cpp
66 lib/shell/streamer_silabs.cpp
243 lib/shell/streamer_nxp.cpp
181 lib/shell/MainLoopCYW30739.cpp
75 lib/shell/streamer_zephyr.cpp
148 lib/shell/tests/TestShellTokenizeLine.cpp
92 lib/shell/tests/TestShellStreamerStdio.cpp
65 lib/shell/streamer_bouffalolab.cpp
62 lib/shell/streamer_openiotsdk.cpp
111 lib/shell/streamer_cc13x2_26x2.cpp
114 lib/shell/MainLoopZephyr.cpp
101 lib/shell/streamer_asr.cpp
76 lib/shell/streamer_k32w.cpp
87 lib/shell/streamer_stdio.cpp
154 lib/shell/MainLoopAmeba.cpp
119 lib/shell/commands/BLE.cpp
114 lib/shell/commands/Stat.cpp
113 lib/shell/commands/Base64.cpp
37 lib/shell/commands/Help.cpp
75 lib/shell/commands/Device.cpp
97 lib/shell/commands/NFC.cpp
222 lib/shell/commands/Config.cpp
189 lib/shell/commands/Ota.cpp
184 lib/shell/commands/OnboardingCodes.cpp
78 lib/shell/commands/Meta.cpp
140 lib/shell/commands/WiFi.cpp
287 lib/shell/commands/Dns.cpp
109 lib/shell/streamer_cc13x4_26x4.cpp
134 lib/shell/Engine.cpp
95 lib/shell/MainLoopESP32.cpp
310 lib/shell/MainLoopMW320.cpp
66 lib/shell/streamer_qpg.cpp
77 lib/shell/streamer_cyw30739.cpp
250 lib/shell/MainLoopSilabs.cpp
217 lib/address_resolve/tests/TestAddressResolve_DefaultImpl.cpp
445 lib/address_resolve/AddressResolve_DefaultImpl.cpp
32 lib/address_resolve/AddressResolve.cpp
216 lib/address_resolve/tool.cpp
236 lib/support/BytesToHex.cpp
1586 lib/support/CHIPArgParser.cpp
63 lib/support/FibonacciUtils.cpp
184 lib/support/BytesCircularBuffer.cpp
93 lib/support/BufferWriter.cpp
562 lib/support/ThreadOperationalDataset.cpp
358 lib/support/Base64.cpp
91 lib/support/CHIPFaultInjection.cpp
52 lib/support/FixedBufferAllocator.cpp
153 lib/support/tests/TestScopedBuffer.cpp
199 lib/support/tests/TestErrorStr.cpp
295 lib/support/tests/TestBufferReader.cpp
184 lib/support/tests/TestSerializableIntegerSet.cpp
153 lib/support/tests/TestStringSplitter.cpp
190 lib/support/tests/TestUtf8.cpp
387 lib/support/tests/TestSpan.cpp
407 lib/support/tests/TestBytesCircularBuffer.cpp
311 lib/support/tests/TestStateMachine.cpp
206 lib/support/tests/TestCHIPMem.cpp
66 lib/support/tests/TestSafeString.cpp
318 lib/support/tests/TestBufferWriter.cpp
345 lib/support/tests/TestJsonToTlv.cpp
258 lib/support/tests/TestTlvJson.cpp
299 lib/support/tests/TestThreadOperationalDataset.cpp
1036 lib/support/tests/TestTimeUtils.cpp
82 lib/support/tests/TestFold.cpp
459 lib/support/tests/TestPool.cpp
61 lib/support/tests/TestOwnerOf.cpp
179 lib/support/tests/TestZclString.cpp
240 lib/support/tests/TestStringBuilder.cpp
363 lib/support/tests/TestPrivateHeap.cpp
367 lib/support/tests/TestSafeInt.cpp
195 lib/support/tests/TestPersistedCounter.cpp
84 lib/support/tests/TestFixedBufferAllocator.cpp
303 lib/support/tests/TestVariant.cpp
183 lib/support/tests/TestCHIPMemString.cpp
455 lib/support/tests/TestBytesToHex.cpp
261 lib/support/tests/TestIntrusiveList.cpp
64 lib/support/tests/TestDefer.cpp
1914 lib/support/tests/TestJsonToTlvToJson.cpp
111 lib/support/tests/TestIniEscaping.cpp
358 lib/support/tests/TestTestPersistentStorageDelegate.cpp
261 lib/support/tests/TestTlvToJson.cpp
97 lib/support/tests/TestCHIPCounter.cpp
810 lib/support/tests/TestCHIPArgParser.cpp
135 lib/support/tests/TestBitMask.cpp
76 lib/support/UnitTestRegistration.cpp
49 lib/support/ZclString.cpp
67 lib/support/CHIPMem.cpp
108 lib/support/BufferReader.cpp
501 lib/support/JniReferences.cpp
67 lib/support/StringBuilder.cpp
575 lib/support/TimeUtils.cpp
61 lib/support/verhoeff/Verhoeff.cpp
108 lib/support/verhoeff/Verhoeff10.cpp
365 lib/support/jsontlv/TlvToJson.cpp
249 lib/support/jsontlv/TlvJson.cpp
32 lib/support/jsontlv/TextFormat.cpp
469 lib/support/jsontlv/JsonToTlv.cpp
148 lib/support/IniEscaping.cpp
130 lib/support/CHIPMem-Simple.cpp
132 lib/support/CHIPMem-Malloc.cpp
123 lib/support/SerializableIntegerSet.cpp
331 lib/support/PersistentStorageAudit.cpp
84 lib/support/UnitTestUtils.cpp
185 lib/support/Pool.cpp
321 lib/support/PrivateHeap.cpp
194 lib/support/utf8.cpp
59 lib/support/logging/BinaryLogging.cpp
233 lib/support/logging/TextOnlyLogging.cpp
56 lib/support/CHIPPlatformMemory.cpp
620 lib/format/protocol_decoder.cpp
154 lib/format/tests/sample_data.cpp
719 lib/format/tests/TestDecoding.cpp
124 lib/format/tests/TestFlatTree.cpp
79 lib/format/tests/FuzzPayloadDecoder.cpp
274 lib/format/tests/TestFlatTreePosition.cpp
283 lib/dnssd/TxtFields.cpp
773 lib/dnssd/Discovery_ImplPlatform.cpp
257 lib/dnssd/platform/tests/TestPlatform.cpp
289 lib/dnssd/tests/TestServiceNaming.cpp
405 lib/dnssd/tests/TestActiveResolveAttempts.cpp
774 lib/dnssd/tests/TestTxtFields.cpp
447 lib/dnssd/tests/TestIncrementalResolve.cpp
199 lib/dnssd/ServiceNaming.cpp
86 lib/dnssd/Advertiser_ImplNone.cpp
976 lib/dnssd/Advertiser_ImplMinimalMdns.cpp
86 lib/dnssd/minimal_mdns/responders/IP.cpp
145 lib/dnssd/minimal_mdns/responders/tests/TestIPResponder.cpp
189 lib/dnssd/minimal_mdns/responders/tests/TestQueryResponder.cpp
148 lib/dnssd/minimal_mdns/responders/tests/TestPtrResponder.cpp
180 lib/dnssd/minimal_mdns/responders/QueryResponder.cpp
74 lib/dnssd/minimal_mdns/records/ResourceRecord.cpp
39 lib/dnssd/minimal_mdns/records/IP.cpp
85 lib/dnssd/minimal_mdns/records/tests/TestResourceRecordTxt.cpp
84 lib/dnssd/minimal_mdns/records/tests/TestResourceRecordPtr.cpp
89 lib/dnssd/minimal_mdns/records/tests/TestResourceRecordSrv.cpp
291 lib/dnssd/minimal_mdns/records/tests/TestResourceRecord.cpp
197 lib/dnssd/minimal_mdns/records/tests/TestResourceRecordIP.cpp
214 lib/dnssd/minimal_mdns/core/QName.cpp
56 lib/dnssd/minimal_mdns/core/QNameString.cpp
143 lib/dnssd/minimal_mdns/core/tests/TestFlatAllocatedQName.cpp
197 lib/dnssd/minimal_mdns/core/tests/TestRecordWriter.cpp
110 lib/dnssd/minimal_mdns/core/tests/TestHeapQName.cpp
338 lib/dnssd/minimal_mdns/core/tests/TestQName.cpp
145 lib/dnssd/minimal_mdns/core/RecordWriter.cpp
101 lib/dnssd/minimal_mdns/Logging.cpp
41 lib/dnssd/minimal_mdns/AddressPolicy.cpp
65 lib/dnssd/minimal_mdns/tests/FuzzPacketParsing.cpp
329 lib/dnssd/minimal_mdns/tests/TestMinimalMdnsAllocator.cpp
382 lib/dnssd/minimal_mdns/tests/TestResponseSender.cpp
265 lib/dnssd/minimal_mdns/tests/TestRecordData.cpp
621 lib/dnssd/minimal_mdns/tests/TestAdvertiser.cpp
122 lib/dnssd/minimal_mdns/tests/TestQueryReplyFilter.cpp
405 lib/dnssd/minimal_mdns/AddressPolicy_LibNlImpl.cpp
326 lib/dnssd/minimal_mdns/ResponseSender.cpp
135 lib/dnssd/minimal_mdns/RecordData.cpp
228 lib/dnssd/minimal_mdns/AddressPolicy_DefaultImpl.cpp
208 lib/dnssd/minimal_mdns/Parser.cpp
461 lib/dnssd/minimal_mdns/Server.cpp
767 lib/dnssd/Resolver_ImplMinimalMdns.cpp
66 lib/dnssd/ResolverProxy.cpp
78 lib/dnssd/MinimalMdnsServer.cpp
68 lib/dnssd/Resolver_ImplNone.cpp
371 lib/dnssd/IncrementalResolve.cpp
311 lib/dnssd/ActiveResolveAttempts.cpp
82 lib/dnssd/IPAddressSorter.cpp
52940 total
tests文件真多, 我好有把他们删掉的冲动 下面列一下controller的文件行数
src % find controller | grep cpp | xargs wc -l
379 controller/CommissioningWindowOpener.cpp
422 controller/ExampleOperationalCredentialsIssuer.cpp
564 controller/CHIPDeviceControllerFactory.cpp
992 controller/AutoCommissioner.cpp
670 controller/python/OpCredsBinding.cpp
96 controller/python/chip/tracing/TracingSetup.cpp
112 controller/python/chip/crypto/p256keypair.cpp
153 controller/python/chip/ble/LinuxImpl.cpp
87 controller/python/chip/native/CommonStackInit.cpp
85 controller/python/chip/native/ChipMainLoopWork_WorkSchedule.cpp
44 controller/python/chip/native/ChipMainLoopWork_StackLock.cpp
46 controller/python/chip/native/PyChipError.cpp
62 controller/python/chip/interaction_model/Delegate.cpp
275 controller/python/chip/clusters/command.cpp
605 controller/python/chip/clusters/attribute.cpp
105 controller/python/chip/discovery/NodeResolution.cpp
73 controller/python/chip/internal/ChipThreadWork.cpp
241 controller/python/chip/internal/CommissionerImpl.cpp
112 controller/python/chip/server/Options.cpp
207 controller/python/chip/server/ServerInit.cpp
62 controller/python/chip/utils/DeviceProxyUtils.cpp
69 controller/python/chip/setup_payload/Generator.cpp
91 controller/python/chip/setup_payload/Parser.cpp
56 controller/python/chip/logging/LoggingRedirect.cpp
49 controller/python/chip/credentials/cert.cpp
874 controller/python/ChipDeviceController-ScriptBinding.cpp
140 controller/python/ChipDeviceController-StorageDelegate.cpp
236 controller/python/ChipDeviceController-Discovery.cpp
55 controller/python/ChipDeviceController-ScriptPairingDeviceDiscoveryDelegate.cpp
108 controller/python/ChipDeviceController-IssueNocChain.cpp
182 controller/python/ChipDeviceController-ScriptDevicePairingDelegate.cpp
134 controller/python/ChipCommissionableNodeController-ScriptBinding.cpp
171 controller/CommissioningDelegate.cpp
744 controller/tests/TestWriteChunking.cpp
287 controller/tests/TestEventNumberCaching.cpp
1082 controller/tests/TestReadChunking.cpp
493 controller/tests/TestEventCaching.cpp
219 controller/tests/TestCommissionableNodeController.cpp
571 controller/tests/data_model/TestCommands.cpp
4759 controller/tests/data_model/TestRead.cpp
484 controller/tests/data_model/TestWrite.cpp
418 controller/tests/TestServerCommandDispatch.cpp
546 controller/tests/TestEventChunking.cpp
126 controller/CommissioneeDeviceProxy.cpp
119 controller/java/DeviceAttestationDelegateBridge.cpp
93 controller/java/AndroidCallbacks-JNI.cpp
102 controller/java/AndroidCurrentFabricRemover.cpp
41082 controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp
6717 controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp
8200 controller/java/zap-generated/CHIPInvokeCallbacks.cpp
59593 controller/java/zap-generated/CHIPReadCallbacks.cpp
14543 controller/java/zap-generated/CHIPClustersWrite-JNI.cpp
188 controller/java/AndroidCommissioningWindowOpener.cpp
83 controller/java/CHIPTLVValueDecoder-JNI.cpp
507 controller/java/AndroidOperationalCredentialsIssuer.cpp
105 controller/java/AndroidClusterExceptions.cpp
42 controller/java/AndroidControllerExceptions.cpp
413 controller/java/BdxOTASender.cpp
467 controller/java/OTAProviderDelegateBridge.cpp
140 controller/java/CHIPDefaultCallbacks.cpp
865 controller/java/AndroidCallbacks.cpp
383 controller/java/BaseCHIPCluster-JNI.cpp
840 controller/java/AndroidDeviceControllerWrapper.cpp
52 controller/java/AndroidCallbacks-ForTestJNI.cpp
2975 controller/java/CHIPDeviceController-JNI.cpp
93 controller/java/AttestationTrustStoreBridge.cpp
86 controller/AbstractDnssdDiscoveryController.cpp
3176 controller/CHIPDeviceController.cpp
320 controller/ExamplePersistentStorage.cpp
54 controller/CHIPCommissionableNodeController.cpp
27 controller/EmptyDataModelHandler.cpp
185 controller/CurrentFabricRemover.cpp
647 controller/SetUpCodePairer.cpp
254 controller/CommissionerDiscoveryController.cpp
159637 total
规范: 从文件名能看到文件的功能。 从行数能够姑苏复杂度。 你get到了吗?
我相信你看了此文, 将对matter的实现有了熟悉的感觉,不会再害怕。 但是源代码硬刚的文章还会继续。 欢迎订阅后等待下一片推送。
本文写于2023-12-13日星期三, 写作时间1天。如果你更晚时间看到此文, 可以在合集中找下一片文章。 明天继续。 期待你的订阅。 期待与你一起成长。