// Dump in ASCII the TiParams structure to a buffer int TiParams_Sprintf( TiParams *params, char *buf ) { char id_str[4]; int rule; // Check for Null pointer if( params == (TiParams *)NULL ) { fprintf( stderr, "%s: params=0\n", __FUNCTION__ ); return D_RetCode_Err_Null_Pointer; } if( buf == (char *)NULL ) { fprintf( stderr, "%s: buf=0\n", __FUNCTION__ ); return D_RetCode_Err_Null_Pointer; } // If parameters were not set, just exit queitly if( params->Id < 0 ) return D_RetCode_Sucsess; // VME info if( params->Id == 0 ) sprintf(id_str, "*"); else sprintf(id_str, "%d", params->Id ); sprintf( buf, "%s# Ti %s configuration\n", buf, id_str ); if( params->Id > 0 ) { sprintf( buf, "%s# Ti %s Slot %d BaseAdr_A24_Reg=0x%08x BaseAdr_A32_Fifo=0x%08x\n", buf, id_str, params->Slot, params->BaseAdr_A24_Reg, params->BaseAdr_A32_Fifo ); sprintf( buf, "%s# Ti %s Slot %d Mblk Min=0x%08x Max=0x%08x Rank=%s\n", buf, id_str, params->Slot, params->BaseAdr_A32m_Com_Min, params->BaseAdr_A32m_Com_Max, MblkRank2Str( params->Mblk_Rank ) ); } // Global parameters: defived from global parameters sprintf( buf, "%s# Ti %s NbOfEvtPerBlk %d\n", buf, id_str, params->NbOfEvtPerBlk ); // Clk source: defived from global parameters sprintf( buf, "%s# Ti %s ClkSrc %s\n", buf, id_str, TiClkSrc2Str(params->ClkSrc) ); // Trg source sprintf( buf, "%sTi %s TrgSrc %s\n", buf, id_str, TiTrgSrc2Str(params->TrgSrc) ); // Syn source sprintf( buf, "%sTi %s SynSrc %s\n", buf, id_str, TiSynSrc2Str(params->SynSrc) ); // Busy source sprintf( buf, "%sTi %s BsySrc %s\n", buf, id_str, TiBsySrc2Str(params->BsySrc) ); // Trigger parameters sprintf( buf, "%sTi %s TrgRate %d\n", buf, id_str, params->TrgRate ); sprintf( buf, "%sTi %s TrgPrescale %d\n", buf, id_str, params->TrgPrescale ); sprintf( buf, "%sTi %s TrgTimPar %d %d\n", buf, id_str, params->TrgDel_4ns, params->TrgWid_4ns ); for( rule=0; rule<Def_Ti_TrgRules_MaxNum; rule++ ) sprintf( buf, "%sTi %s TrgRule %d %3d %d \n", buf, id_str, rule+1, params->TrgRules_UnitCount[rule], params->TrgRules_TimeUnit[rule] ); // Sync parameters sprintf( buf, "%sTi %s SynDel %d\n", buf, id_str, params->SynDel_4ns ); // Format: if set enables extended EventId and Timestamp sprintf( buf, "%sTi %s ExtEidTstp %d\n", buf, id_str, params->ExtEidTstp ); // Trigger inhibit threshold in event blocks sprintf( buf, "%sTi %s TrgInhThr %d\n", buf, id_str, params->TrgInhThr ); // All went fine return D_RetCode_Sucsess; }
// Dump in ASCII the BecParams structure to a buffer int BecParams_Sprintf( BecParams *params, char *buf ) { int beu; int feu; // Check for Null pointer if( params == (BecParams *)NULL ) { fprintf( stderr, "%s: params=0\n", __FUNCTION__ ); return D_RetCode_Err_Null_Pointer; } if( buf == (char *)NULL ) { fprintf( stderr, "%s: buf=0\n", __FUNCTION__ ); return D_RetCode_Err_Null_Pointer; } // If parameters were not set, just exit queitly if( params->Config_Id < 0 ) return D_RetCode_Sucsess; // Create info sprintf( buf, "%sBec %d CrateId %d\n", buf, params->Config_Id, params->Crate_Id ); // SD sprintf( buf, "%sBec %d Slot %d Sd %d\n", buf, params->Config_Id, params->Sd_Slot, params->Sd_Id ); // TI sprintf ( buf, "%sBec %d Slot %d Ti %d 0x%08x 0x%08x Mblk %s\n", buf, params->Config_Id, params->Ti_Slot, params->Ti_Id, params->Ti_BaseAdr_A24_Reg, params->Ti_BaseAdr_A32_Fifo, MblkRank2Str(params->Ti_Mblk_Rank) ); // Beu for( beu=1; beu<DEF_MAX_NB_OF_BEU; beu++ ) { if( (DEF_MIN_BEU_SLOT <= params->Beu_Slot[beu]) && (params->Beu_Slot[beu] <= DEF_MAX_BEU_SLOT) ) { sprintf ( buf, "%sBec %d Slot %d Beu %d 0x%08x 0x%08x Mblk %s\n", buf, params->Config_Id, params->Beu_Slot[beu], params->Beu_Id[beu], params->Beu_BaseAdr_A24_Reg[beu], params->Beu_BaseAdr_A32_Fifo[beu], MblkRank2Str(params->Beu_Mblk_Rank[beu]) ); } } // Common A32 memory address space sprintf ( buf, "%sBec %d BaseAdr_A32m_Com %1d 0x%08x 0x%08x\n", buf, params->Config_Id, params->BaseAdr_A32m_Com_Enb, params->BaseAdr_A32m_Com_Min, params->BaseAdr_A32m_Com_Max ); // System topology sprintf( buf, "%s# BE Crate %d topology\n", buf, params->Config_Id ); for( beu=1; beu<DEF_MAX_NB_OF_BEU; beu++ ) { if( (DEF_MIN_BEU_SLOT <= params->Beu_Slot[beu]) && (params->Beu_Slot[beu] <= DEF_MAX_BEU_SLOT) ) { sprintf( buf, "%sBec %d Beu %d Feu", buf, params->Config_Id, beu ); for( feu=0; feu<DEF_MAX_NB_OF_FEU_PER_BEU; feu++ ) { if( params->BeuFeuConnectivity[beu][feu] < 0 ) sprintf( buf, "%s M", buf ); else if( params->BeuFeuConnectivity[beu][feu] == 0 ) sprintf( buf, "%s E", buf ); else if( params->BeuFeuConnectivity[beu][feu] <= DEF_MAX_NB_OF_FEU ) sprintf( buf, "%s %2d", buf, params->BeuFeuConnectivity[beu][feu] ); else { fprintf( stderr, "%s: Usupported FeuId=%d (>%d) for beu %d connection %d\n", __FUNCTION__, params->BeuFeuConnectivity[beu][feu], DEF_MAX_NB_OF_FEU-1, beu, feu ); return D_RetCode_Err_Wrong_Param; } } } else if( params->Beu_Slot[beu] != 0 ) { fprintf( stderr, "%s: BeuSlot=%d not in range [%d;%d] for beu %d\n", __FUNCTION__, params->Beu_Slot[beu], DEF_MIN_BEU_SLOT, DEF_MAX_BEU_SLOT, beu ); return D_RetCode_Err_Wrong_Param; } sprintf( buf, "%s\n", buf ); } for( feu=1; feu<DEF_MAX_NB_OF_FEU; feu++ ) { if( params->FeuId2BeuId[feu] == 0 ) { fprintf( stderr, "%s: Usupported BeuId 0 for feu %d\n", __FUNCTION__, feu ); return D_RetCode_Err_Wrong_Param; } if( ((feu-1) % 4) == 0 ) sprintf( buf, "%s#", buf ); sprintf( buf, "%s Feu %2d <-> ", buf, feu ); if( params->FeuId2BeuId[feu] > 0 ) { if( (params->FeuId2BeuLnkId[feu]<0) || (DEF_MAX_NB_OF_FEU_PER_BEU<=params->FeuId2BeuLnkId[feu]) ) { fprintf( stderr, "%s: Usupported beu %d link=%d for feu %d, must be in [0;%d] range\n", __FUNCTION__, params->FeuId2BeuId[feu], params->FeuId2BeuId[feu], feu, DEF_MAX_NB_OF_FEU_PER_BEU-1 ); return D_RetCode_Err_Wrong_Param; } sprintf( buf, "%s Beu=%1d Lnk=%2d", buf, params->FeuId2BeuId[feu], params->FeuId2BeuLnkId[feu] ); } else sprintf( buf, "%s Inactive ", buf ); if( feu % 4 ) sprintf( buf, "%s ", buf ); else sprintf( buf, "%s\n", buf ); } // All went fine return D_RetCode_Sucsess; }