kdriveExpress SDK 22.1.1
kdrive_express_access.h
Go to the documentation of this file.
1//
2// Copyright (c) 2002-2022 WEINZIERL ENGINEERING GmbH
3// All rights reserved.
4//
5// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
6// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
7// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
8// SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY,
9// WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
10// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
11//
12
13#ifndef __KDRIVE_EXPRESS_ACCESS_H__
14#define __KDRIVE_EXPRESS_ACCESS_H__
15
17#include "kdrive_express_defs.h"
18
26#define KDRIVE_MAX_TUNNEL_INFO_ITEMS (63)
28#ifdef __cplusplus
29extern "C" {
30#endif
31
32/*******************************
33** Init
34********************************/
35
47
58
59/*******************************
60** Keyring
61********************************/
62
70
71/*******************************
72** USB
73********************************/
74
82
88typedef struct usb_dev_t
89{
97
115
134
150
151/*******************************
152** KNXnet/IP Tunneling
153********************************/
154
161{
167
168
174typedef struct ip_tunn_dev_t
175{
176 // ip address and network interface
180 // device information
187 // security information
192 // tunnling slot information
193 // optional (When the device not support it then slot_infos_count is 0)
198
211 ip_tunn_dev_t items[],
212 uint32_t* items_length);
213
214
226 const char* ip_address,
227 uint16_t port,
228 const char* iface_address,
229 ip_tunn_dev_t* device_info);
230
265kdriveExpress_API error_t kdrive_ap_open_ip_tunn(int32_t ap, const char* ip_address, uint16_t port, const char* iface_address);
266
278kdriveExpress_API error_t kdrive_ap_open_ip_tunn_nat(int32_t ap, const char* ip_address, uint16_t port, const char* iface_address);
279
297
315kdriveExpress_API error_t kdrive_ap_open_ip_ex(int32_t ap, const char* ip_address, const char* iface_address);
316
333kdriveExpress_API error_t kdrive_ap_open_ip_nat(int32_t ap, const char* ip_address, const char* iface_address);
334
342
353
365
376
385
396
397/*******************************
398** KNXnet/IP Routing
399********************************/
400
406typedef struct ip_rout_info_t
407{
413
427 ip_rout_info_t items[],
428 uint32_t* items_length);
429
448kdriveExpress_API error_t kdrive_ap_open_ip_rout(int32_t ap, const char* multicast_address, const char* iface_address, bool_t secured);
449
458
467
468/*******************************
469** Serial FT1.2
470********************************/
471
485
486/*******************************
487** TinySerial
488********************************/
489
502
503/*******************************
504** Connection Management
505********************************/
506
514
522
523/*******************************
524** Send KNX Telegrams
525********************************/
526
535
547
556
567
587 uint8_t telegram[], uint32_t telegram_len, uint32_t timeout);
588
589/*******************************
590** Receive KNX Telegrams
591********************************/
592
600
616 uint8_t telegram[], uint32_t telegram_len, uint32_t timeout);
617
618/*******************************
619** KNX Telegram Callback
620********************************/
621
630typedef void (*kdrive_ap_telegram_callback)(const uint8_t telegram[], uint32_t telegram_len, void* user_data);
631
650 kdrive_ap_telegram_callback c, void* user_data, uint32_t* key);
651
670 kdrive_ap_telegram_callback c, void* user_data, uint32_t* key);
671
679
680/*******************************
681** Telegram Attributes
682********************************/
683
692 uint32_t telegram_len, uint16_t* address);
693
702 uint32_t telegram_len, uint16_t* address);
703
712 uint32_t telegram_len, uint16_t* apci);
713
725 uint32_t telegram_len, uint8_t* message_code);
726
737 uint32_t telegram_len, uint8_t sn[KDRIVE_SN_LEN]);
738
739/*******************************
740** Group Values
741********************************/
742
752
761
770
779
794 uint32_t telegram_len, uint8_t* data, uint32_t* data_len);
795
806 uint32_t telegram_len, bool_t* is_commpressed);
807
808/*******************************
809** Data Security
810********************************/
811
813{
814 Off = 0x00,
815 On = 0x01,
816 Auto = 0x03
818
830
842
850
859
867
868/*******************************
869** Access Port Properties
870********************************/
871
881
891
899
907
915
923
931
940
953
963
973
983
994
1007
1018
1030
1043
1051
1052/*******************************
1053** Packet Trace
1054********************************/
1055
1066
1073
1083typedef void(*kdrive_ap_packet_trace_callback)(const uint8_t telegram[], uint32_t telegram_len, int32_t direction, void* user_data);
1084
1100
1101#ifdef __cplusplus
1102}
1103#endif
1104
1105#endif /* __KDRIVE_EXPRESS_ACCESS_H__ */
kdriveExpress_API error_t kdrive_ap_set_ip_tunn_credentials(int32_t ap, uint8_t user_id, const char *password)
Sets the user id and the security password for the KNXnet/IP tunneling connection.
kdriveExpress_API error_t kdrive_ap_register_sec_telegram_callback(int32_t ap, kdrive_ap_telegram_callback c, void *user_data, uint32_t *key)
Registers a callback function.
kdriveExpress_API error_t kdrive_ap_get_filter_dest_addr(int32_t ap, bool_t *is_enabled)
Gets the destination individual address filter setting.
kdriveExpress_API error_t kdrive_ap_group_response(int32_t ap, uint16_t address, const uint8_t *value, uint32_t bits)
Sends a GroupValue_Response Telegram.
kdriveExpress_API error_t kdrive_ap_get_group_data(const uint8_t telegram[], uint32_t telegram_len, uint8_t *data, uint32_t *data_len)
Extracts the Group Value data from the KNX telegram.
kdriveExpress_API error_t kdrive_ap_is_ip_tunn_secure(int32_t ap, bool_t *secured)
Only has works for knxnet ip tunneling ports, returns if security is enabled or not.
kdriveExpress_API error_t kdrive_ap_get_bus_state(int32_t ap, bool_t use_cache, uint32_t *bus_state)
Reads the current bus state from the interface (use_cache == false) or gets the last status of the kn...
struct ip_rout_info_t ip_rout_info_t
Structure holding ip routing information.
kdriveExpress_API error_t kdrive_ap_set_rf_domain_addr(int32_t ap, const uint8_t da[KDRIVE_DA_LEN])
Sets the Domain Address of the Local Device (KNX Interface Device)
kdriveExpress_API error_t kdrive_ap_packet_trace_connect(int32_t ap)
Starts the Packet Trace, for a specific access port.
struct ip_tunn_dev_t ip_tunn_dev_t
Structure holding ip tunneling device information.
kdriveExpress_API error_t kdrive_ap_is_ip_rout_secure(int32_t ap, bool_t *secured)
Only has works for knxnet ip routing ports, returns if security is enabled or not.
kdriveExpress_API error_t kdrive_ap_set_ip_tunn_requested_ia(int32_t ap, uint16_t address)
Sets the (optional) requested individual address This function is used for KNXnet/IP v2 devices.
kdriveExpress_API error_t kdrive_ap_open_ip_nat(int32_t ap, const char *ip_address, const char *iface_address)
kdriveExpress_API error_t kdrive_ap_get_src(const uint8_t telegram[], uint32_t telegram_len, uint16_t *address)
Extracts the Source Address from the Telegram.
kdriveExpress_API error_t kdrive_ap_read_ip_tunn_device_info(int32_t ap, const char *ip_address, uint16_t port, const char *iface_address, ip_tunn_dev_t *device_info)
Gets the information for one specific tunneling device.
kdriveExpress_API error_t kdrive_ap_set_filter_rf_domain_addr(int32_t ap, bool_t enable)
Enable or disable filter rf domain address for L-Data.ind telegrams.
kdriveExpress_API error_t kdrive_ap_group_write(int32_t ap, uint16_t address, const uint8_t *value, uint32_t bits)
Sends a GroupValue_Write Telegram The length is specified in bits to enable values less than one byte...
kdriveExpress_API error_t kdrive_ap_set_additional_ind_addr(int32_t ap, const uint16_t addresses[], uint16_t addresses_len)
Sets the Additional Individual Addresses of the Local Device (KNX Interface Device)
kdriveExpress_API uint32_t kdrive_ap_enum_usb(int32_t ap)
Scan for all KNX USB Interface devices.
void(* kdrive_ap_telegram_callback)(const uint8_t telegram[], uint32_t telegram_len, void *user_data)
Callback function type (pointer to function definition)
Definition: kdrive_express_access.h:630
kdriveExpress_API bool_t kdrive_ap_is_group_write(const uint8_t telegram[], uint32_t telegram_len)
Determines if the specified telegram is a GroupValue_Write telegram.
kdriveExpress_API error_t kdrive_ap_get_filter_rf_domain_addr(int32_t ap, bool_t *is_enabled)
Gets the rf domain adrress filter setting.
kdriveExpress_API bool_t kdrive_ap_release(int32_t ap)
Releases the AccessPort interface.
kdriveExpress_API bool_t kdrive_ap_is_open(int32_t ap)
Returns whether the access port is open.
kdriveExpress_API int32_t kdrive_ap_create(void)
Creates an internal AccessPort interface This should be the first function called when working with t...
kdriveExpress_API error_t kdrive_ap_get_serial_no(int32_t ap, uint8_t sn[KDRIVE_SN_LEN])
Gets the Serial Number of the Local Device (KNX Interface Device)
kdriveExpress_API error_t kdrive_ap_set_ip_tunn_user_id(int32_t ap, uint8_t user_id)
Sets the security user id for the KNXnet/IP tunneling connection.
kdriveExpress_API error_t kdrive_ap_set_ind_addr(int32_t ap, uint16_t address)
Sets the Individual Address of the Local Device (KNX Interface Device)
kdriveExpress_API error_t kdrive_ap_close(int32_t ap)
Closes the access port If the access port is not open nothing happens.
kdriveExpress_API error_t kdrive_ap_set_keyring(int32_t ap, int32_t keyring)
Sets the used knx keyring project.
kdriveExpress_API error_t kdrive_ap_set_ip_rout_backbone_key(int32_t ap, const char *key)
Sets the backbone key for the KNXnet/IP routing connection.
kdriveExpress_API error_t kdrive_ap_group_read(int32_t ap, uint16_t address)
Sends a GroupValue_Read Telegram on the Access Port This function does not wait for a GroupValue_Resp...
kdriveExpress_API error_t kdrive_ap_set_packet_trace_callback(int32_t ap, kdrive_ap_packet_trace_callback c, void *user_data)
Sets the packet trace callback function, for a specific access port.
kdriveExpress_API error_t kdrive_ap_enable_queue(int32_t ap, bool_t enabled)
Enables/Disables the receive queue for the access port.
kdriveExpress_API error_t kdrive_ap_open_ip_tunn(int32_t ap, const char *ip_address, uint16_t port, const char *iface_address)
Opens a connection to a KNX IP Tunneling Interface device on a specific network interface or default ...
kdriveExpress_API error_t kdrive_ap_get_ip_tunn_user_id(int32_t ap, uint8_t *user_id)
Gets the security user id for the KNXnet/IP tunneling connection.
kdriveExpress_API error_t kdrive_ap_get_additional_ind_addr(int32_t ap, uint16_t addresses[], uint32_t *addresses_len)
Gets the Additional Individual Addresses of the Local Device (KNX Interface Device)
kdriveExpress_API error_t kdrive_ap_set_filter_dest_addr(int32_t ap, bool_t enable)
Enable or disable filter destination individual address for L-Data.ind telegrams.
kdriveExpress_API error_t kdrive_ap_open_usb(int32_t ap, uint32_t iface_index)
Opens a connection to a KNX USB Interface device iface_index should be in the range 0....
kdriveExpress_API error_t kdrive_ap_set_layer(int32_t ap, uint16_t layer)
Sets the Layer of the Local Device (KNX Interface Device)
kdriveExpress_API error_t kdrive_ap_packet_trace_disconnect(int32_t ap)
Stops the Packet Trace.
kdriveExpress_API bool_t kdrive_ap_is_data_sec(const uint8_t telegram[], uint32_t telegram_len)
Check if the telegram is a data secure one.
kdriveExpress_API error_t kdrive_ap_is_compressed_group_data(const uint8_t telegram[], uint32_t telegram_len, bool_t *is_commpressed)
Determines if the group value size is compressed (6 bits or less).
kdriveExpress_API uint32_t kdrive_ap_receive(int32_t ap, uint8_t telegram[], uint32_t telegram_len, uint32_t timeout)
Waits for an inbound KNX telegram and (if received) copies the data into the telegram buffer.
kdriveExpress_API error_t kdrive_ap_open_ip_rout(int32_t ap, const char *multicast_address, const char *iface_address, bool_t secured)
Creates an KNXnet/IP Routing access port.
kdriveExpress_API error_t kdrive_ap_get_layer(int32_t ap, uint16_t *layer)
Gets the Layer of the Local Device (KNX Interface Device) The default value is Link Layer.
kdriveExpress_API error_t kdrive_ap_get_rf_domain_addr(int32_t ap, uint8_t da[KDRIVE_DA_LEN])
Gets the Domain Address of the Local Device (KNX Interface Device)
kdriveExpress_API error_t kdrive_ap_get_max_apdu_length(int32_t ap, uint32_t *max_apdu_length)
Gets the maximum supported apdu length of the Local Device (KNX Interface Device)
kdriveExpress_API error_t kdrive_ap_set_data_sec_own_seq_num(int32_t ap, const uint8_t seq_num[6])
Set the own sending sequence number.
kdriveExpress_API error_t kdrive_ap_send(int32_t ap, const uint8_t telegram[], uint32_t telegram_len)
Sends a KNX Telegram on the Access Port.
kdriveExpress_API error_t kdrive_ap_get_apci(const uint8_t telegram[], uint32_t telegram_len, uint16_t *apci)
Extracts the APCI from the Telegram.
kdriveExpress_API error_t kdrive_ap_open_tiny_serial(int32_t ap, const char *serial_device)
Opens a connection to the KNX Tiny Serial Interface 810.
kdriveExpress_API error_t kdrive_ap_get_data_sec(int32_t ap, enum data_sec_t *dataSec)
Get the Data Security usage of the access point.
kdriveExpress_API error_t kdrive_ap_open_ip_ex(int32_t ap, const char *ip_address, const char *iface_address)
kdriveExpress_API error_t kdrive_ap_set_serial_no(int32_t ap, const uint8_t sn[KDRIVE_SN_LEN])
Sets the Serial Number of the Local Device (KNX Interface Device)
kdriveExpress_API error_t kdrive_ap_enum_usb_ex(usb_dev_t items[], uint32_t *items_length)
Scan for all KNX USB Interface devices.
kdriveExpress_API error_t kdrive_ap_set_tunnel_ind_addr(int32_t ap, uint16_t address)
Sets the used Individual Address of the tunnel connection (KNX Interface Device).
void(* kdrive_ap_packet_trace_callback)(const uint8_t telegram[], uint32_t telegram_len, int32_t direction, void *user_data)
Packet Trace callback function type (pointer to function definition)
Definition: kdrive_express_access.h:1083
kdriveExpress_API error_t kdrive_ap_set_ip_tunn_auth_code(int32_t ap, const char *authentication_code)
Sets the optional authentication code for the KNXnet/IP tunneling connection.
struct usb_dev_t usb_dev_t
Structure holding usb device information.
kdriveExpress_API bool_t kdrive_ap_is_group_response(const uint8_t telegram[], uint32_t telegram_len)
Determines if the specified telegram is a GroupValue_Response telegram.
kdriveExpress_API error_t kdrive_ap_get_message_code(const uint8_t telegram[], uint32_t telegram_len, uint8_t *message_code)
Extracts the Message Code from the Telegram.
kdriveExpress_API error_t kdrive_ap_open_serial_ft12(int32_t ap, const char *serial_device)
Opens a connection to a KNX FT1.2 serial interface.
kdriveExpress_API bool_t kdrive_ap_is_group_read(const uint8_t telegram[], uint32_t telegram_len)
Determines if the specified telegram is a GroupValue_Read telegram.
struct ip_tunn_slot_info_t ip_tunn_slot_info_t
Structure holding ip tunnling slot information.
kdriveExpress_API error_t kdrive_ap_get_dest(const uint8_t telegram[], uint32_t telegram_len, uint16_t *address)
Extracts the Destination Address from the Telegram.
kdriveExpress_API error_t kdrive_ap_get_tunnel_ind_addr(int32_t ap, uint16_t *address)
Gets the used Individual Address of the tunnel connection (KNX Interface Device).
kdriveExpress_API bool_t kdrive_ap_is_group(const uint8_t telegram[], uint32_t telegram_len)
Determines if the specified telegram is a GroupValue telegram This is, one of GroupValue_Read,...
kdriveExpress_API error_t kdrive_ap_register_telegram_callback(int32_t ap, kdrive_ap_telegram_callback c, void *user_data, uint32_t *key)
Registers a callback function.
kdriveExpress_API error_t kdrive_ap_enum_ip_tunn(int32_t ap, ip_tunn_dev_t items[], uint32_t *items_length)
Scans for all KNX IP Tunneling Interface devices The items array must exist (should be pre-allocated ...
kdriveExpress_API error_t kdrive_ap_get_ind_addr(int32_t ap, uint16_t *address)
Gets the Individual Address of the Local Device (KNX Interface Device)
kdriveExpress_API error_t kdrive_ap_enum_ip_rout(int32_t ap, ip_rout_info_t items[], uint32_t *items_length)
Scans for all KNX IP Routing devices The items array must exist (should be pre-allocated by the user)...
kdriveExpress_API error_t kdrive_ap_set_data_sec_device_seq_num(int32_t ap, uint16_t address, const uint8_t seq_num[6])
Set the sequence number of a device.
kdriveExpress_API error_t kdrive_ap_get_serial_number(const uint8_t telegram[], uint32_t telegram_len, uint8_t sn[KDRIVE_SN_LEN])
Extracts the Serial Number from the Additional Info (if available) This is extracted from the Additio...
kdriveExpress_API error_t kdrive_ap_open_ip_tunn_nat(int32_t ap, const char *ip_address, uint16_t port, const char *iface_address)
Opens a connection to a KNX IP Tunneling Interface device on a specific network interface in Network ...
kdriveExpress_API error_t kdrive_ap_open_ip(int32_t ap, const char *ip_address)
kdriveExpress_API uint32_t kdrive_ap_read_group_object(int32_t ap, uint16_t address, uint8_t telegram[], uint32_t telegram_len, uint32_t timeout)
Sends a GroupValue_Read Telegram on the Access Port and waits for a GroupValue_Response indication te...
kdriveExpress_API error_t kdrive_ap_set_data_sec(int32_t ap, enum data_sec_t dataSec)
Set the Data Security of the access point.
kdriveExpress_API error_t kdrive_ap_only_enum_usb(usb_dev_t items[], uint32_t *items_length)
Scan for all KNX USB Interface devices.
kdriveExpress_API error_t kdrive_ap_remove_telegram_callback(int32_t ap, uint32_t key)
Removes (de-registers) a telegram callback.
#define KDRIVE_MAX_TUNNEL_INFO_ITEMS
Maximum of tunneling info elements in ip_tunn_slot_info_t.
Definition: kdrive_express_access.h:26
data_sec_t
Definition: kdrive_express_access.h:813
@ Auto
numbered in the order that the hid driver enumerates the devices
Definition: kdrive_express_access.h:816
@ On
knx media types (bit field, encoding is DPT_Media)
Definition: kdrive_express_access.h:815
@ Off
KNX individual address.
Definition: kdrive_express_access.h:814
#define kdriveExpress_API
Definition: kdrive_express_config.h:88
unsigned short uint16_t
16 bit unsigned char
Definition: kdrive_express_config.h:30
int int32_t
32 bit signed int
Definition: kdrive_express_config.h:34
unsigned int uint32_t
32 bit unsigned char
Definition: kdrive_express_config.h:31
int32_t error_t
Definition: kdrive_express_config.h:46
int32_t bool_t
Definition: kdrive_express_config.h:57
unsigned char uint8_t
8 bit unsigned char
Definition: kdrive_express_config.h:29
kdriveExpress Defines
#define KDRIVE_MAC_LEN
The Length of a MAC Address.
Definition: kdrive_express_defs.h:36
#define KDRIVE_DA_LEN
The Length of a KNX Domain Address.
Definition: kdrive_express_defs.h:35
#define KDRIVE_MAX_IP_ADDRESS_LEN
The max length of a formated ip address string e.g.
Definition: kdrive_express_defs.h:41
#define KDRIVE_SN_LEN
The Length of a KNX Serial Number.
Definition: kdrive_express_defs.h:34
#define KDRIVE_MAX_DEVICE_NAME_LEN
The max length of a device friendly name (30 char); (inclusive 1 byte for zero + max utf8 char)
Definition: kdrive_express_defs.h:42
Structure holding ip routing information.
Definition: kdrive_express_access.h:407
char iface_address[KDRIVE_MAX_IP_ADDRESS_LEN]
interface adaptor IP address.
Definition: kdrive_express_access.h:409
uint32_t number_of_devices
Number of found KNXnet/IP Routing devices with the same multicast address and network interface.
Definition: kdrive_express_access.h:410
char multicast_address[KDRIVE_MAX_IP_ADDRESS_LEN]
Multicast IP address in the form "224.0.23.12" for example.
Definition: kdrive_express_access.h:408
Structure holding ip tunneling device information.
Definition: kdrive_express_access.h:175
bool_t prog_mode_enabled
state of the programming mode 0 = off, 1 = on
Definition: kdrive_express_access.h:185
bool_t is_tunneling_secure
is tunneling service secure 0 = false, 1 = true
Definition: kdrive_express_access.h:189
bool_t is_management_secure
is device management service secure 0 = false, 1 = true
Definition: kdrive_express_access.h:190
char iface_address[KDRIVE_MAX_IP_ADDRESS_LEN]
interface adaptor IP address.
Definition: kdrive_express_access.h:178
uint8_t serial_number[KDRIVE_SN_LEN]
serial number
Definition: kdrive_express_access.h:184
uint16_t slot_infos_count
actual number of tunnling slot information items
Definition: kdrive_express_access.h:194
bool_t is_security_supported
supports the interface security (but it is possible that it is not configured) 0 = false,...
Definition: kdrive_express_access.h:188
ip_tunn_slot_info_t slot_infos[KDRIVE_MAX_TUNNEL_INFO_ITEMS]
tunnling slot information items
Definition: kdrive_express_access.h:195
char dev_name[KDRIVE_MAX_DEVICE_NAME_LEN]
device friendly name.
Definition: kdrive_express_access.h:181
char ip_address[KDRIVE_MAX_IP_ADDRESS_LEN]
IP address in the form "192.168.1.47" for example.
Definition: kdrive_express_access.h:177
uint16_t ind_addr
KNX individual address.
Definition: kdrive_express_access.h:182
uint8_t mac_address[KDRIVE_MAC_LEN]
mac address
Definition: kdrive_express_access.h:183
Structure holding ip tunnling slot information.
Definition: kdrive_express_access.h:161
uint16_t status
2 bytes of status bits, currently only the last 3 are used, they are Usable(third bit),...
Definition: kdrive_express_access.h:163
uint16_t address
the individual address of the tunnel
Definition: kdrive_express_access.h:162
Structure holding usb device information.
Definition: kdrive_express_access.h:89
uint32_t usb_vendor_id
usb device vendor id
Definition: kdrive_express_access.h:93
uint16_t media_tytes
knx media types (bit field, encoding is DPT_Media)
Definition: kdrive_express_access.h:91
uint32_t usb_product_id
usb device product id
Definition: kdrive_express_access.h:94
uint32_t internal_usb_index
numbered in the order that the hid driver enumerates the devices
Definition: kdrive_express_access.h:92
uint16_t ind_addr
KNX individual address.
Definition: kdrive_express_access.h:90