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;
}