diff options
| author | tlatorre <tlatorre@uchicago.edu> | 2018-08-14 10:08:27 -0500 | 
|---|---|---|
| committer | tlatorre <tlatorre@uchicago.edu> | 2018-08-14 10:08:27 -0500 | 
| commit | 24c8bcfe7f76b20124e2862ea050f815c0f768e7 (patch) | |
| tree | e5bdbd638a2c7f38f1c094cc9e95cbdfe05b9481 /src/dqxx.c | |
| parent | 0b7f199c0d93074484ea580504485a32dc29f5e2 (diff) | |
| download | sddm-24c8bcfe7f76b20124e2862ea050f815c0f768e7.tar.gz sddm-24c8bcfe7f76b20124e2862ea050f815c0f768e7.tar.bz2 sddm-24c8bcfe7f76b20124e2862ea050f815c0f768e7.zip  | |
move everything to src directory
Diffstat (limited to 'src/dqxx.c')
| -rw-r--r-- | src/dqxx.c | 67 | 
1 files changed, 67 insertions, 0 deletions
diff --git a/src/dqxx.c b/src/dqxx.c new file mode 100644 index 0000000..07b6037 --- /dev/null +++ b/src/dqxx.c @@ -0,0 +1,67 @@ +#include "dqxx.h" +#include "db.h" +#include <stdint.h> /* for uint32_t */ +#include "event.h" +#include <stdio.h> /* for sprintf() */ + +char dqxx_err[256]; + +/* Flag PMTs which are not operational based on the DQCH and DQCR banks. + * + * Returns 0 on success or -1 on error. */ +int dqxx_init(dict *db, event *ev) +{ +    int i, j, k, id; +    uint32_t *dqch, *dqcr, dqch_word, dqcr_word; + +    for (i = 0; i < 19; i++) { +        dqch = (uint32_t *) get_bank(db, "DQCH", i); +        dqcr = (uint32_t *) get_bank(db, "DQCR", i); + +        if (!dqch) { +            sprintf(dqxx_err, "failed to load DQCH for crate %i\n", i); +            return -1; +        } + +        if (!dqcr) { +            sprintf(dqxx_err, "failed to load DQCR for crate %i\n", i); +            return -1; +        } + +        for (j = 0; j < 16; j++) { +            dqcr_word = dqcr[30+KDQCR_TABLE+j]; + +            for (k = 0; k < 32; k++) { +                id = i*512 + j*32 + k; +                dqch_word = dqch[30+KDQCH_TABLE+32*j+k]; + + +                if (dqch_word & KDQCH_B_PMT_CABLE) +                    ev->pmt_hits[id].flags |= 0x2; +                else if (dqch_word & KDQCH_B_PMTIC_RESISTOR) +                    ev->pmt_hits[id].flags |= 0x2; +                else if (dqch_word & KDQCH_B_SEQUENCER) +                    ev->pmt_hits[id].flags |= 0x2; +                else if (dqch_word & KDQCH_B_750OHM) +                    ev->pmt_hits[id].flags |= 0x2; +                else if (dqch_word & KDQCH_B_NOT_OP) +                    ev->pmt_hits[id].flags |= 0x2; + +                if (dqcr_word & KDQCR_B_CRATE) +                    ev->pmt_hits[id].flags |= 0x2; +                else if (dqcr_word & KDQCR_B_MB) +                    ev->pmt_hits[id].flags |= 0x2; +                else if (dqcr_word & KDQCR_B_PMTIC) +                    ev->pmt_hits[id].flags |= 0x2; +                else if (dqcr_word & KDQCR_B_DAQ) +                    ev->pmt_hits[id].flags |= 0x2; +                else if (dqcr_word & KDQCR_B_GT) +                    ev->pmt_hits[id].flags |= 0x2; +                else if (dqcr_word & (1 << (12 + k/8))) +                    ev->pmt_hits[id].flags |= 0x2; +            } +        } +    } + +    return 0; +}  | 
