query for a direct method using IoTHubDeviceClient_LL_SetDeviceMethodCallback()

kim taewoo 106 Reputation points
2020-12-01T00:36:22.207+00:00

Hi,

I need to send a ASYNC reply for the direct method from azure server because a task should be managed by other H/W component.

It seems that below API doesn't support IOTHUB_CLIENT_INBOUND_DEVICE_METHOD_CALLBACK.
IoTHubDeviceClient_LL_SetDeviceMethodCallback() - from iothub_device_client_ll.h

I can build IoTHubDeviceClient_LL_SetDeviceMethodCallback() with IOTHUB_CLIENT_INBOUND_DEVICE_METHOD_CALLBACK.

But this ask IoTHubClientCore_LL_DeviceMethodComplete() for IOTHUB_CLIENT_DEVICE_METHOD_CALLBACK_ASYNC.

[mqtt_client] <- 23:34:42 PUBLISH | IS_DUP: false | RETAIN: 0 | QOS: QOS_VALUE_INVALID | TOPIC_NAME: $iothub/methods/POST/wiztest/?$rid=1 | PAYLOAD_LEN: 2
Failure: IoTHubClientCore_LL_DeviceMethodComplete

And, I found that below API can support IOTHUB_CLIENT_INBOUND_DEVICE_METHOD_CALLBACK.
Could you please let me know whether I can use below API or not?

IoTHubClient_LL_SetDeviceMethodCallback_Ex() - from iothub_client_ll.h

I'm working with below release and it seems that iothub_client_ll.h is not deprecated on this.
azure-iot-sdk-c(LTS_07_2020_Ref01)

And I need to know what is a difference between below two APIs to decide the API should be used here.

  • iothub_client_ll.h
  • iothub_device_client_ll.h

Thanks in advance.

Azure IoT SDK
Azure IoT SDK
An Azure software development kit that facilitates building applications that connect to Azure IoT services.
207 questions
{count} votes

Accepted answer
  1. kim taewoo 106 Reputation points
    2020-12-01T01:43:44.997+00:00

    I found that below code changes can solve my problem.

    For now, I can send a ASYNC reply into Azure server using APIs of iothub_device_client_ll.h.

    <iothub_device_client.ll.h>
    //MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubDeviceClient_LL_SetDeviceMethodCallback, IOTHUB_DEVICE_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_DEVICE_METHOD_CALLBACK_ASYNC, deviceMethodCallback, void*, userContextCallback);
    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubDeviceClient_LL_SetDeviceMethodCallback, IOTHUB_DEVICE_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_INBOUND_DEVICE_METHOD_CALLBACK, deviceMethodCallback, void*, userContextCallback);

    <iothub_device_client_ll.c>
    //IOTHUB_CLIENT_RESULT IoTHubDeviceClient_LL_SetDeviceMethodCallback(IOTHUB_DEVICE_CLIENT_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_DEVICE_METHOD_CALLBACK_ASYNC deviceMethodCallback, void* userContextCallback)
    IOTHUB_CLIENT_RESULT IoTHubDeviceClient_LL_SetDeviceMethodCallback(IOTHUB_DEVICE_CLIENT_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_INBOUND_DEVICE_METHOD_CALLBACK deviceMethodCallback, void* userContextCallback)
    {
    //return IoTHubClientCore_LL_SetDeviceMethodCallback((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle, deviceMethodCallback, userContextCallback);
    return IoTHubClientCore_LL_SetDeviceMethodCallback_Ex((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle, deviceMethodCallback, userContextCallback);
    }

    2 people found this answer helpful.

0 additional answers

Sort by: Most helpful