511 lines
12 KiB
C
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;
|
|
}
|