Files
svc.ems/plat/m2ua/src_old/m2ua_debug.c
2024-09-27 15:39:34 +08:00

511 lines
12 KiB
C

#include "./include/m2ua_pub.h"
#include "./include/m2ua.h"
#include "./include/m2ua_const.h"
#include "./include/m2ua_struct.h"
#include "./include/m2ua_ext.h"
#include "../../debug/src/include/debug.h"
#define M2UA_DEBUG_ID 16
#define M2UA_VER_DEBUG "R9V0_03b"
static char ascii[16] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46};
static BYTE log_help[] = {
"M2UA Debug Monitor Help:\n\r\
\n\r\
1.[help] display help menu\n\r\
2.[log all/none] display all/none logs\n\r\
3.[log error on/off] display error logs (sg only)\n\r\
4.[log mtp3/maup on/off] display mtp3/maup logs (sg or link)\n\r\
5.[log m2ua/sctp on/off] display m2ua/sctp logs (sg only)\n\r\
6.[log sg-xxx/lk-xxx on/off] display sg/lk logs\n\r\n\r"
};
static WORD disp_page[10];
static BYTE *disp_ptr = (BYTE *) disp_page;
static DWORD debug_status_id[20] =
{
1,3,6,1,4,1,1373,1,1,2,3,1,2,M2UA_DEBUG_ID + 2,1
};
static BYTE debug_status = 1;
static DWORD debug_name_id[20] =
{
1,3,6,1,4,1,1373,1,1,2,3,1,2,M2UA_DEBUG_ID + 2,2
};
static DWORD debug_ascin_id[20] =
{
1,3,6,1,4,1,1373,1,1,2,3,1,2,M2UA_DEBUG_ID + 2,3
};
static DWORD debug_ascout_id[20] =
{
1,3,6,1,4,1,1373,1,1,2,3,1,2,M2UA_DEBUG_ID + 2,4
};
static DWORD debug_page_title[20] =
{
1,3,6,1,4,1,1373,1,1,2,3,1,2,M2UA_DEBUG_ID + 2,1,1
};
static DWORD debug_page_line[20] =
{
1,3,6,1,4,1,1373,1,1,2,3,1,2,M2UA_DEBUG_ID + 2,1,2,1
};
const static BYTE PAGE_POINT = 14;
const static BYTE LINE_POINT = 15;
const static BYTE BASE_ID_LEN = 15;
static BYTE title1_p[] =
{
" M2UA Page 01 SG Para\n\r\
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n\r\
Subpage\n\r\
SG_Para\n\r"
};
static BYTE title2_p[] =
{
" M2UA Page 02 Link Para\n\r\
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n\r\
Subpage\n\r\
LK_Para\n\r"
};
static BYTE title3_p[] =
{
" M2UA Page 03 SG Info\n\r\
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n\r\
Subpage\n\r\
SG_Info\n\r"
};
static BYTE title4_p[] =
{
" M2UA Page 04 Link Info\n\r\
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n\r\
LK_Info\n\r"
};
static BYTE title5_p[] =
{
" M2UA Page 05 SG CSTA\n\r\
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n\r\
Subpage\n\r\
SG_CSTA\n\r"
};
static BYTE title6_p[] =
{
" M2UA Page 06 Link CSTA\n\r\
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n\r\
LK_CSTA\n\r"
};
static BYTE title7_p[] =
{
" M2UA Page 07 Watchdog\n\r\
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n\r\
Watchdog\n\r"
};
BYTE m2ua_disp_line(BYTE page, BYTE line)
{
BYTE disp_length;
disp_length = 16;
disp_ptr = (BYTE *) disp_page;
switch (page)
{
case 1: // Page 1: SG Para
if (line == 0)
{
disp_ptr = (BYTE *) &disp_page[page];
disp_length = 2;
}
else if (line < 17)
{
disp_ptr = (BYTE *) m2ua_para.sg_para + ((line - 1) * sizeof(sg_para_t)) + (disp_page[page] * 16 * sizeof(sg_para_t));
disp_length = sizeof(sg_para_t);
}
else
disp_length = 0;
break;
case 2: // Page 2: LK Para
if (line == 0)
{
disp_ptr = (BYTE *) &disp_page[page];
disp_length = 2;
}
else if (line < 17)
{
disp_ptr = (BYTE *) m2ua_para.lk_para + ((line - 1) * sizeof(lk_para_t)) + disp_page[page] * 16 * sizeof(lk_para_t);
disp_length = sizeof(lk_para_t);
}
else
disp_length = 0;
break;
case 3: // Page 3: SG Info
if (line == 0)
{
disp_ptr = (BYTE *) &disp_page[page];
disp_length = 2;
}
else if (line < 7)
disp_ptr = (BYTE *) &m2ua_sg_info[disp_page[page]] + ((line - 1) * 16);
else
disp_length = 0;
break;
case 4: // Page 4: LK Info
if (line == 0)
{
disp_ptr = (BYTE *) &disp_page[page];
disp_length = 2;
}
else if (line < 17)
{
disp_ptr = (BYTE *) m2ua_lk_info + ((line - 1) * sizeof(m2ua_lk_info_t)) + disp_page[page] * 16 * sizeof(m2ua_lk_info_t);
disp_length = sizeof(m2ua_lk_info_t);
}
else
disp_length = 0;
break;
case 5: // Page 5: SG CSTA
if (line == 0)
{
disp_ptr = (BYTE *) &disp_page[page];
disp_length = 2;
}
else if (line < 3)
disp_ptr = (BYTE *) &m2ua_csta.sg_csta[disp_page[page]] + ((line - 1) * 16);
else
disp_length = 0;
break;
case 6: // Page 6: LK CSTA
if (line == 0)
{
disp_ptr = (BYTE *) &disp_page[page];
disp_length = 2;
}
else if (line < 3)
disp_ptr = (BYTE *) &m2ua_csta.lk_csta[disp_page[page]] + ((line - 1) * 16);
else
disp_length = 0;
break;
case 7: // Page 7: Err
if (line < 16)
disp_ptr = (BYTE *)err + (line * 16);
else
disp_length = 0;
break;
default:
disp_length = 0;
break;
}
return disp_length;
}
void m2ua_disp_page(BYTE page)
{
BYTE disp_line;
BYTE disp_length;
debug_page_line[PAGE_POINT] = page + 5;
for (disp_line = 0; disp_line < 22; disp_line++)
{
disp_length = m2ua_disp_line(page, disp_line);
debug_page_line[LINE_POINT] = disp_line + 2;
debug_page_line[LINE_POINT + 1] = 2; // Data Pointer
debug_set_response(BASE_ID_LEN + 2, debug_page_line, disp_ptr, disp_length);
}
}
int m2ua_debug_set(void)
{
BYTE page;
BYTE data[10];
BYTE *ptr;
bzero(disp_page, 20);
ptr = data;
debug_set_response(BASE_ID_LEN, debug_status_id, &debug_status, 1);
debug_set_response(BASE_ID_LEN, debug_name_id, M2UA_VER_DEBUG, 10);
debug_set_response(BASE_ID_LEN, debug_ascin_id, m2ua_asciin_buf, 4096);
debug_set_response(BASE_ID_LEN, debug_ascout_id, m2ua_asciout_buf, 4096);
for (page = 1; page < 8; page++)
{
switch (page)
{
case 1: //page 1
ptr = title1_p;
break;
case 2: //page 2
ptr = title2_p;
break;
case 3: //page 3
ptr = title3_p;
break;
case 4: //page 4
ptr = title4_p;
break;
case 5: //page 5
ptr = title5_p;
break;
case 6: //page 6
ptr = title6_p;
break;
case 7: //page 7
ptr = title7_p;
break;
default:
break;
}
debug_page_title[PAGE_POINT] = 5 + page;
debug_set_response(BASE_ID_LEN + 1, debug_page_title, ptr, strlen(ptr));
m2ua_disp_page(page);
}
return 1;
}
int m2ua_asciout_proc(BYTE *out_str)
{
int out_len;
out_len = strlen(out_str);
if (out_len + strlen(m2ua_asciout_buf) > MAX_ASCIIOUT_LEN - 2)
{
strcpy(m2ua_asciout_buf, out_str);
}
else
strcat(m2ua_asciout_buf, out_str);
return 1;
}
void m2ua_mon(void)
{
BYTE in_page, err_fg = 0;
BYTE *ascii_in_ptr = NULL;
BYTE *str_start = NULL;
WORD str_len, num;
if ((str_len = strlen(m2ua_asciin_buf)) > 0)
{
in_page = m2ua_asciin_buf[0] - 1;
ascii_in_ptr = m2ua_asciin_buf + 1;
if (in_page > 7)
err_fg = 1;
else if (strcmp(ascii_in_ptr,"c") == 0)
{
bzero(&m2ua_csta, sizeof(m2ua_csta_t));
bzero(err, 256);
}
else if (strcmp(ascii_in_ptr,"log mtp3 on") == 0)
{
moniter_fg = moniter_fg | MONITOR_MTP3;
}
else if (strcmp(ascii_in_ptr,"log mtp3 off") == 0)
{
moniter_fg = moniter_fg & (~MONITOR_MTP3);
}
else if (strcmp(ascii_in_ptr,"log m2ua on") == 0)
{
moniter_fg = moniter_fg | MONITOR_M2UA;
}
else if (strcmp(ascii_in_ptr,"log m2ua off") == 0)
{
moniter_fg = moniter_fg & (~MONITOR_M2UA);
}
else if (strcmp(ascii_in_ptr,"log maup on") == 0)
{
moniter_fg = moniter_fg | MONITOR_MAUP;
}
else if (strcmp(ascii_in_ptr,"log maup off") == 0)
{
moniter_fg = moniter_fg & (~MONITOR_MAUP);
}
else if (strcmp(ascii_in_ptr,"log sctp on") == 0)
{
moniter_fg = moniter_fg | MONITOR_SCTP;
}
else if (strcmp(ascii_in_ptr,"log sctp off") == 0)
{
moniter_fg = moniter_fg & (~MONITOR_SCTP);
}
else if (strcmp(ascii_in_ptr,"log error on") == 0)
{
moniter_fg = moniter_fg | MONITOR_ERROR;
}
else if (strcmp(ascii_in_ptr,"log error off") == 0)
{
moniter_fg = moniter_fg & (~MONITOR_ERROR);
}
else if (strcmp(ascii_in_ptr,"log all") == 0)
{
moniter_fg = MONITOR_ALL;
if (!m2ua_sg_mon_count && !m2ua_lk_mon_count)
{
memset(m2ua_sg_mon_fg, 1, M2UA_MAX_SG_FSM_NUM);
memset(m2ua_lk_mon_fg, 1, M2UA_MAX_LK_NUM);
}
else
err_fg = 2;
}
else if (strcmp(ascii_in_ptr,"log none") == 0)
{
moniter_fg = MONITOR_NONE;
memset(m2ua_sg_mon_fg, 0, M2UA_MAX_SG_FSM_NUM);
memset(m2ua_lk_mon_fg, 0, M2UA_MAX_LK_NUM);
m2ua_sg_mon_count = 0;
m2ua_lk_mon_count = 0;
}
else if (strcmp(ascii_in_ptr,"help") == 0)
{
m2ua_asciout_proc(log_help);
}
else if (strstr(ascii_in_ptr, "log sg") != NULL)
{
if ((moniter_fg == MONITOR_ALL) &&
!m2ua_sg_mon_count &&
!m2ua_lk_mon_count)
err_fg = 3;
else if ((str_start = strstr(ascii_in_ptr, "-")) != NULL)
{
num = strtoul(str_start + 1, NULL, 10);
if (num >= M2UA_MAX_SG_FSM_NUM)
err_fg = 1;
else if (strstr(ascii_in_ptr, "on") != NULL)
{
m2ua_sg_mon_fg[num] = 1;
if (m2ua_sg_mon_count < M2UA_MAX_SG_NUM+2)
m2ua_sg_mon_count++;
}
else if (strstr(ascii_in_ptr, "off") != NULL)
{
m2ua_sg_mon_fg[num] = 0;
if (m2ua_sg_mon_count > 0)
m2ua_sg_mon_count--;
}
else
err_fg = 1;
}
else
err_fg = 1;
}
else if (strstr(ascii_in_ptr, "log lk") != NULL)
{
if ((moniter_fg == MONITOR_ALL) &&
!m2ua_sg_mon_count &&
!m2ua_lk_mon_count)
err_fg = 3;
else if ((str_start = strstr(ascii_in_ptr, "-")) != NULL)
{
num = strtoul(str_start + 1, NULL, 10);
if (num >= M2UA_MAX_LK_NUM)
err_fg = 1;
else if (strstr(ascii_in_ptr, "on") != NULL)
{
m2ua_lk_mon_fg[num] = 1;
if (m2ua_lk_mon_count < M2UA_MAX_LK_NUM)
m2ua_lk_mon_count++;
}
else if (strstr(ascii_in_ptr, "off") != NULL)
{
m2ua_lk_mon_fg[num] = 0;
if (m2ua_lk_mon_count > 0)
m2ua_lk_mon_count--;
}
else
err_fg = 1;
}
else
err_fg = 1;
}
else if (isdigit(ascii_in_ptr[0]))
{
num = strtoul(ascii_in_ptr, NULL, 10);
disp_page[in_page] = num;
m2ua_disp_page(in_page);
}
else if ((str_start = strstr(ascii_in_ptr, ">")) != NULL)
{
num = strtoul(str_start + 1, NULL, 10);
disp_page[in_page] += num;
m2ua_disp_page(in_page);
}
else if ((str_start = strstr(ascii_in_ptr, "<"))!= NULL)
{
num = strtoul(str_start + 1, NULL, 10);
disp_page[in_page] -= num;
m2ua_disp_page(in_page);
}
else
err_fg = 1;
if (err_fg == 0)
m2ua_asciout_proc("Command OK!\n\r");
else if (err_fg == 2)
m2ua_asciout_proc("Log all for some SGs or Links!\n\r");
else if (err_fg == 3)
m2ua_asciout_proc("Log all already done for all SGs and Links, log none to clear!\n\r");
else
m2ua_asciout_proc("Command Error!\n\r");
strcpy(m2ua_asciin_buf, "\0");
}
}
int m2ua_hex_to_ascii(BYTE *from_hex, WORD from_len, BYTE *to_asc)
{
int i, j;
j = 0;
for (i = 0; i< from_len; i++)
{
to_asc[j] = ascii[from_hex[i] >> 4];
j++;
to_asc[j] = ascii[from_hex[i] & 0x0F];
j++;
to_asc[j] = ' ';
j++;
}
to_asc[j] = '\0';
return 1;
}
int m2ua_log_err(WORD sg_id, BYTE *err_msg)
{
if ((moniter_fg & MONITOR_ERROR) == MONITOR_ERROR)
{
if ((m2ua_sg_mon_fg[sg_id] == 0))
return 0;
m2ua_asciout_proc("\33[31m");
if (strlen(err_msg) >= MAX_ASCITMP_LEN)
sprintf(m2ua_ascitemp_buf, "SG[%d] log msg is too long: %d\n\r", sg_id, strlen(err_msg));
else
sprintf(m2ua_ascitemp_buf, "SG[%d]: %s\n\r", sg_id, err_msg);
strcat(m2ua_ascitemp_buf, "\33[37m");
m2ua_asciout_proc(m2ua_ascitemp_buf);
}
return 1;
}