IDS peak genericC++ v1.15.0
Loading...
Searching...
No Matches
peak_data_stream.hpp
Go to the documentation of this file.
1
10
11#pragma once
12
13
18#include <peak/dll_interface/peak_dll_interface_util.hpp>
19
20#include <unordered_map>
21#include <algorithm>
22#include <cstddef>
23#include <cstdint>
24#include <functional>
25#include <iterator>
26#include <memory>
27#include <mutex>
28#include <string>
29#include <vector>
30
31
32namespace peak
33{
34namespace core
35{
36
85
92{
97
101 Custom = 1000
102};
103
110{
126
130 Custom = 1000
131};
132
133
134class Device;
135
183 : public EventSupportingModule
184 , public std::enable_shared_from_this<DataStream>
185{
186public:
188 using BufferRevocationCallback = std::function<void(void* buffer, void* userPtr)>;
190 static const uint64_t INFINITE_NUMBER = PEAK_INFINITE_NUMBER;
191
192 DataStream() = delete;
193 ~DataStream() override;
194 DataStream(const DataStream& other) = delete;
195 DataStream& operator=(const DataStream& other) = delete;
196 DataStream(DataStream&& other) = delete;
197 DataStream& operator=(DataStream&& other) = delete;
198
200 std::string Key() const;
201
203 RawInformation Info(int32_t infoCommand) const;
204
206 std::string ID() const;
207
209 std::string TLType() const;
210
223 size_t NumBuffersAnnouncedMinRequired() const;
224
236 size_t NumBuffersAnnounced() const;
237
250 size_t NumBuffersQueued() const;
251
262 size_t NumBuffersAwaitDelivery() const;
263
277 uint64_t NumBuffersDelivered() const;
278
293 uint64_t NumBuffersStarted() const;
294
315 uint64_t NumUnderruns() const;
316
326 size_t NumChunksPerBufferMax() const;
327
337 size_t BufferAlignment() const;
338
348 size_t PayloadSize() const;
349
364 bool DefinesPayloadSize() const;
365
376 bool IsGrabbing() const;
377
383
424 std::shared_ptr<Buffer> AnnounceBuffer(
425 void* buffer, size_t size, void* userPtr, const BufferRevocationCallback& revocationCallback);
426
456 std::shared_ptr<Buffer> AllocAndAnnounceBuffer(size_t size, void* userPtr);
457
471 void QueueBuffer(const std::shared_ptr<Buffer>& buffer);
472
491 void RevokeBuffer(const std::shared_ptr<Buffer>& buffer);
492
503 void Flush(DataStreamFlushMode mode);
504
515 std::vector<std::shared_ptr<Buffer>> AnnouncedBuffers() const;
516
518
524
544 void StartAcquisition(
546
557
559
565
596 std::shared_ptr<Buffer> WaitForFinishedBuffer(Timeout timeout_ms);
597
619 void KillWait();
620
646
648
650 std::shared_ptr<Device> ParentDevice() const;
651
652private:
653 static void PEAK_CALL_CONV BufferRevocationCallbackCWrapper(void* buffer, void* userPtr, void* context);
654
655 PEAK_MODULE_HANDLE ModuleHandle() const override;
657
658 std::shared_ptr<Buffer> GetAnnouncedBuffer(PEAK_BUFFER_HANDLE bufferHandle) const;
659 void AddAnnouncedBuffer(const std::shared_ptr<Buffer>& buffer);
660 void RemoveAnnouncedBuffer(const std::shared_ptr<Buffer>& buffer);
661 void RevokeAnnouncedBuffers();
662
663 void Shutdown();
664
665 friend ClassCreator<DataStream>;
666 DataStream(PEAK_DATA_STREAM_HANDLE dataStreamHandle, const std::weak_ptr<Device>& parentDevice);
667 PEAK_DATA_STREAM_HANDLE m_backendHandle;
668
669 std::weak_ptr<Device> m_parentDevice;
670
671 std::vector<std::shared_ptr<Buffer>> m_announcedBuffers;
672 std::unordered_map<PEAK_BUFFER_HANDLE, std::shared_ptr<Buffer>> m_announcedBuffersByHandle;
673 std::unordered_map<PEAK_BUFFER_HANDLE, std::unique_ptr<BufferRevocationCallback>>
674 m_bufferRevocationCallbacksByBufferHandle;
675
676 mutable std::mutex m_announcedBuffersMutex;
677 mutable std::mutex m_bufferRevocationCallbacksByBufferHandleMutex;
678
679 std::string m_key;
680};
681
682} /* namespace core */
683} /* namespace peak */
684
685/* Implementation */
686namespace peak
687{
688namespace core
689{
690
691inline std::string ToString(DataStreamFlushMode entry)
692{
693 std::string entryString;
694
696 {
697 entryString = "InputPoolToOutputQueue";
698 }
700 {
701 entryString = "DiscardOutputQueue";
702 }
703 else if (entry == DataStreamFlushMode::AllToInputPool)
704 {
705 entryString = "AllToInputPool";
706 }
708 {
709 entryString = "UnqueuedToInputPool";
710 }
711 else if (entry == DataStreamFlushMode::DiscardAll)
712 {
713 entryString = "DiscardAll";
714 }
715 else if (entry >= DataStreamFlushMode::Custom)
716 {
717 entryString = "Custom";
718 }
719
720 return entryString;
721}
722
723inline std::string ToString(AcquisitionStartMode entry)
724{
725 std::string entryString;
726
728 {
729 entryString = "Default";
730 }
731 else if (entry >= AcquisitionStartMode::Custom)
732 {
733 entryString = "Custom";
734 }
735
736 return entryString;
737}
738
739inline std::string ToString(AcquisitionStopMode entry)
740{
741 std::string entryString;
742
743 if (entry == AcquisitionStopMode::Default)
744 {
745 entryString = "Default";
746 }
747 else if (entry == AcquisitionStopMode::Kill)
748 {
749 entryString = "Kill";
750 }
751 else if (entry >= AcquisitionStopMode::Custom)
752 {
753 entryString = "Custom";
754 }
755
756 return entryString;
757}
758
759inline DataStream::DataStream(PEAK_DATA_STREAM_HANDLE dataStreamHandle, const std::weak_ptr<Device>& parentDevice)
760 : m_backendHandle(dataStreamHandle)
761 , m_parentDevice(parentDevice)
762 , m_announcedBuffers()
763 , m_announcedBuffersByHandle()
764 , m_announcedBuffersMutex()
765 , m_key(QueryStringFromCInterfaceFunction([&](char* key, size_t* keySize) {
766 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetKey(dataStreamHandle, key, keySize);
767 }))
768{}
769
771{
772 try
773 {
774 Shutdown();
775 }
776 catch (const Exception&)
777 {}
778
779 (void)PEAK_C_ABI_PREFIX PEAK_DataStream_Destruct(m_backendHandle);
780}
781
782inline std::string DataStream::Key() const
783{
784 return m_key;
785}
786
787inline RawInformation DataStream::Info(int32_t infoCommand) const
788{
789 return QueryRawInformationFromCInterfaceFunction([&](int32_t* dataType, uint8_t* buffer, size_t* bufferSize) {
791 m_backendHandle, infoCommand, dataType, buffer, bufferSize);
792 });
793}
794
795inline std::string DataStream::ID() const
796{
797 return QueryStringFromCInterfaceFunction([&](char* id, size_t* idSize) {
798 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetID(m_backendHandle, id, idSize);
799 });
800}
801
802inline std::string DataStream::TLType() const
803{
804 return QueryStringFromCInterfaceFunction([&](char* tlType, size_t* tlTypeSize) {
805 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetTLType(m_backendHandle, tlType, tlTypeSize);
806 });
807}
808
810{
811 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numBuffersAnnouncedMinRequired) {
813 m_backendHandle, numBuffersAnnouncedMinRequired);
814 });
815}
816
818{
819 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numBuffersAnnounced) {
820 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumBuffersAnnounced(m_backendHandle, numBuffersAnnounced);
821 });
822}
823
824inline size_t DataStream::NumBuffersQueued() const
825{
826 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numBuffersQueued) {
827 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumBuffersQueued(m_backendHandle, numBuffersQueued);
828 });
829}
830
832{
833 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numBuffersAwaitDelivery) {
835 m_backendHandle, numBuffersAwaitDelivery);
836 });
837}
838
839inline uint64_t DataStream::NumBuffersDelivered() const
840{
841 return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* numBuffersDelivered) {
842 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumBuffersDelivered(m_backendHandle, numBuffersDelivered);
843 });
844}
845
846inline uint64_t DataStream::NumBuffersStarted() const
847{
848 return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* numBuffersStarted) {
849 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumBuffersStarted(m_backendHandle, numBuffersStarted);
850 });
851}
852
853inline uint64_t DataStream::NumUnderruns() const
854{
855 return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* numUnderruns) {
856 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumUnderruns(m_backendHandle, numUnderruns);
857 });
858}
859
861{
862 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numChunksPerBufferMax) {
863 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumChunksPerBufferMax(m_backendHandle, numChunksPerBufferMax);
864 });
865}
866
867inline size_t DataStream::BufferAlignment() const
868{
869 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* bufferAlignment) {
870 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetBufferAlignment(m_backendHandle, bufferAlignment);
871 });
872}
873
874inline size_t DataStream::PayloadSize() const
875{
876 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* payloadSize) {
877 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetPayloadSize(m_backendHandle, payloadSize);
878 });
879}
880
882{
883 return QueryNumericFromCInterfaceFunction<PEAK_BOOL8>([&](PEAK_BOOL8* definesPayloadSize) {
884 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetDefinesPayloadSize(m_backendHandle, definesPayloadSize);
885 }) > 0;
886}
887
888inline bool DataStream::IsGrabbing() const
889{
890 return QueryNumericFromCInterfaceFunction<PEAK_BOOL8>([&](PEAK_BOOL8* isGrabbing) {
891 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetIsGrabbing(m_backendHandle, isGrabbing);
892 }) > 0;
893}
894
895inline std::shared_ptr<Buffer> DataStream::AnnounceBuffer(
896 void* buffer, size_t size, void* userPtr, const DataStream::BufferRevocationCallback& revocationCallback)
897{
898 auto _callback = std::make_unique<BufferRevocationCallback>(revocationCallback);
899
900 auto callbackContext = _callback.get();
901
902 auto bufferHandle = QueryNumericFromCInterfaceFunction<PEAK_BUFFER_HANDLE>(
903 [&](PEAK_BUFFER_HANDLE* _bufferHandle) {
904 return PEAK_C_ABI_PREFIX PEAK_DataStream_AnnounceBuffer(m_backendHandle, buffer, size, userPtr,
905 BufferRevocationCallbackCWrapper, callbackContext, _bufferHandle);
906 });
907
908 auto _buffer = std::make_shared<ClassCreator<Buffer>>(bufferHandle, shared_from_this());
909 AddAnnouncedBuffer(_buffer);
910
911 {
912 std::lock_guard<std::mutex> lock(m_bufferRevocationCallbacksByBufferHandleMutex);
913
914 m_bufferRevocationCallbacksByBufferHandle.emplace(bufferHandle, std::move(_callback));
915 }
916
917 return _buffer;
918}
919
920inline std::shared_ptr<Buffer> DataStream::AllocAndAnnounceBuffer(size_t size, void* userPtr)
921{
922 auto bufferHandle = QueryNumericFromCInterfaceFunction<PEAK_BUFFER_HANDLE>(
923 [&](PEAK_BUFFER_HANDLE* _bufferHandle) {
925 m_backendHandle, size, userPtr, _bufferHandle);
926 });
927
928 auto buffer = std::make_shared<ClassCreator<Buffer>>(bufferHandle, shared_from_this());
929 AddAnnouncedBuffer(buffer);
930
931 return buffer;
932}
933
934inline void DataStream::QueueBuffer(const std::shared_ptr<Buffer>& buffer)
935{
936 if (buffer == nullptr)
937 {
938 throw InvalidArgumentException("The given buffer is a nullptr!");
939 }
940
941 auto bufferHandle = buffer->m_backendHandle;
942
943 CallAndCheckCInterfaceFunction(
944 [&] { return PEAK_C_ABI_PREFIX PEAK_DataStream_QueueBuffer(m_backendHandle, bufferHandle); });
945}
946
947inline void DataStream::RevokeBuffer(const std::shared_ptr<Buffer>& buffer)
948{
949 if (buffer == nullptr)
950 {
951 throw InvalidArgumentException("The given buffer is a nullptr!");
952 }
953
954 auto bufferHandle = buffer->m_backendHandle;
955
956 CallAndCheckCInterfaceFunction(
957 [&] { return PEAK_C_ABI_PREFIX PEAK_DataStream_RevokeBuffer(m_backendHandle, bufferHandle); });
958
959 RemoveAnnouncedBuffer(buffer);
960
961 {
962 std::lock_guard<std::mutex> lock(m_bufferRevocationCallbacksByBufferHandleMutex);
963
964 m_bufferRevocationCallbacksByBufferHandle.erase(bufferHandle);
965 }
966
967 buffer->Revoke();
968}
969
970inline std::shared_ptr<Buffer> DataStream::WaitForFinishedBuffer(Timeout timeout_ms)
971{
972 auto bufferHandle = QueryNumericFromCInterfaceFunction<PEAK_BUFFER_HANDLE>(
973 [&](PEAK_BUFFER_HANDLE* _bufferHandle) {
975 m_backendHandle, timeout_ms, _bufferHandle);
976 });
977
978 return GetAnnouncedBuffer(bufferHandle);
979}
980
982{
983 CallAndCheckCInterfaceFunction([&] { return PEAK_C_ABI_PREFIX PEAK_DataStream_KillWait(m_backendHandle); });
984}
985
987{
988 CallAndCheckCInterfaceFunction([&] { return PEAK_C_ABI_PREFIX PEAK_DataStream_FlushPendingKillWaits(m_backendHandle); });
989}
990
992{
993 CallAndCheckCInterfaceFunction([&] {
995 m_backendHandle, static_cast<PEAK_DATA_STREAM_FLUSH_MODE>(mode));
996 });
997}
998
999inline std::vector<std::shared_ptr<Buffer>> DataStream::AnnouncedBuffers() const
1000{
1001 std::lock_guard<std::mutex> lock(m_announcedBuffersMutex);
1002
1003 return m_announcedBuffers;
1004}
1005
1006inline void DataStream::StartAcquisition(AcquisitionStartMode mode, uint64_t numToAcquire /*= INFINITE_NUMBER*/)
1007{
1008 CallAndCheckCInterfaceFunction([&] {
1010 m_backendHandle, static_cast<PEAK_ACQUISITION_START_MODE>(mode), numToAcquire);
1011 });
1012}
1013
1015{
1016 CallAndCheckCInterfaceFunction([&] {
1018 m_backendHandle, static_cast<PEAK_ACQUISITION_STOP_MODE>(mode));
1019 });
1020}
1021
1022inline std::shared_ptr<Device> DataStream::ParentDevice() const
1023{
1024 return LockOrThrow(m_parentDevice);
1025}
1026
1027inline void PEAK_CALL_CONV DataStream::BufferRevocationCallbackCWrapper(void* buffer, void* userPtr, void* context)
1028{
1029 auto callback = static_cast<DataStream::BufferRevocationCallback*>(context);
1030 if (*callback)
1031 {
1032 callback->operator()(buffer, userPtr);
1033 }
1034}
1035
1036inline PEAK_MODULE_HANDLE DataStream::ModuleHandle() const
1037{
1038 auto moduleHandle = QueryNumericFromCInterfaceFunction<PEAK_MODULE_HANDLE>(
1039 [&](PEAK_MODULE_HANDLE* _moduleHandle) {
1040 return PEAK_C_ABI_PREFIX PEAK_DataStream_ToModule(m_backendHandle, _moduleHandle);
1041 });
1042
1043 return moduleHandle;
1044}
1045
1046inline PEAK_EVENT_SUPPORTING_MODULE_HANDLE DataStream::EventSupportingModuleHandle() const
1047{
1048 auto eventSupportingModuleHandle = QueryNumericFromCInterfaceFunction<PEAK_EVENT_SUPPORTING_MODULE_HANDLE>(
1049 [&](PEAK_EVENT_SUPPORTING_MODULE_HANDLE* _eventSupportingModuleHandle) {
1051 m_backendHandle, _eventSupportingModuleHandle);
1052 });
1053
1054 return eventSupportingModuleHandle;
1055}
1056
1057inline std::shared_ptr<Buffer> DataStream::GetAnnouncedBuffer(PEAK_BUFFER_HANDLE bufferHandle) const
1058{
1059 std::lock_guard<std::mutex> lock(m_announcedBuffersMutex);
1060
1061 return m_announcedBuffersByHandle.at(bufferHandle);
1062}
1063
1064inline void DataStream::AddAnnouncedBuffer(const std::shared_ptr<Buffer>& buffer)
1065{
1066 std::lock_guard<std::mutex> lock(m_announcedBuffersMutex);
1067
1068 m_announcedBuffers.emplace_back(buffer);
1069 m_announcedBuffersByHandle.emplace(buffer->m_backendHandle, buffer);
1070}
1071
1072inline void DataStream::RemoveAnnouncedBuffer(const std::shared_ptr<Buffer>& buffer)
1073{
1074 std::lock_guard<std::mutex> lock(m_announcedBuffersMutex);
1075
1076 m_announcedBuffers.erase(std::remove(std::begin(m_announcedBuffers), std::end(m_announcedBuffers), buffer));
1077 m_announcedBuffersByHandle.erase(buffer->m_backendHandle);
1078}
1079
1080inline void DataStream::RevokeAnnouncedBuffers()
1081{
1082 for (const auto& buffer : AnnouncedBuffers())
1083 {
1084 RevokeBuffer(buffer);
1085 }
1086}
1087
1088inline void DataStream::Shutdown()
1089{
1090 if (IsGrabbing())
1091 {
1092 StopAcquisition(AcquisitionStopMode::Default);
1093 }
1094 Flush(DataStreamFlushMode::DiscardAll);
1095 RevokeAnnouncedBuffers();
1096}
1097
1098} /* namespace core */
1099} /* namespace peak */
static const uint64_t INFINITE_NUMBER
Definition peak_data_stream.hpp:190
std::shared_ptr< Buffer > AnnounceBuffer(void *buffer, size_t size, void *userPtr, const BufferRevocationCallback &revocationCallback)
Announces a given client allocated buffer to the data stream.
Definition peak_data_stream.hpp:895
DataStream(DataStream &&other)=delete
RawInformation Info(int32_t infoCommand) const
Delivers information based on the given GenTL info command.
Definition peak_data_stream.hpp:787
void RevokeBuffer(const std::shared_ptr< Buffer > &buffer)
Revokes a specified buffer.
Definition peak_data_stream.hpp:947
bool DefinesPayloadSize() const
Checks whether the data stream defines the payload size.
Definition peak_data_stream.hpp:881
void StartAcquisition(AcquisitionStartMode mode=AcquisitionStartMode::Default, uint64_t numToAcquire=INFINITE_NUMBER)
Starts the acquisition.
Definition peak_data_stream.hpp:1006
DataStream & operator=(DataStream &&other)=delete
size_t BufferAlignment() const
Returns the buffer alignment.
Definition peak_data_stream.hpp:867
void QueueBuffer(const std::shared_ptr< Buffer > &buffer)
Queues a given buffer.
Definition peak_data_stream.hpp:934
std::shared_ptr< Device > ParentDevice() const
Returns the parent device.
Definition peak_data_stream.hpp:1022
std::shared_ptr< Buffer > AllocAndAnnounceBuffer(size_t size, void *userPtr)
Allocates and announces a producer allocated buffer on the data stream.
Definition peak_data_stream.hpp:920
size_t NumBuffersAnnounced() const
Retrieves the count of buffers announced via AnnounceBuffer or AllocAndAnnounceBuffer.
Definition peak_data_stream.hpp:817
~DataStream() override
Definition peak_data_stream.hpp:770
uint64_t NumBuffersDelivered() const
Retrieves the count of buffers delivered since the last acquisition start.
Definition peak_data_stream.hpp:839
std::string Key() const
Returns the unique key.
Definition peak_data_stream.hpp:782
std::string TLType() const
Returns the TL (transport layer) type.
Definition peak_data_stream.hpp:802
uint64_t NumUnderruns() const
Retrieves the count of underruns.
Definition peak_data_stream.hpp:853
uint64_t NumBuffersStarted() const
Returns the count of buffers that have been initiated.
Definition peak_data_stream.hpp:846
std::shared_ptr< Buffer > WaitForFinishedBuffer(Timeout timeout_ms)
Blocking wait for a finished Buffer.
Definition peak_data_stream.hpp:970
size_t NumBuffersAnnouncedMinRequired() const
Returns the minimum number of buffers that must be announced before starting the acquisition with Sta...
Definition peak_data_stream.hpp:809
void KillWait()
Tells the data stream to kill one call to WaitForFinishedBuffer.
Definition peak_data_stream.hpp:981
void Flush(DataStreamFlushMode mode)
Move buffers between the Input Buffer Pool, the Output Buffer Pool and the Announced Buffer Pool,...
Definition peak_data_stream.hpp:991
size_t NumBuffersAwaitDelivery() const
Retrieves the count of buffers that are currently waiting to be delivered, i.e., the number of buffer...
Definition peak_data_stream.hpp:831
bool IsGrabbing() const
Checks whether the data stream is grabbing.
Definition peak_data_stream.hpp:888
size_t NumChunksPerBufferMax() const
Returns the maximum number of chunks per buffer.
Definition peak_data_stream.hpp:860
size_t PayloadSize() const
Returns the payload size in bytes, i.e. the size of the buffers.
Definition peak_data_stream.hpp:874
std::function< void(void *buffer, void *userPtr)> BufferRevocationCallback
Definition peak_data_stream.hpp:188
DataStream(const DataStream &other)=delete
std::vector< std::shared_ptr< Buffer > > AnnouncedBuffers() const
Retrieves the list of the currently announced buffers. The buffers' states are irrelevant,...
Definition peak_data_stream.hpp:999
void StopAcquisition(AcquisitionStopMode mode=AcquisitionStopMode::Default)
Stops the acquisition.
Definition peak_data_stream.hpp:1014
std::string ID() const
Returns the ID.
Definition peak_data_stream.hpp:795
DataStream & operator=(const DataStream &other)=delete
size_t NumBuffersQueued() const
Retrieves the count of buffers that are currently queued, i.e., the number of buffers present in the ...
Definition peak_data_stream.hpp:824
void FlushPendingKillWaits()
Flushes the KillWait queue.
Definition peak_data_stream.hpp:986
virtual PEAK_EVENT_SUPPORTING_MODULE_HANDLE EventSupportingModuleHandle() const =0
The base class for all exceptions thrown by the library.
Definition peak_exception.hpp:28
The exception thrown for passing an invalid argument to a function.
Definition peak_exception.hpp:116
virtual PEAK_MODULE_HANDLE ModuleHandle() const =0
Represents a timeout value in milliseconds.
Definition peak_timeout.hpp:32
@ Custom
Definition peak_buffer.hpp:56
The "core" namespace contains the direct GenAPI and GenTL wrapper.
Definition peak_buffer.hpp:34
DataStreamFlushMode
Operation modes for DataStream::Flush() method.
Definition peak_data_stream.hpp:43
@ UnqueuedToInputPool
Definition peak_data_stream.hpp:70
@ DiscardOutputQueue
Definition peak_data_stream.hpp:57
@ Custom
Definition peak_data_stream.hpp:83
@ InputPoolToOutputQueue
Definition peak_data_stream.hpp:51
@ AllToInputPool
Definition peak_data_stream.hpp:64
@ DiscardAll
Definition peak_data_stream.hpp:78
std::string ToString(BufferPayloadType entry)
Definition peak_buffer.hpp:612
AcquisitionStartMode
The enum holding the possible acquisition start modes, for DataStream::StartAcquisition().
Definition peak_data_stream.hpp:92
@ Default
Definition peak_data_stream.hpp:96
@ Custom
Definition peak_data_stream.hpp:101
AcquisitionStopMode
The enum holding the possible acquisition stop modes, for DataStream::StopAcquisition().
Definition peak_data_stream.hpp:110
@ Kill
Definition peak_data_stream.hpp:125
@ Default
Definition peak_data_stream.hpp:116
@ Custom
Definition peak_data_stream.hpp:130
The "peak" namespace directly contains convenience functionality like the DeviceManager as well as th...
Definition peak_dynamic_loader.h:33
struct PEAK_DATA_STREAM * PEAK_DATA_STREAM_HANDLE
Definition peak_backend.h:401
PEAK_C_API PEAK_DataStream_KillWait(PEAK_DATA_STREAM_HANDLE dataStreamHandle)
Tells the data stream to kill one call to PEAK_DataStream_WaitForFinishedBuffer.
PEAK_C_API PEAK_DataStream_GetNumBuffersAnnouncedMinRequired(PEAK_DATA_STREAM_HANDLE dataStreamHandle, size_t *numBuffersAnnouncedMinRequired)
Asks the given data stream for its minimum required number of announced buffers.
struct PEAK_MODULE * PEAK_MODULE_HANDLE
Definition peak_backend.h:421
PEAK_C_API PEAK_DataStream_ToModule(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_MODULE_HANDLE *moduleHandle)
Casts the given data stream to a module.
PEAK_C_API PEAK_DataStream_Flush(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_DATA_STREAM_FLUSH_MODE flushMode)
Tells the given data stream to flush its queues using the given mode.
PEAK_C_API PEAK_DataStream_Destruct(PEAK_DATA_STREAM_HANDLE dataStreamHandle)
Destroys the given data stream.
PEAK_C_API PEAK_DataStream_GetNumUnderruns(PEAK_DATA_STREAM_HANDLE dataStreamHandle, uint64_t *numUnderruns)
Asks the given data stream for its number of underruns.
PEAK_C_API PEAK_DataStream_GetBufferAlignment(PEAK_DATA_STREAM_HANDLE dataStreamHandle, size_t *bufferAlignment)
Asks the given data stream for its buffer alignment.
PEAK_C_API PEAK_DataStream_GetNumChunksPerBufferMax(PEAK_DATA_STREAM_HANDLE dataStreamHandle, size_t *numChunksPerBufferMax)
Asks the given data stream for its maximum number of chunks per buffer.
PEAK_C_API PEAK_DataStream_GetDefinesPayloadSize(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_BOOL8 *definesPayloadSize)
Asks the given data stream whether it defines the payload size.
struct PEAK_BUFFER * PEAK_BUFFER_HANDLE
Definition peak_backend.h:405
struct PEAK_EVENT_SUPPORTING_MODULE * PEAK_EVENT_SUPPORTING_MODULE_HANDLE
Definition peak_backend.h:477
PEAK_C_API PEAK_DataStream_GetNumBuffersStarted(PEAK_DATA_STREAM_HANDLE dataStreamHandle, uint64_t *numBuffersStarted)
Asks the given data stream for its number of started buffers.
PEAK_C_API PEAK_DataStream_GetPayloadSize(PEAK_DATA_STREAM_HANDLE dataStreamHandle, size_t *payloadSize)
Asks the given data stream for its payload size.
PEAK_C_API PEAK_DataStream_GetNumBuffersAnnounced(PEAK_DATA_STREAM_HANDLE dataStreamHandle, size_t *numBuffersAnnounced)
Asks the given data stream for its number of announced buffers.
PEAK_C_API PEAK_DataStream_GetKey(PEAK_DATA_STREAM_HANDLE dataStreamHandle, char *key, size_t *keySize)
Asks the given data stream for its key.
PEAK_C_API PEAK_DataStream_AnnounceBuffer(PEAK_DATA_STREAM_HANDLE dataStreamHandle, void *buffer, size_t bufferSize, void *userPtr, PEAK_BUFFER_REVOCATION_CALLBACK revocationCallback, void *callbackContext, PEAK_BUFFER_HANDLE *bufferHandle)
Announces the given buffer at the given data stream.
PEAK_C_API PEAK_DataStream_GetNumBuffersQueued(PEAK_DATA_STREAM_HANDLE dataStreamHandle, size_t *numBuffersQueued)
Asks the given data stream for its number of queued buffers.
PEAK_C_API PEAK_DataStream_FlushPendingKillWaits(PEAK_DATA_STREAM_HANDLE dataStreamHandle)
Flushes the KillWait queue.
PEAK_C_API PEAK_DataStream_WaitForFinishedBuffer(PEAK_DATA_STREAM_HANDLE dataStreamHandle, uint64_t timeout_ms, PEAK_BUFFER_HANDLE *bufferHandle)
Blocking wait for a finished Buffer.
PEAK_C_API PEAK_DataStream_GetIsGrabbing(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_BOOL8 *isGrabbing)
Asks the given data stream whether it is grabbing.
PEAK_C_API PEAK_DataStream_RevokeBuffer(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_BUFFER_HANDLE bufferHandle)
Tells the given data stream to revoke the given buffer.
int32_t PEAK_ACQUISITION_START_MODE
Definition peak_backend.h:52
int8_t PEAK_BOOL8
Definition peak_backend.h:43
PEAK_C_API PEAK_DataStream_GetNumBuffersDelivered(PEAK_DATA_STREAM_HANDLE dataStreamHandle, uint64_t *numBuffersDelivered)
Asks the given data stream for its number of delivered buffers.
static const uint64_t PEAK_INFINITE_NUMBER
The constant defining an infinite number of buffers.
Definition peak_backend.h:358
int32_t PEAK_ACQUISITION_STOP_MODE
Definition peak_backend.h:62
int32_t PEAK_DATA_STREAM_FLUSH_MODE
Definition peak_backend.h:120
PEAK_C_API PEAK_DataStream_GetID(PEAK_DATA_STREAM_HANDLE dataStreamHandle, char *id, size_t *idSize)
Asks the given data stream for its ID.
PEAK_C_API PEAK_DataStream_StopAcquisition(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_ACQUISITION_STOP_MODE stopMode)
Tells the given data stream to stop the acquisition using the given mode.
PEAK_C_API PEAK_DataStream_QueueBuffer(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_BUFFER_HANDLE bufferHandle)
Tells the given data stream to queue the given buffer.
PEAK_C_API PEAK_DataStream_GetNumBuffersAwaitDelivery(PEAK_DATA_STREAM_HANDLE dataStreamHandle, size_t *numBuffersAwaitDelivery)
Asks the given data stream for its number of buffers awaiting delivery.
PEAK_C_API PEAK_DataStream_AllocAndAnnounceBuffer(PEAK_DATA_STREAM_HANDLE dataStreamHandle, size_t bufferSize, void *userPtr, PEAK_BUFFER_HANDLE *bufferHandle)
Tells the given data stream to allocate and announce a buffer with the given size.
PEAK_C_API PEAK_DataStream_GetTLType(PEAK_DATA_STREAM_HANDLE dataStreamHandle, char *tlType, size_t *tlTypeSize)
Asks the given data stream for its TL type.
PEAK_C_API PEAK_DataStream_GetInfo(PEAK_DATA_STREAM_HANDLE dataStreamHandle, int32_t infoCommand, int32_t *infoDataType, uint8_t *info, size_t *infoSize)
Asks the given data stream for an information based on a specific command.
PEAK_C_API PEAK_DataStream_ToEventSupportingModule(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_EVENT_SUPPORTING_MODULE_HANDLE *eventSupportingModuleHandle)
Casts the given data stream to an event-supporting module.
PEAK_C_API PEAK_DataStream_StartAcquisition(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_ACQUISITION_START_MODE startMode, uint64_t numToAcquire)
Tells the given data stream to start the acquisition using the given mode and to acquire the given nu...
#define PEAK_C_ABI_PREFIX
Definition peak_dll_defines.h:16
#define PEAK_CALL_CONV
Definition peak_dynamic_loader.h:30
The struct returned by all raw information functions.
Definition peak_common_structs.hpp:25