Skip to content

Commit

Permalink
Changes to ADARA packets: BankedEvent and RTDL
Browse files Browse the repository at this point in the history
BankedEvent packets now contain multiple sources, with multiple banks
per source.  The RTDL packet changed the Raw flag to TOFCorrected, which
inverted its sense.

Refs #5690
  • Loading branch information
rgmiller committed Aug 9, 2012
1 parent a4f7137 commit 97d3077
Show file tree
Hide file tree
Showing 5 changed files with 213 additions and 160 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,8 @@ struct Event {

typedef uint32_t EventBank;

typedef uint32_t SourceSection;

struct Header {
uint32_t payload_len;
uint32_t pkt_format;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ class RawDataPkt : public Packet {
RawDataPkt(const RawDataPkt &pkt);

uint32_t sourceID(void) const { return m_fields[0]; }
bool endOfPulse(void) const { return !!(m_fields[1] & 0x8000000); }
bool endOfPulse(void) const { return !!(m_fields[1] & 0x80000000); }
uint16_t pktSeq(void) const { return (m_fields[1] >> 16) & 0x7fff; }
uint16_t dspSeq(void) const { return m_fields[1] & 0x7fff; }
PulseFlavor::Enum flavor(void) const {
Expand All @@ -79,16 +79,17 @@ class RawDataPkt : public Packet {
uint16_t veto(void) const { return (m_fields[3] >> 10) & 0xfff; }
uint16_t cycle(void) const { return m_fields[3] &0x3ff; }
uint32_t intraPulseTime(void) const { return m_fields[4]; }
bool rawTOF(void) const { return !!(m_fields[5] & 0x80000000); }
bool tofCorrected(void) const { return !!(m_fields[5] & 0x80000000); }
uint32_t tofOffset(void) const { return m_fields[5] & 0x7fffffff; }
uint32_t tofField(void) const { return m_fields[5]; }

const Event *events(void) const { return (Event *) &m_fields[6]; }
const Event *events(void) const { return (const Event *) &m_fields[6]; }
uint32_t num_events(void) const {
return (m_payload_len - 24) / (2 * sizeof (uint32_t));
}

private:
uint32_t *m_fields;
const uint32_t *m_fields;

RawDataPkt(const uint8_t *data, uint32_t len);

Expand All @@ -112,14 +113,14 @@ class RTDLPkt : public Packet {
uint16_t veto(void) const { return (m_fields[1] >> 10) & 0xfff; }
uint16_t cycle(void) const { return m_fields[1] &0x3ff; }
uint32_t intraPulseTime(void) const { return m_fields[2]; }
bool rawTOF(void) const { return !!(m_fields[3] & 0x80000000); }
bool tofCorrected(void) const { return !!(m_fields[3] & 0x80000000); }
uint32_t tofOffset(void) const { return m_fields[3] & 0x7fffffff; }
uint32_t ringPeriod(void) const { return m_fields[4]; }

// TODO implement accessor for optional fields

private:
uint32_t *m_fields;
const uint32_t *m_fields;

RTDLPkt(const uint8_t *data, uint32_t len);

Expand All @@ -141,29 +142,40 @@ class BankedEventPkt : public Packet {

uint32_t pulseCharge(void) const { return m_fields[0]; }
uint32_t pulseEnergy(void) const { return m_fields[1]; }
uint32_t ringPeriod(void) const { return m_fields[2]; }
uint32_t cycle(void) const { return m_fields[3]; }
uint32_t flags(void) const { return m_fields[4]; }

// The bank and event accessors all return NULL if we've incremented
// past the end
const EventBank * firstBank() const;
const EventBank * nextBank() const;
uint32_t cycle(void) const { return m_fields[2]; }
uint32_t flags(void) const { return m_fields[3]; }

// The source, bank and event accessors all return NULL if we've
// incremented past the end
const Event * firstEvent() const;
const Event * nextEvent() const;

uint32_t curBankId() const { return *(uint32_t *)m_curBank; }
uint32_t curEventCount() const { return ((uint32_t *)m_curBank)[1]; }
bool getSourceCORFlag() const { return m_isCorrected; }
uint32_t getSourceTOFOffset() const { return m_TOFOffset; }
uint32_t curBankId() const { return m_bankId; }

private:
uint32_t *m_fields;
// uint32_t curEventCount() const { return ((uint32_t *)m_curBank)[1]; }

private:
const uint32_t *m_fields;

mutable const Event * m_curEvent;

mutable unsigned m_lastFieldIndex; // index into m_fields for the last valid field in the packet
mutable unsigned m_curFieldIndex; // where we currently are in the packet

// Data about the current source section
mutable unsigned m_sourceStartIndex; // index into m_fields for the start of this source
mutable uint32_t m_bankCount;
mutable uint32_t m_TOFOffset;
mutable bool m_isCorrected;
mutable unsigned m_bankNum; // which bank are we currently in (relative to the start of the section)

// Data about the current bank
mutable unsigned m_bankStartIndex; // index into m_fields for the start of this source
mutable uint32_t m_bankId;
mutable uint32_t m_eventCount;

// These are used by the EventBank and Event accessors. If they are NULL, it
// means we've iterated past the end of the data. Otherwise, they should always
// be valid.
mutable EventBank * m_curBank;
mutable Event * m_curEvent;
mutable Event * m_lastEvent;

BankedEventPkt(const uint8_t *data, uint32_t len);

Expand All @@ -176,14 +188,13 @@ class BeamMonitorPkt : public Packet {

uint32_t pulseCharge(void) const { return m_fields[0]; }
uint32_t pulseEnergy(void) const { return m_fields[1]; }
uint32_t ringPeriod(void) const { return m_fields[2]; }
uint32_t cycle(void) const { return m_fields[3]; }
uint32_t flags(void) const { return m_fields[4]; }
uint32_t cycle(void) const { return m_fields[2]; }
uint32_t flags(void) const { return m_fields[3]; }

// TODO implment monitor/event accessors

private:
uint32_t *m_fields;
const uint32_t *m_fields;

BeamMonitorPkt(const uint8_t *data, uint32_t len);

Expand Down Expand Up @@ -213,7 +224,7 @@ class RunStatusPkt : public Packet {
}

private:
uint32_t *m_fields;
const uint32_t *m_fields;

RunStatusPkt(const uint8_t *data, uint32_t len);

Expand Down Expand Up @@ -359,7 +370,7 @@ class VariableU32Pkt : public Packet {
uint32_t value(void) const { return m_fields[3]; }

private:
uint32_t *m_fields;
const uint32_t *m_fields;

VariableU32Pkt(const uint8_t *data, uint32_t len);

Expand All @@ -379,10 +390,10 @@ class VariableDoublePkt : public Packet {
return static_cast<VariableSeverity::Enum>
(m_fields[2] & 0xffff);
}
double value(void) const { return *(double *) &m_fields[3]; }
double value(void) const { return *(const double *) &m_fields[3]; }

private:
uint32_t *m_fields;
const uint32_t *m_fields;

VariableDoublePkt(const uint8_t *data, uint32_t len);

Expand All @@ -405,7 +416,7 @@ class VariableStringPkt : public Packet {
const std::string &value(void) const { return m_val; }

private:
uint32_t *m_fields;
const uint32_t *m_fields;
std::string m_val;

VariableStringPkt(const uint8_t *data, uint32_t len);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ namespace Mantid
std::string m_instrumentXML;

uint64_t m_rtdlPulseId; // We get these two from the RTDL packet
bool m_rtdlRawFlag;
bool m_tofCorrectedFlag;

Poco::Net::StreamSocket m_socket;
//int m_sockfd; // socket file descriptor
Expand Down

0 comments on commit 97d3077

Please sign in to comment.