DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
EthernetDevice.hpp
Go to the documentation of this file.
1
8#ifndef SSPMODULES_SRC_ANLBOARD_ETHERNETDEVICE_HPP_
9#define SSPMODULES_SRC_ANLBOARD_ETHERNETDEVICE_HPP_
10
11#include "SSPTypes.hpp"
12
13#include "Device.hpp"
14#include "boost/asio.hpp"
15
16#include <cstdint>
17#include <cstdio>
18#include <cstring>
19#include <iomanip>
20#include <iostream>
21#include <string>
22#include <unistd.h>
23#include <vector>
24
25namespace dunedaq {
26namespace sspmodules {
27
28class EthernetDevice : public Device
29{
30
31public:
32 // Create a device object using FTDI handles given for data and communication channels
33 explicit EthernetDevice(unsigned long ipAddress); // NOLINT
34
35 // Implementation of base class interface
36
37 inline virtual bool IsOpen() { return isOpen; }
38
39 virtual void Close();
40
41 virtual void DevicePurgeComm();
42
43 virtual void DevicePurgeData();
44
45 virtual void DeviceQueueStatus(unsigned int* numWords);
46
47 virtual void DeviceReceive(std::vector<unsigned int>& data, unsigned int size);
48
49 virtual void DeviceRead(unsigned int address, unsigned int* value);
50
51 virtual void DeviceReadMask(unsigned int address, unsigned int mask, unsigned int* value);
52
53 virtual void DeviceWrite(unsigned int address, unsigned int value);
54
55 virtual void DeviceWriteMask(unsigned int address, unsigned int mask, unsigned int value);
56
57 virtual void DeviceSet(unsigned int address, unsigned int mask);
58
59 virtual void DeviceClear(unsigned int address, unsigned int mask);
60
61 virtual void DeviceArrayRead(unsigned int address, unsigned int size, unsigned int* data);
62
63 virtual void DeviceArrayWrite(unsigned int address, unsigned int size, unsigned int* data);
64
65 // Internal functions - make public so debugging code can access them
66
69 unsigned int txSize,
70 unsigned int rxSizeExpected,
71 unsigned int retryCount = 0);
72
73 void SendEthernet(dunedaq::sspmodules::CtrlPacket& tx, unsigned int txSize);
74
75 void ReceiveEthernet(dunedaq::sspmodules::CtrlPacket& rx, unsigned int rxSizeExpected);
76
77 void DevicePurge(boost::asio::ip::tcp::socket& socket);
78
79private:
80 friend class DeviceManager;
81
82 bool isOpen;
83
84 static boost::asio::io_service fIo_service;
85
86 boost::asio::ip::tcp::socket fCommSocket;
87 boost::asio::ip::tcp::socket fDataSocket;
88
89 boost::asio::ip::address fIP;
90
91 // Can only be opened by DeviceManager, not by user
92 virtual void Open(bool slowControlOnly);
93};
94
95} // namespace sspmodules
96} // namespace dunedaq
97
98#endif // SSPMODULES_SRC_ANLBOARD_ETHERNETDEVICE_HPP_
virtual void DeviceQueueStatus(unsigned int *numWords)
void SendEthernet(dunedaq::sspmodules::CtrlPacket &tx, unsigned int txSize)
virtual void DeviceReadMask(unsigned int address, unsigned int mask, unsigned int *value)
virtual void DeviceArrayRead(unsigned int address, unsigned int size, unsigned int *data)
virtual void DeviceSet(unsigned int address, unsigned int mask)
virtual void DeviceWriteMask(unsigned int address, unsigned int mask, unsigned int value)
EthernetDevice(unsigned long ipAddress)
void DevicePurge(boost::asio::ip::tcp::socket &socket)
boost::asio::ip::tcp::socket fCommSocket
static boost::asio::io_service fIo_service
boost::asio::ip::tcp::socket fDataSocket
virtual void DeviceWrite(unsigned int address, unsigned int value)
virtual void Open(bool slowControlOnly)
virtual void DeviceRead(unsigned int address, unsigned int *value)
virtual void DeviceClear(unsigned int address, unsigned int mask)
virtual void DeviceArrayWrite(unsigned int address, unsigned int size, unsigned int *data)
void ReceiveEthernet(dunedaq::sspmodules::CtrlPacket &rx, unsigned int rxSizeExpected)
void SendReceive(dunedaq::sspmodules::CtrlPacket &tx, dunedaq::sspmodules::CtrlPacket &rx, unsigned int txSize, unsigned int rxSizeExpected, unsigned int retryCount=0)
virtual void DeviceReceive(std::vector< unsigned int > &data, unsigned int size)
The DUNE-DAQ namespace.
FELIX Initialization std::string initerror FELIX queue timed std::string queuename Unexpected chunk size
Invalid address