/* * AWS IoT Over-the-air Update v3.3.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /** * @file ota_mqtt_interface.h * @brief Contains OTA MQTT Statuses, function type definitions and mqtt interface structure. */ #ifndef OTA_MQTT_INTERFACE_H #define OTA_MQTT_INTERFACE_H /* *INDENT-OFF* */ #ifdef __cplusplus extern "C" { #endif /* *INDENT-ON* */ /* Standard library includes. */ #include #include /** * @otamqttpage * @brief The OTA PAL interface definition. * * @otamqttsectionoverview * * The OTA MQTT interface is a set of APIs that must be implemented by * a library to enable the OTA library to connect to AWS IoT and manage * notification and request data. The OTA library uses MQTT PUBLISH * messages to inform AWS IoT about the job status and receives notifications * and datablock over `job` and `stream` topics. * * The OTA MQTT interface is defined in @ref ota_mqtt_interface.h. *
* * The functions that must be implemented are:
* - [OTA MQTT Subscribe](@ref OtaMqttSubscribe_t) * - [OTA MQTT Unsubscribe](@ref OtaMqttSubscribe_t) * - [OTA MQTT Publish](@ref OtaMqttSubscribe_t) * * These functions can be grouped into the structure `OtaMqttInterface_t` * and passed to @ref OtaInterfaces_t to represent the MQTT interface. * @code{c} * OtaMqttInterface_t mqttInterface; * mqttInterface.subscribe = mqttSubscribe; * mqttInterface.unsubscribe = mqttUnsubscribe; * mqttInterface.publish = mqttPublish; * * .... * * OtaInterfaces_t otaInterfaces; * otaInterfaces.mqtt = mqttInterface * * .... * * OTA_Init( &otaBuffer, * &otaInterfaces, * ( CLIENT_IDENTIFIER ), * otaAppCallback ) * @endcode */ /** * @ingroup ota_enum_types * @brief The OTA MQTT interface return status. */ typedef enum OtaMqttStatus { OtaMqttSuccess = 0, /*!< @brief OTA MQTT interface success. */ OtaMqttPublishFailed = 0xa0, /*!< @brief Attempt to publish a MQTT message failed. */ OtaMqttSubscribeFailed, /*!< @brief Failed to subscribe to a topic. */ OtaMqttUnsubscribeFailed /*!< @brief Failed to unsubscribe from a topic. */ } OtaMqttStatus_t; /** * @brief Subscribe to the Mqtt topics. * * This function subscribes to the Mqtt topics with the Quality of service * received as parameter. This function also registers a callback for the * topicfilter. * * @param[pTopicFilter] Mqtt topic filter. * * @param[topicFilterLength] Length of the topic filter. * * @param[ucQoS] Quality of Service * * @return OtaMqttSuccess if success , other error code on failure. */ typedef OtaMqttStatus_t ( * OtaMqttSubscribe_t ) ( const char * pTopicFilter, uint16_t topicFilterLength, uint8_t ucQoS ); /** * @brief Unsubscribe to the Mqtt topics. * * This function unsubscribes to the Mqtt topics with the Quality of service * received as parameter. * * @param[pTopicFilter] Mqtt topic filter. * * @param[topicFilterLength] Length of the topic filter. * * @param[ucQoS] Quality of Service * * @return OtaMqttSuccess if success , other error code on failure. */ typedef OtaMqttStatus_t ( * OtaMqttUnsubscribe_t ) ( const char * pTopicFilter, uint16_t topicFilterLength, uint8_t ucQoS ); /** * @brief Publish message to a topic. * * This function publishes a message to a given topic & QoS. * * @param[pacTopic] Mqtt topic filter. * * @param[usTopicLen] Length of the topic filter. * * @param[pcMsg] Message to publish. * * @param[ulMsgSize] Message size. * * @param[ucQoS] Quality of Service * * @return OtaMqttSuccess if success , other error code on failure. */ typedef OtaMqttStatus_t ( * OtaMqttPublish_t )( const char * const pacTopic, uint16_t usTopicLen, const char * pcMsg, uint32_t ulMsgSize, uint8_t ucQoS ); /** * @ingroup ota_struct_types * @brief OTA Event Interface structure. */ typedef struct OtaMqttInterface { OtaMqttSubscribe_t subscribe; /*!< @brief Interface for subscribing to Mqtt topics. */ OtaMqttUnsubscribe_t unsubscribe; /*!< @brief interface for unsubscribing to MQTT topics. */ OtaMqttPublish_t publish; /*!< @brief Interface for publishing MQTT messages. */ } OtaMqttInterface_t; /* *INDENT-OFF* */ #ifdef __cplusplus } #endif /* *INDENT-ON* */ #endif /* ifndef OTA_MQTT_INTERFACE_H */