in sdk/src/azure/iot/az_iot_adu_client.c [151:347]
AZ_NODISCARD az_result az_iot_adu_client_get_agent_state_payload(
az_iot_adu_client* client,
az_iot_adu_client_device_properties* device_properties,
az_iot_adu_client_agent_state agent_state,
az_iot_adu_client_workflow* workflow,
az_iot_adu_client_install_result* last_install_result,
az_json_writer* ref_json_writer)
{
_az_PRECONDITION_NOT_NULL(client);
_az_PRECONDITION_NOT_NULL(device_properties);
_az_PRECONDITION_VALID_SPAN(device_properties->manufacturer, 1, false);
_az_PRECONDITION_VALID_SPAN(device_properties->model, 1, false);
_az_PRECONDITION_VALID_SPAN(device_properties->update_id, 1, false);
_az_PRECONDITION_VALID_SPAN(device_properties->adu_version, 1, false);
_az_PRECONDITION_NOT_NULL(ref_json_writer);
uint8_t step_id_scratch_buffer[7];
/* Update reported property */
_az_RETURN_IF_FAILED(az_json_writer_append_begin_object(ref_json_writer));
/* Fill the ADU agent component name. */
_az_RETURN_IF_FAILED(az_iot_hub_client_properties_writer_begin_component(
NULL, ref_json_writer, AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_COMPONENT_NAME)));
/* Fill the agent property name. */
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer, AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_AGENT)));
_az_RETURN_IF_FAILED(az_json_writer_append_begin_object(ref_json_writer));
/* Fill the deviceProperties. */
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer, AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_DEVICEPROPERTIES)));
_az_RETURN_IF_FAILED(az_json_writer_append_begin_object(ref_json_writer));
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer, AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_MANUFACTURER)));
_az_RETURN_IF_FAILED(
az_json_writer_append_string(ref_json_writer, device_properties->manufacturer));
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer, AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_MODEL)));
_az_RETURN_IF_FAILED(az_json_writer_append_string(ref_json_writer, device_properties->model));
if (device_properties->custom_properties != NULL)
{
for (int32_t custom_property_index = 0;
custom_property_index < device_properties->custom_properties->count;
custom_property_index++)
{
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer, device_properties->custom_properties->names[custom_property_index]));
_az_RETURN_IF_FAILED(az_json_writer_append_string(
ref_json_writer, device_properties->custom_properties->values[custom_property_index]));
}
}
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer, AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_CONTRACT_MODEL_ID)));
_az_RETURN_IF_FAILED(az_json_writer_append_string(
ref_json_writer, AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_CONTRACT_MODEL_ID)));
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer, AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_ADU_VERSION)));
_az_RETURN_IF_FAILED(
az_json_writer_append_string(ref_json_writer, device_properties->adu_version));
if (!az_span_is_content_equal(
device_properties->delivery_optimization_agent_version, AZ_SPAN_EMPTY))
{
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer, AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_DO_VERSION)));
_az_RETURN_IF_FAILED(az_json_writer_append_string(
ref_json_writer, device_properties->delivery_optimization_agent_version));
}
_az_RETURN_IF_FAILED(az_json_writer_append_end_object(ref_json_writer));
/* Fill the compatibility property names. */
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer,
AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_COMPAT_PROPERTY_NAMES)));
_az_RETURN_IF_FAILED(az_json_writer_append_string(
ref_json_writer, client->_internal.options.device_compatibility_properties));
/* Add last installed update information */
if (last_install_result != NULL)
{
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer,
AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_LAST_INSTALL_RESULT)));
_az_RETURN_IF_FAILED(az_json_writer_append_begin_object(ref_json_writer));
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer, AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_RESULT_CODE)));
_az_RETURN_IF_FAILED(
az_json_writer_append_int32(ref_json_writer, last_install_result->result_code));
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer,
AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_EXTENDED_RESULT_CODE)));
_az_RETURN_IF_FAILED(
az_json_writer_append_int32(ref_json_writer, last_install_result->extended_result_code));
if (!az_span_is_content_equal(last_install_result->result_details, AZ_SPAN_EMPTY))
{
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer, AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_RESULT_DETAILS)));
_az_RETURN_IF_FAILED(
az_json_writer_append_string(ref_json_writer, last_install_result->result_details));
}
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer, AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_STEP_RESULTS)));
_az_RETURN_IF_FAILED(az_json_writer_append_begin_object(ref_json_writer));
for (int32_t i = 0; i < last_install_result->step_results_count; i++)
{
az_span step_id = AZ_SPAN_FROM_BUFFER(step_id_scratch_buffer);
_az_RETURN_IF_FAILED(_generate_step_id(step_id, (uint32_t)i, &step_id));
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(ref_json_writer, step_id));
_az_RETURN_IF_FAILED(az_json_writer_append_begin_object(ref_json_writer));
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer, AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_RESULT_CODE)));
_az_RETURN_IF_FAILED(az_json_writer_append_int32(
ref_json_writer, last_install_result->step_results[i].result_code));
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer,
AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_EXTENDED_RESULT_CODE)));
_az_RETURN_IF_FAILED(az_json_writer_append_int32(
ref_json_writer, last_install_result->step_results[i].extended_result_code));
if (!az_span_is_content_equal(
last_install_result->step_results[i].result_details, AZ_SPAN_EMPTY))
{
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer,
AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_RESULT_DETAILS)));
_az_RETURN_IF_FAILED(az_json_writer_append_string(
ref_json_writer, last_install_result->step_results[i].result_details));
}
_az_RETURN_IF_FAILED(az_json_writer_append_end_object(ref_json_writer));
}
_az_RETURN_IF_FAILED(az_json_writer_append_end_object(ref_json_writer));
_az_RETURN_IF_FAILED(az_json_writer_append_end_object(ref_json_writer));
}
/* Fill the agent state. */
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer, AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_STATE)));
_az_RETURN_IF_FAILED(az_json_writer_append_int32(ref_json_writer, (int32_t)agent_state));
/* Fill the workflow. */
if (workflow != NULL && (az_span_ptr(workflow->id) != NULL && az_span_size(workflow->id) > 0))
{
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer, AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_WORKFLOW)));
_az_RETURN_IF_FAILED(az_json_writer_append_begin_object(ref_json_writer));
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer, AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_ACTION)));
_az_RETURN_IF_FAILED(az_json_writer_append_int32(ref_json_writer, (int32_t)workflow->action));
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer, AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_ID)));
_az_RETURN_IF_FAILED(az_json_writer_append_string(ref_json_writer, workflow->id));
/* Append retry timestamp in workflow if existed. */
if (!az_span_is_content_equal(workflow->retry_timestamp, AZ_SPAN_EMPTY))
{
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer,
AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_RETRY_TIMESTAMP)));
_az_RETURN_IF_FAILED(
az_json_writer_append_string(ref_json_writer, workflow->retry_timestamp));
}
_az_RETURN_IF_FAILED(az_json_writer_append_end_object(ref_json_writer));
}
/* Fill installed update id. */
_az_RETURN_IF_FAILED(az_json_writer_append_property_name(
ref_json_writer,
AZ_SPAN_FROM_STR(AZ_IOT_ADU_CLIENT_AGENT_PROPERTY_NAME_INSTALLED_UPDATE_ID)));
_az_RETURN_IF_FAILED(az_json_writer_append_string(ref_json_writer, device_properties->update_id));
_az_RETURN_IF_FAILED(az_json_writer_append_end_object(ref_json_writer));
_az_RETURN_IF_FAILED(az_iot_hub_client_properties_writer_end_component(NULL, ref_json_writer));
_az_RETURN_IF_FAILED(az_json_writer_append_end_object(ref_json_writer));
return AZ_OK;
}