Zigbee 数据接收

更新时间:2022-11-24 09:20:25下载pdf

Specific

Zigbee Specific 类的命令通过 dev_msg_recv_callback() 来接收,开关例子如下:

ZCL_CMD_RET_T dev_msg_recv_callback(dev_msg_t *dev_msg)
{
    ZCL_CMD_RET_T result = ZCL_CMD_RET_SUCCESS;

    switch (dev_msg->cluster) {
        case CLUSTER_PRIVATE_TUYA_CLUSTER_ID: { //私有数据处理
            uint8_t len = dev_msg->data.bare_data.len;
            uint8_t *data = dev_msg->data.bare_data.data;
            //TODO: 私有协议处理
            break;
        }

        //标准数据处理
        case CLUSTER_ON_OFF_CLUSTER_ID: {
            attr_value_t *attr_list = dev_msg->data.attr_data.attr_value;
            uint8_t attr_sums = dev_msg->data.attr_data.attr_value_sums;
            uint8_t i;

            for(i=0; i<attr_sums; i++) {
                switch(attr_list[i].cmd) {
                    case CMD_OFF_COMMAND_ID: {
                        //TODO:关命令
                        break;
                    }
                    case CMD_ON_COMMAND_ID: {
                        //TODO:开命令
                        break;
                    }
                    case CMD_TOGGLE_COMMAND_ID: {
                        //TODO:取反命令
                        break;
                    }
                    default: {
                        break;
                    }
                }
                break;
            }

        }
        default:
            // Unrecognized cluster ID, error status will apply.
            break;
    }

    return result;
}

Global

Zigbee Global 类的 Write 命令通过 dev_msg_write_attr_callback_ext 或者 dev_msg_write_attr_callback 来通知应用层。

void dev_msg_write_attr_callback(uint8_t endpoint, CLUSTER_ID_T cluster, uint16_t attr_id)
{
    //TODO: 远程写属性成功后掉用该函数

    return;
}

void dev_msg_write_attr_callback_ext(
    uint8_t endpoint,
    CLUSTER_ID_T cluster,
    uint16_t attr_id,
    uint8_t mask,
    uint16_t manufacturer_code,
    uint8_t type,
    uint8_t size,
    uint8_t* value)
{
    //TODO: 远程写属性成功后掉用该函数,附带了原始数据参数

    return;
}