硬刚matter源代码(涨经验)

崩溃

golang的代码无论多大,都不会有崩溃的感觉。 但是c++的代码总是给人这种感觉。 因为涉及的底层太多, 代码思路, 编译思路, debug流程, 细节都很多。
我相信但凡有点源代码阅读能力的, 都知道一个法宝: 视而不见。 绕过去,再绕过去, 重新绕一遍。

我试着找一个好的入门方案, 看是不是有第三方整理好了, 比如matter的源代码编译出so,然后让python来调用, 比如ESP32的教程是不是会更简单。 我不得不赞赏ESP对matter重新封装了一下,但是我依然要应对绕进来的其他风险, 购买,选型, 编译,调试, ESP的方案我肯定是要试用的,应该晚一些。

我期望是一个干净通用的平台, 不是专门定制过的os。 我期望学到的东西是能给所有板子上使用都有用的知识。

我甚至下载了matter的官方文档, 然后用谷歌翻译成中文。 还是硬刚一下代码吧。 或许硬刚能收获更快。 最直接。 不用绕,用自己的思想去理解代码。

我相信matter的代码质量。 let‘s go!

好方法很重要

我读过各种复杂度的代码,有一些大型代码的快速阅读经验。 希望大家能学到,然后分享给朋友们。 微信订阅号可以看个大概。有感性认识, 同时我博客也分享了这个文章给电脑上实验的朋友们。 https://antriver.com 我放在物联网分类下
大概率还是要猜,然后进行验证,读者的能力和作者的能力进行碰撞,会让读者水平提高很快。 建议在linux/macos下实验

前提

代码太复杂,我找的信息可能来自编译结果。

整体认识代码量

文件数量

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天。如果你更晚时间看到此文, 可以在合集中找下一片文章。 明天继续。 期待你的订阅。 期待与你一起成长。