AzureIoTResult_t AzureIoTADUClient_SendAgentState()

in source/azure_iot_adu_client.c [434:497]


AzureIoTResult_t AzureIoTADUClient_SendAgentState( AzureIoTADUClient_t * pxAzureIoTADUClient,
                                                   AzureIoTHubClient_t * pxAzureIoTHubClient,
                                                   AzureIoTADUClientDeviceProperties_t * pxDeviceProperties,
                                                   AzureIoTADUUpdateRequest_t * pxAduUpdateRequest,
                                                   AzureIoTADUAgentState_t xAgentState,
                                                   AzureIoTADUClientInstallResult_t * pxUpdateResults,
                                                   uint8_t * pucBuffer,
                                                   uint32_t ulBufferSize,
                                                   uint32_t * pulRequestId )
{
    az_result xAzResult;
    az_iot_adu_client_device_properties xBaseADUDeviceProperties;
    az_iot_adu_client_workflow xBaseWorkflow;
    az_iot_adu_client_install_result xInstallResult;
    az_json_writer jw;
    az_span xPropertiesPayload;

    if( ( pxAzureIoTADUClient == NULL ) || ( pxAzureIoTHubClient == NULL ) ||
        ( pxDeviceProperties == NULL ) || ( pucBuffer == NULL ) || ( ulBufferSize == 0 ) )
    {
        AZLogError( ( "AzureIoTADUClient_SendAgentState failed: invalid argument" ) );
        return eAzureIoTErrorInvalidArgument;
    }

    prvFillBaseAduDeviceProperties( pxDeviceProperties, &xBaseADUDeviceProperties );
    prvFillBaseAduWorkflow( pxAduUpdateRequest, &xBaseWorkflow );
    prvFillBaseAduInstallResults( pxUpdateResults, &xInstallResult );

    xAzResult = az_json_writer_init( &jw, az_span_create( pucBuffer, ( int32_t ) ulBufferSize ), NULL );

    if( az_result_failed( xAzResult ) )
    {
        AZLogError( ( "az_json_writer_init failed: 0x%08x", ( uint16_t ) xAzResult ) );
        return AzureIoT_TranslateCoreError( xAzResult );
    }

    xAzResult = az_iot_adu_client_get_agent_state_payload(
        &pxAzureIoTADUClient->_internal.xADUClient,
        &xBaseADUDeviceProperties,
        ( az_iot_adu_client_agent_state ) xAgentState,
        pxAduUpdateRequest != NULL ? &xBaseWorkflow : NULL,
        pxUpdateResults != NULL ? &xInstallResult : NULL,
        &jw );

    if( az_result_failed( xAzResult ) )
    {
        AZLogError( ( "az_iot_adu_client_get_agent_state_payload failed: 0x%08x", ( uint16_t ) xAzResult ) );
        return AzureIoT_TranslateCoreError( xAzResult );
    }

    xPropertiesPayload = az_json_writer_get_bytes_used_in_destination( &jw );

    if( AzureIoTHubClient_SendPropertiesReported(
            pxAzureIoTHubClient,
            az_span_ptr( xPropertiesPayload ),
            ( uint32_t ) az_span_size( xPropertiesPayload ),
            pulRequestId ) != eAzureIoTSuccess )
    {
        AZLogError( ( "[ADU] Failed sending ADU agent state." ) );
        return eAzureIoTErrorPublishFailed;
    }

    return eAzureIoTSuccess;
}