ISMRMRD
ISMRM Raw Data Format
Loading...
Searching...
No Matches
waveform.h
1//
2// Created by dch on 26/02/18.
3//
4
5// clang-format off
6
7#ifndef ISMRMRD_WAVEFORM_H
8#define ISMRMRD_WAVEFORM_H
9
10#if __cplusplus > 199711L
11#include <type_traits>
12#endif
13
14#include "export.h"
15#ifdef __cplusplus
16#include "cpp98.h"
17#include <cstddef>
18#include <stdint.h>
19namespace ISMRMRD {
20extern "C" {
21#else
22#include <stdint.h>
23#endif
24
25// Note: This header does not use 2-byte packing like the rest of the ISMRMRD
27{
28 uint16_t version;
29 uint16_t pad1;
30 uint32_t pad2;
32 uint64_t flags;
36 uint32_t scan_counter;
38 uint32_t time_stamp;
42 uint16_t channels;
46 uint16_t waveform_id;
49
50
51#if __cplusplus > 199711L // Static assert requires C++11
52// Check size and offsets of WaveformHeader
53static_assert(sizeof(ISMRMRD_WaveformHeader) == 40, "ISMRMRD_WaveformHeader is not 40 bytes");
54static_assert(offsetof(ISMRMRD_WaveformHeader, version) == 0, "ISMRMRD WaveformHeader version offset is not correct");
55static_assert(offsetof(ISMRMRD_WaveformHeader, flags) == 8, "ISMRMRD WaveformHeader flags offset is not correct");
56static_assert(offsetof(ISMRMRD_WaveformHeader, measurement_uid) == 16, "ISMRMRD WaveformHeader measurement_uid offset is not correct");
57static_assert(offsetof(ISMRMRD_WaveformHeader, scan_counter) == 20, "ISMRMRD WaveformHeader scan_counter offset is not correct");
58static_assert(offsetof(ISMRMRD_WaveformHeader, time_stamp) == 24, "ISMRMRD WaveformHeader time_stamp offset is not correct");
59static_assert(offsetof(ISMRMRD_WaveformHeader, number_of_samples) == 28, "ISMRMRD WaveformHeader number_of_samples offset is not correct");
60static_assert(offsetof(ISMRMRD_WaveformHeader, channels) == 30, "ISMRMRD WaveformHeader channels offset is not correct");
61static_assert(offsetof(ISMRMRD_WaveformHeader, sample_time_us) == 32, "ISMRMRD WaveformHeader sample_time_us offset is not correct");
62static_assert(offsetof(ISMRMRD_WaveformHeader, waveform_id) == 36, "ISMRMRD WaveformHeader waveform_id offset is not correct");
63#endif
64
65typedef struct ISMRMRD_Waveform
66{
68 uint32_t *data;
70
71
72EXPORTISMRMRD int ismrmrd_make_consistent_waveform(ISMRMRD_Waveform* wav);
73EXPORTISMRMRD int ismrmrd_size_of_waveform_data(const ISMRMRD_Waveform* wav);
74EXPORTISMRMRD ISMRMRD_Waveform* ismrmrd_create_waveform();
75EXPORTISMRMRD int ismrmrd_free_waveform(ISMRMRD_Waveform*);
76EXPORTISMRMRD int ismrmrd_init_waveform(ISMRMRD_Waveform*);
77EXPORTISMRMRD int ismrmrd_init_waveformheader(ISMRMRD_WaveformHeader* header);
78EXPORTISMRMRD int ismrmrd_copy_waveform(ISMRMRD_Waveform* dest, const ISMRMRD_Waveform* src);
79
80#ifdef __cplusplus
81}
82 struct EXPORTISMRMRD WaveformHeader : public ISMRMRD_WaveformHeader {
83
84 // Flag methods
85 bool isFlagSet(const uint64_t val);
86 void setFlag(const uint64_t val);
87 void clearFlag(const uint64_t val);
88 void clearAllFlags();
89
90 };
91
92 #if __cplusplus > 199711L // Static assert and is_standard_layout requires C++11
93 // check size of WaveformHeader
94 static_assert(sizeof(WaveformHeader) == sizeof(ISMRMRD_WaveformHeader), "WaveformHeader is not the same size as ISMRMRD_WaveformHeader");
95 static_assert(std::is_standard_layout<WaveformHeader>::value, "WaveformHeader is not a standard layout type");
96 #endif
97
98 struct EXPORTISMRMRD Waveform : public ISMRMRD_Waveform {
99 Waveform();
100 Waveform(const Waveform &other);
101#if __cplusplus > 199711L
102 Waveform(Waveform&& other);
103#endif
104 Waveform(uint16_t number_of_samples, uint16_t available_channels);
105 ~Waveform();
106 Waveform & operator=(const Waveform &other);
107#if __cplusplus > 199711L
108 Waveform & operator=(Waveform &&other);
109#endif
110 uint32_t* begin_data();
111 uint32_t* end_data();
112 const uint32_t* begin_data() const;
113 const uint32_t* end_data() const;
114 size_t size() const;
115 };
116}
117
118
119#endif
120#endif //ISMRMRD_WAVEFORM_H_H
Definition waveform.h:27
uint32_t scan_counter
Definition waveform.h:36
uint64_t flags
Definition waveform.h:32
uint16_t number_of_samples
Definition waveform.h:40
uint32_t time_stamp
Definition waveform.h:38
uint32_t pad2
Definition waveform.h:30
uint16_t channels
Definition waveform.h:42
float sample_time_us
Definition waveform.h:44
uint32_t measurement_uid
Definition waveform.h:34
uint16_t waveform_id
Definition waveform.h:46
Definition waveform.h:66
Definition waveform.h:82