📄 debug.c
字号:
"Inc Busy =%lu", channel->pInterfaceStat->inc.User_Busy); } if (channel->pInterfaceStat->inc.Call_Rejected) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "Inc Rejected =%lu", channel->pInterfaceStat->inc.Call_Rejected); } if (channel->pInterfaceStat->inc.Wrong_Number) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "Inc Wrong Nr =%lu", channel->pInterfaceStat->inc.Wrong_Number); } if (channel->pInterfaceStat->inc.Incompatible_Dst) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "Inc Incomp. Dest =%lu", channel->pInterfaceStat->inc.Incompatible_Dst); } if (channel->pInterfaceStat->inc.Out_of_Order) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "Inc Out of Order =%lu", channel->pInterfaceStat->inc.Out_of_Order); } if (channel->pInterfaceStat->inc.Ignored) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "Inc Ignored =%lu", channel->pInterfaceStat->inc.Ignored); } /* Outgoing Statistics */ if (channel->pInterfaceStat->outg.Calls) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "Outg Calls =%lu", channel->pInterfaceStat->outg.Calls); } if (channel->pInterfaceStat->outg.Connected) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "Outg Connected =%lu", channel->pInterfaceStat->outg.Connected); } if (channel->pInterfaceStat->outg.User_Busy) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "Outg Busy =%lu", channel->pInterfaceStat->outg.User_Busy); } if (channel->pInterfaceStat->outg.No_Answer) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "Outg No Answer =%lu", channel->pInterfaceStat->outg.No_Answer); } if (channel->pInterfaceStat->outg.Wrong_Number) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "Outg Wrong Nr =%lu", channel->pInterfaceStat->outg.Wrong_Number); } if (channel->pInterfaceStat->outg.Call_Rejected) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "Outg Rejected =%lu", channel->pInterfaceStat->outg.Call_Rejected); } if (channel->pInterfaceStat->outg.Other_Failures) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "Outg Other Failures =%lu", channel->pInterfaceStat->outg.Other_Failures); } } break; case DIVA_SUPER_TRACE_NOTIFY_MDM_STAT_CHANGE: if (channel->pInterfaceStat->mdm.Disc_Normal) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "MDM Disc Normal = %lu", channel->pInterfaceStat->mdm.Disc_Normal); } if (channel->pInterfaceStat->mdm.Disc_Unspecified) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "MDM Disc Unsp. = %lu", channel->pInterfaceStat->mdm.Disc_Unspecified); } if (channel->pInterfaceStat->mdm.Disc_Busy_Tone) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "MDM Disc Busy Tone = %lu", channel->pInterfaceStat->mdm.Disc_Busy_Tone); } if (channel->pInterfaceStat->mdm.Disc_Congestion) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "MDM Disc Congestion = %lu", channel->pInterfaceStat->mdm.Disc_Congestion); } if (channel->pInterfaceStat->mdm.Disc_Carr_Wait) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "MDM Disc Carrier Wait = %lu", channel->pInterfaceStat->mdm.Disc_Carr_Wait); } if (channel->pInterfaceStat->mdm.Disc_Trn_Timeout) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "MDM Disc Trn. T.o. = %lu", channel->pInterfaceStat->mdm.Disc_Trn_Timeout); } if (channel->pInterfaceStat->mdm.Disc_Incompat) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "MDM Disc Incompatible = %lu", channel->pInterfaceStat->mdm.Disc_Incompat); } if (channel->pInterfaceStat->mdm.Disc_Frame_Rej) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "MDM Disc Frame Reject = %lu", channel->pInterfaceStat->mdm.Disc_Frame_Rej); } if (channel->pInterfaceStat->mdm.Disc_V42bis) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "MDM Disc V.42bis = %lu", channel->pInterfaceStat->mdm.Disc_V42bis); } break; case DIVA_SUPER_TRACE_NOTIFY_FAX_STAT_CHANGE: if (channel->pInterfaceStat->fax.Disc_Normal) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "FAX Disc Normal = %lu", channel->pInterfaceStat->fax.Disc_Normal); } if (channel->pInterfaceStat->fax.Disc_Not_Ident) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "FAX Disc Not Ident. = %lu", channel->pInterfaceStat->fax.Disc_Not_Ident); } if (channel->pInterfaceStat->fax.Disc_No_Response) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "FAX Disc No Response = %lu", channel->pInterfaceStat->fax.Disc_No_Response); } if (channel->pInterfaceStat->fax.Disc_Retries) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "FAX Disc Max Retries = %lu", channel->pInterfaceStat->fax.Disc_Retries); } if (channel->pInterfaceStat->fax.Disc_Unexp_Msg) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "FAX Unexp. Msg. = %lu", channel->pInterfaceStat->fax.Disc_Unexp_Msg); } if (channel->pInterfaceStat->fax.Disc_No_Polling) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "FAX Disc No Polling = %lu", channel->pInterfaceStat->fax.Disc_No_Polling); } if (channel->pInterfaceStat->fax.Disc_Training) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "FAX Disc Training = %lu", channel->pInterfaceStat->fax.Disc_Training); } if (channel->pInterfaceStat->fax.Disc_Unexpected) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "FAX Disc Unexpected = %lu", channel->pInterfaceStat->fax.Disc_Unexpected); } if (channel->pInterfaceStat->fax.Disc_Application) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "FAX Disc Application = %lu", channel->pInterfaceStat->fax.Disc_Application); } if (channel->pInterfaceStat->fax.Disc_Incompat) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "FAX Disc Incompatible = %lu", channel->pInterfaceStat->fax.Disc_Incompat); } if (channel->pInterfaceStat->fax.Disc_No_Command) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "FAX Disc No Command = %lu", channel->pInterfaceStat->fax.Disc_No_Command); } if (channel->pInterfaceStat->fax.Disc_Long_Msg) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "FAX Disc Long Msg. = %lu", channel->pInterfaceStat->fax.Disc_Long_Msg); } if (channel->pInterfaceStat->fax.Disc_Supervisor) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "FAX Disc Supervisor = %lu", channel->pInterfaceStat->fax.Disc_Supervisor); } if (channel->pInterfaceStat->fax.Disc_SUB_SEP_PWD) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "FAX Disc SUP SEP PWD = %lu", channel->pInterfaceStat->fax.Disc_SUB_SEP_PWD); } if (channel->pInterfaceStat->fax.Disc_Invalid_Msg) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "FAX Disc Invalid Msg. = %lu", channel->pInterfaceStat->fax.Disc_Invalid_Msg); } if (channel->pInterfaceStat->fax.Disc_Page_Coding) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "FAX Disc Page Coding = %lu", channel->pInterfaceStat->fax.Disc_Page_Coding); } if (channel->pInterfaceStat->fax.Disc_App_Timeout) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "FAX Disc Appl. T.o. = %lu", channel->pInterfaceStat->fax.Disc_App_Timeout); } if (channel->pInterfaceStat->fax.Disc_Unspecified) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "FAX Disc Unspec. = %lu", channel->pInterfaceStat->fax.Disc_Unspecified); } break; }}/* Receive trace information from the Management Interface and store it in the internal trace buffer with MSG_TYPE_MLOG as is, without any filtering. Event Filtering and formatting is done in Management Interface self. */static void diva_maint_trace_notify (void* user_context, diva_strace_library_interface_t* hLib, int Adapter, void* xlog_buffer, int length) { diva_maint_client_t* pC = (diva_maint_client_t*)user_context; diva_dbg_entry_head_t* pmsg; word size; dword sec, usec; int ch = TraceFilterChannel; int id = TraceFilterIdent; /* Selective trace */ if ((id >= 0) && (ch >= 0) && (id < sizeof(clients)/sizeof(clients[0])) && (clients[id].Dbg.id == (byte)id) && (clients[id].pIdiLib == hLib)) { const char* p = NULL; int ch_value = -1; MI_XLOG_HDR *TrcData = (MI_XLOG_HDR *)xlog_buffer; if (Adapter != clients[id].logical) { return; /* Ignore all trace messages from other adapters */ } if (TrcData->code == 24) { p = (char*)&TrcData->code; p += 2; } /* All L1 messages start as [dsp,ch], so we can filter this information and filter out all messages that use different channel */ if (p && p[0] == '[') { if (p[2] == ',') { p += 3; ch_value = *p - '0'; } else if (p[3] == ',') { p += 4; ch_value = *p - '0'; } if (ch_value >= 0) { if (p[2] == ']') { ch_value = ch_value * 10 + p[1] - '0'; } if (ch_value != ch) { return; /* Ignore other channels */ } } } } else if (TraceFilter[0] != 0) { return; /* Ignore trace if trace filter is activated, but idle */ } diva_os_get_time (&sec, &usec); while (!(pmsg = (diva_dbg_entry_head_t*)queueAllocMsg (dbg_queue, (word)length+sizeof(*pmsg)))) { if ((pmsg = (diva_dbg_entry_head_t*)queuePeekMsg (dbg_queue, &size))) { queueFreeMsg (dbg_queue); } else { break; } } if (pmsg) { memcpy (&pmsg[1], xlog_buffer, length); pmsg->sequence = dbg_sequence++; pmsg->time_sec = sec; pmsg->time_usec = usec; pmsg->facility = MSG_TYPE_MLOG; pmsg->dli = pC->logical; pmsg->drv_id = pC->hDbg->id; pmsg->di_cpu = 0; pmsg->data_length = length; queueCompleteMsg (pmsg); if (queueCount(dbg_queue)) { diva_maint_wakeup_read(); } }}/* Convert MAINT trace mask to management interface trace mask/work/facility and issue command to management interface */static void diva_change_management_debug_mask (diva_maint_client_t* pC, dword old_mask) { if (pC->request && pC->hDbg && pC->pIdiLib) { dword changed = pC->hDbg->dbgMask ^ old_mask; if (changed & DIVA_MGT_DBG_TRACE) { (*(pC->pIdiLib->DivaSTraceSetInfo))(pC->pIdiLib, (pC->hDbg->dbgMask & DIVA_MGT_DBG_TRACE) != 0); } if (changed & DIVA_MGT_DBG_DCHAN) { (*(pC->pIdiLib->DivaSTraceSetDChannel))(pC->pIdiLib, (pC->hDbg->dbgMask & DIVA_MGT_DBG_DCHAN) != 0); } if (!TraceFilter[0]) { if (changed & DIVA_MGT_DBG_IFC_BCHANNEL) { int i, state = ((pC->hDbg->dbgMask & DIVA_MGT_DBG_IFC_BCHANNEL) != 0); for (i = 0; i < pC->channels; i++) { (*(pC->pIdiLib->DivaSTraceSetBChannel))(pC->pIdiLib, i+1, state); } } if (changed & DIVA_MGT_DBG_IFC_AUDIO) { int i, state = ((pC->hDbg->dbgMask & DIVA_MGT_DBG_IFC_AUDIO) != 0); for (i = 0; i < pC->channels; i++) { (*(pC->pIdiLib->DivaSTraceSetAudioTap))(pC->pIdiLib, i+1, state); } } } }}void diva_mnt_internal_dprintf (dword drv_id, dword type, char* fmt, ...) { va_list ap; va_start(ap, fmt); DI_format (0, (word)drv_id, (int)type, fmt, ap); va_end(ap);}/* Shutdown all adapters before driver removal */int diva_mnt_shutdown_xdi_adapters (void) { diva_os_spin_lock_magic_t old_irql, old_irql1; int i, fret = 0; byte * pmem; for (i = 1; i < (sizeof(clients)/sizeof(clients[0])); i++) { pmem = NULL; diva_os_enter_spin_lock (&dbg_adapter_lock, &old_irql1, "unload"); diva_os_enter_spin_lock (&dbg_q_lock, &old_irql, "unload"); if (clients[i].hDbg && clients[i].pIdiLib && clients[i].request) { if ((*(clients[i].pIdiLib->DivaSTraceLibraryStop))(clients[i].pIdiLib) == 1) { /* Adapter removal complete */ if (clients[i].pIdiLib) { (*(clients[i].pIdiLib->DivaSTraceLibraryFinit))(clients[i].pIdiLib->hLib); clients[i].pIdiLib = NULL; pmem = clients[i].pmem; clients[i].pmem = NULL; } clients[i].hDbg = NULL; clients[i].request_pending = 0; if (clients[i].dma_handle >= 0) { /* Free DMA handle */ diva_free_dma_descriptor (clients[i].request, clients[i].dma_handle); clients[i].dma_handle = -1; } clients[i].request = NULL; } else { fret = -1; } } diva_os_leave_spin_lock (&dbg_q_lock, &old_irql, "unload"); if (clients[i].hDbg && clients[i].pIdiLib && clients[i].request && clients[i].request_pending) { clients[i].request_pending = 0; (*(clients[i].request))((ENTITY*)(*(clients[i].pIdiLib->DivaSTraceGetHandle))(clients[i].pIdiLib->hLib)); if (clients[i].dma_handle >= 0) { diva_free_dma_descriptor (clients[i].request, clients[i].dma_handle); clients[i].dma_handle = -1; } } diva_os_leave_spin_lock (&dbg_adapter_lock, &old_irql1, "unload"); if (pmem) { diva_os_free (0, pmem); } } return (fret);}/* Set/Read the trace filter used for selective tracing. Affects B- and Audio Tap trace mask at run time */int diva_set_trace_filter (int filter_length, const char* filter) { diva_os_spin_lock_magic_t old_irql, old_irql1; int i, ch, on, client_b_on, client_atap_on; diva_os_enter_spin_lock (&dbg_adapter_lock, &old_irql1, "dbg mask"); diva_os_enter_spin_lock (&dbg_q_lock, &old_irql, "write_filter"); if (filter_length <= DIVA_MAX_SELECTIVE_FILTER_LENGTH) { memcpy (&TraceFilter[0], filter, filter_length); if (TraceFilter[filter_length]) { TraceFilter[filter_length] = 0; } if (TraceFilter[0] == '*') { TraceFilter[0] = 0; } } else { filter_length = -1; } TraceFilterIdent = -1; TraceFilterChannel = -1; on = (TraceFilter[0] == 0); for (i = 1; i < (sizeof(clients)/sizeof(clients[0])); i++) { if (clients[i].hDbg && clients[i].pIdiLib && clients[i].request) { client_b_on = on && ((clients[i].hDbg->dbgMask & DIVA_MGT_DBG_IFC_BCHANNEL) != 0); client_atap_on = on && ((cli
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -