mcu_hi3321_watch/middleware/utils/dfx/diag/diag_pkt.c
2025-05-26 20:15:20 +08:00

152 lines
4.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (c) @CompanyNameMagicTag 2021-2023. All rights reserved.
* Description: zdiag pkt
* This file should be changed only infrequently and with great care.
*/
#include "diag_pkt.h"
#include "zdiag_adapt_layer.h"
#include "diag.h"
#include "diag_filter.h"
#include "errcode.h"
#include "common_def.h"
errcode_t diag_check_mux_pkt(const diag_router_frame_t *frame, uint16_t size)
{
unused(size);
if (frame->sof != DIAG_ROUTER_FRAME_START_FLAG) {
return ERRCODE_FAIL;
}
return ERRCODE_SUCC;
}
void diag_pkt_handle_init(diag_pkt_handle_t *pkt, uint8_t data_cnt)
{
memset_s(pkt, sizeof(diag_pkt_handle_t), 0, sizeof(diag_pkt_handle_t));
pkt->data_cnt = data_cnt;
}
void diag_pkt_set_critical(diag_pkt_handle_t *pkt)
{
pkt->critical = 1;
}
void diag_pkt_set_output_type(diag_pkt_handle_t *pkt, uint8_t type)
{
pkt->output_type = type;
}
void diag_pkt_handle_set_data(diag_pkt_handle_t *pkt, uint8_t idx, uint8_t *data, uint16_t data_len,
diag_pkt_data_t attribute)
{
unused(attribute);
pkt->data[idx] = data;
pkt->data_len[idx] = data_len;
if (((uint32_t)attribute & DIAG_PKT_DATA_ATTRIBUTE_SINGLE_TASK) != 0) {
pkt->single_task = true;
}
if (((uint32_t)attribute & DIAG_PKT_DATA_ATTRIBUTE_DYN_MEM) != 0) {
pkt->need_free = true;
}
return;
}
void diag_mk_log_pkt(diag_cmd_log_layer_stru_t *log_pkt, uint32_t module_id, uint32_t msg_id)
{
STATIC uint32_t msg_sn = 0;
log_pkt->module = module_id;
log_pkt->dest_mod = diag_adapt_get_local_addr();
log_pkt->no = msg_sn++;
log_pkt->id = msg_id;
log_pkt->time = diag_adapt_get_msg_time();
}
void diag_mk_normal_log_pkt(diag_cmd_normal_log_layer_t *log_pkt, uint8_t module_id, uint32_t msg_id)
{
STATIC uint16_t msg_sn = 0;
uint64_t time_ms = diag_adapt_get_msg_time_ms();
log_pkt->module = module_id;
log_pkt->no_lo = (uint8_t)(msg_sn & 0xFF); /* 0xFF get lower 8 bits */
log_pkt->no_hi = (uint8_t)((msg_sn >> 8) & 0x3F); /* 8, 0x3F get upper 6 bits */
log_pkt->id = msg_id;
log_pkt->time = (uint32_t)(time_ms / 1000); /* 1 second = 1000 milliseconds */
log_pkt->time_ms = (uint16_t)(time_ms % 1000); /* 1 second = 1000 milliseconds */
msg_sn++;
}
void diag_mk_extend_log_pkt(diag_cmd_extend_log_layer_t *log_pkt, uint8_t module_id, uint32_t msg_id)
{
STATIC uint8_t msg_sn = 0;
log_pkt->sub_mod = module_id;
log_pkt->no = msg_sn++;
log_pkt->id = msg_id;
log_pkt->time = diag_adapt_get_msg_local_time();
}
void diag_mk_min_log_pkt(diag_cmd_minimal_log_layer_t *log_pkt, uint32_t msg_id)
{
STATIC uint16_t msg_sn = 0;
log_pkt->no = msg_sn++;
log_pkt->id = msg_id;
}
void diag_mk_log_pkt_sn(diag_cmd_log_layer_stru_t *log_pkt, uint32_t module_id, uint32_t msg_id, uint32_t sn)
{
log_pkt->module = module_id;
log_pkt->dest_mod = diag_adapt_get_local_addr();
log_pkt->no = sn;
log_pkt->id = msg_id;
log_pkt->time = diag_adapt_get_msg_time();
}
void diag_mk_normal_log_pkt_sn(diag_cmd_normal_log_layer_t *log_pkt, uint8_t module_id, uint32_t msg_id, uint16_t sn)
{
uint64_t time_ms = diag_adapt_get_msg_time_ms();
log_pkt->module = module_id;
log_pkt->no_lo = (uint8_t)(sn & 0xFF); /* 0xFF Lower 8 bits */
log_pkt->no_hi = (uint8_t)((sn >> 8) & 0x3F); /* 0x3F Upper 6 bits */
log_pkt->id = msg_id;
log_pkt->time = (uint32_t)(time_ms / 1000); /* 1 second = 1000 milliseconds */
log_pkt->time_ms = (uint16_t)(time_ms % 1000); /* 1 second = 1000 milliseconds */
}
void diag_mk_extend_log_pkt_sn(diag_cmd_extend_log_layer_t *log_pkt, uint8_t module_id, uint32_t msg_id, uint8_t sn)
{
log_pkt->sub_mod = module_id;
log_pkt->no = sn;
log_pkt->id = msg_id;
log_pkt->time = diag_adapt_get_msg_local_time();
}
void diag_mk_min_log_pkt_sn(diag_cmd_minimal_log_layer_t *log_pkt, uint32_t msg_id, uint16_t sn)
{
log_pkt->no = sn;
log_pkt->id = msg_id;
}
void diag_mk_req_header(diag_head_req_stru_t *req, uint16_t cmd_id)
{
req->mod_id = hiu8(cmd_id);
req->cmd_id = lou8(cmd_id);
return;
}
void diag_mk_ind_header(diag_head_ind_stru_t *ind, uint16_t cmd_id)
{
ind->mod_id = hiu8(cmd_id);
ind->cmd_id = lou8(cmd_id);
return;
}
void diag_mk_frame_header_1(diag_router_frame_t *frame, uint16_t pkt_size)
{
diag_router_inner_frame_t *inner = (diag_router_inner_frame_t *)frame->inner;
frame->sof = DIAG_ROUTER_FRAME_START_FLAG;
frame->ctrl = 0;
inner->len_msb = (uint8_t)(pkt_size >> DIAG_FRAME_SHIFT_8);
inner->len_lsb = (uint8_t)(pkt_size);
return;
}