145 lines
6.4 KiB
C
145 lines
6.4 KiB
C
/*
|
||
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
|
||
*
|
||
* SPDX-License-Identifier: Apache-2.0
|
||
*/
|
||
|
||
#pragma once
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
#include "esp_err.h"
|
||
#include "esp_zigbee_type.h"
|
||
|
||
/**
|
||
* @brief The basic zcl information for OTA command
|
||
*
|
||
*/
|
||
typedef struct esp_zb_ota_zcl_information_s {
|
||
esp_zb_zcl_addr_t src_addr; /*!< The source address */
|
||
uint16_t dst_short_addr; /*!< The destination short address */
|
||
uint8_t src_endpoint; /*!< The source endpoint identifier */
|
||
uint8_t dst_endpoint; /*!< The destination endpoint identifier */
|
||
uint16_t cluster_id; /*!< The cluster identifier */
|
||
uint16_t profile_id; /*!< The profile identifier */
|
||
uint8_t command_id; /*!< The command identifier */
|
||
uint16_t manufacturer_specific; /*!< The manufacturer specific data */
|
||
} esp_zb_ota_zcl_information_t;
|
||
|
||
/**
|
||
* @brief The ZCL ota upgrade header optional structure
|
||
*
|
||
*/
|
||
typedef struct esp_zb_ota_file_optional_s {
|
||
uint8_t security_credential_version; /*!< Indicate security credential version type such as SE1.0 or SE2.0 that the client
|
||
is required to have, before it SHALL install the image. */
|
||
esp_zb_ieee_addr_t upgrade_file_destination;/*!< Indicates that this OTA file contains security credential/certificate data or
|
||
other type of information that is specific to a particular device.*/
|
||
uint16_t minimum_hardware_version; /*!< Represent the earliest hardware platform version this image SHOULD be used on. */
|
||
uint16_t maximum_hardware_version; /*!< Represent the latest hardware platform version this image SHOULD be used on. */
|
||
} esp_zb_ota_file_optional_t;
|
||
|
||
/**
|
||
* @brief The Zigbee ZCL OTA file header struct.
|
||
*
|
||
*/
|
||
typedef struct esp_zb_ota_file_header_s {
|
||
uint16_t manufacturer_code; /*!< OTA header manufacturer code */
|
||
uint16_t image_type; /*!< Image type value to distinguish the products */
|
||
uint32_t file_version; /*!< File version represents the release and build number of the image’s application and stack */
|
||
uint32_t image_size; /*!< Total image size in bytes transferred from the server to the client */
|
||
uint16_t field_control; /*!< Indicate whether additional optional information */
|
||
esp_zb_ota_file_optional_t optional; /*!< The optional header controlled by the filed control, @see esp_zb_ota_file_optional_t */
|
||
} esp_zb_ota_file_header_t;
|
||
|
||
/**
|
||
* @brief A callback for the OTA Server to retrieve the next OTA data
|
||
*
|
||
* @param[in] message The message will provide the basic OTA cluster information, @ref esp_zb_ota_zcl_information_s
|
||
* @param[in] index The index of the OTA file
|
||
* @param[in] size The size indicates how many bytes the user needs to allocate for the @p data
|
||
* @param[out] data The next OTA data that will be transmit to OTA Client by the OTA Server
|
||
*
|
||
*/
|
||
typedef esp_err_t (*esp_zb_ota_next_data_callback_t)(esp_zb_ota_zcl_information_t message, uint16_t index, uint8_t size, uint8_t **data);
|
||
|
||
/**
|
||
* @brief The Zigbee ZCL OTA upgrade client variable configuration struct.
|
||
*
|
||
*/
|
||
typedef struct esp_zb_zcl_ota_upgrade_client_variable_s {
|
||
uint16_t timer_query; /*!< The field indicates the time of querying OTA image for OTA upgrade client */
|
||
uint16_t hw_version; /*!< The hardware version */
|
||
uint8_t max_data_size; /*!< The maximum size of OTA data */
|
||
} esp_zb_zcl_ota_upgrade_client_variable_t;
|
||
|
||
/**
|
||
* @brief The Zigbee ZCL OTA upgrade server variable configuration struct.
|
||
*
|
||
*/
|
||
typedef struct esp_zb_zcl_ota_upgrade_server_variable_s {
|
||
uint8_t query_jitter; /*!< Query jitter */
|
||
uint32_t current_time; /*!< Current time of OTA server */
|
||
uint8_t file_count; /*!< The field specifies the maximum number of OTA files for the OTA upgrade server variable. */
|
||
} esp_zb_zcl_ota_upgrade_server_variable_t;
|
||
|
||
/**
|
||
* @brief The Zigbee ZCL OTA upgrade server notification request struct
|
||
*
|
||
*/
|
||
typedef struct esp_zb_ota_upgrade_server_notify_req_s {
|
||
uint8_t endpoint; /*!< The endpoint identifier for ota server cluster */
|
||
uint8_t index; /*!< The index of OTA file */
|
||
uint8_t notify_on; /*!< The field indicates whether send the notification request directly */
|
||
uint32_t ota_upgrade_time; /*!< The time indicates the interval for the OTA file upgrade after the OTA process is completed */
|
||
esp_zb_ota_file_header_t ota_file_header; /*!< The header is used to register the basic OTA upgrade information */
|
||
esp_zb_ota_next_data_callback_t next_data_cb; /*!< The callback is used to retrieve the next OTA data, which will be transmitted to the OTA client side */
|
||
} esp_zb_ota_upgrade_server_notify_req_t;
|
||
|
||
/********************* Declare functions **************************/
|
||
/**
|
||
* @brief Notify the image upgrade event of OTA upgrade server
|
||
*
|
||
* @param[in] req The OTA file information request @ref esp_zb_ota_upgrade_server_notify_req_s
|
||
* @return
|
||
* - ESP_OK: On success
|
||
* - ESP_ERR_NOT_FOUND: Not found the variable table in the OTA server side
|
||
* - ESP_ERR_INVALID_ARG: The input arguments are incorrect or invalid.
|
||
*/
|
||
esp_err_t esp_zb_ota_upgrade_server_notify_req(esp_zb_ota_upgrade_server_notify_req_t *req);
|
||
|
||
/**
|
||
* @brief Send the OTA upgrade client query image request
|
||
*
|
||
* @param[in] server_addr The short address of the OTA upgrade server that the client expect to query
|
||
* @param[in] server_ep The endpoint identifier of the OTA upgrade server with OTA image
|
||
* @return
|
||
* - ESP_OK: On success
|
||
* - ESP_FAIL: On failed
|
||
*/
|
||
esp_err_t esp_zb_ota_upgrade_client_query_image_req(uint16_t server_ep, uint8_t server_addr);
|
||
|
||
/**
|
||
* @brief Set the interval of query for OTA upgrade client
|
||
*
|
||
* @param[in] endpoint The endpoint identifier of OTA upgrade client resides
|
||
* @param[in] interval The interval in minute
|
||
* @return
|
||
* - ESP_OK: On success
|
||
* - ESP_FAIL: On failed
|
||
*/
|
||
esp_err_t esp_zb_ota_upgrade_client_query_interval_set(uint8_t endpoint, uint16_t interval);
|
||
|
||
/**
|
||
* @brief Stop the image query of OTA upgrade client
|
||
*
|
||
* @return
|
||
* - ESP_OK: On success
|
||
* - ESP_FAIL: On failed
|
||
*/
|
||
esp_err_t esp_zb_ota_upgrade_client_query_image_stop(void);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|