IDS peak genericC++ v1.17.0
Loading...
Searching...
No Matches
peak_port.hpp
Go to the documentation of this file.
1
6
7#pragma once
8
10
14#include <peak/dll_interface/peak_dll_interface_util.hpp>
15#include <peak/error_handling/peak_error_handling.hpp>
17
18#include <cstddef>
19#include <cstdint>
20#include <memory>
21#include <string>
22#include <vector>
23
24
25namespace peak
26{
27namespace core
28{
29
30class PortURL;
31
38class Port
39 : public InitOnce
40 , public std::enable_shared_from_this<Port>
41{
42public:
43 Port() = delete;
44 ~Port() = default;
45 Port(const class Port& other) = delete;
46 Port& operator=(const class Port& other) = delete;
47 Port(class Port&& other) = delete;
48 Port& operator=(class Port&& other) = delete;
49
51 PEAK_COMMON_NO_DISCARD RawInformation Info(int32_t infoCommand) const;
61 PEAK_COMMON_NO_DISCARD std::string ID() const;
62
72 PEAK_COMMON_NO_DISCARD std::string Name() const;
73
83 PEAK_COMMON_NO_DISCARD std::string VendorName() const;
84
94 PEAK_COMMON_NO_DISCARD std::string ModelName() const;
95
105 PEAK_COMMON_NO_DISCARD std::string Version() const;
106
108 PEAK_COMMON_NO_DISCARD std::string TLType() const;
109
119 PEAK_COMMON_NO_DISCARD std::string ModuleName() const;
120
131
143
155
167
179
194 PEAK_COMMON_NO_DISCARD std::vector<uint8_t> Read(uint64_t address, size_t numBytes) const;
195
209 void Write(uint64_t address, const std::vector<uint8_t>& bytes) const;
210
221 PEAK_COMMON_NO_DISCARD std::vector<std::shared_ptr<PortURL>> URLs() const;
222
223private:
224 friend class ClassCreator<Port>;
225 explicit Port(PEAK_PORT_HANDLE portHandle);
226 PEAK_PORT_HANDLE m_backendHandle;
227
228 void Initialize() const override;
229 mutable std::vector<std::shared_ptr<PortURL>> m_portURLs;
230};
231
232} /* namespace core */
233} /* namespace peak */
234
236
237
238/* Implementation */
239namespace peak
240{
241namespace core
242{
243
244inline Port::Port(PEAK_PORT_HANDLE portHandle)
245 : m_backendHandle(portHandle)
246{}
247
248inline RawInformation Port::Info(int32_t infoCommand) const
249{
250 return QueryRawInformationFromCInterfaceFunction([&](int32_t* dataType, uint8_t* buffer, size_t* bufferSize) {
251 return PEAK_C_ABI_PREFIX PEAK_Port_GetInfo(m_backendHandle, infoCommand, dataType, buffer, bufferSize);
252 });
253}
254
255inline std::string Port::ID() const
256{
257 return QueryStringFromCInterfaceFunction(
258 [&](char* id, size_t* idSize) { return PEAK_C_ABI_PREFIX PEAK_Port_GetID(m_backendHandle, id, idSize); });
259}
260
261inline std::string Port::Name() const
262{
263 return QueryStringFromCInterfaceFunction([&](char* name, size_t* nameSize) {
264 return PEAK_C_ABI_PREFIX PEAK_Port_GetName(m_backendHandle, name, nameSize);
265 });
266}
267
268inline std::string Port::VendorName() const
269{
270 return QueryStringFromCInterfaceFunction([&](char* vendorName, size_t* vendorNameSize) {
271 return PEAK_C_ABI_PREFIX PEAK_Port_GetVendorName(m_backendHandle, vendorName, vendorNameSize);
272 });
273}
274
275inline std::string Port::ModelName() const
276{
277 return QueryStringFromCInterfaceFunction([&](char* modelName, size_t* modelNameSize) {
278 return PEAK_C_ABI_PREFIX PEAK_Port_GetModelName(m_backendHandle, modelName, modelNameSize);
279 });
280}
281
282inline std::string Port::Version() const
283{
284 return QueryStringFromCInterfaceFunction([&](char* version, size_t* versionSize) {
285 return PEAK_C_ABI_PREFIX PEAK_Port_GetVersion(m_backendHandle, version, versionSize);
286 });
287}
288
289inline std::string Port::TLType() const
290{
291 return QueryStringFromCInterfaceFunction([&](char* tlType, size_t* tlTypeSize) {
292 return PEAK_C_ABI_PREFIX PEAK_Port_GetTLType(m_backendHandle, tlType, tlTypeSize);
293 });
294}
295
296inline std::string Port::ModuleName() const
297{
298 return QueryStringFromCInterfaceFunction([&](char* moduleName, size_t* moduleNameSize) {
299 return PEAK_C_ABI_PREFIX PEAK_Port_GetModuleName(m_backendHandle, moduleName, moduleNameSize);
300 });
301}
302
304{
305 return static_cast<Endianness>(
306 QueryNumericFromCInterfaceFunction<PEAK_ENDIANNESS>([&](PEAK_ENDIANNESS* dataEndianness) {
307 return PEAK_C_ABI_PREFIX PEAK_Port_GetDataEndianness(m_backendHandle, dataEndianness);
308 }));
309}
310
311inline bool Port::IsReadable() const
312{
313 return QueryNumericFromCInterfaceFunction<PEAK_BOOL8>([&](PEAK_BOOL8* isReadable) {
314 return PEAK_C_ABI_PREFIX PEAK_Port_GetIsReadable(m_backendHandle, isReadable);
315 }) > 0;
316}
317
318inline bool Port::IsWritable() const
319{
320 return QueryNumericFromCInterfaceFunction<PEAK_BOOL8>([&](PEAK_BOOL8* isWritable) {
321 return PEAK_C_ABI_PREFIX PEAK_Port_GetIsWritable(m_backendHandle, isWritable);
322 }) > 0;
323}
324
325inline bool Port::IsAvailable() const
326{
327 return QueryNumericFromCInterfaceFunction<PEAK_BOOL8>([&](PEAK_BOOL8* isAvailable) {
328 return PEAK_C_ABI_PREFIX PEAK_Port_GetIsAvailable(m_backendHandle, isAvailable);
329 }) > 0;
330}
331
332inline bool Port::IsImplemented() const
333{
334 return QueryNumericFromCInterfaceFunction<PEAK_BOOL8>([&](PEAK_BOOL8* isImplemented) {
335 return PEAK_C_ABI_PREFIX PEAK_Port_GetIsImplemented(m_backendHandle, isImplemented);
336 }) > 0;
337}
338
339inline std::vector<uint8_t> Port::Read(uint64_t address, size_t numBytes) const
340{
341 std::vector<uint8_t> bytes(numBytes);
342 ExecuteAndMapReturnCodes(
343 [&] { return PEAK_C_ABI_PREFIX PEAK_Port_Read(m_backendHandle, address, bytes.data(), bytes.size()); });
344
345 return bytes;
346}
347
348inline void Port::Write(uint64_t address, const std::vector<uint8_t>& bytes) const
349{
350 ExecuteAndMapReturnCodes(
351 [&] { return PEAK_C_ABI_PREFIX PEAK_Port_Write(m_backendHandle, address, bytes.data(), bytes.size()); });
352}
353
354inline std::vector<std::shared_ptr<PortURL>> Port::URLs() const
355{
356 InitializeIfNecessary();
357 return m_portURLs;
358}
359
360inline void Port::Initialize() const
361{
362 auto numUrls = QueryNumericFromCInterfaceFunction<size_t>(
363 [&](size_t* _numUrls) { return PEAK_C_ABI_PREFIX PEAK_Port_GetNumURLs(m_backendHandle, _numUrls); });
364
365 std::vector<std::shared_ptr<PortURL>> urls;
366 for (size_t x = 0; x < numUrls; ++x)
367 {
368 auto portUrlHandle = QueryNumericFromCInterfaceFunction<PEAK_PORT_URL_HANDLE>(
369 [&](PEAK_PORT_URL_HANDLE* _portUrlHandle) {
370 return PEAK_C_ABI_PREFIX PEAK_Port_GetURL(m_backendHandle, x, _portUrlHandle);
371 });
372
373 urls.emplace_back(
374 std::make_shared<ClassCreator<PortURL>>(portUrlHandle, std::const_pointer_cast<Port>(shared_from_this())));
375 }
376
377 m_portURLs = urls;
378}
379
380} /* namespace core */
381} /* namespace peak */
PEAK_COMMON_NO_DISCARD RawInformation Info(int32_t infoCommand) const
Delivers information based on the given GenTL info command.
Definition peak_port.hpp:248
Port(const class Port &other)=delete
PEAK_COMMON_NO_DISCARD std::vector< std::shared_ptr< PortURL > > URLs() const
Returns the URLs.
Definition peak_port.hpp:354
PEAK_COMMON_NO_DISCARD bool IsAvailable() const
Checks whether the port is available.
Definition peak_port.hpp:325
PEAK_COMMON_NO_DISCARD std::string Name() const
Returns the name.
Definition peak_port.hpp:261
PEAK_COMMON_NO_DISCARD std::string ModelName() const
Returns the model name.
Definition peak_port.hpp:275
void Write(uint64_t address, const std::vector< uint8_t > &bytes) const
Writes a given amount of bytes at a given address.
Definition peak_port.hpp:348
PEAK_COMMON_NO_DISCARD std::string TLType() const
Returns the TL (transport layer) type.
Definition peak_port.hpp:289
PEAK_COMMON_NO_DISCARD std::string ID() const
Returns the ID.
Definition peak_port.hpp:255
PEAK_COMMON_NO_DISCARD std::string Version() const
Returns the version.
Definition peak_port.hpp:282
PEAK_COMMON_NO_DISCARD bool IsImplemented() const
Checks whether the port is implemented.
Definition peak_port.hpp:332
PEAK_COMMON_NO_DISCARD std::string ModuleName() const
Returns the module name.
Definition peak_port.hpp:296
Port & operator=(class Port &&other)=delete
PEAK_COMMON_NO_DISCARD bool IsWritable() const
Checks whether the port is writable.
Definition peak_port.hpp:318
PEAK_COMMON_NO_DISCARD std::string VendorName() const
Returns the vendor name.
Definition peak_port.hpp:268
PEAK_COMMON_NO_DISCARD Endianness DataEndianness() const
Returns the data endianness.
Definition peak_port.hpp:303
Port(class Port &&other)=delete
Port & operator=(const class Port &other)=delete
PEAK_COMMON_NO_DISCARD bool IsReadable() const
Checks whether the port is readable.
Definition peak_port.hpp:311
PEAK_COMMON_NO_DISCARD std::vector< uint8_t > Read(uint64_t address, size_t numBytes) const
Reads a given amount of bytes at a given address.
Definition peak_port.hpp:339
Represents a GenTL port URL.
Definition peak_port_url.hpp:50
The "core" namespace contains the direct GenAPI and GenTL wrapper.
Definition peak_buffer.hpp:32
Endianness
Endianness of pixel data in a Buffer or the data in a Port.
Definition peak_common_enums.hpp:26
The "peak" namespace directly contains convenience functionality like the DeviceManager as well as th...
Definition peak_buffer.hpp:29
PEAK_C_API PEAK_Port_GetDataEndianness(PEAK_PORT_HANDLE portHandle, PEAK_ENDIANNESS *dataEndianness)
Asks the given port for its data endianness.
PEAK_C_API PEAK_Port_Read(PEAK_PORT_HANDLE portHandle, uint64_t address, uint8_t *bytesToRead, size_t bytesToReadSize)
Tells the given port to read the given amount of bytes at the given address.
PEAK_C_API PEAK_Port_GetName(PEAK_PORT_HANDLE portHandle, char *name, size_t *nameSize)
Asks the given port for its name.
PEAK_C_API PEAK_Port_GetID(PEAK_PORT_HANDLE portHandle, char *id, size_t *idSize)
Asks the given port for its ID.
struct PEAK_PORT_URL * PEAK_PORT_URL_HANDLE
Definition peak_backend.h:471
PEAK_C_API PEAK_Port_GetVersion(PEAK_PORT_HANDLE portHandle, char *version, size_t *versionSize)
Asks the given port for its version.
PEAK_C_API PEAK_Port_GetIsAvailable(PEAK_PORT_HANDLE portHandle, PEAK_BOOL8 *isAvailable)
Asks the given port whether it is available.
struct PEAK_PORT * PEAK_PORT_HANDLE
Definition peak_backend.h:467
PEAK_C_API PEAK_Port_GetIsImplemented(PEAK_PORT_HANDLE portHandle, PEAK_BOOL8 *isImplemented)
Asks the given port whether it is implemented.
PEAK_C_API PEAK_Port_GetNumURLs(PEAK_PORT_HANDLE portHandle, size_t *numUrls)
Asks the given port for its number of URLs.
PEAK_C_API PEAK_Port_GetTLType(PEAK_PORT_HANDLE portHandle, char *tlType, size_t *tlTypeSize)
Asks the given port for its TL type.
PEAK_C_API PEAK_Port_GetIsReadable(PEAK_PORT_HANDLE portHandle, PEAK_BOOL8 *isReadable)
Asks the given port whether it is readable.
PEAK_C_API PEAK_Port_GetInfo(PEAK_PORT_HANDLE portHandle, int32_t infoCommand, int32_t *infoDataType, uint8_t *info, size_t *infoSize)
Asks the given port for an information based on a specific command.
PEAK_C_API PEAK_Port_GetModelName(PEAK_PORT_HANDLE portHandle, char *modelName, size_t *modelNameSize)
Asks the given port for its model name.
int8_t PEAK_BOOL8
Definition peak_backend.h:41
int32_t PEAK_ENDIANNESS
Definition peak_backend.h:170
PEAK_C_API PEAK_Port_GetVendorName(PEAK_PORT_HANDLE portHandle, char *vendorName, size_t *vendorNameSize)
Asks the given port for its vendor name.
PEAK_C_API PEAK_Port_Write(PEAK_PORT_HANDLE portHandle, uint64_t address, const uint8_t *bytesToWrite, size_t bytesToWriteSize)
Tells the given port to write the given amount of bytes at the given address.
PEAK_C_API PEAK_Port_GetIsWritable(PEAK_PORT_HANDLE portHandle, PEAK_BOOL8 *isWritable)
Asks the given port whether it is writable.
PEAK_C_API PEAK_Port_GetURL(PEAK_PORT_HANDLE portHandle, size_t index, PEAK_PORT_URL_HANDLE *portUrlHandle)
Asks the given port for the URL with the given index.
PEAK_C_API PEAK_Port_GetModuleName(PEAK_PORT_HANDLE portHandle, char *moduleName, size_t *moduleNameSize)
Asks the given port for its module name.
#define PEAK_COMMON_NO_DISCARD
Definition peak_common_defines.h:89
#define PEAK_C_ABI_PREFIX
Definition peak_dll_defines.h:13
The struct returned by all raw information functions.
Definition peak_common_structs.hpp:21