【メモ】IoT Plug and Playのデバイス実装コード

IoT Plug and PlayのAZ3166向けサンプルコードを調査。

github.com

★ ... Azure IoT SDK for C
☆ ... Azure IoT Device Workbench生成コード

main.ino

setup()
  connectIoTService()
    registerDeviceRetry()
      registerDevice()
        IoTHub_Init()★
        prov_dev_set_symmetric_key_info()★
        prov_dev_security_init()★
        Prov_Device_LL_Create()★
        Prov_Device_LL_Register_Device()★
        Prov_Device_LL_DoWork()★
        IoTHub_Deinit()★
    pnp_device_initialize()☆ ---> pnp_device.h/.c

loop()
  pnp_device_run()☆ ---> pnp_device.h/.c
  is_error_max()☆
  invokeDevKitPeripheral()

pnp_device.h/.c

pnp_device_initialize()
  tickcounter_create()★
  DigitalTwinClientHelper_InitializeDeviceHandle()☆
    IoTHub_Init()★
    IoTHubDeviceClient_LL_CreateFromConnectionString()★
    DigitalTwin_DeviceClient_LL_CreateFromDeviceHandle()★
  DeviceinfoInterface_Create()☆
    DigitalTwin_InterfaceClient_Create()★
  SensorsInterface_Create()☆
    DigitalTwin_InterfaceClient_Create()★
  LedsInterface_Create()☆
    DigitalTwin_InterfaceClient_Create()★
    DigitalTwin_InterfaceClient_SetCommandsCallback()★
  ScreenInterface_Create()☆
    DigitalTwin_InterfaceClient_Create()★
    DigitalTwin_InterfaceClient_SetCommandsCallback()★
  SettingsInterface_Create()☆
    DigitalTwin_InterfaceClient_Create()★
    DigitalTwin_InterfaceClient_SetPropertiesUpdatedCallback()★
  DigitalTwinClientHelper_RegisterInterfacesAndWait()☆
    DigitalTwin_DeviceClient_LL_RegisterInterfacesAsync()★
    DigitalTwin_DeviceClient_LL_DoWork()★
  DigitalTwinClientHelper_Check()☆
    DigitalTwin_DeviceClient_LL_DoWork()★
  DeviceinfoInterface_Property_ReportAll()☆
  tickcounter_get_current_ms()★
pnp_device_run()
  SensorsInterface_Telemetry_SendAll()☆
  DigitalTwinClientHelper_Check()☆
pnp_device_close()

digitaltwin_device_client_ll.h

DigitalTwin_DeviceClient_LL_CreateFromDeviceHandle()
DigitalTwin_DeviceClient_LL_RegisterInterfacesAsync()
DigitalTwin_DeviceClient_LL_DoWork()
DigitalTwin_DeviceClient_LL_Destroy()

digialtwin_interface_client.h

DigitalTwin_InterfaceClient_Create()
DigitalTwin_InterfaceClient_SetPropertiesUpdatedCallback()
DigitalTwin_InterfaceClient_SetCommandsCallback()
DigitalTwin_InterfaceClient_SendTelemetryAsync()
DigitalTwin_InterfaceClient_ReportPropertyAsync()
DigitalTwin_InterfaceClient_UpdateAsyncCommandStatusAsync()
DigitalTwin_InterfaceClient_Destroy()

考察

  • スケッチ -> Azure IoT Device Workbench生成コード -> Azure IoT SDK for C
  • 接続は、Privisoning -> IoTHubDeviceClient -> DigitalTwinDeviceClient
  • 低レベルは従来のIoTHubDeviceClientで、その上にDigitalTwinDeviceClientの模様
  • (Device Capability Modelから)Azure IoT Device Workbenchで生成したコードを使うと、項目毎のコールバック実装になる。(mxchip_iot_devkit_impl.h/.c)