6. Zigbee开发包 关键函数说明
6.1. Zigbee 网络相关函数
Endpoint 注册函数:
Code: Select all
OPERATE_RET tal_zg_endpoint_register(TAL_ENDPOINT_T *ep_desc, UINT8_T sums);
此函数是 Zigbee Endpoint 注册函数,用户把需要的 Endpoint、Cluster、Attribute 通过此函数注册到协议栈内部。TuyaOS Zigbee 开发框架为了开发者更好的专注业务开发,屏蔽了用户无需关心的 Cluster,例如 Server 端 Basic cluster、Client 端 OTA cluster 和 Time cluster,都已经默认注册在了 Endpoint 1 上,用户在开发的时候无需再次注册,此函用户必须手动配置。
注意:此函数注册完成前禁止调用任何 Zigbee 相关 API。
节点配置函数:
Code: Select all
OPERATE_RET tal_zg_join_config(TAL_ZG_JOIN_CFG_T *config);
此函数是用来配置 Zigbee 节点的相关行为,例如节点类型、发射功率、扫描间隔以及 sleep enddevice rejoin 的相关行为,此函用户必须手动配置。
加网扫描配置函数:
Code: Select all
OPERATE_RET tal_zg_join_config(TAL_ZG_JOIN_CFG_T *config);
此函数是用来配置 Zigbee 入网参数,例如是否需要上电自动配网、被网关删除是否自动配网、配网扫描超时时间等,此函用户必须手动配置。
配网扫描函数:
Code: Select all
BOOL_T tal_zg_join_start(UINT_T timeout_ms);
此函数是用来开启 Zigbee 入网扫描的 ,调用后会先进行本地离网,然后动设置的超时时间内进行配网扫描,配网成功或者配网失败后会调用网关状态改变的回调函数,通知用户网络状态变化。如果没有配置关闭网关自恢复功能,在入网超时后会尝试进行网络自恢复,如果成功回到之前的网络,则会自动重启。
离网函数:
Code: Select all
VOID_T tal_zg_leave_start(VOID_T);
此函数是在网设备用来进行离网使用的,离网成功后会调用网关状态改变的回调函数,通知用户网络状态变化。如果没有配置关闭网关自恢复功能,断电重启后且没有设置上电自动配网的情况下,会尝试进行网络自恢复,如果成功回到之前的网络,则会自动重启。
离网函数:
Code: Select all
BOOL_T tal_zg_rejoin_start(TAL_REJOIN_TYPE_E type);
此函数用于 Zigbee End Device 设备类型重回网络使用,当rejoin 成功或者失败的时候会通过网络回调通知用户。
网络状态回调函数:
Code: Select all
VOID_T tal_zg_nwk_status_changed_callback(TAL_ZG_NWK_STATUS_E status);
此函数用于在 Zigbee 网络状态发送改变后通知用户,用户可以根据不同的网络状态进行相关操作,对于网络状态解释如下:
状态 | 调用时机 | 作用 |
TAL_ZG_NWK_POWER_ON_LEAVE | 设备上电后没有加入任何网络 | 指示上电后的网络状态 |
TAL_ZG_NWK_POWER_ON_ONLINE | 设备上电后处于在网状态 | 指示上电后的网络状态 |
TAL_ZG_NWK_JOIN_START | 在调用配网扫描后用于通知用户配网扫描开启 | 指示开启配网扫描状态 |
TAL_ZG_NWK_JOIN_TIMEOUT | 在开启配网的指定时间内没有成功入网 | 指示配网超时 |
TAL_ZG_NWK_JOIN_OK | 在配网开启后成功加入 Zigbee 网络 | 指示开启配网后成功入网状态 |
TAL_ZG_NWK_LOST | 低功耗设备由于某种原因与父节点失联 | 指示设备与他的父节点丢失的状态 |
TAL_ZG_NWK_REJOIN_OK | 低功耗设备在丢失父节点后重新回到网络 | 指示重回网络后的状态 |
TAL_ZG_NWK_LOCAL_LEAVE | 设备本地调用离网函数 | 指示设备离网是本地调用离网函数 |
TAL_ZG_NWK_REMOTE_LEAVE | 设备接收到网关的离网请求,或者 3.0 Key 交互失败,本地主动离网 | 指示离网是由于网关请求或者是 Key 交互失败 |
TAL_ZG_NWK_MF_TEST_LEAVE | 设备在进行网关产测后,本产测网关请求离网 | 指示产测结束导致的离网 |
恢复出厂设置回调函数:
Code: Select all
VOID_T tal_zg_reset_factory_default_callback(TAL_RESET_TYPE_T type);
此函数是在收到网关请求恢复出厂设置时用来通知用户进行数据清除的,用户可以根据类型来进行不同业务的实现。
6.2. Zigbee 网络数据接收和发送
写属性前置回调函数:
Code: Select all
TAL_WRITE_RET_E tal_zg_pre_write_attribute_callback(UINT8_T ep_id, UINT16_T cluster_id, TAL_ATTR_REC_T *attr_rec);
此函数是在收到远程设备写属性命令后,但是在真正写本地属性前进行调用的,用户可以检查传入参数,并通过返回值来决定 SDK 内部是否需要将属性写入到本地。
写属性后置回调函数:
Code: Select all
TAL_WRITE_RET_E tal_zg_post_write_attribute_callback(UINT8_T ep_id, UINT16_T cluster_id, TAL_ATTR_REC_T *attr_rec);
此函数是在收到远程设备写属性命令后,但是在本地真正写完属性后进行调用的。
general cmd 命令接收回调函数:
Code: Select all
TAL_MSG_RET_E tal_zcl_general_msg_recv_callback(TAL_ZCL_MSG_T *msg);
此函数是在接收到 ZCL Frame Type 为 command acts across the entire profile 类型的数据时会将数据透传给用户,目前用户无特殊需求,不需要处理此函数所给的数据。
specific cmd 命令接收回调函数:
Code: Select all
TAL_MSG_RET_E tal_zcl_specific_msg_recv_callback(TAL_ZCL_MSG_T *msg);
此函数是在接收到 ZCL Frame Type 为 command is specific to a cluster 类型的数据时会将数据通过此函数透传给用户,用户需要根据结构体指针自行解析和处理 Zigbee 业务数据。
场景保存回调函数:
Code: Select all
VOID_T tal_zg_scene_save_callback(UINT8_T ep_id, UINT8_T scene_id, UINT16_T group_id, TAL_SCENE_DATA_T *data);
此函数是在接收到远程设备给当前设备 Add scene 或者 要求设备 Store scene 时进行回调通知,用户根据场景数据类型,决定是否需要存储当前设备的状态,如果是 TAL_SCENE_DATA_TYPE_YOURSELF 则用户需要把当前设备的状态进行保存便于在 recall 时进行状态还原,如果是 TKL_SCENE_DATA_TYPE_EXT_SERVER 则用户不需要存储场景数据,SDK 内部会把接收到的场景数据进行自动存储。
场景 recall 回调函数:
Code: Select all
VOID_T tal_zg_scene_recall_callback(UINT8_T ep_id, UINT8_T scene_id, UINT16_T group_id, UINT_T time100ms, TAL_SCENE_DATA_T *data);
此函数是在接收到远程设备 recall scene 时给到用户的回调通知函数,用户可以在此函数中获取到之前存储的场景据,并利用此数据进行设备状态的还原。
数据发送函数:
Code: Select all
VOID_T tal_zg_send_data(TAL_ZG_SEND_DATA_T *pdata, TAL_SEND_RESULT_CB callback, UINT_T timeout);
此函数用于发送 Zigbee 数据,底层会把业务数据进行缓存,然后按照顺序进行按需发送,用户可以通过设置回调状态,来确认数据发送是否成功,同时还可以设置远程设备恢复应答的最大超时时间,建议此时间是 200ms 的整数倍。
数据发送队列清除函数:
Code: Select all
VOID_T tal_zg_clear_send_data(TAL_ZG_CLEAR_TYPE_E type, VOID_T *args);
此函数用于清除缓存在 SDK 底层的业务数据,避免因为缓存导致发送了不正确的数据。
6.3. Zigbee 属性读写
写属性函数:
Code: Select all
OPERATE_RET tal_zg_write_attribute(UINT8_T endpoint,
UINT16_T cluster,
UINT16_T attr_id,
VOID_T* data,
ZG_ATTR_TYPE_E type);
此函数用于写入 Zigbee 对应的属性值,写入的属性必须是要注册过的,否则写入会失败,如果在注册时标注属性的掩码值为 ATTR_MASK_TOKEN_FAST 则会将在写属性时,同时将属性值存入 NV falsh 中。
读属性函数:
Code: Select all
OPERATE_RET tal_zg_read_attribute(UINT8_T endpoint,
UINT16_T cluster,
UINT16_T attr_id,
VOID_T *data,
UINT8_T length);
此函数用于读取 Zigbee 对应的属性值,读取的属性必须是要注册过的,否则读取会失败。
6.4. Zigbee 产测
禁止信标产测函数:
Code: Select all
VOID_T tal_mf_test_disable_beacon_test(VOID_T);
此函数用于禁止 beacon 产测模式。
产测串口配置函数:
Code: Select all
VOID_T tal_mf_test_get_uart_cfg(UINT_T *out_uart_id, TAL_UART_CFG_S *out_cfg);
此函数用于配置产测时使用的串口,但是 uart id 只能返回 MF_TEST_UART_ID,如果不调用次函数则使用默认产测接口进行串口产测。
预产测回调函数:
Code: Select all
VOID_T tal_mf_test_pre_start_callback(VOID_T *args);
此函数仅用户 double dongle 产测模式,在接收到进入预产测模式的广播后会调用此函数,用户可以用一些行为指示进入预产测模式,方便产测人员观察。
产测退出回调函数:
Code: Select all
VOID_T tal_mf_test_end_callback(UINT8_T *data);
此函数仅用户 double dongle 产测模式,产测结束后会调用此函数,并将产测结果通知用户,*data =1 产流程成功结束。
beacon 产测进入回调函数:
Code: Select all
VOID_T tal_beacon_mf_test_callback(VOID_T);
此函数仅用户 beacon 产测模式,在接收到 beacon 广播的进入 beacon 产测的数据帧时,会通过此函数通知用户,用户可以根据自己的需要进行相应的操作,来表明这个设备的功能是完整的。
产测数据处理回调函数:
Code: Select all
TUYA_MF_TEST_RET_T tal_mf_test_handle_callback(TUYA_MF_TEST_CMD_T cmd,
UINT8_T*arg,
UINT16_T arg_len);
此函数用于接收产测数据帧,在串口产测、网关产测、double dongle 产测模式下接收到的产测数据都将通过这个接口通知用户,用户解析数据帧后进行相应的产测行为。
产测结果通知:
Code: Select all
VOID_T tal_mf_test_result_notify(TUYA_MF_TEST_RET_T result);
此函数用于回复产测结果为 true 或者是 false 的产测项。
按键产测结果通知函数:
Code: Select all
VOID_T tal_mf_test_button_test_notify(UINT_T key_id);
此函数用于回复按键产测结果,key_id 是产测按键 id。
电平式传感产测结果通知函数:
Code: Select all
VOID_T tal_mf_test_bool_sensor_notify(UINT8_T sensor_type, UINT8_T index, BOOL_T result);
此函数用于回复高低电平传感器产测结果。
产测结果通用通知函数:
Code: Select all
VOID_T tal_mf_test_general_send(UINT8_T cmd, UINT8_T len, UINT8_T *data);
此函数用于回复按键的产测结果,需要用户自己组装产测命令回复数据。
6.5. OTA 回调
OTA 升级开始回调函数:
Code: Select all
VOID_T tal_zg_ota_start_callback(UINT_T image_size, VOID_T* argv);
此函数用于在 OTA 收到网关 OAT 数据后给到应用层的通知,用户可以在此函数中做一些特殊操作,例如可以把低功耗设备在 OTA 时数据的请求速率提高,来缩短 OTA 时间。
OTA 升级结束回调函数:
Code: Select all
VOID_T tal_zg_ota_end_callback(UINT8_T result);
此函数用于在 OTA 结束后给到应用层通知,并将结果告知应用层。
6.6. 其他 API 接口
其他 API 接口见 《API 接口说明文档》;
注意:在没有特殊需求的情况下,不建议调用 tkl 开头的函数,防止出现异常。