Files
Obsidian-Main/00. Inbox/vc-fwUpdate code trace(Meetup).canvas

57 lines
7.5 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"nodes":[
{"id":"6bfc707fe9365d07","x":-582,"y":-730,"width":250,"height":50,"type":"text","text":"`Initialize();`"},
{"id":"35301ec811a15aa2","x":-434,"y":-646,"width":283,"height":50,"type":"text","text":"`Impl::InitializeController()`"},
{"id":"58150c82625254cd","x":233,"y":-462,"width":662,"height":215,"type":"text","text":"`vc-fwUpdate\\Backends\\MeridianBackend\\registration.cpp`\n```cpp\nlogitech::fwupdate::backend::RegisterBackend(IUpdateController& controller) {\n\n}\n```\n\n這邊開始建立所有的 update task以下所列的 task 都繼承自 `class UpdateTask`\n使用 `controller.RegisterTask(...)` 來註冊各個 task"},
{"id":"e01a865b5a13d6e9","x":-247,"y":-537,"width":480,"height":51,"type":"text","text":"`controller_ = controller::CreateUpdateController();`"},
{"id":"7d8839591c30f61a","x":-247,"y":-462,"width":406,"height":60,"type":"text","text":"`backend::RegisterBackend(*controller_);`"},
{"id":"c1122f185b292a7c","x":-247,"y":-227,"width":480,"height":145,"type":"text","text":"`vc-fwUpdate\\Frontends-developer\\LogiFWUpdate\\Ui\\LogiFWUpdateDlg.cpp:2761`\n\n--------------------------------------------\n\n`InitializeImageProviders()`"},
{"id":"6aab61cd927b9307","x":-434,"y":-48,"width":311,"height":60,"type":"text","text":"`Impl::RegisterForPnpNotification()`"},
{"id":"dade636ce2d72147","x":-434,"y":40,"width":250,"height":60,"type":"text","text":"`Impl::InitializeTasks()`"},
{"id":"5d03eb8ecaadd1dd","x":-750,"y":-823,"width":337,"height":60,"type":"text","text":"`BOOL CLogiFWUpdateDlg::OnInitDialog()`"},
{"id":"5f57db192293a0ec","x":257,"y":-537,"width":168,"height":51,"type":"text","text":"`Impl() d_`"},
{"id":"5e7c147cd533a922","x":453,"y":-537,"width":289,"height":51,"type":"text","text":"`d_->CreatePnpProvider();`"},
{"id":"cd7947e8636e6b51","x":779,"y":-596,"width":347,"height":110,"type":"text","text":"建立一個看不見的window背後會有一個 thread 來接收 device notification events`WM_DEVICECHANGE`"},
{"id":"5db0c6d04d6655c7","x":1007,"y":-462,"width":269,"height":60,"type":"text","text":"`AudioDeviceUpdateTask`"},
{"id":"f3ccd922e41c8fa2","x":1007,"y":-396,"width":250,"height":60,"type":"text","text":"`BLEDeviceUpdateTask`"},
{"id":"3668ba992c38b26a","x":1007,"y":-330,"width":250,"height":60,"type":"text","text":"`AudioCodecUpdateTask`"},
{"id":"aa2444242b481f93","x":1007,"y":-247,"width":250,"height":55,"type":"text","text":"`VideoDeviceUpdateTask`"},
{"id":"eca2584c45b6e6d5","x":1007,"y":-167,"width":250,"height":60,"type":"text","text":"`VideoEepromUpdateTask`"},
{"id":"ce300adbc95c5a4b","x":-7,"y":40,"width":369,"height":113,"type":"text","text":"```cpp\nfor (...) {\n task->GetDeviceInfo(initialQuery)\n}\n```"},
{"id":"551e749e0cf332d3","x":427,"y":-28,"width":635,"height":249,"type":"text","text":"```cpp\nDoOpenDevice()\n⬇\nd_->OpenDevice();\n⬇\nUvcDeviceFactory().CreateUvcDevice({ UsbVidLogitech, UsbVideoPid });\n⬇\nWindowsUvcDevice::FindDevice(usbId);\n⬇\nImpl::OpenUvcDevice(usbId.Vid, usbId.Pid, devicePath, friendlyName);\n```"},
{"id":"18c6dbc9cf46e214","x":1132,"y":-33,"width":333,"height":260,"type":"text","text":"`Impl::OpenUvcDevice` 會使用\n```cpp\nSetupDiGetClassDevs(...)\nSetupDiEnumDeviceInterfaces(...)\n```\n等 API 來列舉裝置。\n\n----\n在 `Impl::OpenUvcDevice` 也會打開 XU 。\n在 `uvcDevice->d_->Init();` 裡面。"},
{"id":"c0e439a5140dbceb","x":1531,"y":-36,"width":443,"height":267,"type":"text","text":"`vc-fwUpdate\\UpdateController\\WindowsUvcDevice.cpp`\n\n----\n\n`uvcDevice->d_->Init();` 也就是 `Impl::Init()`\n會呼叫 `InitExtensionUnits();`,其呼叫順序:\n```cpp\nInitExtensionUnits();\n⬇\nEnumNodePropertySets();\n⬇\nDeviceIoControl(...)\n```\n\n"},
{"id":"cb5dc2c4eb714d15","x":-7,"y":231,"width":369,"height":223,"type":"text","text":"`vc-fwUpdate\\Frontends-developer\\LogiFWUpdate\\Ui\\LogiFWUpdateDlg.cpp:2117`\n\n----\n```cpp\nfor (...) {\n task->GetImageInfo();\n}\n```"},
{"id":"b272fd16c8f236a3","x":-7,"y":499,"width":432,"height":60,"type":"text","text":"```cpp\ncontroller_->SetTaskEnabled(taskId, enable);\n```"},
{"id":"7ff8bac3fc3253f1","x":-434,"y":642,"width":311,"height":55,"type":"text","text":"`Impl::InitializeDynamicControls()`"},
{"id":"798d72cd46e3502b","x":-582,"y":-1107,"width":388,"height":52,"type":"text","text":"`CLogiFWUpdateDlg::OnBnClickedUpdateDevice()`"},
{"id":"a659de4263799b85","x":362,"y":-1105,"width":291,"height":50,"type":"text","text":"`controller_->StartUpdate();`"},
{"id":"f6cfbfc1376ca01e","x":-123,"y":-1107,"width":424,"height":182,"type":"text","text":"`d_->PerformUpdate();`\n⬇\n```cpp\nbool CLogiFWUpdateDlg::Impl::PerformUpdate() {\n\n}\n```"},
{"id":"b398a6dd7e91ef4e","x":714,"y":-1073,"width":250,"height":60,"type":"text","text":"d_->StartUpdate();"}
],
"edges":[
{"id":"b621a476fd748a7d","fromNode":"35301ec811a15aa2","fromSide":"bottom","toNode":"e01a865b5a13d6e9","toSide":"left"},
{"id":"4c8321febd557726","fromNode":"35301ec811a15aa2","fromSide":"bottom","toNode":"7d8839591c30f61a","toSide":"left"},
{"id":"9189c6bb3b246620","fromNode":"e01a865b5a13d6e9","fromSide":"right","toNode":"5f57db192293a0ec","toSide":"left"},
{"id":"2e110f57dd9e5bd7","fromNode":"5f57db192293a0ec","fromSide":"right","toNode":"5e7c147cd533a922","toSide":"left"},
{"id":"532b641829d3f018","fromNode":"5e7c147cd533a922","fromSide":"right","toNode":"cd7947e8636e6b51","toSide":"left"},
{"id":"1b9ae28111c94762","fromNode":"7d8839591c30f61a","fromSide":"right","toNode":"58150c82625254cd","toSide":"left"},
{"id":"bafcfd90de5e5be7","fromNode":"58150c82625254cd","fromSide":"right","toNode":"5db0c6d04d6655c7","toSide":"left"},
{"id":"6cb9b23f0f009736","fromNode":"58150c82625254cd","fromSide":"right","toNode":"f3ccd922e41c8fa2","toSide":"left"},
{"id":"9aad0f03a71efc9c","fromNode":"58150c82625254cd","fromSide":"right","toNode":"3668ba992c38b26a","toSide":"left"},
{"id":"491802f7e6933c36","fromNode":"58150c82625254cd","fromSide":"right","toNode":"aa2444242b481f93","toSide":"left"},
{"id":"ff38d8bf4a41eb8e","fromNode":"58150c82625254cd","fromSide":"right","toNode":"eca2584c45b6e6d5","toSide":"left"},
{"id":"c9e94cf99468eddd","fromNode":"35301ec811a15aa2","fromSide":"bottom","toNode":"c1122f185b292a7c","toSide":"left"},
{"id":"91b93c94fe07a699","fromNode":"6bfc707fe9365d07","fromSide":"bottom","toNode":"35301ec811a15aa2","toSide":"left"},
{"id":"7df607f1045d8c07","fromNode":"6bfc707fe9365d07","fromSide":"bottom","toNode":"6aab61cd927b9307","toSide":"left"},
{"id":"a996f628d78564a0","fromNode":"6bfc707fe9365d07","fromSide":"bottom","toNode":"dade636ce2d72147","toSide":"left"},
{"id":"2969440a55132bf4","fromNode":"6bfc707fe9365d07","fromSide":"bottom","toNode":"7ff8bac3fc3253f1","toSide":"left"},
{"id":"59e4e9a99d0afb3b","fromNode":"5d03eb8ecaadd1dd","fromSide":"bottom","toNode":"6bfc707fe9365d07","toSide":"left"},
{"id":"8008ff58b9c0a3a0","fromNode":"ce300adbc95c5a4b","fromSide":"right","toNode":"551e749e0cf332d3","toSide":"left"},
{"id":"dbf07f00980f3a0f","fromNode":"551e749e0cf332d3","fromSide":"right","toNode":"18c6dbc9cf46e214","toSide":"left"},
{"id":"762bcd1254df7890","fromNode":"18c6dbc9cf46e214","fromSide":"right","toNode":"c0e439a5140dbceb","toSide":"left"},
{"id":"d03a2aa8290e6113","fromNode":"dade636ce2d72147","fromSide":"bottom","toNode":"ce300adbc95c5a4b","toSide":"left"},
{"id":"27e46e4e71993a05","fromNode":"dade636ce2d72147","fromSide":"bottom","toNode":"cb5dc2c4eb714d15","toSide":"left"},
{"id":"41d665388fdcd5fd","fromNode":"dade636ce2d72147","fromSide":"bottom","toNode":"b272fd16c8f236a3","toSide":"left"}
]
}