void ScriptMain() { Console.WriteLine("Script begins..."); BoardLib.SetBoardId(0); string l_baseDir = "V:/Projects/BabyMind/Production/FEB-V2/"; Dialog.ShowDialog("Connect 2 boards on SLOT0 & SLOT1, put SiPM board on SLOT1 LOWER connector, enable 24V, wait for device to appear in list and click OK"); string l_sn0 = Dialog.ShowInputDialog("Enter the serial number (eg. SN01) for SLOT0"); string l_sn1 = Dialog.ShowInputDialog("Enter the serial number (eg. SN01) for SLOT1"); Sync.LogFileName = l_baseDir + "LOG_HW2/slot0-" + l_sn0 + "-slot1-" + l_sn1; BoardLib.NewConfig(); //------------------------------------------------------------------------------ Console.WriteLine("----------------------------------"); Console.WriteLine("CHECK : Protocol chain test..."); BoardLib.SetBoardId(1); BoardLib.SetVariable("Board.DirectParam.HvOn", true); BoardLib.SetDirectParameters(); bool l_ret = BoardLib.GetBoolVariable("Board.StatusParam.HvOn"); if(l_ret == false) { Console.WriteLine("FAILED : PROTOCOL CHAIN, ERROR while reading back HVON on SLOT1 !"); return; } BoardLib.SetVariable("Board.DirectParam.HvOn", false); BoardLib.SetDirectParameters(); l_ret = BoardLib.GetBoolVariable("Board.StatusParam.HvOn"); if(l_ret == true) { Console.WriteLine("FAILED : PROTOCOL CHAIN, ERROR while reading back HVON on SLOT1 !"); return; } Console.WriteLine("PASSED : Protocol chain test"); //------------------------------------------------------------------------------ Console.WriteLine("----------------------------------"); Console.WriteLine("CHECK : MCB FEB external inputs on slot0..."); BoardLib.SetBoardId(0); BoardLib.SetVariable("FPGA.GlobalControl.Debug0", 1); BoardLib.BoardConfigure(); Dialog.ShowDialog("Enable GBF output and verify that 3 LEDS on FEB side are blinking at the same time then click OK"); BoardLib.SetVariable("FPGA.GlobalControl.Debug0", 0); BoardLib.BoardConfigure(); Dialog.ShowDialog("Verify that 3 LEDS on FEB side are OFF then disable GBF output. Fill Excel file LINE41/" + l_sn0 + " then click OK"); Console.WriteLine("PASSED : MCB external inputs on slot0"); //------------------------------------------------------------------------------ Console.WriteLine("----------------------------------"); Console.WriteLine("Configure MCB FEB..."); BoardLib.SetBoardId(0); BoardLib.SetVariable("Board.UsbParam.Timeout", 5000); // MCB settings BoardLib.SetVariable("FPGA.GlobalControl.MCBClkEn", true); BoardLib.SetVariable("FPGA.GlobalControl.MCBSyncEn", true); BoardLib.SetVariable("FPGA.GlobalControl.MCBFSyncEn", true); // disable TDM mode on slot 0 and allow full bandwidth to previous slot BoardLib.SetVariable("FPGA.GlobalControl.GbTDMEn", false); BoardLib.SetVariable("FPGA.GlobalControl.GbMuxRxEn", true); BoardLib.SetVariable("FPGA.GlobalControl.ReadoutEnableOnStartSignal", "SyncRdEn"); BoardLib.BoardConfigure(); Sync.Sleep(200); //------------------------------------------------------------------------------ Console.WriteLine("----------------------------------"); Console.WriteLine("CHECK : Sync inputs..."); if (!syncTest(0)) return; BoardLib.SetBoardId(1); if (!syncTest(1)) return; Dialog.ShowDialog("Check that 2 GREEN leds on Backplane SLOT0 & SLOT1 are blinking fast. Fill Excel file LINE42/" + l_sn0 + " AND LINE42/" + l_sn1 + " then click OK"); Console.WriteLine("PASSED : Sync inputs"); //------------------------------------------------------------------------------ Console.WriteLine("----------------------------------"); Console.WriteLine("CHECK : Gigabit links..."); BoardLib.SetBoardId(0); BoardLib.ReadStatus(); l_ret = BoardLib.GetBoolVariable("Board.StatusParam.GtxRxSynchronized"); if(l_ret == false) { Console.WriteLine("FAILED : ERROR with GtxRxSynchronized on SLOT0 !"); return; } Console.WriteLine("PASSED : Gigabit links"); //------------------------------------------------------------------------------ Console.WriteLine("----------------------------------"); Console.WriteLine("prepare DAQ on SLOT1 with reading on SLOT0..."); BoardLib.SetBoardId(1); // open A0-CH0 ASIC/FPGA config with ext clock mode BoardLib.OpenConfigFile(l_baseDir + "CFG/PDdiscri-A0-CH0-extclk"); // disable TDM mode allowing full bandwith to pbe pushed on GTX BoardLib.SetVariable("FPGA.GlobalControl.GbTDMEn", false); // enable SYNC IN RDEN BoardLib.SetVariable("FPGA.GlobalControl.SyncInReadoutEn", true); BoardLib.SetVariable("FPGA.GlobalControl.ReadoutStopOnSyncRdEn", true); BoardLib.SetVariable("FPGA.GlobalControl.ReadoutEnableOnStartSignal", "SyncRdEn"); BoardLib.BoardConfigure(); Sync.Sleep(200); //------------------------------------------------------------------------------ Console.WriteLine("----------------------------------"); Console.WriteLine("DAQ on SLOT1 with USB on SLOT0"); BoardLib.SetBoardId(1); BoardLib.SetVariable("Board.DirectParam.HvOn", true); BoardLib.SetDirectParameters(); Sync.Sleep(200); // Start DAQ with start request only (i.e. no USB file is linked) BoardLib.SetVariable("Board.UsbParam.StartRequestOnly", true); // dummy file which will not be created BoardLib.StartAcquisition(l_baseDir + "HW2/" + l_sn1 + "gbit-slot0", x_async:true); Sync.Sleep(100); BoardLib.SetBoardId(0); BoardLib.SetVariable("Board.DirectParam.HvOn", false); BoardLib.SetDirectParameters(); Sync.Sleep(10); // Start DAQ with USB file linked and MCB readout en to launch daq on SLOT2 BoardLib.SetVariable("Board.UsbParam.Timeout", 5000); BoardLib.SetVariable("Board.DataReadoutParam.MCBReadoutEn", true); BoardLib.SetVariable("Board.UsbParam.StartRequestOnly", false); BoardLib.StartAcquisition(l_baseDir + "HW2/" + l_sn1 + "/gbit-slot1", x_async:true); Sync.Sleep(10); int l_i = 0; // wait 5s while ((l_i < 100) && (BoardLib.IsTransferingData)) { Sync.Sleep(50); l_i++; } BoardLib.SetBoardId(1); BoardLib.SetVariable("Board.UsbParam.StartRequestOnly", true); BoardLib.StopAcquisition(); Sync.Sleep(10); BoardLib.SetBoardId(0); BoardLib.SetVariable("Board.UsbParam.StartRequestOnly", false); BoardLib.StopAcquisition(); Sync.Sleep(10); BoardLib.SetVariable("Board.DirectParam.HvOn", false); BoardLib.SetDirectParameters(); BoardLib.SetBoardId(1); BoardLib.SetDirectParameters(); BoardLib.SetBoardId(0); //------------------------------------------------ Dialog.ShowDialog("Fill Excel file LINE43/" + l_sn0 + " AND LINE44/" + l_sn1 + " then click OK"); Dialog.ShowDialog("After clicking OK of this box, open HISTOGRAM of " + l_sn1 + " (SLOT1) DAQ file AND fill LINE45/" + l_sn1); // We're done! Console.WriteLine("---- ALL TESTS PASSED ----"); } //------------------------------------------------------------------- bool syncTest(int x_slot) { BoardLib.SetVariable("Board.DirectParam.ExtClkSel", false); BoardLib.SetDirectParameters(); Sync.Sleep(50); BoardLib.ReadStatus(); bool l_ret = BoardLib.GetBoolVariable("Board.StatusParam.IntClkSelLocked"); if(l_ret == false) { Console.WriteLine("FAILED : SYNC, ERROR with IntClkSelLocked on slot" + x_slot); return false; } l_ret = BoardLib.GetBoolVariable("Board.StatusParam.ExtClkSelLocked"); if(l_ret == true) { Console.WriteLine("FAILED : SYNC, ERROR with ExtClkSelLocked on slot" + x_slot); return false; } BoardLib.SetVariable("Board.DirectParam.ExtClkSel", true); BoardLib.SetDirectParameters(); Sync.Sleep(50); BoardLib.ReadStatus(); l_ret = BoardLib.GetBoolVariable("Board.StatusParam.IntClkSelLocked"); if(l_ret == true) { Console.WriteLine("FAILED : SYNC, ERROR with IntClkSelLocked on slot" + x_slot); return false; } l_ret = BoardLib.GetBoolVariable("Board.StatusParam.ExtClkSelLocked"); if(l_ret == false) { Console.WriteLine("FAILED : SYNC, ERROR with ExtClkSelLocked on slot" + x_slot); return false; } l_ret = BoardLib.GetBoolVariable("Board.StatusParam.GtrigSynchronized"); if(l_ret == false) { Console.WriteLine("FAILED : SYNC, ERROR with GtrigSynchronized on slot" + x_slot); return false; } return true; }