📄 debug.c
字号:
e->Id = MAN_ID; e->callback = diva_maint_xdi_cb; e->XNum = 1; e->X = &pC->XData; e->Req = ASSIGN; e->ReqCh = 0; e->X->PLength = assign_data_length; e->X->P = (byte*)&pC->xbuffer[0]; pC->request_pending = 1; return (0); } return (-1);}int SuperTraceREMOVE (void* AdapterHandle) { diva_maint_client_t* pC = (diva_maint_client_t*)AdapterHandle; if (pC && pC->pIdiLib && pC->request) { ENTITY* e = (ENTITY*)(*(pC->pIdiLib->DivaSTraceGetHandle))(pC->pIdiLib->hLib); e->XNum = 1; e->X = &pC->XData; e->Req = REMOVE; e->ReqCh = 0; e->X->PLength = 1; e->X->P = (byte*)&pC->xbuffer[0]; pC->xbuffer[0] = 0; pC->request_pending = 1; return (0); } return (-1);}int SuperTraceTraceOnRequest(void* hAdapter, const char* name, byte* data) { diva_maint_client_t* pC = (diva_maint_client_t*)hAdapter; if (pC && pC->pIdiLib && pC->request) { ENTITY* e = (ENTITY*)(*(pC->pIdiLib->DivaSTraceGetHandle))(pC->pIdiLib->hLib); byte* xdata = (byte*)&pC->xbuffer[0]; char tmp = 0; word length; if (!strcmp(name, "\\")) { /* Read ROOT */ name = &tmp; } length = SuperTraceCreateReadReq (xdata, name); single_p (xdata, &length, 0); /* End Of Message */ e->Req = MAN_EVENT_ON; e->ReqCh = 0; e->X->PLength = length; e->X->P = (byte*)xdata; pC->request_pending = 1; return (0); } return (-1);}int SuperTraceWriteVar (void* AdapterHandle, byte* data, const char* name, void* var, byte type, byte var_length) { diva_maint_client_t* pC = (diva_maint_client_t*)AdapterHandle; if (pC && pC->pIdiLib && pC->request) { ENTITY* e = (ENTITY*)(*(pC->pIdiLib->DivaSTraceGetHandle))(pC->pIdiLib->hLib); diva_man_var_header_t* pVar = (diva_man_var_header_t*)&pC->xbuffer[0]; word length = SuperTraceCreateReadReq ((byte*)pVar, name); memcpy (&pC->xbuffer[length], var, var_length); length += var_length; pVar->length += var_length; pVar->value_length = var_length; pVar->type = type; single_p ((byte*)pVar, &length, 0); /* End Of Message */ e->Req = MAN_WRITE; e->ReqCh = 0; e->X->PLength = length; e->X->P = (byte*)pVar; pC->request_pending = 1; return (0); } return (-1);}int SuperTraceExecuteRequest (void* AdapterHandle, const char* name, byte* data) { diva_maint_client_t* pC = (diva_maint_client_t*)AdapterHandle; if (pC && pC->pIdiLib && pC->request) { ENTITY* e = (ENTITY*)(*(pC->pIdiLib->DivaSTraceGetHandle))(pC->pIdiLib->hLib); byte* xdata = (byte*)&pC->xbuffer[0]; word length; length = SuperTraceCreateReadReq (xdata, name); single_p (xdata, &length, 0); /* End Of Message */ e->Req = MAN_EXECUTE; e->ReqCh = 0; e->X->PLength = length; e->X->P = (byte*)xdata; pC->request_pending = 1; return (0); } return (-1);}static word SuperTraceCreateReadReq (byte* P, const char* path) { byte var_length; byte* plen; var_length = (byte)strlen (path); *P++ = ESC; plen = P++; *P++ = 0x80; /* MAN_IE */ *P++ = 0x00; /* Type */ *P++ = 0x00; /* Attribute */ *P++ = 0x00; /* Status */ *P++ = 0x00; /* Variable Length */ *P++ = var_length; memcpy (P, path, var_length); P += var_length; *plen = var_length + 0x06; return ((word)(var_length + 0x08));}static void single_p (byte * P, word * PLength, byte Id) { P[(*PLength)++] = Id;}static void diva_maint_xdi_cb (ENTITY* e) { diva_strace_context_t* pLib = DIVAS_CONTAINING_RECORD(e,diva_strace_context_t,e); diva_maint_client_t* pC; diva_os_spin_lock_magic_t old_irql, old_irql1; diva_os_enter_spin_lock (&dbg_adapter_lock, &old_irql1, "xdi_cb"); diva_os_enter_spin_lock (&dbg_q_lock, &old_irql, "xdi_cb"); pC = (diva_maint_client_t*)pLib->hAdapter; if ((e->complete == 255) || (pC->dma_handle < 0)) { if ((*(pLib->instance.DivaSTraceMessageInput))(&pLib->instance)) { diva_mnt_internal_dprintf (0, DLI_ERR, "Trace internal library error"); } } else { /* Process combined management interface indication */ if ((*(pLib->instance.DivaSTraceMessageInput))(&pLib->instance)) { diva_mnt_internal_dprintf (0, DLI_ERR, "Trace internal library error (DMA mode)"); } } diva_os_leave_spin_lock (&dbg_q_lock, &old_irql, "xdi_cb"); if (pC->request_pending) { pC->request_pending = 0; (*(pC->request))(e); } diva_os_leave_spin_lock (&dbg_adapter_lock, &old_irql1, "xdi_cb");}static void diva_maint_error (void* user_context, diva_strace_library_interface_t* hLib, int Adapter, int error, const char* file, int line) { diva_mnt_internal_dprintf (0, DLI_ERR, "Trace library error(%d) A(%d) %s %d", error, Adapter, file, line);}static void print_ie (diva_trace_ie_t* ie, char* buffer, int length) { int i; buffer[0] = 0; if (length > 32) { for (i = 0; ((i < ie->length) && (length > 3)); i++) { sprintf (buffer, "%02x", ie->data[i]); buffer += 2; length -= 2; if (i < (ie->length-1)) { strcpy (buffer, " "); buffer++; length--; } } }}static void diva_maint_state_change_notify (void* user_context, diva_strace_library_interface_t* hLib, int Adapter, diva_trace_line_state_t* channel, int notify_subject) { diva_maint_client_t* pC = (diva_maint_client_t*)user_context; diva_trace_fax_state_t* fax = &channel->fax; diva_trace_modem_state_t* modem = &channel->modem; char tmp[256]; if (!pC->hDbg) { return; } switch (notify_subject) { case DIVA_SUPER_TRACE_NOTIFY_LINE_CHANGE: { int view = (TraceFilter[0] == 0); /* Process selective Trace */ if (channel->Line[0] == 'I' && channel->Line[1] == 'd' && channel->Line[2] == 'l' && channel->Line[3] == 'e') { if ((TraceFilterIdent == pC->hDbg->id) && (TraceFilterChannel == (int)channel->ChannelNumber)) { (*(hLib->DivaSTraceSetBChannel))(hLib, (int)channel->ChannelNumber, 0); (*(hLib->DivaSTraceSetAudioTap))(hLib, (int)channel->ChannelNumber, 0); diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "Selective Trace OFF for Ch=%d", (int)channel->ChannelNumber); TraceFilterIdent = -1; TraceFilterChannel = -1; view = 1; } } else if (TraceFilter[0] && (TraceFilterIdent < 0) && !(diva_mnt_cmp_nmbr (&channel->RemoteAddress[0]) && diva_mnt_cmp_nmbr (&channel->LocalAddress[0]))) { if ((pC->hDbg->dbgMask & DIVA_MGT_DBG_IFC_BCHANNEL) != 0) { /* Activate B-channel trace */ (*(hLib->DivaSTraceSetBChannel))(hLib, (int)channel->ChannelNumber, 1); } if ((pC->hDbg->dbgMask & DIVA_MGT_DBG_IFC_AUDIO) != 0) { /* Activate AudioTap Trace */ (*(hLib->DivaSTraceSetAudioTap))(hLib, (int)channel->ChannelNumber, 1); } TraceFilterIdent = pC->hDbg->id; TraceFilterChannel = (int)channel->ChannelNumber; if (TraceFilterIdent >= 0) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "Selective Trace ON for Ch=%d", (int)channel->ChannelNumber); view = 1; } } if (view && (pC->hDbg->dbgMask & DIVA_MGT_DBG_LINE_EVENTS)) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_STAT, "L Ch = %d", (int)channel->ChannelNumber); diva_mnt_internal_dprintf (pC->hDbg->id, DLI_STAT, "L Status = <%s>", &channel->Line[0]); diva_mnt_internal_dprintf (pC->hDbg->id, DLI_STAT, "L Layer1 = <%s>", &channel->Framing[0]); diva_mnt_internal_dprintf (pC->hDbg->id, DLI_STAT, "L Layer2 = <%s>", &channel->Layer2[0]); diva_mnt_internal_dprintf (pC->hDbg->id, DLI_STAT, "L Layer3 = <%s>", &channel->Layer3[0]); diva_mnt_internal_dprintf (pC->hDbg->id, DLI_STAT, "L RAddr = <%s>", &channel->RemoteAddress[0]); diva_mnt_internal_dprintf (pC->hDbg->id, DLI_STAT, "L RSAddr = <%s>", &channel->RemoteSubAddress[0]); diva_mnt_internal_dprintf (pC->hDbg->id, DLI_STAT, "L LAddr = <%s>", &channel->LocalAddress[0]); diva_mnt_internal_dprintf (pC->hDbg->id, DLI_STAT, "L LSAddr = <%s>", &channel->LocalSubAddress[0]); print_ie(&channel->call_BC, tmp, sizeof(tmp)); diva_mnt_internal_dprintf (pC->hDbg->id, DLI_STAT, "L BC = <%s>", tmp); print_ie(&channel->call_HLC, tmp, sizeof(tmp)); diva_mnt_internal_dprintf (pC->hDbg->id, DLI_STAT, "L HLC = <%s>", tmp); print_ie(&channel->call_LLC, tmp, sizeof(tmp)); diva_mnt_internal_dprintf (pC->hDbg->id, DLI_STAT, "L LLC = <%s>", tmp); diva_mnt_internal_dprintf (pC->hDbg->id, DLI_STAT, "L CR = 0x%x", channel->CallReference); diva_mnt_internal_dprintf (pC->hDbg->id, DLI_STAT, "L Disc = 0x%x", channel->LastDisconnecCause); diva_mnt_internal_dprintf (pC->hDbg->id, DLI_STAT, "L Owner = <%s>", &channel->UserID[0]); } } break; case DIVA_SUPER_TRACE_NOTIFY_MODEM_CHANGE: if (pC->hDbg->dbgMask & DIVA_MGT_DBG_MDM_PROGRESS) { { int ch = TraceFilterChannel; int id = TraceFilterIdent; if ((id >= 0) && (ch >= 0) && (id < sizeof(clients)/sizeof(clients[0])) && (clients[id].Dbg.id == (byte)id) && (clients[id].pIdiLib == hLib)) { if (ch != (int)modem->ChannelNumber) { break; } } else if (TraceFilter[0] != 0) { break; } } diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "MDM Ch = %lu", (int)modem->ChannelNumber); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "MDM Event = %lu", modem->Event); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "MDM Norm = %lu", modem->Norm); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "MDM Opts. = 0x%08x", modem->Options); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "MDM Tx = %lu Bps", modem->TxSpeed); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "MDM Rx = %lu Bps", modem->RxSpeed); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "MDM RT = %lu mSec", modem->RoundtripMsec); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "MDM Sr = %lu", modem->SymbolRate); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "MDM Rxl = %d dBm", modem->RxLeveldBm); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "MDM El = %d dBm", modem->EchoLeveldBm); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "MDM SNR = %lu dB", modem->SNRdb); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "MDM MAE = %lu", modem->MAE); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "MDM LRet = %lu", modem->LocalRetrains); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "MDM RRet = %lu", modem->RemoteRetrains); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "MDM LRes = %lu", modem->LocalResyncs); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "MDM RRes = %lu", modem->RemoteResyncs); if (modem->Event == 3) { diva_mnt_internal_dprintf(pC->hDbg->id,DLI_STAT,"MDM Disc = %lu", modem->DiscReason); } } if ((modem->Event == 3) && (pC->hDbg->dbgMask & DIVA_MGT_DBG_MDM_STATISTICS)) { (*(pC->pIdiLib->DivaSTraceGetModemStatistics))(pC->pIdiLib); } break; case DIVA_SUPER_TRACE_NOTIFY_FAX_CHANGE: if (pC->hDbg->dbgMask & DIVA_MGT_DBG_FAX_PROGRESS) { { int ch = TraceFilterChannel; int id = TraceFilterIdent; if ((id >= 0) && (ch >= 0) && (id < sizeof(clients)/sizeof(clients[0])) && (clients[id].Dbg.id == (byte)id) && (clients[id].pIdiLib == hLib)) { if (ch != (int)fax->ChannelNumber) { break; } } else if (TraceFilter[0] != 0) { break; } } diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "FAX Ch = %lu",(int)fax->ChannelNumber); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "FAX Event = %lu", fax->Event); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "FAX Pages = %lu", fax->Page_Counter); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "FAX Feat. = 0x%08x", fax->Features); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "FAX ID = <%s>", &fax->Station_ID[0]); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "FAX Saddr = <%s>", &fax->Subaddress[0]); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "FAX Pwd = <%s>", &fax->Password[0]); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "FAX Speed = %lu", fax->Speed); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "FAX Res. = 0x%08x", fax->Resolution); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "FAX Width = %lu", fax->Paper_Width); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "FAX Length= %lu", fax->Paper_Length); diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "FAX SLT = %lu", fax->Scanline_Time); if (fax->Event == 3) { diva_mnt_internal_dprintf(pC->hDbg->id, DLI_STAT, "FAX Disc = %lu", fax->Disc_Reason); } } if ((fax->Event == 3) && (pC->hDbg->dbgMask & DIVA_MGT_DBG_FAX_STATISTICS)) { (*(pC->pIdiLib->DivaSTraceGetFaxStatistics))(pC->pIdiLib); } break; case DIVA_SUPER_TRACE_INTERFACE_CHANGE: if (pC->hDbg->dbgMask & DIVA_MGT_DBG_IFC_EVENTS) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_STAT, "Layer 1 -> [%s]", channel->pInterface->Layer1); diva_mnt_internal_dprintf (pC->hDbg->id, DLI_STAT, "Layer 2 -> [%s]", channel->pInterface->Layer2); } break; case DIVA_SUPER_TRACE_NOTIFY_STAT_CHANGE: if (pC->hDbg->dbgMask & DIVA_MGT_DBG_IFC_STATISTICS) { /* Incoming Statistics */ if (channel->pInterfaceStat->inc.Calls) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "Inc Calls =%lu", channel->pInterfaceStat->inc.Calls); } if (channel->pInterfaceStat->inc.Connected) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, "Inc Connected =%lu", channel->pInterfaceStat->inc.Connected); } if (channel->pInterfaceStat->inc.User_Busy) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -