#include "./include/var_ext.h" //static u32 bicc_object_id[BICC_PREOID_LEN] = {1,3,6,1,4,1,1373,1,3,2,2,6}; //static u16 bicc_sub_page[BICC_DEBUG_PAGE] = {0}; //static u8 bicc_ascii_in[BICC_ASCIN_LEN] = {0}; //static u8 bicc_ascii_out[BICC_ASCOUT_LEN] = {0}; #define BICC_DEBUG_ID 17 #define BICC_VER_DEBUG "R91V0_01" #define MONITOR_NONE 0x0000 #define MONITOR_ERROR 0x0010 #define MONITOR_ALL 0xffff #define TRACE_FLAG_ON 1 #define TRACE_FLAG_OFF 0 u8 AsciInBuf[4096]; u8 AsciOutBuf[4096]; u8 AsciTempBuf[4096]; WORD MonitorFg; u8 info[1024]; static u8 log_help[] = { "BICC debug Help:\n\r\ \n\r\ 1.help\n\r\ 2.log all/none\n\r\ 3.log error on/off\n\r\ 4.list cg[-cgNo] \n\r\ 5.list circuit[-circuitNo]\n\r\ 6.list port[-portNo]\n\r\ 7.list dmp\n\r\ 8.trace on-portNo\n\r\ 9.trace off[-portNo]\n\r\n\r\ " }; static WORD disp_page[10]; static u8 *disp_ptr = (u8 *) disp_page; static DWORD debug_status_id[20] = { 1,3,6,1,4,1,1373,1,1,2,3,1,2,BICC_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,BICC_DEBUG_ID + 2,2 }; static DWORD debug_ascin_id[20] = { 1,3,6,1,4,1,1373,1,1,2,3,1,2,BICC_DEBUG_ID + 2,3 }; static DWORD debug_ascout_id[20] = { 1,3,6,1,4,1,1373,1,1,2,3,1,2,BICC_DEBUG_ID + 2,4 }; static DWORD debug_page_title[20] = { 1,3,6,1,4,1,1373,1,1,2,3,1,2,BICC_DEBUG_ID + 2,1,1 }; static DWORD debug_page_line[20] = { 1,3,6,1,4,1,1373,1,1,2,3,1,2,BICC_DEBUG_ID + 2,1,2,1 }; const static u8 BASE_ID_LEN = 15; const static u8 PAGE_POINT = 14; const static u8 LINE_POINT = 15; static u8 title1_p[] = { " BICC Page 01 SAP Info\n\r\ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n\r\ Subpage\n\r\ Enable\n\r\ CG num\n\r" }; static u8 title2_p[] = { " BICC Page 02 CG Info\n\r\ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n\r\ Subpage\n\r\ Enable\n\r\ SAP id\n\r\ NI\n\r\ DPC\n\r" }; static u8 title3_p[] = { " BICC Page 03 CIrcuit Info\n\r\ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n\r\ Subpage\n\r\ CG id\n\r\ CIC range\n\r\ HEAD CIC\n\r" }; static u8 title4_p[] = { " BICC Page 04 Port Info\n\r\ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n\r\ Subpage\n\r\ Enable\n\r\ FSM State\n\r\ CIC State\n\r" }; static u8 debug_disp_line(u8 page, u8 line) { u8 disp_length; disp_length = 0; disp_ptr = (u8 *) disp_page; switch (page) { /* case 1: // Page 1: sap Info switch(line) { case 0: disp_ptr = (BYTE *) &disp_page[page]; disp_length = 2; break; case 1: disp_ptr = (BYTE *) &Bicc_Data.debug_data.sap_enable; disp_length = 16; break; case 2: disp_ptr = (BYTE *) &Bicc_Data.debug_data.sap_cg_num; disp_length = 16; break; default: break; } break; case 2: // Page 2: cg Info //disp_page[page] = (disp_page[page]+1)%BICC_MAX_CG; switch(line) { case 0: disp_ptr = (BYTE *) &disp_page[page]; //Subpage disp_length = 2; break; case 1: //enable disp_ptr = (BYTE *) &(BiccResource.cg_pond[disp_page[page]].used_flag); disp_length = 16; break; case 2: //sap_id disp_ptr = (BYTE *) &(BiccResource.cg_pond[disp_page[page]].sap_id); disp_length = 16; break; case 3: //network_id disp_ptr = (BYTE *) &(BiccResource.cg_pond[disp_page[page]].attrib.network_id); disp_length = 16; break; case 4: //dpc disp_ptr = (BYTE *) &(BiccResource.cg_pond[disp_page[page]].attrib.dpc); disp_length = 16; break; default: break; } break; case 3: // Page 3: circuit Info //disp_page[page] = (disp_page[page]+1)%BICC_MAX_CIRCUIT; switch(line) { case 0: disp_ptr = (BYTE *) &disp_page[page]; //Subpage disp_length = 16; break; case 1: //cg_id disp_ptr = (BYTE *) &(BiccResource.circuit_pond[disp_page[page]].cg_id); disp_length = 16; break; case 2: //cic_range disp_ptr = (BYTE *) &(BiccResource.circuit_pond[disp_page[page]].attrib.cic_range); disp_length = 16; break; case 3: //head_cic disp_ptr = (BYTE *) &(BiccResource.circuit_pond[disp_page[page]].attrib.head_cic); disp_length = 16; break; default: break; } break; case 4: // Page 4: port Info //disp_page[page] = (disp_page[page]+32)%BICC_MAX_PORT; switch(line) { case 0: disp_ptr = (BYTE *) &disp_page[page]; //Subpage disp_length = 16; break; case 1: //enable disp_ptr = (BYTE *) &(BiccResource.port_pond[disp_page[page]].used_flag); disp_length = 16; break; case 2: //fsm_state disp_ptr = (BYTE *) &(BiccResource.port_pond[disp_page[page]].fsm_state); disp_length = 16; break; case 3: //cic_state disp_ptr = (BYTE *) &(BiccResource.port_pond[disp_page[page]].cic_state); disp_length = 16; break; default: break; } break; */ default: disp_length = 0; break; } return disp_length; } static void debug_disp_page(u8 page) { u8 disp_line; u8 disp_length; debug_page_line[PAGE_POINT] = page + 5; for (disp_line = 0; disp_line < 22; disp_line++) { disp_length = debug_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 bicc_debug_init(void) { BYTE page; BYTE data[10]; BYTE *ptr; strcpy(AsciInBuf, "\0"); strcpy(AsciOutBuf, "\0"); MonitorFg = MONITOR_NONE; 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, BICC_VER_DEBUG, 10); debug_set_response(BASE_ID_LEN, debug_ascin_id, AsciInBuf, 4096); debug_set_response(BASE_ID_LEN, debug_ascout_id, AsciOutBuf, 4096); for (page = 1; page < 5; 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; default: break; } debug_page_title[PAGE_POINT] = 5 + page; debug_set_response(BASE_ID_LEN + 1, debug_page_title, ptr, strlen(ptr)); debug_disp_page(page); } return 1; } void bicc_asciout_proc(const char *fmt, ...) { va_list ap; char buf[1024]; va_start(ap, fmt); vsprintf(buf, fmt, ap); if((strlen(AsciOutBuf) + strlen(buf)) < 4096) strcat(AsciOutBuf, buf); else strcpy(AsciOutBuf, buf); va_end(ap); } void bicc_debug_refresh(void) { // int i; #if 0 for(i=0;i<16;i++) { Bicc_Data.debug_data.sap_enable[i] = BiccResource.sap_pond[i].used_flag; Bicc_Data.debug_data.sap_cg_num[i] = BiccResource.sap_pond[i].cg_num; } #endif } #if 0 void list_sap(WORD sapNo) { //u8 sapinfo[1024]; if(sapNo >= BICC_MAX_SAP) return; sprintf(info,"\ Enable:%d\n\r\ cg num:%d\n\r", BiccResource.sap_pond[sapNo].used_flag,BiccResource.sap_pond[sapNo].cg_num); bicc_asciout_proc(info); } void list_all_sap() { int i; sprintf(info, "Index CG(s)\n\r"); bicc_asciout_proc(info); for(i=0; i= PAL_MAX_CG) return; pcg = pal_cg_ptr(cgNo); if(pcg == NULL) return; sprintf(info, "\ Enable:%d\n\r\ sap id:%d\n\r\ circuit num:%d\n\r\ variant_type:%d\n\r\ priority:%d\n\r\ network id:%d\n\r\ opc:%ld\n\r\ dpc:%ld\n\r\ tg_id:%ld\n\r", pcg->enable,pcg->sap_id,pcg->circuit_num,pcg->attrib.variant,pcg->attrib.priority,pcg->attrib.network_id,pcg->attrib.opc,pcg->attrib.dpc,pcg->attrib.tg_id); bicc_asciout_proc(info); } void list_all_cg() { int i = 0; const pal_cg_struct *pcg; sprintf(info, "Index SAP Circuit(s) NetInd DPC OPC TG\n\r"); bicc_asciout_proc(info); for(i=0; ienable==0) continue; if(pcg->attrib.protocol != PROTO_BICC) continue; sprintf(info, " %d %d %d %d %ld %ld %ld\n\r", i, pcg->sap_id, pcg->circuit_num, pcg->attrib.network_id, pcg->attrib.dpc, pcg->attrib.opc, pcg->attrib.tg_id); bicc_asciout_proc(info); } } void list_circuit(WORD circuitNo) { const pal_circuit_struct *pcircuit; if(circuitNo >= PAL_MAX_CIRCUIT) return; pcircuit = pal_circuit_ptr(circuitNo); if(pcircuit == NULL) return ; sprintf(info,"\ Enable:%d\n\r\ cg id:%d\n\r\ head cic:%ld\n\r\ cic range:%d\n\r\ plat id:%d\n\r", pcircuit->enable,pcircuit->cg_id,pcircuit->attrib.head_cic,pcircuit->attrib.cic_range,pcircuit->attrib.plat_id); bicc_asciout_proc(info); } void list_all_circuit() { int i = 0, j = 0; const pal_circuit_struct *pcircuit; const pal_cg_struct *pcg; // for(i = 0; i < BICC_MAX_SAP; i ++) //{ sprintf(info, "Index CG PLAT CIC(s)\n\r"); bicc_asciout_proc(info); for(i=0; ienable == 0) continue; if(pcg->attrib.protocol != PROTO_BICC) continue; for(j = 0; jenable == 0 || pcircuit->cg_id != pcg->id) continue; sprintf(info, " %d %d %d %d (%ld~~%ld)\n\r", i, pcircuit->cg_id, pcircuit->attrib.plat_id, pcircuit->attrib.cic_range, pcircuit->attrib.head_cic, pcircuit->attrib.head_cic+pcircuit->attrib.cic_range); bicc_asciout_proc(info); } } } void list_port(WORD portNo) { if(portNo>=BICC_MAX_PORT) return; sprintf(info,"\ upper port:%ld\n\r\ sprc_cmd:%x\n\r\ primitive_cmd:%x\n\r\ internal_cmd:%x\n\r\ cic state{\n\r\ call state:%d\n\r\ suspend state:%d\n\r\ block state:%d\n\r\ }\n\r\ fsm state{\n\r\ cpc_state:%d\n\r\ mgbs_state:%d\n\r\ mgbr_state:%d\n\r\ crs_state:%d\n\r\ crr_state:%d\n\r\ cgrs_state:%d\n\r\ cgrr_state:%d\n\r\ }\n\r", Bicc_Data.port_data[portNo].su_proc_id,Bicc_Data.port_data[portNo].sprc_cmd, Bicc_Data.port_data[portNo].primitive_cmd,Bicc_Data.port_data[portNo].internal_cmd, Bicc_Data.port_data[portNo].cic_state.call_state,Bicc_Data.port_data[portNo].cic_state.sus_state, Bicc_Data.port_data[portNo].cic_state.blo_state,Bicc_Data.port_data[portNo].fsm_state.cpc_state, Bicc_Data.port_data[portNo].fsm_state.mgbs_state,Bicc_Data.port_data[portNo].fsm_state.mgbr_state, Bicc_Data.port_data[portNo].fsm_state.crs_state,Bicc_Data.port_data[portNo].fsm_state.crr_state, Bicc_Data.port_data[portNo].fsm_state.cgrs_state,Bicc_Data.port_data[portNo].fsm_state.cgrr_state); bicc_asciout_proc(info); } void list_busy_port() { int i,j=0; sprintf(info, "Index PortNo CallState\n\r"); bicc_asciout_proc(info); for(i=0;i 0) { in_page = AsciInBuf[0] - 1; ascii_in_ptr = AsciInBuf + 1; if (in_page > 4) err_fg = 1; else if (strcmp(ascii_in_ptr,"log error on") == 0) { MonitorFg = MonitorFg | MONITOR_ERROR; } else if (strcmp(ascii_in_ptr,"log error off") == 0) { MonitorFg = MonitorFg & (~MONITOR_ERROR); } else if (strcmp(ascii_in_ptr,"log all") == 0) { MonitorFg = MONITOR_ALL; } else if (strcmp(ascii_in_ptr,"log none") == 0) { MonitorFg = MONITOR_NONE; } else if (strcmp(ascii_in_ptr,"help") == 0) { bicc_asciout_proc(log_help); } else if (isdigit(ascii_in_ptr[0])) { num = strtoul(ascii_in_ptr, NULL, 10); disp_page[in_page] = num; debug_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; debug_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; debug_disp_page(in_page); } #if 0 else if ((strstr (ascii_in_ptr, "list sap")) != NULL) { if((tmpStr = strstr (ascii_in_ptr, "-")) != NULL) { sapNo = strtoul (tmpStr + 1, NULL, 10); list_sap(sapNo); } else { list_all_sap(); } } #endif else if ((strstr (ascii_in_ptr,"list cg")) != NULL) { if((tmpStr = strstr (ascii_in_ptr, "-")) != NULL) // if((tmpStr = strsep(&&ascii_in_ptr, " \t")) != NULL) { cgNo = strtoul (tmpStr+1, NULL, 10); // strsep(, " \t"); list_cg(cgNo); } else { list_all_cg(); } } else if ((strstr (ascii_in_ptr, "list circuit")) != NULL) { if((tmpStr = strstr (ascii_in_ptr, "-")) != NULL) { circuitNo = strtoul (tmpStr + 1, NULL, 10); list_circuit(circuitNo); } else { list_all_circuit(); } } else if ((strstr (ascii_in_ptr, "list port")) != NULL) { if((tmpStr = strstr (ascii_in_ptr, "-")) != NULL) { portNo = strtoul (tmpStr + 1, NULL, 10); list_port(portNo); } else { list_busy_port(); } } else if((strstr (ascii_in_ptr, "list dmp")) != NULL) { list_dmp(); } else if((strstr(ascii_in_ptr, "trace on")) != NULL) { if((tmpStr = strstr(ascii_in_ptr, "-")) != NULL) { portNo = strtoul(tmpStr + 1, NULL, 10); //trace_port(portNo); Bicc_Data.port_data[portNo].trace_flag = 1; } else {} } else if ((strstr (ascii_in_ptr, "trace off")) != NULL) { if((tmpStr = strstr (ascii_in_ptr, "-")) != NULL) { portNo = strtoul (tmpStr + 1, NULL, 10); Bicc_Data.port_data[portNo].trace_flag = 0; } else { int i; for(i=0; i= 4096) sprintf(AsciTempBuf, "log msg is too long!\n\r"); else sprintf(AsciTempBuf, "%s\n\r", msg); bicc_asciout_proc(AsciTempBuf); return 0; } return -1; } void display_bicc_msgtype(u8 msgtype, u32 cic) { switch(msgtype) { case M_ACM: bicc_asciout_proc("ACM:Address complete"); break; case M_ANM: bicc_asciout_proc("ANM:Answer"); break; case M_BLO: bicc_asciout_proc("BLO:Blocking"); break; case M_BLA: bicc_asciout_proc("BLA:Blocking acknowledgement"); break; case M_CPG: bicc_asciout_proc("CPG:Call progress"); break; case M_CGB: bicc_asciout_proc("CGB:Circuit/CIC group blocking"); break; case M_CGBA: bicc_asciout_proc("CGBA:Circuit/CIC group blocking acknowledgement"); break; case M_CQM: bicc_asciout_proc("CQM:Circuit/CIC group query (national use)"); break; case M_CQR: bicc_asciout_proc("CQR:Circuit/CIC group query response (national use)"); break; case M_GRS: bicc_asciout_proc("GRS:Circuit/CIC group reset"); break; case M_GRA: bicc_asciout_proc("GRA:Circuit/CIC group reset acknowledgement"); break; case M_CGU: bicc_asciout_proc("CGU:Circuit/CIC group unblocking"); break; case M_CGUA: bicc_asciout_proc("CGUA:Circuit/CIC group unblocking acknowledgement"); break; case M_CRG: bicc_asciout_proc("CRG:Charge information (national use)"); break; case M_CFN: bicc_asciout_proc("CFN:Confusion"); break; case M_CON: bicc_asciout_proc("CON:Connect"); break; case M_COT: bicc_asciout_proc("COT:Continuity"); break; case M_FAC: bicc_asciout_proc("FAC:Facility "); break; case M_FAA: bicc_asciout_proc("FAA:Facility accepted"); break; case M_FRJ: bicc_asciout_proc("FRJ:Facility reject"); break; case M_FAR: bicc_asciout_proc("FAR:Facility request"); break; case M_FOT: bicc_asciout_proc("FOT:Forward transfer"); break; case M_IDR: bicc_asciout_proc("IDR:Identification request"); break; case M_IRS: bicc_asciout_proc("IRS:Identification response"); break; case M_INF: bicc_asciout_proc("INF:Information (national use)"); break; case M_INR: bicc_asciout_proc("INR:Information request (national use)"); break; case M_IAM: bicc_asciout_proc("IAM:Initial address"); break; case M_NRM: bicc_asciout_proc("NRM:Network resource management"); break; case M_REL: bicc_asciout_proc("REL:Release"); break; case M_RLC: bicc_asciout_proc("RLC:Release complete"); break; case M_RSC: bicc_asciout_proc("RSC:Reset circuit/CIC"); break; case M_RES: bicc_asciout_proc("RES:Resume"); break; case M_SGM: bicc_asciout_proc("SGM:Segmentation"); break; case M_SAM: bicc_asciout_proc("SAM:Subsequent address"); break; case M_SUS: bicc_asciout_proc("SUS:Suspend"); break; case M_UBL: bicc_asciout_proc("UBL:Unblocking"); break; case M_UBA: bicc_asciout_proc("UBA:Unblocking acknowledgement"); break; case M_UCIC: bicc_asciout_proc("UCIC:Unequipped CIC (national use)"); break; case M_APM: bicc_asciout_proc("APM:Application Transport"); break; case M_USR: bicc_asciout_proc("USR:User-to-user information"); break; default: bicc_asciout_proc("Unknown message"); } bicc_asciout_proc("(message type=0x%x cic=%d)\r\n",msgtype,cic); } void monitor_bicc_msg(BYTE *msg,BYTE buf_len, BYTE flag, u32 cic, u32 portNo) { BYTE i,temp_buf[1024]; if(MonitorFg == MONITOR_ALL) { if(flag == 0) bicc_asciout_proc("\33[33mReceive:\33[0m"); else if(flag == 1) bicc_asciout_proc("\33[32mSend:\33[0m"); else if(flag == 2) bicc_asciout_proc("\33[34mRedirect:\33[0m"); display_bicc_msgtype(msg[0], cic); if(flag != 2) { for (i = 0; i < buf_len; i ++) { sprintf(&temp_buf[3*i]," %02x", msg[i]); } sprintf(&temp_buf[3*i],"\n\r"); bicc_asciout_proc(temp_buf); } } if(MonitorFg == MONITOR_NONE) {} if(Bicc_Data.port_data[portNo].trace_flag == 1) { if(flag == 0) bicc_asciout_proc("\33[33mReceive:\33[0m"); else if(flag == 1) bicc_asciout_proc("\33[32mSend:\33[0m"); else if(flag == 2) bicc_asciout_proc("\33[34mRedirect:\33[0m"); display_bicc_msgtype(msg[0], cic); if(flag != 2) { for (i = 0; i < buf_len; i ++) { sprintf(&temp_buf[3*i]," %02x", msg[i]); } sprintf(&temp_buf[3*i],"\n\r"); bicc_asciout_proc(temp_buf); } } }