/***********************************************************/ /* */ /* File : rockmfarm.h */ /* Description : ROCKM farm frame specific library header */ /* */ /* Author: Sfiligoi Igor */ /* */ /* Created : 07.07.1997 */ /* Recreated : 29.08.1997 */ /* Last modified: 29.08.1997 */ /* */ /***********************************************************/ #ifndef ROCKMFARM_H #define ROCKMFARM_H #include <bits.h> #define ROCKM_ERROR_FARM_OK 0 #define ROCKM_ERROR_FARM_UNKNOWN -300 #define ROCKM_ERROR_FARM_SUBHEADER -301 #define ROCKM_ERROR_FARM_SLAVE -302 #define ROCKM_ERROR_FARM_SUBFOOTER -303 /*****************************************************************/ /* */ /* Convert data comming from the collector in a format */ /* suitable for further processing */ /* */ /* Do nothing if length==8 */ /* */ /* Collector format: */ /* unsigned int length (in bytes, including the length) */ /* unsigned int event_number */ /* data from the rockm without superheader and superfooter */ /* */ /* New format: */ /* unsigned int length (same as before) */ /* unsigned int event_number (same as before) */ /* array of all the slave words in the input data, with */ /* the following format: */ /* 5 bits: Chain_nr */ /* 3 bits: Crate_addr */ /* 4 bits: Slave_addr */ /* 7 bits: Channel_addr */ /* (1+12) bits: slave_data */ /* last uint of the struct (length-4) contains length */ /* of the array */ /* */ /* Returns :ROCKM_ERROR_FARM_OK in case of success */ /* */ /*****************************************************************/ int rockm_farm_compact(unsigned int chain_nr, /* Chain number, will be truncated to 5 bits (no check) */ unsigned int chan_mask, /* mask to be applied to the channel field */ unsigned int *data); /* IN : data comming from the collector OUT : data in the new format */ /*****************************************************************/ /* */ /* Convert between new format and the struct */ /* */ /*****************************************************************/ #define ROCKM_FARM_CHAIN 27 #define ROCKM_FARM_CHAIN_mask 0x1f #define ROCKM_FARM_CRATE 24 #define ROCKM_FARM_CRATE_mask 0x7 #define ROCKM_FARM_SLOT 20 #define ROCKM_FARM_SLOT_mask 0xf #define ROCKM_FARM_CHAN 13 #define ROCKM_FARM_CHAN_mask 0x7f #define ROCKM_FARM_RES 12 #define ROCKM_FARM_DATA 0 #define ROCKM_FARM_DATA_mask 0xfff typedef struct { unsigned char chain; unsigned char crate; unsigned char slot; unsigned char chan; unsigned char res; unsigned short data; } rockm_farm; #define rockm_farm_raw2farm(/*unsigned int */ raw, /*IN */ \ /*rockm_farm*/ farm)/* OUT */ \ { \ farm.chain = bits_get_bits_mask(raw,ROCKM_FARM_CHAIN,ROCKM_FARM_CHAIN_mask); \ farm.crate = bits_get_bits_mask(raw,ROCKM_FARM_CRATE,ROCKM_FARM_CRATE_mask); \ farm.slot = bits_get_bits_mask(raw,ROCKM_FARM_SLOT,ROCKM_FARM_SLOT_mask); \ farm.chan = bits_get_bits_mask(raw,ROCKM_FARM_CHAN,ROCKM_FARM_CHAN_mask); \ farm.res = bits_get_bit(raw,ROCKM_FARM_RES); \ farm.data = bits_get_bits_mask(raw,ROCKM_FARM_DATA,ROCKM_FARM_DATA_mask); \ } #define rockm_farm_farm2raw(/*rockm_farm*/ farm) /* IN */ \ (bits_pos_bits_mask(farm.chain,ROCKM_FARM_CHAIN,ROCKM_FARM_CHAIN_mask) | \ bits_pos_bits_mask(farm.crate,ROCKM_FARM_CRATE,ROCKM_FARM_CRATE_mask) | \ bits_pos_bits_mask(farm.slot,ROCKM_FARM_SLOT,ROCKM_FARM_SLOT_mask) | \ bits_pos_bits_mask(farm.chan,ROCKM_FARM_CHAN,ROCKM_FARM_CHAN_mask) | \ bits_pos_bit(farm.res,ROCKM_FARM_RES) | \ bits_pos_bits_mask(farm.data,ROCKM_FARM_DATA,ROCKM_FARM_DATA_mask)) #endif /* ROCKMFARM_H */