Initial look into bug with spot finder
This commit is contained in:
@@ -95,7 +95,7 @@ void JungfraujochDevice::SetConfig(const DataCollectionConfig &config) {
|
||||
bool JungfraujochDevice::ReadWorkCompletion(uint32_t *output) {
|
||||
int tmp = ioctl(fd, IOCTL_JFJOCH_READ_WC_MBOX, output);
|
||||
if (tmp != 0) {
|
||||
if (errno == EAGAIN)
|
||||
if ((errno == EAGAIN) || (errno == EINTR))
|
||||
return false;
|
||||
throw PCIeDeviceException("Failed receiving work completion");
|
||||
}
|
||||
@@ -208,10 +208,16 @@ void JungfraujochDevice::UnmapKernelBuffer(DeviceOutput *val) {
|
||||
}
|
||||
|
||||
void JungfraujochDevice::SetSpotFinderParameters(const SpotFinderParameters& params) {
|
||||
if (ioctl(fd, IOCTL_JFJOCH_SPOT_FINDER_PAR, ¶ms) != 0)
|
||||
if (ioctl(fd, IOCTL_JFJOCH_SET_SPOTFIN_PAR, ¶ms) != 0)
|
||||
throw PCIeDeviceException("Failed settings spot finder parameters");
|
||||
}
|
||||
|
||||
SpotFinderParameters JungfraujochDevice::GetSpotFinderParameters() {
|
||||
SpotFinderParameters ret{};
|
||||
if (ioctl(fd, IOCTL_JFJOCH_GET_SPOTFIN_PAR, &ret) != 0)
|
||||
throw PCIeDeviceException("Failed fetching spot finder parameters");
|
||||
return ret;
|
||||
}
|
||||
uint32_t JungfraujochDevice::GetDataSource() {
|
||||
uint32_t tmp;
|
||||
if (ioctl(fd, IOCTL_JFJOCH_GET_DATA_SOURCE, &tmp) != 0)
|
||||
|
||||
@@ -102,6 +102,7 @@ public:
|
||||
void LoadIntegrationMap(uint32_t modules);
|
||||
|
||||
void SetSpotFinderParameters(const SpotFinderParameters ¶ms);
|
||||
SpotFinderParameters GetSpotFinderParameters();
|
||||
|
||||
// Get number of kernel buffers
|
||||
uint32_t GetBufferCount() const;
|
||||
|
||||
@@ -53,11 +53,32 @@ int main(int argc, char **argv) {
|
||||
JungfraujochDevice device(argv[1], false);
|
||||
auto fpga_status = device.GetDataCollectionStatus();
|
||||
auto fpga_env_data = device.GetDeviceStatus();
|
||||
auto spot_finder_settings = device.GetSpotFinderParameters();
|
||||
auto source = device.GetDataSource();
|
||||
|
||||
std::cout << "PCIe/JFJoch card detected " << std::endl;
|
||||
std::cout << "Git SHA1 " << std::hex << fpga_status.git_sha1 << std::endl;
|
||||
std::cout << "Max modules " << std::dec << fpga_status.max_modules << std::endl;
|
||||
std::cout << "NUMA node " << device.GetNumaNode() << std::endl;
|
||||
std::cout << "Data source ";
|
||||
switch (source) {
|
||||
case STREAM_MERGE_SRC_NONE:
|
||||
std::cout << "none";
|
||||
break;
|
||||
case STREAM_MERGE_SRC_100G:
|
||||
std::cout << "100G";
|
||||
break;
|
||||
case STREAM_MERGE_SRC_4x10G:
|
||||
std::cout << "4x10G";
|
||||
break;
|
||||
case STREAM_MERGE_SRC_FRAME_GEN:
|
||||
std::cout << "frame generator";
|
||||
break;
|
||||
default:
|
||||
std::cout << "unknown value";
|
||||
break;
|
||||
}
|
||||
std::cout << std::endl;
|
||||
std::cout << "Ethernet 100G link " << (fpga_env_data.eth_100G_link ? "Yes" : "No") << std::endl;
|
||||
std::cout << "Ethernet 10G link (*=link) "
|
||||
<< (fpga_env_data.eth_10G_link[0] ? "*" : "-")
|
||||
@@ -103,6 +124,11 @@ int main(int argc, char **argv) {
|
||||
std::cout << "Modules " << std::dec << cfg.nmodules << std::endl;
|
||||
std::cout << "Frames int. pkt. gen. " << std::dec << cfg.nframes << std::endl;
|
||||
std::cout << std::endl;
|
||||
std::cout << "Spot finder settings " << std::endl;
|
||||
std::cout << "Count threshold " << spot_finder_settings.count_threshold << std::endl;
|
||||
std::cout << "SNR threshold " << spot_finder_settings.snr_threshold / 4.0f << std::endl;
|
||||
std::cout << std::endl;
|
||||
|
||||
FIFO_check(fpga_status.fifo_status);
|
||||
std::cout << std::endl;
|
||||
std::cout << "Packet counters - ETH " << fpga_status.packets_eth << std::endl;
|
||||
|
||||
@@ -226,6 +226,7 @@ int jfjoch_load_integration_map(struct jfjoch_drvdata *drvdata, struct DataColle
|
||||
int jfjoch_run_frame_gen(struct jfjoch_drvdata *drvdata, struct FrameGeneratorConfig *config);
|
||||
u32 jfjoch_get_c2h_descriptors(struct jfjoch_drvdata *drvdata);
|
||||
void jfjoch_set_spot_finder_parameters(struct jfjoch_drvdata *drvdata, struct SpotFinderParameters *params);
|
||||
void jfjoch_get_spot_finder_parameters(struct jfjoch_drvdata *drvdata, struct SpotFinderParameters *params);
|
||||
u32 jfjoch_get_data_source(struct jfjoch_drvdata *drvdata);
|
||||
void jfjoch_set_data_source(struct jfjoch_drvdata *drvdata, const u32 *val);
|
||||
|
||||
|
||||
@@ -425,8 +425,14 @@ u32 jfjoch_get_c2h_descriptors(struct jfjoch_drvdata *drvdata) {
|
||||
}
|
||||
|
||||
void jfjoch_set_spot_finder_parameters(struct jfjoch_drvdata *drvdata, struct SpotFinderParameters *params) {
|
||||
iowrite32(params->count_threshold, drvdata->bar0 + ADDR_SPOT_FINDER_THRESHOLD);
|
||||
iowrite32(params->snr_threshold, drvdata->bar0 + ADDR_SPOT_FINDER_SNR);
|
||||
iowrite32(params->count_threshold, drvdata->bar0 + ACTION_CONFIG_OFFSET + ADDR_SPOT_FINDER_THRESHOLD);
|
||||
iowrite32(params->snr_threshold, drvdata->bar0 + ACTION_CONFIG_OFFSET + ADDR_SPOT_FINDER_SNR);
|
||||
}
|
||||
|
||||
|
||||
void jfjoch_get_spot_finder_parameters(struct jfjoch_drvdata *drvdata, struct SpotFinderParameters *params) {
|
||||
params->count_threshold = ioread32(drvdata->bar0 + ACTION_CONFIG_OFFSET + ADDR_SPOT_FINDER_THRESHOLD);
|
||||
params->snr_threshold = ioread32(drvdata->bar0 + ACTION_CONFIG_OFFSET + ADDR_SPOT_FINDER_SNR);
|
||||
}
|
||||
|
||||
u32 jfjoch_get_data_source(struct jfjoch_drvdata *drvdata) {
|
||||
|
||||
@@ -120,13 +120,18 @@ long jfjoch_cdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) {
|
||||
if (copy_to_user((char *) arg, exchange, sizeof(u32)) != 0)
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
case IOCTL_JFJOCH_SPOT_FINDER_PAR:
|
||||
case IOCTL_JFJOCH_SET_SPOTFIN_PAR:
|
||||
if (!(file->f_mode & FMODE_WRITE))
|
||||
return -EACCES;
|
||||
if (copy_from_user(&spot_finder_parameters, (char *) arg, sizeof(struct SpotFinderParameters)) != 0)
|
||||
return -EFAULT;
|
||||
jfjoch_set_spot_finder_parameters(drvdata, &spot_finder_parameters);
|
||||
return 0;
|
||||
case IOCTL_JFJOCH_GET_SPOTFIN_PAR:
|
||||
jfjoch_get_spot_finder_parameters(drvdata, &spot_finder_parameters);
|
||||
if (copy_to_user((char *) arg, &spot_finder_parameters, sizeof(struct SpotFinderParameters)) != 0)
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
case IOCTL_JFJOCH_ISIDLE:
|
||||
jfjoch_is_idle(drvdata, exchange);
|
||||
if (copy_to_user((char *) arg, exchange, sizeof(int32_t)) != 0)
|
||||
|
||||
@@ -39,8 +39,9 @@
|
||||
#define IOCTL_JFJOCH_C2H_DMA_DESC _IOR(IOCTL_JFJOCH_MAGIC, 24, uint32_t)
|
||||
#define IOCTL_JFJOCH_WRITE_REGISTER _IOW(IOCTL_JFJOCH_MAGIC, 25, struct RegisterConfig )
|
||||
#define IOCTL_JFJOCH_READ_REGISTER _IOWR(IOCTL_JFJOCH_MAGIC, 26, struct RegisterConfig )
|
||||
#define IOCTL_JFJOCH_SPOT_FINDER_PAR _IOW(IOCTL_JFJOCH_MAGIC, 27, struct SpotFinderParameters)
|
||||
#define IOCTL_JFJOCH_SET_SPOTFIN_PAR _IOW(IOCTL_JFJOCH_MAGIC, 27, struct SpotFinderParameters)
|
||||
#define IOCTL_JFJOCH_SET_DATA_SOURCE _IOW(IOCTL_JFJOCH_MAGIC, 28, uint32_t)
|
||||
#define IOCTL_JFJOCH_GET_DATA_SOURCE _IOR(IOCTL_JFJOCH_MAGIC, 28, uint32_t)
|
||||
#define IOCTL_JFJOCH_GET_DATA_SOURCE _IOR(IOCTL_JFJOCH_MAGIC, 29, uint32_t)
|
||||
#define IOCTL_JFJOCH_GET_SPOTFIN_PAR _IOR(IOCTL_JFJOCH_MAGIC, 30, struct SpotFinderParameters)
|
||||
|
||||
#endif //JUNGFRAUJOCH_JFJOCH_IOCTL_H
|
||||
|
||||
@@ -327,8 +327,8 @@ void JFJochReceiver::FrameTransformationThread() {
|
||||
|
||||
if (rad_int_profile_image)
|
||||
rad_int_profile_image->Add(*output);
|
||||
if (find_spots)
|
||||
strong_pixel_set.ReadFPGAOutput(experiment, *output, m);
|
||||
//if (find_spots)
|
||||
// strong_pixel_set.ReadFPGAOutput(experiment, *output, m);
|
||||
} else
|
||||
src = acquisition_device[d].GetErrorFrameBuffer();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user