1 #ifndef ALITRDTRAPCONFIG_H
2 #define ALITRDTRAPCONFIG_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
6 // Configuration of the TRD TRAcklet Processor
7 // (TRD Front-End Electronics)
10 // TRAP data memory (DMEM)
18 class AliTRDtrapConfig : public TNamed
21 AliTRDtrapConfig(const TString &name = "", const TString &title = "");
35 }; // possible granularities for allocation
36 // common to registers and DMEM
39 enum TrapReg_t { kSML0,
473 kLastReg }; // enum of all TRAP registers, to be used for access to them
475 Bool_t SetTrapRegAlloc(TrapReg_t reg, Alloc_t mode) { return fRegisterValue[reg].Allocate(mode); }
476 Bool_t SetTrapReg(TrapReg_t reg, Int_t value, Int_t det);
477 Bool_t SetTrapReg(TrapReg_t reg, Int_t value, Int_t det, Int_t rob, Int_t mcm);
479 Int_t GetTrapReg(TrapReg_t reg, Int_t det = -1, Int_t rob = -1, Int_t mcm = -1) const;
483 // data memory (DMEM)
484 Bool_t SetDmemAlloc(Int_t addr, Alloc_t mode);
485 Bool_t SetDmem(Int_t addr, UInt_t value, Int_t det);
486 Bool_t SetDmem(Int_t addr, UInt_t value, Int_t det, Int_t rob, Int_t mcm);
487 Bool_t SetDmem(Int_t addr, Int_t value) { return SetDmem(addr, (UInt_t) value); }
488 Bool_t SetDmem(Int_t addr, Int_t value, Int_t det, Int_t rob, Int_t mcm) { return SetDmem(addr, (UInt_t) value, det, rob, mcm); }
490 UInt_t GetDmemUnsigned(Int_t addr, Int_t det, Int_t rob, Int_t mcm) const;
494 // access by 16-bit address
495 UInt_t Peek(Int_t addr, Int_t det, Int_t rob, Int_t mcm) const;
496 Bool_t Poke(Int_t addr, UInt_t value, Int_t det, Int_t rob, Int_t mcm);
499 const char* GetRegName(TrapReg_t reg) const { return ((reg >= 0) && (reg < kLastReg)) ? fRegisterValue[reg].GetName() : ""; }
500 UShort_t GetRegAddress(TrapReg_t reg) const { return ((reg >= 0) && (reg < kLastReg)) ? fRegisterValue[reg].GetAddr() : 0; }
501 UShort_t GetRegNBits(TrapReg_t reg) const { return ((reg >= 0) && (reg < kLastReg)) ? fRegisterValue[reg].GetNbits() : 0; }
502 UInt_t GetRegResetValue(TrapReg_t reg) const { return ((reg >= 0) && (reg < kLastReg)) ? fRegisterValue[reg].GetResetValue() : 0; }
504 TrapReg_t GetRegByAddress(Int_t address) const;
506 Bool_t PrintTrapReg(TrapReg_t reg, Int_t det = -1, Int_t rob = -1, Int_t mcm = -1) const;
507 Bool_t PrintTrapAddr(Int_t addr, Int_t det = -1, Int_t rob = -1, Int_t mcm = -1) const;
509 void PrintMemDatx(ostream &os, Int_t addr) const;
510 void PrintMemDatx(ostream &os, Int_t addr, Int_t det, Int_t rob, Int_t mcm) const;
511 void PrintMemDatx(ostream &os, TrapReg_t reg) const;
512 void PrintMemDatx(ostream &os, TrapReg_t reg, Int_t det, Int_t rob, Int_t mcm) const;
513 void PrintDatx(ostream &os, UInt_t addr, UInt_t data, Int_t rob, Int_t mcm) const;
515 static const Int_t fgkDmemStartAddress = 0xc000; // start address in TRAP GIO
516 static const Int_t fgkDmemWords = 0x400; // number of words in DMEM
518 static const Int_t fgkImemStartAddress = 0xe000; // start address in TRAP GIO
519 static const Int_t fgkImemWords = 0x1000; // number of words in IMEM
521 static const Int_t fgkDbankStartAddress = 0xf000; // start address in TRAP GIO
522 static const Int_t fgkDbankWords = 0x0100; // number of words in DBANK
527 class AliTRDtrapValue : public TObject {
530 virtual ~AliTRDtrapValue() {}
532 virtual Bool_t Allocate(Alloc_t mode);
535 Bool_t SetData(UInt_t value);
536 Bool_t SetData(UInt_t value, Int_t det);
537 Bool_t SetData(UInt_t value, Int_t det, Int_t rob, Int_t mcm);
539 UInt_t GetData(Int_t det, Int_t rob, Int_t mcm) const;
541 Int_t GetIdx(Int_t det, Int_t rob, Int_t mcm) const;
544 AliTRDtrapValue(const AliTRDtrapValue &rhs); // not implemented
545 AliTRDtrapValue& operator=(const AliTRDtrapValue &rhs); // not implemented
547 Alloc_t fAllocMode; // allocation mode
548 Int_t fSize; // array size
549 UInt_t *fData; //[fSize] data array
550 Bool_t *fValid; //[fSize] valid flag
552 static const Int_t fgkSize[kAllocLast]; // required array dimension for different allocation modes
554 ClassDef(AliTRDtrapValue, 1);
557 class AliTRDtrapRegister : public AliTRDtrapValue {
559 AliTRDtrapRegister();
560 virtual ~AliTRDtrapRegister();
562 void Init(const char* name, Int_t addr, Int_t nBits, Int_t resetValue);
563 void Reset() { SetData(fResetValue); }
565 Bool_t SetValue(Int_t value, Int_t det) { return SetData(value, det); }
566 Bool_t SetValue(Int_t value, Int_t det, Int_t rob, Int_t mcm) { return SetData(value, det, rob, mcm); }
568 Int_t GetValue(Int_t det, Int_t rob, Int_t mcm) const { return GetData(det, rob, mcm); }
570 const char* GetName() const { return fName.Data(); }
571 UShort_t GetAddr() const { return fAddr; }
572 UShort_t GetNbits() const { return fNbits; }
573 UInt_t GetResetValue() const { return fResetValue; }
576 AliTRDtrapRegister(const AliTRDtrapRegister &rhs);
577 AliTRDtrapRegister& operator=(const AliTRDtrapRegister &rhs);
579 // fixed properties of the register
580 // which do not need to be stored
581 TString fName; //! Name of the register
582 UShort_t fAddr; //! Address in GIO of TRAP
583 UShort_t fNbits; //! Number of bits, from 1 to 32
584 UInt_t fResetValue; //! reset value
586 ClassDef(AliTRDtrapRegister, 1);
589 class AliTRDtrapDmemWord : public AliTRDtrapValue {
591 AliTRDtrapDmemWord() : AliTRDtrapValue(), fName(""), fAddr(0) {}
592 virtual ~AliTRDtrapDmemWord() {}
594 void Reset() { SetData(0); }
596 Bool_t SetValue(UInt_t value, Int_t det) { return SetData(value, det); }
597 Bool_t SetValue(UInt_t value, Int_t det, Int_t rob, Int_t mcm) { return SetData(value, det, rob, mcm); }
599 UInt_t GetValue(Int_t det, Int_t rob, Int_t mcm) const { return GetData(det, rob, mcm); }
601 void SetAddress(UShort_t addr) { fAddr = addr; fName.Form("DMEM 0x%04x", fAddr); }
602 const char* GetName() const { return fName.Data(); }
605 AliTRDtrapDmemWord(const AliTRDtrapDmemWord &rhs); // not implemented
606 AliTRDtrapDmemWord& operator=(const AliTRDtrapDmemWord &rhs); // not implemented
609 UShort_t fAddr; //! address
611 ClassDef(AliTRDtrapDmemWord, 1);
614 // configuration registers
615 AliTRDtrapRegister fRegisterValue[kLastReg]; // array of TRAP register values in use
618 AliTRDtrapDmemWord fDmem[fgkDmemWords]; // TRAP data memory
620 static const Int_t fgkMcmlistSize=256; // list of MCMs to which a value has to be written
622 static Bool_t fgRegAddressMapInitialized;
623 static TrapReg_t fgRegAddressMap[0x400 + 0x200 + 0x4];
624 static const Int_t fgkRegisterAddressBlockStart[];
625 static const Int_t fgkRegisterAddressBlockSize[];
628 AliTRDtrapConfig& operator=(const AliTRDtrapConfig &rhs); // not implemented
629 AliTRDtrapConfig(const AliTRDtrapConfig& cfg); // not implemented
631 ClassDef(AliTRDtrapConfig, 3);