otsdaq_components  v2_04_02
PurdueFirmwareCore.h
1 #ifndef _ots_PurdueFirmwareCore_h_
2 #define _ots_PurdueFirmwareCore_h_
3 
4 #include "otsdaq-components/DAQHardware/FirmwareSequence.h"
5 #include "otsdaq-components/DAQHardware/FrontEndFirmwareBase.h"
6 
7 #include <cstdint>
8 #include <string>
9 
10 namespace ots
11 {
13 {
14  public:
15  PurdueFirmwareCore(unsigned int version);
16  virtual ~PurdueFirmwareCore(void);
17  virtual void init(void);
18 
19  std::string read(char* address);
20  std::string write(char* address, char* data);
21 
22  virtual void write(std::string& buffer,
23  uint32_t address,
24  uint32_t data,
25  bool clearBuffer = true);
26  virtual void waitSet(std::string& buffer,
27  uint32_t address,
28  uint32_t data,
29  uint32_t timeout = 255,
30  bool clearBuffer = true);
31  virtual void waitClear(std::string& buffer,
32  uint32_t address,
33  uint32_t data,
34  uint32_t timeout = 255,
35  bool clearBuffer = true);
36  virtual void read(std::string& buffer, uint32_t address, bool clearBuffer = true);
37 
38  virtual void setDataDestination(std::string& buffer,
39  const std::string& ip,
40  const uint16_t port,
41  bool clearBuffer = true);
42 
43  /*This prevents "hidden virtual" problem, since PurdueFirmwareCore, unlike the ots
44  * firmware only defines write/read for 32 bits. if, somehow, a 64 bit write/read gets
45  * called, it will use the write/read in FrontEndFirmwareBase (which throws exception)
46  */
47  // more: http://stackoverflow.com/questions/6727087/c-virtual-function-being-hidden
48 
49  using FrontEndFirmwareBase::read;
50  using FrontEndFirmwareBase::write;
51 
52  virtual unsigned int getNumberOfBufferedCommands(std::string& buffer);
53  virtual std::string compareSendAndReceive(const std::string& sentBuffer,
54  std::string& acknowledgment);
55  virtual uint32_t createRegisterFromValue(std::string& readBuffer,
56  std::string& receivedValue);
57 
58  protected:
59  // FrontEndFirmwareBase* protocolInstance_;
60 };
61 }
62 
63 #endif