1 UShort_t Encode(UShort_t d, Char_t r)
3 UShort_t q = (r == 'I' || r == 'i') ? 0 : 1;
4 UShort_t c = 1 << (d-1);
5 UShort_t t = 1 << (c+q-1);
8 // return (1 << q) | (1 << (d+1));
11 void Decode(UShort_t bits, UShort_t& d, Char_t& r)
13 if (bits & 0x1) { d = 1; r = 'I'; }
14 else if (bits & 0x6) { d = 2; r = (bits & 0x2 ? 'I' : 'O'); }
15 else if (bits & 0x18) { d = 3; r = (bits & 0x8 ? 'I' : 'O'); }
18 const Char_t* ShowBits(UShort_t bits, Char_t* buf)
21 // for (Int_t i = 0; i < 6; i++) buf[i] = ' ';
22 for (Int_t i = 0; i < 6; i++) {
23 buf[5-i] = (bits & (1 << i)) ? '1' : '0';
29 void TestOne(UShort_t d, Char_t r)
31 UShort_t bits = Encode(d, r);
38 Printf("FMD%d%c -> 0x%02x (%s) -> FMD%d%c", d, r, bits, buf, rd, rr);
46 kFMD2 = kFMD2i|kFMD2o,
49 kFMD3 = kFMD3i|kFMD3o*/
60 UShort_t T(UShort_t m, UShort_t t)
64 void TestEnum(UShort_t e, const char* n)
66 Printf(" %10s | %5x | %5x | %5x | %5x | %5x |",
67 n, T(e,kFMD1I), T(e,kFMD2I), T(e,kFMD2O), T(e,kFMD3I), T(e,kFMD3O));
71 Printf(" Enum | FMD1i | FMD2i | FMD2o | FMD3i | FMD3o |");
72 TestEnum(kFMD1I, "FMD1i");
73 TestEnum(kFMD1, "FMD1");
74 TestEnum(kFMD2I, "FMD2i");
75 TestEnum(kFMD2O, "FMD2o");
76 TestEnum(kFMD2, "FMD2");
77 TestEnum(kFMD3I, "FMD3i");
78 TestEnum(kFMD3O, "FMD3o");
79 TestEnum(kFMD3, "FMD3");
80 TestEnum(kFMD3|kFMD2, "FMD23");
81 TestEnum(kFMD1|kFMD2, "FMD12");
82 TestEnum(kFMD3|kFMD2O, "FMD32o");
83 TestEnum(kFMD3I|kFMD2O, "FMD3i2o");
84 TestEnum(kFMD1I|kFMD2O, "FMD1i2o");
85 TestEnum(kFMD1I|kFMD2O|kFMD3I, "FMD3i2o1i");
86 TestEnum(kFMD1I|kFMD2I|kFMD3I, "FMD3i2i1i");
87 TestEnum(kFMD2O|kFMD3O, "FMD3o2o");
88 TestEnum(0xff, "All");