00001 #ifndef PIT_CONFIGURATION_H
00002 #define PIT_CONFIGURATION_H
00003
00004 #include "pit_def.h"
00005 #include <log4cpp/BasicConfigurator.hh>
00006 #include <log4cpp/Category.hh>
00007
00008
00009 const int MAX_CHARACTERS_LINE=256;
00010 const char COMMENT_CHAR='#';
00011
00012 struct t_pit_coordinate
00013 {
00014 unsigned int optinNumber;
00015 unsigned int linkNumber;
00016 };
00017 struct t_spd_coordinate
00018 {
00019 t_sideCoord side;
00020 unsigned int sector;
00021 unsigned int half_stave;
00022 };
00023
00024
00025 class pit_configuration {
00026
00027
00028
00030 t_pit_coordinate pit_coordinate[NUMBER_SIDES][NUMBER_SECTORS][NUMBER_HALF_STAVES_SECTOR];
00031
00033 t_spd_coordinate spd_coordinate[NUMBER_OPTIN][NUMBER_OPTICAL_LINKS];
00034
00035 bool requiredChannels[NUMBER_OPTIN][NUMBER_OPTICAL_LINKS][NUMBER_FO_CHANNELS];
00036
00037 log4cpp::Category *logPitConfiguration;
00038
00040 pit_configuration();
00041
00043 void setDefaultCoordinates(void);
00045
00046 void setDefaultRequiredChannels(void);
00047
00049 void setRequired(unsigned int board,unsigned int link,unsigned int foChannel, bool value);
00050
00052
00053 void setRequired(unsigned int board,unsigned int link,const std::string &foChannelsValues);
00054
00056 void setCoordinate( unsigned int optinBoard, unsigned int linkChannel, unsigned int sector, t_sideCoord side, unsigned int halfStave);
00057
00059
00062 bool parseCoordinateLine(const std::string &line);
00064
00065 bool parseRequiredChannelLine(const std::string &line);
00066
00067
00068 public:
00069
00071 static pit_configuration& getInstance();
00072
00073
00077 void openCoordinateTableFile(const char *filename);
00079
00084 void openRequiredChannelsFile(const char *filename);
00085
00089 t_sideCoord getSide (unsigned int optinNumber, unsigned int linkNumber) const { return spd_coordinate[optinNumber][linkNumber].side;}
00090
00094 unsigned int getSector (unsigned int optinNumber, unsigned int linkNumber) const { return spd_coordinate[optinNumber][linkNumber].sector;};
00095
00099 unsigned int getHalfStave (unsigned int optinNumber, unsigned int linkNumber) const { return spd_coordinate[optinNumber][linkNumber].half_stave;}
00100
00101
00106 unsigned int getBoardNumber (t_sideCoord side , unsigned int sector, unsigned int half_stave) const ;
00108 unsigned int getBoardNumber (char side , unsigned int sector, unsigned int half_stave) const;
00113 unsigned int getLinkNumber (t_sideCoord side , unsigned int sector, unsigned int half_stave) const ;
00115 unsigned int getLinkNumber (char side , unsigned int sector, unsigned int half_stave)const;
00116
00118 bool isLinkRequired(unsigned int optinNumber, unsigned int linkNumber)const;
00120 bool isLinkRequired(t_sideCoord side, unsigned int sector, unsigned int half_stave)const;
00122 bool getFastorRequired(unsigned int board, unsigned int link, unsigned int foChannel)const ;
00124 std::string getFastorRequired(unsigned int board, unsigned int link)const;
00125
00126
00127 bool getLinkRequired(unsigned int board, unsigned int link )const;
00129 void printRequiredChannelList()const;
00131 void printPitCoordinateTable()const;
00133 void printSpdCoordinateTable()const;
00134
00135 void dumpCoordinateTableToFile(const char *filename)const;
00136 void dumpRequiredLinksToFile(const char *filename)const;
00137
00138 };
00139
00140
00141
00142
00143 #endif