39#ifndef PROTOCORE_ADS_H
40#define PROTOCORE_ADS_H
44#if PROTOCORE_ENABLE_ADS
52#define ADS_TCP_PORT 48898
53#define ADS_AMSTCP_HDR_LEN 6
54#define ADS_AMS_HDR_LEN 32
56#define ADS_NET_ID_LEN 6
57#define ADS_DEVICE_NAME_LEN 16
61#define ADS_STATE_RESPONSE 0x0001
62#define ADS_STATE_NO_RETURN 0x0002
63#define ADS_STATE_ADS_COMMAND 0x0004
64#define ADS_STATE_SYS_COMMAND 0x0008
65#define ADS_STATE_HIGH_PRIO 0x0010
66#define ADS_STATE_TIMESTAMP 0x0020
67#define ADS_STATE_UDP 0x0040
68#define ADS_STATE_INIT_COMMAND 0x0080
69#define ADS_STATE_BROADCAST 0x8000
70#define ADS_STATE_REQUEST ADS_STATE_ADS_COMMAND
71#define ADS_STATE_REPLY (ADS_STATE_ADS_COMMAND | ADS_STATE_RESPONSE)
74#define ADS_IGRP_SYM_HND_BY_NAME 0xF003
75#define ADS_IGRP_SYM_VAL_BY_HANDLE 0xF005
76#define ADS_IGRP_SYM_RELEASE_HANDLE 0xF006
77#define ADS_IGRP_SYM_INFO_BY_NAME_EX 0xF009
78#define ADS_IGRP_SYM_UPLOAD 0xF00B
79#define ADS_IGRP_SYM_UPLOAD_INFO 0xF00F
80#define ADS_IGRP_IO_IMAGE_RW_IB 0xF020
81#define ADS_IGRP_IO_IMAGE_RW_OB 0xF030
82#define ADS_IGRP_PLC_RW_M 0x4020
83#define ADS_IGRP_PLC_RW_RB 0x4030
87 ADS_COMMAND_INVALID = 0x0000,
88 ADS_COMMAND_READ_DEVICE_INFO = 0x0001,
89 ADS_COMMAND_READ = 0x0002,
90 ADS_COMMAND_WRITE = 0x0003,
91 ADS_COMMAND_READ_STATE = 0x0004,
92 ADS_COMMAND_WRITE_CONTROL = 0x0005,
93 ADS_COMMAND_ADD_NOTIFICATION = 0x0006,
94 ADS_COMMAND_DEL_NOTIFICATION = 0x0007,
95 ADS_COMMAND_NOTIFICATION = 0x0008,
96 ADS_COMMAND_READ_WRITE = 0x0009,
101 ADS_STATE_INVALID = 0,
108 ADS_STATE_SAVE_CONFIG = 7,
109 ADS_STATE_LOAD_CONFIG = 8,
110 ADS_STATE_POWER_FAILURE = 9,
111 ADS_STATE_POWER_GOOD = 10,
112 ADS_STATE_ERROR = 11,
113 ADS_STATE_SHUTDOWN = 12,
114 ADS_STATE_SUSPEND = 13,
115 ADS_STATE_RESUME = 14,
116 ADS_STATE_CONFIG = 15,
117 ADS_STATE_RECONFIG = 16,
122 ADS_TRANS_MODE_NO_TRANS = 0,
123 ADS_TRANS_MODE_CLIENT_CYCLE = 1,
124 ADS_TRANS_MODE_CLIENT_ON_CHANGE = 2,
125 ADS_TRANS_MODE_SERVER_CYCLE = 3,
126 ADS_TRANS_MODE_SERVER_ON_CHANGE = 4,
131 uint8_t net_id[ADS_NET_ID_LEN];
147 uint16_t state_flags;
164 uint16_t protocore_ads_state;
165 uint16_t device_state;
171 uint8_t version_major;
172 uint8_t version_minor;
173 uint16_t version_build;
174 char device_name[ADS_DEVICE_NAME_LEN + 1];
177typedef void (*AdsNotificationSampleFn)(uint32_t notification_handle,
const uint8_t *sample, uint32_t sample_len,
178 uint64_t timestamp,
void *user);
186} AdsBuildReadDeviceInfoArgs;
194} AdsBuildReadStateArgs;
202 uint32_t index_group;
203 uint32_t index_offset;
213 uint32_t index_group;
214 uint32_t index_offset;
225 uint32_t index_group;
226 uint32_t index_offset;
228 const uint8_t *write_data;
230} AdsBuildReadWriteArgs;
238 uint16_t protocore_ads_state;
239 uint16_t device_state;
242} AdsBuildWriteControlArgs;
250 uint32_t index_group;
251 uint32_t index_offset;
256} AdsBuildAddNotificationArgs;
264 uint32_t notification_handle;
265} AdsBuildDelNotificationArgs;
273} AdsParseAmsHeaderArgs;
296 AdsReadStateResult *out;
297} AdsParseReadStateArgs;
305} AdsParseReadDeviceInfoArgs;
314} AdsParseAddNotificationArgs;
321 AdsNotificationSampleFn on_sample;
323} AdsParseNotificationArgs;
377 AdsBuildReadDeviceInfoArgs build_read_device_info_args;
378 AdsBuildReadStateArgs build_read_state_args;
379 AdsBuildReadArgs build_read_args;
380 AdsBuildWriteArgs build_write_args;
381 AdsBuildReadWriteArgs build_read_write_args;
382 AdsBuildWriteControlArgs build_write_control_args;
383 AdsBuildAddNotificationArgs build_add_notification_args;
384 AdsBuildDelNotificationArgs build_del_notification_args;
385 AdsParseAmsHeaderArgs parse_ams_header_args;
386 AdsParseReadArgs parse_read_args;
387 AdsParseResultArgs parse_result_args;
388 AdsParseReadStateArgs parse_read_state_args;
389 AdsParseReadDeviceInfoArgs parse_read_device_info_args;
390 AdsParseAddNotificationArgs parse_add_notification_args;
391 AdsParseNotificationArgs parse_notification_args;
402 void (*
const build_read_device_info)(uint8_t *work);
403 void (*
const build_read_state)(uint8_t *work);
404 void (*
const build_read)(uint8_t *work);
405 void (*
const build_write)(uint8_t *work);
406 void (*
const build_read_write)(uint8_t *work);
407 void (*
const build_write_control)(uint8_t *work);
408 void (*
const build_add_notification)(uint8_t *work);
409 void (*
const build_del_notification)(uint8_t *work);
410 void (*
const parse_ams_header)(uint8_t *work);
411 void (*
const parse_read)(uint8_t *work);
412 void (*
const parse_result)(uint8_t *work);
413 void (*
const parse_read_state)(uint8_t *work);
414 void (*
const parse_read_device_info)(uint8_t *work);
415 void (*
const parse_add_notification)(uint8_t *work);
416 void (*
const parse_notification)(uint8_t *work);
421void protocore_ads_build_read_device_info(uint8_t *work);
422void protocore_ads_build_read_state(uint8_t *work);
423void protocore_ads_build_read(uint8_t *work);
424void protocore_ads_build_write(uint8_t *work);
425void protocore_ads_build_read_write(uint8_t *work);
426void protocore_ads_build_write_control(uint8_t *work);
427void protocore_ads_build_add_notification(uint8_t *work);
428void protocore_ads_build_del_notification(uint8_t *work);
429void protocore_ads_parse_ams_header(uint8_t *work);
430void protocore_ads_parse_read(uint8_t *work);
431void protocore_ads_parse_result(uint8_t *work);
432void protocore_ads_parse_read_state(uint8_t *work);
433void protocore_ads_parse_read_device_info(uint8_t *work);
434void protocore_ads_parse_add_notification(uint8_t *work);
435void protocore_ads_parse_notification(uint8_t *work);
441static const AdsNs Ads __attribute__((unused)) = {
442 .build_read_device_info = protocore_ads_build_read_device_info,
443 .build_read_state = protocore_ads_build_read_state,
444 .build_read = protocore_ads_build_read,
445 .build_write = protocore_ads_build_write,
446 .build_read_write = protocore_ads_build_read_write,
447 .build_write_control = protocore_ads_build_write_control,
448 .build_add_notification = protocore_ads_build_add_notification,
449 .build_del_notification = protocore_ads_build_del_notification,
450 .parse_ams_header = protocore_ads_parse_ams_header,
451 .parse_read = protocore_ads_parse_read,
452 .parse_result = protocore_ads_parse_result,
453 .parse_read_state = protocore_ads_parse_read_state,
454 .parse_read_device_info = protocore_ads_parse_read_device_info,
455 .parse_add_notification = protocore_ads_parse_add_notification,
456 .parse_notification = protocore_ads_parse_notification,
PROTO_ENUM_PACKED
Application protocol spoken on a listener port or connection slot.
#define PROTOCORE_BEGIN_DECLS
Give a header's declarations C linkage, so their symbol names carry no parameter types.
_Bool proto_bool
The truth value.
#define PROTOCORE_END_DECLS