AdsLib
Loading...
Searching...
No Matches
AdsDevice.h
1// SPDX-License-Identifier: MIT
6#pragma once
7
8#include "AdsException.h"
9#include "AdsDef.h"
10#include "wrap_endian.h"
11#include <cstdint>
12#include <functional>
13#include <memory>
14
18static const size_t DEVICE_NAME_LENGTH = 16;
19
23struct DeviceInfo {
25 char name[DEVICE_NAME_LENGTH];
26
29};
30
32 ADSSTATE ads;
33 ADSSTATE device;
34};
35
36template<class T>
38 ResourceDeleter(const std::function<long(T)> func)
39 : FreeResource(func)
40 {}
41
42 void operator()(T* resource) noexcept
43 {
44 FreeResource(*resource);
45 delete resource;
46 }
47private:
48 const std::function<long(T)> FreeResource;
49};
50template<typename T>
51using AdsResource = std::unique_ptr<T, ResourceDeleter<T> >;
52
53using AdsHandle = AdsResource<uint32_t>;
54
55struct AdsDevice {
56 AdsDevice(const std::string& ipV4, AmsNetId netId, uint16_t port);
57
58 DeviceInfo GetDeviceInfo() const;
59
61 AdsHandle GetHandle(uint32_t offset) const;
62
64 AdsHandle GetHandle(const std::string& symbolName) const;
65
67 AdsHandle GetHandle(uint32_t indexGroup,
68 uint32_t indexOffset,
69 const AdsNotificationAttrib& notificationAttributes,
71 uint32_t hUser) const;
72
74 AdsHandle OpenFile(const std::string& filename, uint32_t flags) const;
75
76 long GetLocalPort() const;
77
78 AdsDeviceState GetState() const;
79 void SetState(const ADSSTATE AdsState, const ADSSTATE DeviceState) const;
80
81 uint32_t GetTimeout() const;
82 void SetTimeout(const uint32_t timeout) const;
83
84 long ReadReqEx2(uint32_t group, uint32_t offset, size_t length, void* buffer, uint32_t* bytesRead) const;
85 long ReadWriteReqEx2(uint32_t indexGroup,
86 uint32_t indexOffset,
87 size_t readLength,
88 void* readData,
89 size_t writeLength,
90 const void* writeData,
91 uint32_t* bytesRead) const;
92 long WriteReqEx(uint32_t group, uint32_t offset, size_t length, const void* buffer) const;
93
94 AdsResource<const AmsNetId> m_NetId;
95 const AmsAddr m_Addr;
96private:
97 AdsResource<const long> m_LocalPort;
98 long CloseFile(uint32_t handle) const;
99 long DeleteNotificationHandle(uint32_t handle) const;
100 long DeleteSymbolHandle(uint32_t handle) const;
101};
void(* PAdsNotificationFuncEx)(const AmsAddr *pAddr, const AdsNotificationHeader *pNotification, uint32_t hUser)
Type definition of the callback function required by the AdsSyncAddDeviceNotificationReqEx() function...
Definition: AdsDef.h:363
Definition: AdsDevice.h:31
Definition: AdsDevice.h:55
AdsHandle GetHandle(uint32_t offset) const
Definition: AdsDevice.cpp:58
AdsHandle OpenFile(const std::string &filename, uint32_t flags) const
Definition: AdsDevice.cpp:160
This structure contains all the attributes for the definition of a notification.
Definition: AdsDef.h:323
The structure contains the version number, revision number and build number.
Definition: AdsDef.h:248
The complete address of an ADS device can be stored in this structure.
Definition: AdsDef.h:237
The NetId of and ADS device can be represented in this structure.
Definition: AdsDef.h:224
Device information containing device name and version.
Definition: AdsDevice.h:23
char name[DEVICE_NAME_LENGTH]
Definition: AdsDevice.h:25
AdsVersion version
Definition: AdsDevice.h:28
Definition: AdsDevice.h:37