MeshTalos-Client/managed_components/espressif__esp-zigbee-lib/include/zgp/esp_zigbee_zgpd.h
2025-12-03 14:20:11 +08:00

230 lines
9.3 KiB
C

/*
* SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#pragma once
#include "stdio.h"
#include "esp_err.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief ZGP device application signal
*/
typedef enum esp_zb_zgpd_signal_e {
ESP_ZB_ZGPD_SIGNAL_DEVICE_STARTED_UP, /*!< During the startup process */
ESP_ZB_ZGPD_SIGNAL_COMMISSIONING, /*!< During the commissioning process */
} esp_zb_zgpd_signal_t;
/**
* @brief Supported command identifier for ZGP device
*
* @note 1. The recall scene 8-11 are got from LCGW. But GPPB specification does not define recall scenes 8-11. Only 8 scenes are supported.
* 2. 0x39 - 0x3F, 0x4C - 0x4F, 0x4C - 0x4F, 0x52 - 0x5F, 0x6b-0x6f, 0x70-0x9f, 0xA7 0xA9 - 0xAE, 0xC0 - 0xDF, 0xE5 - 0xEF Reserved
* 3. Manufacturer-defined GPD commands (payload is manufacturer-specific)
* 4. 0xB1 - 0xBE: Manufacturer-defined GPD commands (payload is manufacturer-specific)
* 5. 0xF4 - 0xF5: Reserved for other commands sent to the GPD
* 6. 0xF7 - 0xFF: Reserved for other commands sent to the GPD
*/
typedef enum esp_zb_zgpd_cmd_id_e {
ESP_ZB_GPDF_CMD_IDENTIFY = 0x00, /*!< Identify */
ESP_ZB_GPDF_CMD_RECALL_SCENE0 = 0x10, /*!< Recall scene */
ESP_ZB_GPDF_CMD_RECALL_SCENE1 = 0x11,
ESP_ZB_GPDF_CMD_RECALL_SCENE2 = 0x12,
ESP_ZB_GPDF_CMD_RECALL_SCENE3 = 0x13,
ESP_ZB_GPDF_CMD_RECALL_SCENE4 = 0x14,
ESP_ZB_GPDF_CMD_RECALL_SCENE5 = 0x15,
ESP_ZB_GPDF_CMD_RECALL_SCENE6 = 0x16,
ESP_ZB_GPDF_CMD_RECALL_SCENE7 = 0x17,
ESP_ZB_GPDF_CMD_RECALL_SCENE8 = 0x18,
ESP_ZB_GPDF_CMD_RECALL_SCENE9 = 0x19,
ESP_ZB_GPDF_CMD_RECALL_SCENE10 = 0x1A,
ESP_ZB_GPDF_CMD_RECALL_SCENE11 = 0x1B,
ESP_ZB_GPDF_CMD_STORE_SCENE4 = 0x1C, /*!< Store Scene */
ESP_ZB_GPDF_CMD_STORE_SCENE5 = 0x1D,
ESP_ZB_GPDF_CMD_STORE_SCENE6 = 0x1E,
ESP_ZB_GPDF_CMD_STORE_SCENE7 = 0x1F,
ESP_ZB_GPDF_CMD_OFF = 0x20, /*!< On/Off */
ESP_ZB_GPDF_CMD_ON = 0x21,
ESP_ZB_GPDF_CMD_TOGGLE = 0x22,
ESP_ZB_GPDF_CMD_RELEASE = 0x23,
ESP_ZB_GPDF_CMD_MOVE_UP = 0x30, /* Level control */
ESP_ZB_GPDF_CMD_MOVE_DOWN = 0x31,
ESP_ZB_GPDF_CMD_STEP_UP = 0x32,
ESP_ZB_GPDF_CMD_STEP_DOWN = 0x33,
ESP_ZB_GPDF_CMD_LC_STOP = 0x34,
ESP_ZB_GPDF_CMD_MOVE_UP_W_ONOFF = 0x35,
ESP_ZB_GPDF_CMD_MOVE_DOWN_W_ONOFF = 0x36,
ESP_ZB_GPDF_CMD_STEP_UP_W_ONOFF = 0x37,
ESP_ZB_GPDF_CMD_STEP_DOWN_W_ONOFF = 0x38,
ESP_ZB_GPDF_CMD_MOVE_HUE_STOP = 0x40, /* Color Control */
ESP_ZB_GPDF_CMD_MOVE_HUE_UP = 0x41,
ESP_ZB_GPDF_CMD_MOVE_HUE_DOWN = 0x42,
ESP_ZB_GPDF_CMD_STEP_HUE_UP = 0x43,
ESP_ZB_GPDF_CMD_STEP_HUE_DOWN = 0x44,
ESP_ZB_GPDF_CMD_MOVE_SATURATION_STOP = 0x45,
ESP_ZB_GPDF_CMD_MOVE_SATURATION_UP = 0x46,
ESP_ZB_GPDF_CMD_MOVE_SATURATION_DOWN = 0x47,
ESP_ZB_GPDF_CMD_STEP_SATURATION_UP = 0x48,
ESP_ZB_GPDF_CMD_STEP_SATURATION_DOWN = 0x49,
ESP_ZB_GPDF_CMD_MOVE_COLOR = 0x4A,
ESP_ZB_GPDF_CMD_STEP_COLOR = 0x4B,
ESP_ZB_GPDF_CMD_LOCK_DOOR = 0x50, /* Door Lock */
ESP_ZB_GPDF_CMD_UNLOCK_DOOR = 0x51,
ESP_ZB_GPDF_CMD_PRESS_1_OF_1 = 0x60, /* Simple Generic Switch */
ESP_ZB_GPDF_CMD_RELEASE_1_OF_1 = 0x61,
ESP_ZB_GPDF_CMD_PRESS_1_OF_2 = 0x62,
ESP_ZB_GPDF_CMD_RELEASE_1_OF_2 = 0x63,
ESP_ZB_GPDF_CMD_PRESS_2_OF_2 = 0x64,
ESP_ZB_GPDF_CMD_RELEASE_2_OF_2 = 0x65,
ESP_ZB_GPDF_CMD_SHORT_PRESS_1_OF_1 = 0x66,
ESP_ZB_GPDF_CMD_SHORT_PRESS_1_OF_2 = 0x67,
ESP_ZB_GPDF_CMD_SHORT_PRESS_2_OF_2 = 0x68,
ESP_ZB_GPDF_CMD_8BIT_VECTOR_PRESS = 0x69,
ESP_ZB_GPDF_CMD_8BIT_VECTOR_RELEASE = 0x6A,
ESP_ZB_GPDF_CMD_ATTR_REPORT = 0xA0,
ESP_ZB_GPDF_CMD_MANUF_SPEC_ATTR_REPORT = 0xA1,
ESP_ZB_GPDF_CMD_MULTI_CLUSTER_ATTR_REPORT = 0xA2,
ESP_ZB_GPDF_CMD_MANUF_SPEC_MULTI_CLUSTER_ATTR_REPORT = 0xA3,
ESP_ZB_GPDF_CMD_REQUEST_ATTRIBUTES = 0xA4,
ESP_ZB_GPDF_CMD_READ_ATTR_RESP = 0xA5,
ESP_ZB_GPDF_CMD_ZCL_TUNNELING_FROM_ZGPD = 0xA6,
ESP_ZB_GPDF_CMD_COMPACT_ATTR_REPORTING = 0xA8,
ESP_ZB_GPDF_CMD_ATTR_REPORT_ANY = 0xAF,
ESP_ZB_GPDF_CMD_MANUF_DEFINED_B0 = 0xB0,
ESP_ZB_GPDF_CMD_MANUF_DEFINED_BF = 0xBF,
ESP_ZB_GPDF_CMD_COMMISSIONING = 0xE0, /* commissioning from ZGPD */
ESP_ZB_GPDF_CMD_DECOMMISSIONING = 0xE1,
ESP_ZB_GPDF_CMD_SUCCESS = 0xE2,
ESP_ZB_GPDF_CMD_CHANNEL_REQUEST = 0xE3,
ESP_ZB_GPDF_CMD_APPLICATION_DESCR = 0xE4,
ESP_ZB_GPDF_CMD_COMMISSIONING_REPLY = 0xF0, /* GPDF commands sent to GPD */
ESP_ZB_GPDF_CMD_WRITE_ATTRIBUTES = 0xF1,
ESP_ZB_GPDF_CMD_READ_ATTRIBUTES = 0xF2,
ESP_ZB_GPDF_CMD_CHANNEL_CONFIGURATION = 0xF3,
ESP_ZB_GPDF_CMD_ZCL_TUNNELING_TO_ZGPD = 0xF6,
} esp_zb_zgpd_cmd_id_t;
/**
* @brief ZGP device commissioning signal callback
*/
typedef void (* esp_zb_zgpd_commissioning_signal_callback_t)(esp_zb_zgpd_signal_t, esp_err_t);
/**
* @brief ZGP device stack initialization
*
* @param cb A callback for indicating the commissioning process for ZGP device
*/
void esp_zb_zgpd_stack_init(esp_zb_zgpd_commissioning_signal_callback_t cb);
/**
* @brief ZGP device commissioning information initialization
*
* @param[in] zgp_app_id App identifier, refer to esp_zb_zgp_app_id_t
* @param[in] zgpd_commissioning_method Commissioning method, refer to esp_zb_zgpd_commissioning_method_t
* @param[in] zgpd_device_id Device identifier, refer to esp_zb_zgpd_dev_id_t
*/
void esp_zb_zgpd_init(uint8_t zgp_app_id, uint8_t zgpd_commissioning_method, uint8_t zgpd_device_id);
/**
* @brief ZGP device start
*
* @return
* - ESP_OK: on success
* - ESP_FAIL: on failed
*/
esp_err_t esp_zb_zgpd_dev_start(void);
/**
* @brief ZGP device main loop
*
*/
void esp_zb_zgpd_main_loop(void);
/**
* @brief ZGP device start commissioning
*
*/
void esp_zb_zgpd_start_commissioning(void);
/**
* @brief Set the source identifier for ZGP device
*
* @param src_id A 32-bit source identifier
*/
void esp_zb_zgpd_set_source_id(uint32_t src_id);
/**
* @brief Set the security information for ZGP device
*
* @param[in] level Security level
* @param[in] type Security type
* @param[in] key Security key
*/
void esp_zb_zgpd_set_security(uint8_t level, uint8_t type, uint8_t *key);
/**
* @brief Set the security out-of-the-box key for ZGP device
*
* @param[in] key The OOB key
*/
void esp_zb_zgpd_set_OOB_key(uint8_t *key);
/**
* @brief Set the channel for ZGP device
*
* @param[in] channel The channel will be set for device
*/
void esp_zb_zgpd_set_channel(uint8_t channel);
/**
* @brief Set the security level for ZGP device
*
* @param[in] level Security level
*/
void esp_zb_zgpd_set_security_level(uint8_t level);
/**
* @brief Set the type key of security for ZGP device
*
* @param[in] type Security type
*/
void esp_zb_zgpd_set_security_key_type(uint8_t type);
/**
* @brief Set the frame counter for ZGP device security
*
* @param[in] counter The value of frame counter
*/
void esp_zb_zgpd_set_security_frame_counter(uint16_t counter);
/**
* @brief Present the application information setting
*
* @param[in] presented The flag indicates whether to present the application information.
*/
void esp_zb_zgpd_set_application_info_present(uint8_t presented);
/**
* @brief ZGP device application information presented command setting
*
* @param[in] presented Whether present the application information of ZGP device
* @param[in] cmd The application information command, note that the first byte indicates the length of command.
*/
void esp_zb_zgpd_config_application_info_cmd(uint8_t presented, uint8_t* cmd);
/**
* @brief ZGP device send command
*
* @param[in] cmd_id The command identifier will be sent by the ZGP device
*/
void esp_zb_zgpd_send_command(esp_zb_zgpd_cmd_id_t cmd_id);
#ifdef __cplusplus
}
#endif