IDS peak genericC++ v1.9.0
Loading...
Searching...
No Matches
peak_data_stream.hpp
Go to the documentation of this file.
1
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{
96 Default,
97
101 Custom = 1000
102};
103
110{
116 Default,
125 Kill,
126
130 Custom = 1000
131};
132
133
134class Device;
135
182 : public EventSupportingModule
183 , public std::enable_shared_from_this<DataStream>
184{
185public:
187 using BufferRevocationCallback = std::function<void(void* buffer, void* userPtr)>;
189 static const uint64_t INFINITE_NUMBER = PEAK_INFINITE_NUMBER;
190
191 DataStream() = delete;
192 ~DataStream() override;
193 DataStream(const DataStream& other) = delete;
194 DataStream& operator=(const DataStream& other) = delete;
195 DataStream(DataStream&& other) = delete;
196 DataStream& operator=(DataStream&& other) = delete;
197
199 std::string Key() const;
200
202 RawInformation Info(int32_t infoCommand) const;
203
205 std::string ID() const;
206
208 std::string TLType() const;
209
219 size_t NumBuffersAnnouncedMinRequired() const;
220
230 size_t NumBuffersAnnounced() const;
231
241 size_t NumBuffersQueued() const;
242
252 size_t NumBuffersAwaitDelivery() const;
253
263 uint64_t NumBuffersDelivered() const;
264
274 uint64_t NumBuffersStarted() const;
275
285 uint64_t NumUnderruns() const;
286
296 size_t NumChunksPerBufferMax() const;
297
307 size_t BufferAlignment() const;
308
318 size_t PayloadSize() const;
319
334 bool DefinesPayloadSize() const;
335
346 bool IsGrabbing() const;
347
353
387 std::shared_ptr<Buffer> AnnounceBuffer(
388 void* buffer, size_t size, void* userPtr, const BufferRevocationCallback& revocationCallback);
389
412 std::shared_ptr<Buffer> AllocAndAnnounceBuffer(size_t size, void* userPtr);
413
427 void QueueBuffer(const std::shared_ptr<Buffer>& buffer);
428
442 void RevokeBuffer(const std::shared_ptr<Buffer>& buffer);
443
454 void Flush(DataStreamFlushMode mode);
455
465 std::vector<std::shared_ptr<Buffer>> AnnouncedBuffers() const;
466
468
474
493 void StartAcquisition(
495
506
508
514
539 std::shared_ptr<Buffer> WaitForFinishedBuffer(Timeout timeout_ms);
540
551 void KillWait();
552
554
556 std::shared_ptr<Device> ParentDevice() const;
557
558private:
559 static void PEAK_CALL_CONV BufferRevocationCallbackCWrapper(void* buffer, void* userPtr, void* context);
560
561 PEAK_MODULE_HANDLE ModuleHandle() const override;
562 PEAK_EVENT_SUPPORTING_MODULE_HANDLE EventSupportingModuleHandle() const override;
563
564 std::shared_ptr<Buffer> GetAnnouncedBuffer(PEAK_BUFFER_HANDLE bufferHandle) const;
565 void AddAnnouncedBuffer(const std::shared_ptr<Buffer>& buffer);
566 void RemoveAnnouncedBuffer(const std::shared_ptr<Buffer>& buffer);
567 void RevokeAnnouncedBuffers();
568
569 void Shutdown();
570
571 friend ClassCreator<DataStream>;
572 DataStream(PEAK_DATA_STREAM_HANDLE dataStreamHandle, const std::weak_ptr<Device>& parentDevice);
573 PEAK_DATA_STREAM_HANDLE m_backendHandle;
574
575 std::weak_ptr<Device> m_parentDevice;
576
577 std::vector<std::shared_ptr<Buffer>> m_announcedBuffers;
578 std::unordered_map<PEAK_BUFFER_HANDLE, std::shared_ptr<Buffer>> m_announcedBuffersByHandle;
579 std::unordered_map<PEAK_BUFFER_HANDLE, std::unique_ptr<BufferRevocationCallback>>
580 m_bufferRevocationCallbacksByBufferHandle;
581
582 mutable std::mutex m_announcedBuffersMutex;
583 mutable std::mutex m_bufferRevocationCallbacksByBufferHandleMutex;
584
585 std::string m_key;
586};
587
588} /* namespace core */
589} /* namespace peak */
590
591/* Implementation */
592namespace peak
593{
594namespace core
595{
596
597inline std::string ToString(DataStreamFlushMode entry)
598{
599 std::string entryString;
600
602 {
603 entryString = "InputPoolToOutputQueue";
604 }
606 {
607 entryString = "DiscardOutputQueue";
608 }
609 else if (entry == DataStreamFlushMode::AllToInputPool)
610 {
611 entryString = "AllToInputPool";
612 }
614 {
615 entryString = "UnqueuedToInputPool";
616 }
617 else if (entry == DataStreamFlushMode::DiscardAll)
618 {
619 entryString = "DiscardAll";
620 }
621 else if (entry >= DataStreamFlushMode::Custom)
622 {
623 entryString = "Custom";
624 }
625
626 return entryString;
627}
628
629inline std::string ToString(AcquisitionStartMode entry)
630{
631 std::string entryString;
632
634 {
635 entryString = "Default";
636 }
637 else if (entry >= AcquisitionStartMode::Custom)
638 {
639 entryString = "Custom";
640 }
641
642 return entryString;
643}
644
645inline std::string ToString(AcquisitionStopMode entry)
646{
647 std::string entryString;
648
649 if (entry == AcquisitionStopMode::Default)
650 {
651 entryString = "Default";
652 }
653 else if (entry == AcquisitionStopMode::Kill)
654 {
655 entryString = "Kill";
656 }
657 else if (entry >= AcquisitionStopMode::Custom)
658 {
659 entryString = "Custom";
660 }
661
662 return entryString;
663}
664
665inline DataStream::DataStream(PEAK_DATA_STREAM_HANDLE dataStreamHandle, const std::weak_ptr<Device>& parentDevice)
666 : m_backendHandle(dataStreamHandle)
667 , m_parentDevice(parentDevice)
668 , m_announcedBuffers()
669 , m_announcedBuffersByHandle()
670 , m_announcedBuffersMutex()
671 , m_key(QueryStringFromCInterfaceFunction([&](char* key, size_t* keySize) {
672 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetKey(dataStreamHandle, key, keySize);
673 }))
674{}
675
677{
678 try
679 {
680 Shutdown();
681 }
682 catch (const Exception&)
683 {}
684
685 (void)PEAK_C_ABI_PREFIX PEAK_DataStream_Destruct(m_backendHandle);
686}
687
688inline std::string DataStream::Key() const
689{
690 return m_key;
691}
692
693inline RawInformation DataStream::Info(int32_t infoCommand) const
694{
695 return QueryRawInformationFromCInterfaceFunction([&](int32_t* dataType, uint8_t* buffer, size_t* bufferSize) {
697 m_backendHandle, infoCommand, dataType, buffer, bufferSize);
698 });
699}
700
701inline std::string DataStream::ID() const
702{
703 return QueryStringFromCInterfaceFunction([&](char* id, size_t* idSize) {
704 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetID(m_backendHandle, id, idSize);
705 });
706}
707
708inline std::string DataStream::TLType() const
709{
710 return QueryStringFromCInterfaceFunction([&](char* tlType, size_t* tlTypeSize) {
711 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetTLType(m_backendHandle, tlType, tlTypeSize);
712 });
713}
714
716{
717 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numBuffersAnnouncedMinRequired) {
719 m_backendHandle, numBuffersAnnouncedMinRequired);
720 });
721}
722
724{
725 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numBuffersAnnounced) {
726 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumBuffersAnnounced(m_backendHandle, numBuffersAnnounced);
727 });
728}
729
730inline size_t DataStream::NumBuffersQueued() const
731{
732 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numBuffersQueued) {
733 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumBuffersQueued(m_backendHandle, numBuffersQueued);
734 });
735}
736
738{
739 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numBuffersAwaitDelivery) {
741 m_backendHandle, numBuffersAwaitDelivery);
742 });
743}
744
745inline uint64_t DataStream::NumBuffersDelivered() const
746{
747 return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* numBuffersDelivered) {
748 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumBuffersDelivered(m_backendHandle, numBuffersDelivered);
749 });
750}
751
752inline uint64_t DataStream::NumBuffersStarted() const
753{
754 return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* numBuffersStarted) {
755 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumBuffersStarted(m_backendHandle, numBuffersStarted);
756 });
757}
758
759inline uint64_t DataStream::NumUnderruns() const
760{
761 return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* numUnderruns) {
762 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumUnderruns(m_backendHandle, numUnderruns);
763 });
764}
765
767{
768 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numChunksPerBufferMax) {
769 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumChunksPerBufferMax(m_backendHandle, numChunksPerBufferMax);
770 });
771}
772
773inline size_t DataStream::BufferAlignment() const
774{
775 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* bufferAlignment) {
776 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetBufferAlignment(m_backendHandle, bufferAlignment);
777 });
778}
779
780inline size_t DataStream::PayloadSize() const
781{
782 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* payloadSize) {
783 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetPayloadSize(m_backendHandle, payloadSize);
784 });
785}
786
788{
789 return QueryNumericFromCInterfaceFunction<PEAK_BOOL8>([&](PEAK_BOOL8* definesPayloadSize) {
790 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetDefinesPayloadSize(m_backendHandle, definesPayloadSize);
791 }) > 0;
792}
793
794inline bool DataStream::IsGrabbing() const
795{
796 return QueryNumericFromCInterfaceFunction<PEAK_BOOL8>([&](PEAK_BOOL8* isGrabbing) {
797 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetIsGrabbing(m_backendHandle, isGrabbing);
798 }) > 0;
799}
800
801inline std::shared_ptr<Buffer> DataStream::AnnounceBuffer(
802 void* buffer, size_t size, void* userPtr, const DataStream::BufferRevocationCallback& revocationCallback)
803{
804 auto _callback = std::make_unique<BufferRevocationCallback>(revocationCallback);
805
806 auto callbackContext = _callback.get();
807
808 auto bufferHandle = QueryNumericFromCInterfaceFunction<PEAK_BUFFER_HANDLE>(
809 [&](PEAK_BUFFER_HANDLE* _bufferHandle) {
810 return PEAK_C_ABI_PREFIX PEAK_DataStream_AnnounceBuffer(m_backendHandle, buffer, size, userPtr,
811 BufferRevocationCallbackCWrapper, callbackContext, _bufferHandle);
812 });
813
814 auto _buffer = std::make_shared<ClassCreator<Buffer>>(bufferHandle, shared_from_this());
815 AddAnnouncedBuffer(_buffer);
816
817 {
818 std::lock_guard<std::mutex> lock(m_bufferRevocationCallbacksByBufferHandleMutex);
819
820 m_bufferRevocationCallbacksByBufferHandle.emplace(bufferHandle, std::move(_callback));
821 }
822
823 return _buffer;
824}
825
826inline std::shared_ptr<Buffer> DataStream::AllocAndAnnounceBuffer(size_t size, void* userPtr)
827{
828 auto bufferHandle = QueryNumericFromCInterfaceFunction<PEAK_BUFFER_HANDLE>(
829 [&](PEAK_BUFFER_HANDLE* _bufferHandle) {
831 m_backendHandle, size, userPtr, _bufferHandle);
832 });
833
834 auto buffer = std::make_shared<ClassCreator<Buffer>>(bufferHandle, shared_from_this());
835 AddAnnouncedBuffer(buffer);
836
837 return buffer;
838}
839
840inline void DataStream::QueueBuffer(const std::shared_ptr<Buffer>& buffer)
841{
842 if (buffer == nullptr)
843 {
844 throw InvalidArgumentException("The given buffer is a nullptr!");
845 }
846
847 auto bufferHandle = buffer->m_backendHandle;
848
849 CallAndCheckCInterfaceFunction(
850 [&] { return PEAK_C_ABI_PREFIX PEAK_DataStream_QueueBuffer(m_backendHandle, bufferHandle); });
851}
852
853inline void DataStream::RevokeBuffer(const std::shared_ptr<Buffer>& buffer)
854{
855 if (buffer == nullptr)
856 {
857 throw InvalidArgumentException("The given buffer is a nullptr!");
858 }
859
860 auto bufferHandle = buffer->m_backendHandle;
861
862 CallAndCheckCInterfaceFunction(
863 [&] { return PEAK_C_ABI_PREFIX PEAK_DataStream_RevokeBuffer(m_backendHandle, bufferHandle); });
864
865 RemoveAnnouncedBuffer(buffer);
866
867 {
868 std::lock_guard<std::mutex> lock(m_bufferRevocationCallbacksByBufferHandleMutex);
869
870 m_bufferRevocationCallbacksByBufferHandle.erase(bufferHandle);
871 }
872
873 buffer->Revoke();
874}
875
876inline std::shared_ptr<Buffer> DataStream::WaitForFinishedBuffer(Timeout timeout_ms)
877{
878 auto bufferHandle = QueryNumericFromCInterfaceFunction<PEAK_BUFFER_HANDLE>(
879 [&](PEAK_BUFFER_HANDLE* _bufferHandle) {
881 m_backendHandle, timeout_ms, _bufferHandle);
882 });
883
884 return GetAnnouncedBuffer(bufferHandle);
885}
886
888{
889 CallAndCheckCInterfaceFunction([&] { return PEAK_C_ABI_PREFIX PEAK_DataStream_KillWait(m_backendHandle); });
890}
891
893{
894 CallAndCheckCInterfaceFunction([&] {
896 m_backendHandle, static_cast<PEAK_DATA_STREAM_FLUSH_MODE>(mode));
897 });
898}
899
900inline std::vector<std::shared_ptr<Buffer>> DataStream::AnnouncedBuffers() const
901{
902 std::lock_guard<std::mutex> lock(m_announcedBuffersMutex);
903
904 return m_announcedBuffers;
905}
906
907inline void DataStream::StartAcquisition(AcquisitionStartMode mode, uint64_t numToAcquire /*= INFINITE_NUMBER*/)
908{
909 CallAndCheckCInterfaceFunction([&] {
911 m_backendHandle, static_cast<PEAK_ACQUISITION_START_MODE>(mode), numToAcquire);
912 });
913}
914
916{
917 CallAndCheckCInterfaceFunction([&] {
919 m_backendHandle, static_cast<PEAK_ACQUISITION_STOP_MODE>(mode));
920 });
921}
922
923inline std::shared_ptr<Device> DataStream::ParentDevice() const
924{
925 return LockOrThrow(m_parentDevice);
926}
927
928inline void PEAK_CALL_CONV DataStream::BufferRevocationCallbackCWrapper(void* buffer, void* userPtr, void* context)
929{
930 auto callback = static_cast<DataStream::BufferRevocationCallback*>(context);
931 if (*callback)
932 {
933 callback->operator()(buffer, userPtr);
934 }
935}
936
937inline PEAK_MODULE_HANDLE DataStream::ModuleHandle() const
938{
939 auto moduleHandle = QueryNumericFromCInterfaceFunction<PEAK_MODULE_HANDLE>(
940 [&](PEAK_MODULE_HANDLE* _moduleHandle) {
941 return PEAK_C_ABI_PREFIX PEAK_DataStream_ToModule(m_backendHandle, _moduleHandle);
942 });
943
944 return moduleHandle;
945}
946
947inline PEAK_EVENT_SUPPORTING_MODULE_HANDLE DataStream::EventSupportingModuleHandle() const
948{
949 auto eventSupportingModuleHandle = QueryNumericFromCInterfaceFunction<PEAK_EVENT_SUPPORTING_MODULE_HANDLE>(
950 [&](PEAK_EVENT_SUPPORTING_MODULE_HANDLE* _eventSupportingModuleHandle) {
952 m_backendHandle, _eventSupportingModuleHandle);
953 });
954
955 return eventSupportingModuleHandle;
956}
957
958inline std::shared_ptr<Buffer> DataStream::GetAnnouncedBuffer(PEAK_BUFFER_HANDLE bufferHandle) const
959{
960 std::lock_guard<std::mutex> lock(m_announcedBuffersMutex);
961
962 return m_announcedBuffersByHandle.at(bufferHandle);
963}
964
965inline void DataStream::AddAnnouncedBuffer(const std::shared_ptr<Buffer>& buffer)
966{
967 std::lock_guard<std::mutex> lock(m_announcedBuffersMutex);
968
969 m_announcedBuffers.emplace_back(buffer);
970 m_announcedBuffersByHandle.emplace(buffer->m_backendHandle, buffer);
971}
972
973inline void DataStream::RemoveAnnouncedBuffer(const std::shared_ptr<Buffer>& buffer)
974{
975 std::lock_guard<std::mutex> lock(m_announcedBuffersMutex);
976
977 m_announcedBuffers.erase(std::remove(std::begin(m_announcedBuffers), std::end(m_announcedBuffers), buffer));
978 m_announcedBuffersByHandle.erase(buffer->m_backendHandle);
979}
980
981inline void DataStream::RevokeAnnouncedBuffers()
982{
983 for (const auto& buffer : AnnouncedBuffers())
984 {
985 RevokeBuffer(buffer);
986 }
987}
988
989inline void DataStream::Shutdown()
990{
991 if (IsGrabbing())
992 {
994 }
996 RevokeAnnouncedBuffers();
997}
998
999} /* namespace core */
1000} /* namespace peak */
Represents a GenTL DataStream module.
Definition peak_data_stream.hpp:184
static const uint64_t INFINITE_NUMBER
Definition peak_data_stream.hpp:189
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:801
DataStream(DataStream &&other)=delete
RawInformation Info(int32_t infoCommand) const
Delivers information based on the given GenTL info command.
Definition peak_data_stream.hpp:693
void RevokeBuffer(const std::shared_ptr< Buffer > &buffer)
Revokes a given buffer.
Definition peak_data_stream.hpp:853
bool DefinesPayloadSize() const
Checks whether the data stream defines the payload size.
Definition peak_data_stream.hpp:787
void StartAcquisition(AcquisitionStartMode mode=AcquisitionStartMode::Default, uint64_t numToAcquire=INFINITE_NUMBER)
Starts the acquisition.
Definition peak_data_stream.hpp:907
DataStream & operator=(DataStream &&other)=delete
size_t BufferAlignment() const
Returns the buffer alignment.
Definition peak_data_stream.hpp:773
void QueueBuffer(const std::shared_ptr< Buffer > &buffer)
Queues a given buffer.
Definition peak_data_stream.hpp:840
std::shared_ptr< Device > ParentDevice() const
Returns the parent device.
Definition peak_data_stream.hpp:923
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:826
size_t NumBuffersAnnounced() const
Returns the number of announced buffers.
Definition peak_data_stream.hpp:723
~DataStream() override
Definition peak_data_stream.hpp:676
uint64_t NumBuffersDelivered() const
Returns the number of delivered buffers.
Definition peak_data_stream.hpp:745
std::string Key() const
Returns the unique key.
Definition peak_data_stream.hpp:688
std::string TLType() const
Returns the TL (transport layer) type.
Definition peak_data_stream.hpp:708
uint64_t NumUnderruns() const
Returns the number of underruns.
Definition peak_data_stream.hpp:759
uint64_t NumBuffersStarted() const
Returns the number of started buffers.
Definition peak_data_stream.hpp:752
std::shared_ptr< Buffer > WaitForFinishedBuffer(Timeout timeout_ms)
Blocking wait for a finished Buffer.
Definition peak_data_stream.hpp:876
size_t NumBuffersAnnouncedMinRequired() const
Returns the minimum number of announced buffers required to start the acquisition.
Definition peak_data_stream.hpp:715
void KillWait()
Tells the data stream to kill a wait for a finished buffer.
Definition peak_data_stream.hpp:887
void Flush(DataStreamFlushMode mode)
Move buffers between the Input Buffer Pool, the Output Buffer Queue and the Announced Buffer Pool,...
Definition peak_data_stream.hpp:892
size_t NumBuffersAwaitDelivery() const
Returns the number of buffers awaiting delivery.
Definition peak_data_stream.hpp:737
bool IsGrabbing() const
Checks whether the data stream is grabbing.
Definition peak_data_stream.hpp:794
size_t NumChunksPerBufferMax() const
Returns the maximum number of chunks per buffer.
Definition peak_data_stream.hpp:766
size_t PayloadSize() const
Returns the payload size in bytes, i.e. the size of the buffers.
Definition peak_data_stream.hpp:780
std::function< void(void *buffer, void *userPtr)> BufferRevocationCallback
Definition peak_data_stream.hpp:187
DataStream(const DataStream &other)=delete
std::vector< std::shared_ptr< Buffer > > AnnouncedBuffers() const
Returns the currently announced buffers.
Definition peak_data_stream.hpp:900
void StopAcquisition(AcquisitionStopMode mode=AcquisitionStopMode::Default)
Stops the acquisition.
Definition peak_data_stream.hpp:915
std::string ID() const
Returns the ID.
Definition peak_data_stream.hpp:701
DataStream & operator=(const DataStream &other)=delete
size_t NumBuffersQueued() const
Returns the number of queued buffers.
Definition peak_data_stream.hpp:730
The base class for all modules being able to raise events.
Definition peak_event_supporting_module.hpp:34
The base class for all exceptions thrown by the library.
Definition peak_exception.hpp:26
The exception thrown for passing an invalid argument to a function.
Definition peak_exception.hpp:74
Represents a timeout value in milliseconds.
Definition peak_timeout.hpp:31
DataStreamFlushMode
Operation modes for DataStream::Flush() method.
Definition peak_data_stream.hpp:43
AcquisitionStartMode
The enum holding the possible acquisition start modes, for DataStream::StartAcquisition().
Definition peak_data_stream.hpp:92
AcquisitionStopMode
The enum holding the possible acquisition stop modes, for DataStream::StopAcquisition().
Definition peak_data_stream.hpp:110
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:384
PEAK_C_API PEAK_DataStream_KillWait(PEAK_DATA_STREAM_HANDLE dataStreamHandle)
Tells the given data stream to kill a wait for a finished buffer.
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:404
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:388
struct PEAK_EVENT_SUPPORTING_MODULE * PEAK_EVENT_SUPPORTING_MODULE_HANDLE
Definition peak_backend.h:460
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_WaitForFinishedBuffer(PEAK_DATA_STREAM_HANDLE dataStreamHandle, uint64_t timeout_ms, PEAK_BUFFER_HANDLE *bufferHandle)
Tells the given data stream to wait for a finished buffer with the given timeout.
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:35
int8_t PEAK_BOOL8
Definition peak_backend.h:26
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.
const uint64_t PEAK_INFINITE_NUMBER
The constant defining an infinite number of buffers.
Definition peak_backend.h:341
int32_t PEAK_ACQUISITION_STOP_MODE
Definition peak_backend.h:45
int32_t PEAK_DATA_STREAM_FLUSH_MODE
Definition peak_backend.h:103
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