#![allow(non_upper_case_globals)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
pub const PROFILE_HA: u16 = 0x0104;
pub const CLUSTER_BASIC: u16 = 0x0000;
pub const CLUSTER_IDENTIFY: u16 = 0x0003;
pub const CLUSTER_SCENES: u16 = 0x0005;
pub use huesmith_core::hue::scene::{CLUSTER_COLOR_CONTROL, CLUSTER_LEVEL_CONTROL, CLUSTER_ON_OFF};
pub const MANUF_CODE_SIGNIFY: u16 = 0x100B;
pub const ATTR_BASIC_ZCL_VERSION: u16 = 0x0000;
pub const ATTR_BASIC_HW_VERSION: u16 = 0x0003;
pub const ATTR_BASIC_MANUFACTURER_NAME: u16 = 0x0004;
pub const ATTR_BASIC_MODEL_IDENTIFIER: u16 = 0x0005;
pub const ATTR_BASIC_DATE_CODE: u16 = 0x0006;
pub const ATTR_BASIC_SW_BUILD_ID: u16 = 0x4000;
pub const ATTR_ON_OFF: u16 = 0x0000;
pub const ATTR_ON_OFF_GLOBAL_SCENE_CONTROL: u16 = 0x4000;
pub const ATTR_ON_OFF_ON_TIME: u16 = 0x4001;
pub const ATTR_ON_OFF_OFF_WAIT_TIME: u16 = 0x4002;
pub const ATTR_ON_OFF_START_UP_ON_OFF: u16 = 0x4003;
pub const ATTR_LEVEL_CURRENT_LEVEL: u16 = 0x0000;
pub const ATTR_LEVEL_OPTIONS: u16 = 0x000F;
pub const ATTR_LEVEL_START_UP_CURRENT_LEVEL: u16 = 0x4000;
pub const ATTR_COLOR_CURRENT_HUE: u16 = 0x0000;
pub const ATTR_COLOR_CURRENT_SATURATION: u16 = 0x0001;
pub const ATTR_COLOR_CURRENT_X: u16 = 0x0003;
pub const ATTR_COLOR_CURRENT_Y: u16 = 0x0004;
pub const ATTR_COLOR_TEMPERATURE_MIREDS: u16 = 0x0007;
pub const ATTR_COLOR_MODE: u16 = 0x0008;
pub const ATTR_COLOR_ENHANCED_CURRENT_HUE: u16 = 0x4000;
pub const ATTR_COLOR_ENHANCED_COLOR_MODE: u16 = 0x4001;
pub const ATTR_COLOR_LOOP_ACTIVE: u16 = 0x4002;
pub const ATTR_COLOR_LOOP_DIRECTION: u16 = 0x4003;
pub const ATTR_COLOR_LOOP_TIME: u16 = 0x4004;
pub const ATTR_COLOR_LOOP_START_ENHANCED_HUE: u16 = 0x4005;
pub const ATTR_COLOR_LOOP_STORED_ENHANCED_HUE: u16 = 0x4006;
pub const ATTR_COLOR_CAPABILITIES: u16 = 0x400A;
pub const ATTR_COLOR_TEMP_PHYSICAL_MIN_MIREDS: u16 = 0x400B;
pub const ATTR_COLOR_TEMP_PHYSICAL_MAX_MIREDS: u16 = 0x400C;
pub const ATTR_COLOR_COUPLE_COLOR_TEMP_TO_LEVEL_MIN_MIREDS: u16 = 0x400D;
pub const ATTR_COLOR_START_UP_COLOR_TEMPERATURE_MIREDS: u16 = 0x4010;
pub const COLOR_MODE_HUE_SAT: u8 = 0x00;
pub const COLOR_MODE_XY: u8 = 0x01;
pub const COLOR_MODE_COLOR_TEMP: u8 = 0x02;
pub const ENHANCED_COLOR_MODE_HUE_SAT: u8 = 0x00;
pub const ENHANCED_COLOR_MODE_XY: u8 = 0x01;
pub const ENHANCED_COLOR_MODE_COLOR_TEMP: u8 = 0x02;
pub const ENHANCED_COLOR_MODE_ENHANCED_HUE_SAT: u8 = 0x03;
pub const POWER_SOURCE_MAINS: u8 = 0x01;
pub use huesmith_core::hue::scene::{CMD_SCENES_ADD_SCENE, CMD_SCENES_ENHANCED_ADD_SCENE};
pub const ZCL_ATTR_TYPE_BOOL: u8 = 0x10;
pub const ZCL_ATTR_TYPE_U8: u8 = 0x20;
pub const ZCL_ATTR_TYPE_U16: u8 = 0x21;
pub const ZCL_ATTR_TYPE_ENUM8: u8 = 0x30;
pub const ZCL_STATUS_SUCCESS: u8 = 0x00;
pub const ZCL_STATUS_INVALID_FIELD: u8 = 0x85;
pub const BDB_MODE_INITIALIZATION: u8 = 0;
pub const BDB_MODE_NETWORK_STEERING: u8 = 2;
pub const ALL_CHANNELS_MASK: u32 = 0x07FFF800;
pub const ZLL_TC_LINK_KEY: [u8; 16] = [
0x81, 0x42, 0x86, 0x86, 0x5D, 0xC1, 0xC8, 0xB2, 0xC8, 0xCB, 0xC5, 0x2E, 0x5D, 0x65, 0xD1, 0xB8,
];
#[repr(C)]
#[derive(Clone, Copy)]
pub struct uart_config_t {
pub baud_rate: i32,
pub data_bits: i32,
pub parity: i32,
pub stop_bits: i32,
pub flow_ctrl: i32,
pub rx_flow_ctrl_thresh: u8,
_pad: [u8; 3],
pub source_clk: i32,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct esp_zb_uart_config_t {
pub port: i32,
pub rx_pin: i32,
pub tx_pin: i32,
pub uart_config: uart_config_t,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct esp_zb_radio_config_t {
pub radio_mode: u32,
pub radio_uart_config: esp_zb_uart_config_t,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct esp_zb_host_config_t {
pub host_connection_mode: u32,
pub host_uart_config: esp_zb_uart_config_t,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct esp_zb_platform_config_t {
pub radio_config: esp_zb_radio_config_t,
pub host_config: esp_zb_host_config_t,
}
pub const RADIO_MODE_NATIVE: u32 = 0;
pub const HOST_CONNECTION_MODE_NONE: u32 = 0;
extern "C" {
pub fn esp_zb_platform_config(config: *const esp_zb_platform_config_t) -> i32;
pub fn esp_zb_init(cfg: *const esp_zb_cfg_t);
pub fn esp_zb_set_primary_network_channel_set(channel_mask: u32);
pub fn esp_zb_start(autostart: bool) -> i32;
pub fn esp_zb_stack_main_loop();
pub fn esp_zb_bdb_start_top_level_commissioning(mode: u8) -> i32;
pub fn esp_zb_bdb_is_factory_new() -> bool;
pub fn esp_zb_secur_TC_standard_distributed_key_set(key: *mut u8);
pub fn esp_zb_enable_joining_to_distributed(enable: bool);
pub fn esp_zb_get_short_address() -> u16;
pub fn esp_zb_get_pan_id() -> u16;
pub fn esp_zb_get_current_channel() -> u8;
pub fn esp_zb_get_long_address(addr: *mut u8);
pub fn esp_zb_set_long_address(addr: *const u8);
pub fn esp_zb_nvram_erase_at_start(erase: bool);
pub fn esp_zb_io_buffer_size_set(size: u16) -> i32;
pub fn esp_zb_scheduler_queue_size_set(size: u16) -> i32;
pub fn esp_zb_scheduler_alarm(cb: unsafe extern "C" fn(u8), param: u8, timeout_ms: u32);
pub fn esp_zb_zcl_cluster_list_create() -> *mut esp_zb_cluster_list_t;
pub fn esp_zb_basic_cluster_create(
cfg: *const esp_zb_basic_cluster_cfg_t,
) -> *mut esp_zb_attribute_list_t;
pub fn esp_zb_identify_cluster_create(
cfg: *const esp_zb_identify_cluster_cfg_t,
) -> *mut esp_zb_attribute_list_t;
pub fn esp_zb_groups_cluster_create(
cfg: *const esp_zb_groups_cluster_cfg_t,
) -> *mut esp_zb_attribute_list_t;
pub fn esp_zb_scenes_cluster_create(
cfg: *const esp_zb_scenes_cluster_cfg_t,
) -> *mut esp_zb_attribute_list_t;
pub fn esp_zb_on_off_cluster_create(
cfg: *const esp_zb_on_off_cluster_cfg_t,
) -> *mut esp_zb_attribute_list_t;
pub fn esp_zb_level_cluster_create(
cfg: *const esp_zb_level_cluster_cfg_t,
) -> *mut esp_zb_attribute_list_t;
pub fn esp_zb_color_control_cluster_create(
cfg: *const esp_zb_color_control_cluster_cfg_t,
) -> *mut esp_zb_attribute_list_t;
pub fn esp_zb_ota_cluster_create(
cfg: *const esp_zb_ota_cluster_cfg_t,
) -> *mut esp_zb_attribute_list_t;
pub fn esp_zb_touchlink_commissioning_cluster_create(
cfg: *const core::ffi::c_void,
) -> *mut esp_zb_attribute_list_t;
pub fn esp_zb_cluster_add_attr(
cluster: *mut esp_zb_attribute_list_t,
cluster_id: u16,
attr_id: u16,
attr_type: u8,
access: u8,
value: *mut core::ffi::c_void,
) -> i32;
pub fn esp_zb_cluster_update_attr(
attr_list: *mut esp_zb_attribute_list_t,
attr_id: u16,
value: *mut core::ffi::c_void,
) -> i32;
pub fn esp_zb_basic_cluster_add_attr(
attr_list: *mut esp_zb_attribute_list_t,
attr_id: u16,
value: *mut core::ffi::c_void,
) -> i32;
pub fn esp_zb_cluster_list_add_basic_cluster(
list: *mut esp_zb_cluster_list_t,
cluster: *mut esp_zb_attribute_list_t,
role: u8,
) -> i32;
pub fn esp_zb_cluster_list_add_identify_cluster(
list: *mut esp_zb_cluster_list_t,
cluster: *mut esp_zb_attribute_list_t,
role: u8,
) -> i32;
pub fn esp_zb_cluster_list_add_groups_cluster(
list: *mut esp_zb_cluster_list_t,
cluster: *mut esp_zb_attribute_list_t,
role: u8,
) -> i32;
pub fn esp_zb_cluster_list_add_scenes_cluster(
list: *mut esp_zb_cluster_list_t,
cluster: *mut esp_zb_attribute_list_t,
role: u8,
) -> i32;
pub fn esp_zb_cluster_list_add_on_off_cluster(
list: *mut esp_zb_cluster_list_t,
cluster: *mut esp_zb_attribute_list_t,
role: u8,
) -> i32;
pub fn esp_zb_cluster_list_add_level_cluster(
list: *mut esp_zb_cluster_list_t,
cluster: *mut esp_zb_attribute_list_t,
role: u8,
) -> i32;
pub fn esp_zb_cluster_list_add_color_control_cluster(
list: *mut esp_zb_cluster_list_t,
cluster: *mut esp_zb_attribute_list_t,
role: u8,
) -> i32;
pub fn esp_zb_cluster_list_add_ota_cluster(
list: *mut esp_zb_cluster_list_t,
cluster: *mut esp_zb_attribute_list_t,
role: u8,
) -> i32;
pub fn esp_zb_cluster_list_add_touchlink_commissioning_cluster(
list: *mut esp_zb_cluster_list_t,
cluster: *mut esp_zb_attribute_list_t,
role: u8,
) -> i32;
pub fn esp_zb_ep_list_create() -> *mut esp_zb_ep_list_t;
pub fn esp_zb_ep_list_add_ep(
ep_list: *mut esp_zb_ep_list_t,
cluster_list: *mut esp_zb_cluster_list_t,
endpoint_cfg: esp_zb_endpoint_config_t,
) -> i32;
pub fn esp_zb_device_register(ep_list: *mut esp_zb_ep_list_t) -> i32;
pub fn esp_zb_zcl_set_attribute_val(
endpoint: u8,
cluster_id: u16,
cluster_role: u8,
attr_id: u16,
value: *const core::ffi::c_void,
check: bool,
) -> i32;
pub fn esp_zb_zcl_get_attribute(
endpoint: u8,
cluster_id: u16,
cluster_role: u8,
attr_id: u16,
) -> *mut esp_zb_zcl_attr_t;
pub fn esp_zb_zcl_start_attr_reporting(attr_info: esp_zb_zcl_attr_location_info_t) -> i32;
pub fn esp_zb_zcl_update_reporting_info(info: *mut esp_zb_zcl_reporting_info_t) -> i32;
pub fn esp_zb_zcl_add_privilege_command(endpoint: u8, cluster: u16, command: u16) -> i32;
pub fn esp_zb_zcl_scenes_table_store(
endpoint: u8,
group_id: u16,
scene_id: u8,
transition_time: u16,
field: *mut esp_zb_zcl_scenes_extension_field_t,
) -> i32;
pub fn esp_zb_zcl_scenes_table_show(endpoint: u8);
pub fn esp_zb_aps_data_request(req: *mut esp_zb_apsde_data_req_t) -> i32;
}
#[repr(C)]
pub struct esp_zb_cfg_t {
pub esp_zb_role: u32,
pub install_code_policy: bool,
pub nwk_cfg: esp_zb_nwk_cfg_t,
}
#[repr(C, align(4))]
pub struct esp_zb_nwk_cfg_t {
_data: [u8; 8],
}
impl esp_zb_nwk_cfg_t {
pub fn zczr(max_children: u8) -> Self {
let mut data = [0u8; 8];
data[0] = max_children;
Self { _data: data }
}
}
pub const ZB_ROUTER: u32 = 1;
#[repr(C)]
pub struct esp_zb_basic_cluster_cfg_t {
pub zcl_version: u8,
pub power_source: u8,
}
#[repr(C)]
pub struct esp_zb_identify_cluster_cfg_t {
pub identify_time: u16,
}
#[repr(C)]
pub struct esp_zb_groups_cluster_cfg_t {
pub groups_name_support_id: u8,
}
#[repr(C)]
pub struct esp_zb_scenes_cluster_cfg_t {
pub scenes_count: u8,
pub current_scene: u8,
pub current_group: u16,
pub scene_valid: bool,
pub name_support: u8,
}
#[repr(C)]
pub struct esp_zb_on_off_cluster_cfg_t {
pub on_off: bool,
}
#[repr(C)]
pub struct esp_zb_level_cluster_cfg_t {
pub current_level: u8,
}
#[repr(C)]
pub struct esp_zb_color_control_cluster_cfg_t {
pub current_x: u16,
pub current_y: u16,
pub color_mode: u8,
pub options: u8,
pub enhanced_color_mode: u8,
pub color_capabilities: u16,
}
#[repr(C, packed)]
#[derive(Clone, Copy)]
pub struct esp_zb_endpoint_config_t {
pub endpoint: u8,
pub app_profile_id: u16,
pub app_device_id: u16,
pub app_device_version: u8,
}
pub const ZB_ZCL_CLUSTER_SERVER_ROLE: u8 = 0x01;
pub const ZB_ZCL_REPORT_DIRECTION_SEND: u8 = 0x00;
pub const ZB_ZCL_ATTR_NON_MANUFACTURER_SPECIFIC: u16 = 0xFFFF;
pub const ZB_ZCL_ATTR_ACCESS_READ_ONLY: u8 = 0x01;
pub const ZB_ZCL_ATTR_ACCESS_READ_WRITE: u8 = 0x03;
pub const ZB_ZCL_ATTR_ACCESS_REPORTING: u8 = 0x04;
#[repr(C)]
pub struct esp_zb_cluster_list_t {
_opaque: [u8; 0],
}
#[repr(C)]
pub struct esp_zb_attribute_list_t {
_opaque: [u8; 0],
}
#[repr(C)]
pub struct esp_zb_ep_list_t {
_opaque: [u8; 0],
}
#[repr(C, packed)]
pub struct esp_zb_zcl_attr_t {
pub id: u16,
pub type_: u8,
pub access: u8,
pub manuf_code: u16,
pub data_p: *mut core::ffi::c_void,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct esp_zb_zcl_attr_location_info_t {
pub endpoint_id: u8,
pub cluster_id: u16,
pub cluster_role: u8,
pub manuf_code: u16,
pub attr_id: u16,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub union esp_zb_zcl_attr_var_u {
pub u8_: u8,
pub s8_: i8,
pub u16_: u16,
pub s16_: i16,
pub u32_: u32,
pub s32_: i32,
pub u48_: [u8; 6],
pub data_buf: [u8; 4],
}
impl esp_zb_zcl_attr_var_u {
pub const fn zero() -> Self {
Self { data_buf: [0; 4] }
}
pub const fn from_u8(value: u8) -> Self {
Self { u8_: value }
}
pub const fn from_u16(value: u16) -> Self {
Self { u16_: value }
}
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct esp_zb_zcl_reporting_send_info_t {
pub min_interval: u16,
pub max_interval: u16,
pub delta: esp_zb_zcl_attr_var_u,
pub reported_value: esp_zb_zcl_attr_var_u,
pub def_min_interval: u16,
pub def_max_interval: u16,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct esp_zb_zcl_reporting_recv_info_t {
pub timeout: u16,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub union esp_zb_zcl_reporting_info_u {
pub send_info: esp_zb_zcl_reporting_send_info_t,
pub recv_info: esp_zb_zcl_reporting_recv_info_t,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct esp_zb_zcl_reporting_dst_t {
pub short_addr: u16,
pub endpoint: u8,
pub profile_id: u16,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct esp_zb_zcl_reporting_info_t {
pub direction: u8,
pub ep: u8,
pub cluster_id: u16,
pub cluster_role: u8,
pub attr_id: u16,
pub flags: u8,
pub run_time: u64,
pub u: esp_zb_zcl_reporting_info_u,
pub dst: esp_zb_zcl_reporting_dst_t,
pub manuf_code: u16,
}
pub const ESP_ZB_ZDO_SIGNAL_SKIP_STARTUP: u32 = 0x01;
pub const ESP_ZB_ZDO_SIGNAL_LEAVE: u32 = 0x03;
pub const ESP_ZB_BDB_SIGNAL_DEVICE_FIRST_START: u32 = 0x05;
pub const ESP_ZB_BDB_SIGNAL_DEVICE_REBOOT: u32 = 0x06;
pub const ESP_ZB_BDB_SIGNAL_TOUCHLINK_NWK_STARTED: u32 = 0x07;
pub const ESP_ZB_BDB_SIGNAL_TOUCHLINK_NWK_JOINED_ROUTER: u32 = 0x08;
pub const ESP_ZB_BDB_SIGNAL_STEERING: u32 = 0x0a;
pub const ESP_ZB_COMMON_SIGNAL_CAN_SLEEP: u32 = 0x16;
pub const ESP_ZB_ZDO_SIGNAL_DEVICE_ANNCE: u32 = 0x02; pub const ESP_ZB_MACSPLIT_DEVICE_BOOT: u32 = 0x2b; pub const ESP_ZB_NLME_STATUS_INDICATION: u32 = 0x32; pub const ESP_ZB_NWK_SIGNAL_PERMIT_JOIN_STATUS: u32 = 0x36; pub const ESP_ZB_ZDO_DEVICE_UNAVAILABLE: u32 = 0x3c;
#[repr(C)]
pub struct esp_zb_app_signal_t {
pub p_app_signal: *mut u32,
pub esp_err_status: i32,
}
pub const ZB_ZCL_CLUSTER_CLIENT_ROLE: u8 = 0x02;
pub const ESP_ZB_CORE_SET_ATTR_VALUE_CB_ID: u32 = 0x0000;
pub const ESP_ZB_CORE_SCENES_STORE_SCENE_CB_ID: u32 = 0x0001;
pub const ESP_ZB_CORE_SCENES_RECALL_SCENE_CB_ID: u32 = 0x0002;
pub const ESP_ZB_CORE_IDENTIFY_EFFECT_CB_ID: u32 = 0x0012; pub const ESP_ZB_CORE_CMD_PRIVILEGE_COMMAND_REQ_CB_ID: u32 = 0x1050;
#[repr(C)]
pub struct esp_zb_device_cb_common_info_t {
pub status: u32, pub dst_endpoint: u8,
pub cluster: u16,
}
#[repr(C, packed)]
pub struct esp_zb_zcl_attribute_data_t {
pub type_: u32, pub size: u16,
pub value: *mut core::ffi::c_void,
}
#[repr(C)]
pub struct esp_zb_zcl_attribute_t {
pub id: u16,
pub data: esp_zb_zcl_attribute_data_t,
}
#[repr(C)]
pub struct esp_zb_zcl_set_attr_value_message_t {
pub info: esp_zb_device_cb_common_info_t,
pub attribute: esp_zb_zcl_attribute_t,
}
#[repr(C)]
pub struct esp_zb_zcl_identify_effect_message_t {
pub info: esp_zb_device_cb_common_info_t,
pub effect_id: u8,
pub effect_variant: u8,
}
#[repr(C)]
pub struct esp_zb_ota_cluster_cfg_t {
pub ota_upgrade_file_version: u32,
pub ota_upgrade_manufacturer: u16,
pub ota_upgrade_image_type: u16,
pub ota_min_block_reque: u16,
pub ota_upgrade_file_offset: u32,
pub ota_upgrade_downloaded_file_ver: u32,
pub ota_upgrade_server_id: [u8; 8],
pub ota_image_upgrade_status: u8,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct esp_zb_zcl_command_t {
pub id: u8,
pub direction: u8,
pub is_common: u8,
}
#[repr(C)]
pub struct esp_zb_zcl_store_scene_message_t {
pub info: esp_zb_device_cb_common_info_t,
pub command: esp_zb_zcl_command_t,
pub group_id: u16,
pub scene_id: u8,
}
#[repr(C)]
pub struct esp_zb_zcl_recall_scene_message_t {
pub info: esp_zb_device_cb_common_info_t,
pub command: esp_zb_zcl_command_t,
pub group_id: u16,
pub scene_id: u8,
pub transition_time: u16,
pub field_set: *mut esp_zb_zcl_scenes_extension_field_t,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct esp_zb_zcl_scenes_extension_field_t {
pub cluster_id: u16,
pub length: u8,
pub extension_field_attribute_value_list: *mut u8,
pub next: *mut esp_zb_zcl_scenes_extension_field_t,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub union esp_zb_addr_u {
pub addr_short: u16,
pub addr_long: [u8; 8],
}
#[repr(C, packed)]
#[derive(Clone, Copy)]
pub struct esp_zb_zcl_addr_t {
pub addr_type: u8,
pub u: [u8; 8],
}
impl esp_zb_zcl_addr_t {
pub fn short_addr(&self) -> Option<u16> {
if self.addr_type == 0 {
let base = core::ptr::addr_of!(self.u) as *const u8;
let lo = unsafe { base.read_unaligned() };
let hi = unsafe { base.add(1).read_unaligned() };
Some(u16::from_le_bytes([lo, hi]))
} else {
None
}
}
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct esp_zb_zcl_frame_header_t {
pub fc: u8,
pub manuf_code: u16,
pub tsn: u8,
pub rssi: i8,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct esp_zb_zcl_cmd_info_t {
pub status: u32,
pub header: esp_zb_zcl_frame_header_t,
pub src_address: esp_zb_zcl_addr_t,
pub dst_address: u16,
pub src_endpoint: u8,
pub dst_endpoint: u8,
pub cluster: u16,
pub profile: u16,
pub command: esp_zb_zcl_command_t,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct esp_zb_zcl_privilege_command_message_t {
pub info: esp_zb_zcl_cmd_info_t,
pub size: u16,
pub data: *mut core::ffi::c_void,
}
pub const ESP_ZB_APS_ADDR_MODE_16_ENDP_PRESENT: u8 = 0x02;
pub const ESP_ZB_APSDE_TX_OPT_SECURITY_ENABLED: u8 = 0x01;
pub const ESP_ZB_APSDE_TX_OPT_ACK_TX: u8 = 0x04;
#[repr(C)]
pub struct esp_zb_apsde_data_req_t {
pub dst_addr_mode: u8,
pub dst_addr: esp_zb_addr_u,
pub dst_endpoint: u8,
pub profile_id: u16,
pub cluster_id: u16,
pub src_endpoint: u8,
pub asdu_length: u32,
pub asdu: *mut u8,
pub tx_options: u8,
pub use_alias: bool,
pub alias_src_addr: u16,
pub alias_seq_num: i32,
pub radius: u8,
}
extern "C" {
pub fn esp_zb_zcl_attr_list_create(cluster_id: u16) -> *mut esp_zb_attribute_list_t;
pub fn esp_zb_cluster_list_add_custom_cluster(
cluster_list: *mut esp_zb_cluster_list_t,
attr_list: *mut esp_zb_attribute_list_t,
role: u8,
) -> i32;
}
extern "C" {
pub fn esp_zb_core_action_handler_register(
callback: Option<
unsafe extern "C" fn(callback_id: u32, message: *const core::ffi::c_void) -> i32,
>,
);
}
const _: () = {
assert!(core::mem::offset_of!(esp_zb_device_cb_common_info_t, status) == 0);
assert!(core::mem::offset_of!(esp_zb_device_cb_common_info_t, dst_endpoint) == 4);
assert!(core::mem::offset_of!(esp_zb_device_cb_common_info_t, cluster) == 6);
assert!(core::mem::size_of::<esp_zb_device_cb_common_info_t>() == 8);
assert!(core::mem::offset_of!(esp_zb_zcl_attribute_data_t, type_) == 0);
assert!(core::mem::offset_of!(esp_zb_zcl_attribute_data_t, size) == 4);
assert!(core::mem::offset_of!(esp_zb_zcl_attribute_data_t, value) == 6);
assert!(core::mem::offset_of!(esp_zb_zcl_attribute_t, id) == 0);
assert!(core::mem::offset_of!(esp_zb_zcl_attribute_t, data) == 2);
assert!(core::mem::offset_of!(esp_zb_zcl_set_attr_value_message_t, info) == 0);
assert!(core::mem::offset_of!(esp_zb_zcl_set_attr_value_message_t, attribute) == 8);
assert!(core::mem::size_of::<esp_zb_zcl_frame_header_t>() == 6);
assert!(core::mem::offset_of!(esp_zb_zcl_cmd_info_t, status) == 0);
assert!(core::mem::offset_of!(esp_zb_zcl_cmd_info_t, header) == 4);
assert!(core::mem::offset_of!(esp_zb_zcl_cmd_info_t, cluster) == 24);
assert!(core::mem::offset_of!(esp_zb_zcl_cmd_info_t, command) == 28);
assert!(core::mem::size_of::<esp_zb_zcl_cmd_info_t>() == 32);
};