$treeview $search $mathjax $extrastylesheet
artdaq_demo
v3_04_00
$projectbrief
|
$projectbrief
|
$searchbox |
00001 #ifndef artdaq_demo_Generators_ToyHardwareInterface_ToyHardwareInterface_hh 00002 #define artdaq_demo_Generators_ToyHardwareInterface_ToyHardwareInterface_hh 00003 00004 #include "artdaq-core-demo/Overlays/FragmentType.hh" 00005 00006 #include "fhiclcpp/fwd.h" 00007 00008 #include <random> 00009 #include <chrono> 00010 00021 class ToyHardwareInterface 00022 { 00023 public: 00024 00025 typedef uint16_t data_t; 00026 00031 explicit ToyHardwareInterface(fhicl::ParameterSet const& ps); 00032 00038 void StartDatataking(); 00039 00043 void StopDatataking(); 00044 00050 void FillBuffer(char* buffer, size_t* bytes_read); 00051 00056 void AllocateReadoutBuffer(char** buffer); 00057 00062 void FreeReadoutBuffer(char* buffer); 00063 00068 int SerialNumber() const; 00069 00074 int NumADCBits() const; 00075 00080 int BoardType() const; 00081 00085 enum class DistributionType 00086 { 00087 uniform, 00088 gaussian, 00089 monotonic, 00090 uninitialized, 00091 uninit2 // like uninitialized, but do memcpy 00092 }; 00093 00094 private: 00095 00096 bool taking_data_; 00097 00098 std::size_t nADCcounts_; 00099 std::size_t maxADCcounts_; 00100 std::size_t change_after_N_seconds_; 00101 int nADCcounts_after_N_seconds_; 00102 bool exception_after_N_seconds_; 00103 bool exit_after_N_seconds_; 00104 bool abort_after_N_seconds_; 00105 demo::FragmentType fragment_type_; 00106 std::size_t maxADCvalue_; 00107 std::size_t throttle_usecs_; 00108 std::size_t usecs_between_sends_; 00109 DistributionType distribution_type_; 00110 00111 using time_type = decltype(std::chrono::steady_clock::now()); 00112 00113 const time_type fake_time_ = std::numeric_limits<time_type>::max(); 00114 00115 // Members needed to generate the simulated data 00116 00117 std::mt19937 engine_; 00118 std::unique_ptr<std::uniform_int_distribution<data_t>> uniform_distn_; 00119 std::unique_ptr<std::normal_distribution<double>> gaussian_distn_; 00120 00121 time_type start_time_; 00122 int send_calls_; 00123 int serial_number_; 00124 }; 00125 00126 00127 #endif