diff --git a/recipes-app/fofb-init/files/configuration b/recipes-app/fofb-init/files/configuration.example similarity index 100% rename from recipes-app/fofb-init/files/configuration rename to recipes-app/fofb-init/files/configuration.example diff --git a/recipes-app/simple-test/files/archiver.cpp b/recipes-app/simple-test/files/archiver.cpp index 79efed7b53a74d90022b65ccf82810d980758f64..4a315cf086fca24d18525f01f9b2c28664e091c2 100644 --- a/recipes-app/simple-test/files/archiver.cpp +++ b/recipes-app/simple-test/files/archiver.cpp @@ -9,6 +9,7 @@ #include <errno.h> #include <ctime> + int main(){ int fd_ddr, fd_ddr_sro; // File descriptors for DDR4 @@ -23,6 +24,7 @@ int main(){ char fdate[32]; time_t t; char *src; + uint8_t cur_buf; struct pollfd pfd; // Initialize ChimeraTK =================================================== @@ -39,8 +41,8 @@ int main(){ dev.getScalarRegisterAccessor<uint32_t>("APP/DAQ_CONTROL"); ChimeraTK::OneDRegisterAccessor<uint32_t> daq_tabsel = dev.getOneDRegisterAccessor<uint32_t>("APP/daq_0/TAB_SEL"); - ChimeraTK::OneDRegisterAccessor<uint32_t> daq_curbuff = - dev.getOneDRegisterAccessor<uint32_t>("APP/daq_0/ACTIVE_BUF"); + ChimeraTK::ScalarRegisterAccessor<uint32_t> daq_curbuff = + dev.getScalarRegisterAccessor<uint32_t>("APP/daq_0/ACTIVE_BUF"); // Open DDR access ======================================================== // Open file descriptor for DDR4 @@ -61,10 +63,37 @@ int main(){ }; // Initialize DAQ ========================================================= - // Disable DAQ, mask IRQ + // Disable DAQ daq_enable = 0; daq_enable.write(); + + // Flushing interrupts + //* + rp = 1; + while (rp >= 1) { + fprintf(stdout, "Flushing interrupt...\n"); + + // unmask irq + s_wr = write(fd_ddr, &unmask, sizeof(unmask)); + if (s_wr != (ssize_t)sizeof(unmask)) { + fprintf(stderr, "Error when unmasking interrupt !\n"); + return -3; + }; + + rp = poll(&pfd, 1, 1000); + + if (rp >= 1) { + read(fd_ddr, &info, sizeof(info)); + }; + }; + // */ + + // Masking interrupt s_wr = write(fd_ddr, &mask, sizeof(mask)); + if (s_wr != (ssize_t)sizeof(mask)) { + fprintf(stderr, "Error when masking interrupt !\n"); + return -3; + }; // Configure DAQ daq_dbuf_ena = 3; @@ -77,6 +106,7 @@ int main(){ daq_enable = 1; daq_enable.write(); daq_curbuff.read(); + cur_buf = daq_curbuff & (uint32_t)(1); // trigger daq_trigger = 1; @@ -86,62 +116,88 @@ int main(){ // ======================================================================== - // Unmask interrupt - s_wr = write(fd_ddr, &unmask, sizeof(unmask)); - if (s_wr != (ssize_t)sizeof(unmask)) { - fprintf(stderr, "Error when unmasking interrupt !\n"); - return -3; - }; - - // Wait for interrupt - fprintf(stdout, "Waiting for interrupt...\n"); - rp = poll(&pfd, 1, -1); // Timeout = -1, infinite wait - - if (rp >= 1) { - read(fd_ddr, &info, sizeof(info)); - fprintf(stdout, "Read %d interrupts\n", info); - } else if (rp == 0) { - fprintf(stderr, "Wait for IRQ interrupted, timeout or signal.\n"); - return -4; - } else { - fprintf(stderr, "Failed poll.\n"); - return -5; - //fprintf(stderr, "Failed poll. Relaunch for next iteration.\n"); - //continue; - }; + while(fcnt < 5) { + // Unmask interrupt + s_wr = write(fd_ddr, &unmask, sizeof(unmask)); + if (s_wr != (ssize_t)sizeof(unmask)) { + fprintf(stderr, "Error when unmasking interrupt !\n"); + return -3; + }; - // Open destination file - t=time(0); - strftime(fdate, 32, "%Y%m%d_%H%M%S", localtime(&t)); - snprintf(fname, 128, "/mnt/data/archive_files/file_%s.bin", fdate); - fd_dst = open(fname, O_CREAT | O_WRONLY | O_APPEND , 0666); - if (fd_dst <= 0) { - fprintf(stderr, "Failed to open destination file '%s'.\n", fname); - return -2; - }; + // Wait for interrupt + fprintf(stdout, "Waiting for interrupt...\n"); + rp = poll(&pfd, 1, -1); // Timeout = -1, infinite wait + + if (rp >= 1) { + read(fd_ddr, &info, sizeof(info)); + fprintf(stdout, "Read interrupt %d\n", info); + } else if (rp == 0) { + fprintf(stderr, "Wait for IRQ interrupted, timeout or signal.\n"); + return -4; + } else { + fprintf(stderr, "Failed poll.\n"); + return -5; + //fprintf(stderr, "Failed poll. Relaunch for next iteration.\n"); + //continue; + }; - fprintf(stdout, "Write to file '%s'.\n", fname); - // Copy data, whole block - /* - s_wr = write(fd_dst, &src, 0x08000000); - if (s_wr < 0x08000000) { - fprintf(stderr, "Error while writing to file '%s' (%d).\n", fname, s_wr); - return -6; - }; - // */ + // Ignore first one + fcnt += 1; + if (fcnt == 1) { + continue; + } + + // Open destination file + t=time(0); + strftime(fdate, 32, "%Y%m%d_%H%M%S", localtime(&t)); + snprintf(fname, 128, "/mnt/data/archive_files/file_%s.bin", fdate); + fd_dst = open(fname, O_CREAT | O_WRONLY | O_APPEND , 0666); + if (fd_dst <= 0) { + fprintf(stderr, "Failed to open destination file '%s'.\n", fname); + return -2; + }; - // Copy data, page by page - //* - for (i = 0 ; i < 0x08000 ; i++) { - s_wr = write(fd_dst, &src[i*0x1000], 0x1000); - if (s_wr < 0x1000) { - fprintf(stderr, "Error while writing to file '%s' (%d:%d).\n", fname, i, s_wr); + fprintf(stdout, "Write to file '%s'.\n", fname); + // Copy data, whole block + /* + s_wr = write(fd_dst, &src, 0x08000000); + if (s_wr < 0x08000000) { + fprintf(stderr, "Error while writing to file '%s' (%d).\n", fname, s_wr); return -6; }; - }; - // */ + // */ + + // Copy data, page by page + //* + for (i = 0 ; i < 0x08000 ; i++) { + s_wr = write(fd_dst, &src[i*0x1000+cur_buf*0x08000000], 0x1000); + if (s_wr < 0x1000) { + fprintf(stderr, "Error while writing to file '%s' (%d:%d).\n", fname, i, s_wr); + return -6; + }; + }; + // */ + + // Copy data, element by element + /* + for (i=0 ; i < 0x00800000 ; i++) { + s_wr = write(fd_dst, &src[i*16 + 0 + cur_buf*0x08000000], 4); + s_wr = s_wr+ write(fd_dst, &src[i*16 + 4 + cur_buf*0x08000000], 4); + s_wr = s_wr+ write(fd_dst, &src[i*16 + 8 + cur_buf*0x08000000], 1); + s_wr = s_wr+ write(fd_dst, &src[i*16 + 12 + cur_buf*0x08000000], 1); + if (s_wr < 10) { + fprintf(stderr, "Error while writing to file '%s' (%d:%d).\n", fname, i, s_wr); + return -6; + }; + }; + */ - close(fd_dst); + + cur_buf = (cur_buf+1)%2; + + close(fd_dst); + + }; // Disable DAQ, mask IRQ daq_enable = 0;