Page 3 of 3

Re: 请问上报的dp数据长度超过64byte的时候该怎么上传? 分包?如何分?

Posted: 2025年 Jul 10日 18:20
by tts

VOID_T air_mcu_DP_report_cmd_send(UINT8_T *data,
UINT8_T data_len,
TAL_SEND_RESULT_CB result)
{
TAL_ZG_SEND_DATA_T send_data;

Code: Select all

if ((NULL == data) || (data_len > MAX_ZIGBEE_PAYLOAD_SIZE))
{
    if (data_len > MAX_ZIGBEE_PAYLOAD_SIZE)
    {
        UINT16_T sn = tts_get_sn();
        TAL_PR_HEXDUMP_NOTICE("multiple_packet", data, data_len);
        //    stop_send_stop_block_respond();
        tal_zigbee_start_send_multiple_packet_handle(0x0000, CLUSTER_PRIVATE_TUYA_CLUSTER_ID, 1, 0, data_len, data, data_len, &tts_file);
        // data[MAX_ZIGBEE_PAYLOAD_SIZE - 2] = sn >> 8;
        // data[MAX_ZIGBEE_PAYLOAD_SIZE - 1] = sn;
        // tal_zigbee_start_send_multiple_packet_handle(0x0000, CLUSTER_PRIVATE_TUYA_CLUSTER_ID, 1, 0, data_len, data + MAX_ZIGBEE_PAYLOAD_SIZE, data_len - MAX_ZIGBEE_PAYLOAD_SIZE, &tts_file);

        TAL_PR_NOTICE("tts_file %d", tts_file);
        tts_file++;
    }
    return;
}
TAL_PR_NOTICE("send %d", tts_file);
tal_system_memset(&send_data, 0, sizeof(TAL_ZG_SEND_DATA_T));
insert_private_command_send_buffer(SERIAL_PROTOCOL_DATA_REPORT, &send_data);

send_data.zcl_id = data[2];
//   (UINT8_T) ZCL_ID_DP_REPORT;

tal_system_memcpy(send_data.data.private.data, data, data_len);
send_data.data.private.len = data_len;
tal_zg_clear_send_data(ZG_CLEAR_ALL_ZCL_ID, &send_data.zcl_id);
if (NULL != result)
{
    tal_zg_send_data(&send_data, result, TAL_SEND_DATA_TIMEOUT);
}
else
{
    tal_zg_send_data(&send_data, NULL, TAL_SEND_DATA_TIMEOUT);
}
TAL_PR_NOTICE("send %d", tts_file);

}


Re: 请问上报的dp数据长度超过64byte的时候该怎么上传? 分包?如何分?

Posted: 2025年 Jul 11日 10:20
by shiliang

您好:

1.麻烦在tuya_init_first中增加tal_zigbee_local_auto_func_enable(); (需是router设备)

2.非router设备增加,router设备hulve:
BOOL_T __tal_inner_local_auto_action_device_enable(VOID_T)
{
return TRUE;
}

3.修改file_send_transfer_end_callback如下:
extern UINT8_T *__inner_file_send_buf;
BOOL_T file_send_transfer_end_callback(UINT16_T addr,UINT32_T file_id,bool_t result,UINT8_T *buf,UINT16_T len)
{
UINT8_T uart_cmd = 0;
TAL_PR_DEBUG("file_id %x send result:%x buf ptr:%x\r\n",file_id,result,buf);

Code: Select all

if(buf){
    tal_free(buf);
    buf = NULL;
}
__inner_file_send_buf = NULL;    

return TRUE;    

}

4.每次发送前增加调用stop_send_stop_block_respond();


Re: 请问上报的dp数据长度超过64byte的时候该怎么上传? 分包?如何分?

Posted: 2025年 Jul 11日 11:01
by tts

您好,我这样子修改了还是失败 :(

顺便,能力集应该不用改吧?

Firmware_Information:
description: "this is a demo project"
device_role: "router" # router/sleep_end_dev
image_type: 0xD3A3 #0x1602
manufacture_id: 0x1141 # 0x1002
model_id: "TS0006"
manufacture_name: "_TZE214_xxxxxxx" # capacity+pid
module_name: "ZTU"
chip_id: "TLSR8258F1KET" # efr32mg21a020f1024im32/efr32mg21a020f768im32/TLSR8258F1KET


Re: 请问上报的dp数据长度超过64byte的时候该怎么上传? 分包?如何分?

Posted: 2025年 Jul 11日 14:48
by tts

这个是我使用的例程,sdk是TLSR8258_TuyaOS-3.11.1


Re: 请问上报的dp数据长度超过64byte的时候该怎么上传? 分包?如何分?

Posted: 2025年 Jul 11日 15:43
by shiliang

您好,

使用你发送的demo,增加了分包能力注册,并更改app_config.yaml中manufacture_name是可以的,之前应该是分包能力值未开启。

Image

Image

可参考附件测试demo


Re: 请问上报的dp数据长度超过64byte的时候该怎么上传? 分包?如何分?

Posted: 2025年 Jul 11日 16:25
by tts

可以了,谢谢


Re: 请问上报的dp数据长度超过64byte的时候该怎么上传? 分包?如何分?

Posted: 2025年 Jul 11日 17:09
by tts

分包比不分包慢了很多,有什么办法加快嘛


Re: 请问上报的dp数据长度超过64byte的时候该怎么上传? 分包?如何分?

Posted: 2025年 Jul 11日 17:15
by shiliang

你好,

当前交互流程是固定的,暂时无法加快。