#ifndef BRPARAM_H #define BRPARAM_H //--------------------------------------------------------------- // Logiciels d'acquisition BAORadio // LAL - 2009 - 2010 , R. Ansari, M.Taurigna //--------------------------------------------------------------- //--------------------------------------------------------------- // Classes ADCBoardDesc , BRParList , BRConfList , BRAcqConfig // + ADCBoardDesc : Description d'une carte ADC // + BRParList : Liste de parametres pour un run d'acquisition // + BRConfList : Liste des parametres caracterisant une configuration // (nombre de cartes, versions firwares ...) // + BRAcqConfig : Classe donnant acces a un objet global BRParList et // un objet global BRConfList //--------------------------------------------------------------- #include "machdefs.h" #include #include #include #include "brpaqu.h" #include "datacards.h" #include "bracqvers.h" using namespace std; using namespace SOPHYA; //----------------------------------------------------------------------------- //---- Classe Caracterisant un board ADC class ADCBoardDesc { public: ADCBoardDesc(int id, string sbid, string cyc_firmw, string str1_firmw, string str2_firmw); ADCBoardDesc(ADCBoardDesc const& bdes); inline int& getId() { return id_; } inline string& getSId() { return sbid_; } inline string& CycloneFirmwareId() { return cyclone_firmware_; } inline string& Stratix1FirmwareId() { return stratix1_firmware_; } inline string& Stratix2FirmwareId() { return stratix2_firmware_; } ostream& Print(ostream& os); ADCBoardDesc& Set(ADCBoardDesc const & bdes); inline ADCBoardDesc& operator = (ADCBoardDesc const & bdes) { return Set(bdes); } protected: int id_; string sbid_; string cyclone_firmware_; string stratix1_firmware_; string stratix2_firmware_; }; //----------------------------------------------------------------------------- //---- Classe de liste des parametres de configuration BAORadio class BRConfList { public: BRConfList(); BRConfList(string basedir); BRConfList(string basedir, vector boards); BRConfList(BRConfList const & cf); void SetBaseDirectory(string basedir); void Set(BRConfList const & cf); ostream& Print(ostream& os) ; void ReadDCFile(string file); inline const string& BaseDirectory() const { return basedir_; } //....................................... string basedir_; vector boards_; }; #define PMAXNBFIBRES 6 //----------------------------------------------------------------------------- //---- Classe de liste des parametres d'acquisition BAORadio class BRParList { public: BRParList (string fibres="1", unsigned int szframe= 16424, unsigned int dmaszkb = 32, int nfiles=1, string acqmode="fft2c", int nblocfile=10, int nmaxpr = 0, string outpath="TstAcq", uint_4 nzon = 4, uint_4 npaqzon = 128, bool fgcntlc=false); BRParList(BRParList const & p); void Set(BRParList const & p); ostream& Print(ostream& os) ; void ReadDCFile(string file); // Nombre de fibres inline int NFibers() { return NbFibers; } // Taille des operations DMA (en octets) inline uint_4 DMASizeBytes() { return dmasizekb*1024; } // Taille des operations DMA (en KB=1024 bytes) inline uint_4 DMASizeKB() { return dmasizekb; } // Taille des paquets recus sur PCIExpress inline uint_4 RecvPaquetSize() { return PaqSize; } // Taille des paquets apres reduction eventuelle (donc ds memory manager) inline uint_4 MMgrPaquetSize() { return (fgreducpsize)?redpqsize:PaqSize; } // Operation de conversion/mise en ordre des donnees a la reception inline BRDataFmtConv GetDataConvFg() { return swapall; }; // Nombre maximum de fichiers enregistres inline uint_4 MaxNbFiles() { return NbFiles; } // Nombre de blocs MMgr dans chaque fichiers inline uint_4 BlocPerFile() { return NBlocPerFile; } // Nombre maximum de blocs MMgr traites inline uint_4 MaxNbBlocs() { return NbFiles*NBlocPerFile; } // Identification source ciel inline string& SkySource() { return skysource; } //.......................................... void Decode(); string AcqMode; // Mode d'acquisition (conditionne la mise en ordre/conversion des donnees lues par DMA string FiberListS ; // liste des fibres a utiliser 1,3,4 par exemple int NbFibers; // liste des fibres a utiliser 1,3,4 par exemple int FiberNum[PMAXNBFIBRES]; string OutPathName; // directory de base string ProcPathName; uint_4 PaqSize ; // taille des paquets ou sizeFrame uint_4 dmasizekb ; // taille du dma en multiple de 2 (2 a 56) int NbFiles; // nombre de fichier produits int NBlocPerFile; // nombre de bloc par fichier int NMaxProc; // Nombre de blocs traites par le thread de calcul // Gestionnaire zones memoire uint_4 nZones; // Nombre de zones memoires uint_4 nPaqZone; // 128 Paquets / zone memoire - valeur par defaut bool fg_hard_ctrlc ; // autorise le CtrlC si true bool savesigfits ; // si true on prduit de sfichier fits bool fgnulldev4fits ; BRDataFmtConv swapall ; // type de l'acquisition voir brpaqu.h // ---- Pour gerer la reduction des tailles de paquets bool fgreducpsize; // true -> reduction taille des paquets bool reducneedcopy; // true -> besoin de copie intermediaire pour la reduction de taille de paquets BRPaqReducAction pqreducmode; uint_4 redpqsize; uint_4 reducoffset; // Identification source observee dans le ciel string skysource; // Pour des tests de performances ou sans carte ADC (pattern) bool monothr ; // pour les test mono thread bool activate_pattern; // true -> on active le pattern du firmware au lieu de la fibre double nopciLossRate; // Utilise avec pour les tests sans carte pciexpress TestPCIWrapperNODMA }; //----------------------------------------------------------------------------- //---- Classe de gestion des parametres d'acquisition - //---- Utilise l'instance global de BRParList //----------------------------------------------------------------------------- class BRAcqConfig { public: BRAcqConfig(); inline void ReadParamFile(string file) { param_->ReadDCFile(file); } inline void Set(BRParList& par) { param_->Set(par); } inline void ReadConfigFile(string file) { config_->ReadDCFile(file); } inline void Set(BRConfList& conf) { config_->Set(conf); } ostream& Print(ostream& os); int CreateOutputDirectories(); static inline double AcqVersion() { return BAOR_ACQ_VER ; } static inline const char* AcqVersionS() { return BAOR_ACQ_VER_STR ; } inline BRParList& GetParams() { return (*param_) ;}; inline BRConfList& GetConfig() { return (*config_) ;}; inline BRDataFmtConv GetSwapall() { return param_->swapall; }; inline bool GetPattern() { return param_->activate_pattern; }; inline bool GetMonothr() { return param_->monothr; }; inline bool GetSaveFits() { return param_->savesigfits; }; inline bool GetFileDevNull() { return param_->fgnulldev4fits; }; // Nombre de fibres inline int NFibers() { return param_->NbFibers; } // Taille des operations DMA (en octets) inline uint_4 DMASizeBytes() { return param_->DMASizeBytes(); } // Taille des operations DMA (en KB=1024 bytes) inline uint_4 DMASizeKB() { return param_->DMASizeKB(); } // Taille des paquets recus sur PCIExpress inline uint_4 RecvPaquetSize() { return param_->RecvPaquetSize(); } // Taille des paquets apres reduction eventuelle (donc ds memory manager) inline uint_4 MMgrPaquetSize() { return param_->MMgrPaquetSize(); } // Operation de conversion/mise en ordre des donnees a la reception inline BRDataFmtConv GetDataConvFg() { return param_->GetDataConvFg(); }; // Nombre maximum de fichiers enregistres inline uint_4 MaxNbFiles() { return param_->MaxNbFiles(); } // Nombre de blocs MMgr dans chaque fichiers inline uint_4 BlocPerFile() { return param_->BlocPerFile(); } // Nombre maximum de blocs MMgr traites inline uint_4 MaxNbBlocs() { return param_->MaxNbBlocs(); } // Identification source ciel inline string& SkySource() { return param_->SkySource(); } // repertoire d'acquisition inline string OutputDirectory() { return (config_->BaseDirectory()+param_->OutPathName); } string OutputDirectoryFib(int fib); protected: static BRParList* param_; static BRConfList* config_; }; #endif