From 92f72a2b0dbb580714462c2668f16252b5d11745 Mon Sep 17 00:00:00 2001
From: donker <donker@astron.nl>
Date: Wed, 1 Sep 2021 21:59:20 +0200
Subject: [PATCH] L2SDP-453, add point to get global_node_index for all fpgas

---
 src/fpga.cpp        |  2 ++
 src/node.cpp        |  3 ++-
 src/periph/fpga.cpp | 20 ++++++++++++++++----
 src/periph/fpga.h   |  6 ++++--
 4 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/src/fpga.cpp b/src/fpga.cpp
index 515fe87a..557acc99 100644
--- a/src/fpga.cpp
+++ b/src/fpga.cpp
@@ -59,6 +59,8 @@ Fpga::Fpga(list<class Node*>& nodelist, const int32_t n_beam_sets):
     pointMap->add_register("FPGA_firmware_version_R",                        "fpga/firmware_version",                       nodes.size(), 1, "RO", REG_FORMAT_STRING);
     pointMap->add_register("FPGA_hardware_version_R",                        "fpga/hardware_version",                       nodes.size(), 1, "RO", REG_FORMAT_STRING);
 
+    pointMap->add_register("FPGA_global_node_index_R",                       "fpga/global_node_index",                      nodes.size(), 1, "RO", REG_FORMAT_UINT32);
+
     pointMap->add_register("FPGA_sst_offload_weighted_subbands_R",           "fpga/sst_offload_weighted_subbands",          nodes.size(), 1, "RO", REG_FORMAT_BOOLEAN);
     pointMap->add_register("FPGA_sst_offload_weighted_subbands_RW",          "fpga/sst_offload_weighted_subbands",          nodes.size(), 1, "RW", REG_FORMAT_BOOLEAN);
     pointMap->add_register("FPGA_sst_offload_enable_R",                      "fpga/sst_offload_enable",                     nodes.size(), 1, "RO", REG_FORMAT_BOOLEAN);
diff --git a/src/node.cpp b/src/node.cpp
index a953c71a..221ae13f 100644
--- a/src/node.cpp
+++ b/src/node.cpp
@@ -263,7 +263,8 @@ bool Node::exec_reply(TermOutput& termout)
     // cout << "received " << r->nof_vals << " bytes from worker node=" << GlobalNr 
     //      << " retval=" << r->retval << " datatype=" << r->datatype << endl;
 
-    if (isOnline() && r.retval) {
+    // if (isOnline() && r.retval) {
+    if (r.retval) {
         int sz = reg_format_size_in_bytes(r.format);
         memcpy((void *)termout.val, (void *)r.data, r.nvalues * sz);
     }
diff --git a/src/periph/fpga.cpp b/src/periph/fpga.cpp
index f5619654..199fd5d7 100644
--- a/src/periph/fpga.cpp
+++ b/src/periph/fpga.cpp
@@ -123,6 +123,11 @@ bool Periph_fpga::read(TermOutput& termout, const string addr,
 
     termout.datatype = format;
     termout.nof_vals = 0;
+    
+    if (addr == "fpga/global_node_index") {
+        retval = read_global_node_index(termout, format);
+        return true;
+    }
 
     if (!Masked) {  // Not selected
         return false;
@@ -140,7 +145,6 @@ bool Periph_fpga::read(TermOutput& termout, const string addr,
     if (type == "mm") {
         uint32_t *data_ptr = (uint32_t *)data;
         retval = Read(addr, data_ptr, true);
-        termout.datatype = format;
     }
     else { // "fpga/..."
 
@@ -149,16 +153,13 @@ bool Periph_fpga::read(TermOutput& termout, const string addr,
         }
         else if (addr == "fpga/name") {
             termout.nof_vals = 1; //my_current_design_name.size();
-            termout.datatype = format;
             strcpy(termout.val, my_current_design_name.c_str());
             retval = true;
         }
         else if (addr == "fpga/stamps") {
             retval = read_stamps(termout, format);
-            termout.datatype = format;
         }
         else if (addr == "fpga/note") {
-            termout.datatype = format;
             retval = true;
         }
         else if (addr == "fpga/firmware_version") {
@@ -893,6 +894,17 @@ bool Periph_fpga::read_stamps(TermOutput& termout, int format)
     return retval;
 }
 
+bool Periph_fpga::read_global_node_index(TermOutput& termout, int format)
+{
+    bool retval = true;
+
+    uint32_t *_ptr = (uint32_t *)termout.val;
+    *_ptr = GlobalNr;
+    termout.nof_vals = 1;
+    termout.datatype = format;
+    return retval;
+}
+
 bool Periph_fpga::read_fpga_temperature(TermOutput& termout, int format)
 {
     bool retval = true;
diff --git a/src/periph/fpga.h b/src/periph/fpga.h
index 3419809f..24337ee3 100644
--- a/src/periph/fpga.h
+++ b/src/periph/fpga.h
@@ -58,7 +58,7 @@ private:
   std::string my_current_design_name;
   uint my_current_hw_version;
   std::string my_current_fw_version;
-  
+
   bool    my_bsn_input_sync_timeout;
   int64_t my_bsn_input_bsn;
   int32_t my_bsn_input_nof_packets;
@@ -99,6 +99,8 @@ private:
   bool read_firmware_version(TermOutput& termout, int format);
   bool read_stamps(TermOutput& termout, int format);
 
+  bool read_global_node_index(TermOutput& termout, int format);
+
   bool read_fpga_temperature(TermOutput& termout, int format);
 
   bool read_fpga_scrap(TermOutput& termout, int format);
@@ -176,7 +178,7 @@ private:
   bool read_jesd204b_csr_dev_syncn(TermOutput& termout, int format, int mode);
   bool read_jesd204b_rx_err0(TermOutput& termout, int format, int mode);
   bool read_jesd204b_rx_err1(TermOutput& termout, int format, int mode);
-  
+
   bool write_signal_input_samples_delay(const char *data);
   bool read_signal_input_samples_delay(TermOutput& termout, int format);
   bool read_signal_input_mean(TermOutput& termout, int format, int mode);
-- 
GitLab