aboutsummaryrefslogtreecommitdiff
path: root/nimbluez/bluez/bz_hci.nim
diff options
context:
space:
mode:
authorElectric-Blue <Electric-Blue@users.noreply.github.com>2016-01-26 02:03:48 +0300
committerElectric-Blue <Electric-Blue@users.noreply.github.com>2016-01-26 02:03:48 +0300
commit0c4a1cc1c2083a871562364de5df4f9d88ec321e (patch)
treeddb8428845b663c078359eda4ec81bdcc157414f /nimbluez/bluez/bz_hci.nim
parent27a7a2a18a6db8b67cbe0e86c37cb174de2a1295 (diff)
downloadNimBluez-0c4a1cc1c2083a871562364de5df4f9d88ec321e.tar.gz
NimBluez-0c4a1cc1c2083a871562364de5df4f9d88ec321e.zip
First version.
Diffstat (limited to 'nimbluez/bluez/bz_hci.nim')
-rw-r--r--nimbluez/bluez/bz_hci.nim2594
1 files changed, 2594 insertions, 0 deletions
diff --git a/nimbluez/bluez/bz_hci.nim b/nimbluez/bluez/bz_hci.nim
new file mode 100644
index 0000000..3b2d925
--- /dev/null
+++ b/nimbluez/bluez/bz_hci.nim
@@ -0,0 +1,2594 @@
+#
+#
+# BlueZ - Bluetooth protocol stack for Linux
+#
+# Copyright (C) 2000-2001 Qualcomm Incorporated
+# Copyright (C) 2002-2003 Maxim Krasnyansky <maxk@qualcomm.com>
+# Copyright (C) 2002-2010 Marcel Holtmann <marcel@holtmann.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+#
+
+{.deadCodeElim: on.}
+
+import ioctl
+import bz_bluetooth
+
+const
+ HCI_MAX_DEV* = 16
+ HCI_MAX_ACL_SIZE* = 1024
+ HCI_MAX_SCO_SIZE* = 255
+ HCI_MAX_EVENT_SIZE* = 260
+ HCI_MAX_FRAME_SIZE* = (HCI_MAX_ACL_SIZE + 4)
+
+# HCI dev events
+
+const
+ HCI_DEV_REG_EV* = 1
+ HCI_DEV_UNREG_EV* = 2
+ HCI_DEV_UP_EV* = 3
+ HCI_DEV_DOWN_EV* = 4
+ HCI_DEV_SUSPEND_EV* = 5
+ HCI_DEV_RESUME_EV* = 6
+
+# HCI bus types
+
+const
+ HCI_VIRTUAL* = 0
+ HCI_USB* = 1
+ HCI_PCCARD* = 2
+ HCI_UART* = 3
+ HCI_RS232* = 4
+ HCI_PCI* = 5
+ HCI_SDIO* = 6
+
+# HCI controller types
+
+const
+ HCI_BREDR* = 0x00000000
+ HCI_AMP* = 0x00000001
+
+# HCI device flags
+
+const
+ HCI_UP_FLAG* = 0
+ HCI_INIT_FLAG* = 1
+ HCI_RUNNING_FLAG* = 2
+ HCI_PSCAN_FLAG* = 3
+ HCI_ISCAN_FLAG* = 4
+ HCI_AUTH_FLAG* = 5
+ HCI_ENCRYPT_FLAG* = 6
+ HCI_INQUIRY_FLAG* = 7
+ HCI_RAW_FLAG* = 8
+
+# LE address type
+
+const
+ LE_PUBLIC_ADDRESS* = 0x00000000
+ LE_RANDOM_ADDRESS* = 0x00000001
+
+# HCI ioctl defines
+
+const
+ HCIDEVUP* = IOW(ord('H'), 201, int)
+ HCIDEVDOWN* = IOW(ord('H'), 202, int)
+ HCIDEVRESET* = IOW(ord('H'), 203, int)
+ HCIDEVRESTAT* = IOW(ord('H'), 204, int)
+ HCIGETDEVLIST* = IOR(ord('H'), 210, int)
+ HCIGETDEVINFO* = IOR(ord('H'), 211, int)
+ HCIGETCONNLIST* = IOR(ord('H'), 212, int)
+ HCIGETCONNINFO* = IOR(ord('H'), 213, int)
+ HCIGETAUTHINFO* = IOR(ord('H'), 215, int)
+ HCISETRAW* = IOW(ord('H'), 220, int)
+ HCISETSCAN* = IOW(ord('H'), 221, int)
+ HCISETAUTH* = IOW(ord('H'), 222, int)
+ HCISETENCRYPT* = IOW(ord('H'), 223, int)
+ HCISETPTYPE* = IOW(ord('H'), 224, int)
+ HCISETLINKPOL* = IOW(ord('H'), 225, int)
+ HCISETLINKMODE* = IOW(ord('H'), 226, int)
+ HCISETACLMTU* = IOW(ord('H'), 227, int)
+ HCISETSCOMTU* = IOW(ord('H'), 228, int)
+ HCIBLOCKADDR* = IOW(ord('H'), 230, int)
+ HCIUNBLOCKADDR* = IOW(ord('H'), 231, int)
+ HCIINQUIRY* = IOR(ord('H'), 240, int)
+
+when not defined(NO_HCI_DEFS):
+ # HCI Packet types
+ const
+ HCI_COMMAND_PKT* = 0x00000001
+ HCI_ACLDATA_PKT* = 0x00000002
+ HCI_SCODATA_PKT* = 0x00000003
+ HCI_EVENT_PKT* = 0x00000004
+ HCI_VENDOR_PKT* = 0x000000FF
+ # HCI Packet types
+ const
+ HCI_2DH1* = 0x00000002
+ HCI_3DH1* = 0x00000004
+ HCI_DM1* = 0x00000008
+ HCI_DH1* = 0x00000010
+ HCI_2DH3* = 0x00000100
+ HCI_3DH3* = 0x00000200
+ HCI_DM3* = 0x00000400
+ HCI_DH3* = 0x00000800
+ HCI_2DH5* = 0x00001000
+ HCI_3DH5* = 0x00002000
+ HCI_DM5* = 0x00004000
+ HCI_DH5* = 0x00008000
+ HCI_HV1* = 0x00000020
+ HCI_HV2* = 0x00000040
+ HCI_HV3* = 0x00000080
+ HCI_EV3* = 0x00000008
+ HCI_EV4* = 0x00000010
+ HCI_EV5* = 0x00000020
+ HCI_2EV3* = 0x00000040
+ HCI_3EV3* = 0x00000080
+ HCI_2EV5* = 0x00000100
+ HCI_3EV5* = 0x00000200
+ SCO_PTYPE_MASK* = (HCI_HV1 or HCI_HV2 or HCI_HV3)
+ ACL_PTYPE_MASK* = (
+ HCI_DM1 or HCI_DH1 or HCI_DM3 or HCI_DH3 or HCI_DM5 or HCI_DH5)
+ # HCI Error codes
+ const
+ HCI_UNKNOWN_COMMAND* = 0x00000001
+ HCI_NO_CONNECTION* = 0x00000002
+ HCI_HARDWARE_FAILURE* = 0x00000003
+ HCI_PAGE_TIMEOUT* = 0x00000004
+ HCI_AUTHENTICATION_FAILURE* = 0x00000005
+ HCI_PIN_OR_KEY_MISSING* = 0x00000006
+ HCI_MEMORY_FULL* = 0x00000007
+ HCI_CONNECTION_TIMEOUT* = 0x00000008
+ HCI_MAX_NUMBER_OF_CONNECTIONS* = 0x00000009
+ HCI_MAX_NUMBER_OF_SCO_CONNECTIONS* = 0x0000000A
+ HCI_ACL_CONNECTION_EXISTS* = 0x0000000B
+ HCI_COMMAND_DISALLOWED* = 0x0000000C
+ HCI_REJECTED_LIMITED_RESOURCES* = 0x0000000D
+ HCI_REJECTED_SECURITY* = 0x0000000E
+ HCI_REJECTED_PERSONAL* = 0x0000000F
+ HCI_HOST_TIMEOUT* = 0x00000010
+ HCI_UNSUPPORTED_FEATURE* = 0x00000011
+ HCI_INVALID_PARAMETERS* = 0x00000012
+ HCI_OE_USER_ENDED_CONNECTION* = 0x00000013
+ HCI_OE_LOW_RESOURCES* = 0x00000014
+ HCI_OE_POWER_OFF* = 0x00000015
+ HCI_CONNECTION_TERMINATED* = 0x00000016
+ HCI_REPEATED_ATTEMPTS* = 0x00000017
+ HCI_PAIRING_NOT_ALLOWED* = 0x00000018
+ HCI_UNKNOWN_LMP_PDU* = 0x00000019
+ HCI_UNSUPPORTED_REMOTE_FEATURE* = 0x0000001A
+ HCI_SCO_OFFSET_REJECTED* = 0x0000001B
+ HCI_SCO_INTERVAL_REJECTED* = 0x0000001C
+ HCI_AIR_MODE_REJECTED* = 0x0000001D
+ HCI_INVALID_LMP_PARAMETERS* = 0x0000001E
+ HCI_UNSPECIFIED_ERROR* = 0x0000001F
+ HCI_UNSUPPORTED_LMP_PARAMETER_VALUE* = 0x00000020
+ HCI_ROLE_CHANGE_NOT_ALLOWED* = 0x00000021
+ HCI_LMP_RESPONSE_TIMEOUT* = 0x00000022
+ HCI_LMP_ERROR_TRANSACTION_COLLISION* = 0x00000023
+ HCI_LMP_PDU_NOT_ALLOWED* = 0x00000024
+ HCI_ENCRYPTION_MODE_NOT_ACCEPTED* = 0x00000025
+ HCI_UNIT_LINK_KEY_USED* = 0x00000026
+ HCI_QOS_NOT_SUPPORTED* = 0x00000027
+ HCI_INSTANT_PASSED* = 0x00000028
+ HCI_PAIRING_NOT_SUPPORTED* = 0x00000029
+ HCI_TRANSACTION_COLLISION* = 0x0000002A
+ HCI_QOS_UNACCEPTABLE_PARAMETER* = 0x0000002C
+ HCI_QOS_REJECTED* = 0x0000002D
+ HCI_CLASSIFICATION_NOT_SUPPORTED* = 0x0000002E
+ HCI_INSUFFICIENT_SECURITY* = 0x0000002F
+ HCI_PARAMETER_OUT_OF_RANGE* = 0x00000030
+ HCI_ROLE_SWITCH_PENDING* = 0x00000032
+ HCI_SLOT_VIOLATION* = 0x00000034
+ HCI_ROLE_SWITCH_FAILED* = 0x00000035
+ HCI_EIR_TOO_LARGE* = 0x00000036
+ HCI_SIMPLE_PAIRING_NOT_SUPPORTED* = 0x00000037
+ HCI_HOST_BUSY_PAIRING* = 0x00000038
+ # ACL flags
+ const
+ ACL_START_NO_FLUSH* = 0x00000000
+ ACL_CONT* = 0x00000001
+ ACL_START* = 0x00000002
+ ACL_ACTIVE_BCAST* = 0x00000004
+ ACL_PICO_BCAST* = 0x00000008
+ # Baseband links
+ const
+ SCO_LINK* = 0x00000000
+ ACL_LINK* = 0x00000001
+ ESCO_LINK* = 0x00000002
+ # LMP features
+ const
+ LMP_3SLOT* = 0x00000001
+ LMP_5SLOT* = 0x00000002
+ LMP_ENCRYPT* = 0x00000004
+ LMP_SOFFSET* = 0x00000008
+ LMP_TACCURACY* = 0x00000010
+ LMP_RSWITCH* = 0x00000020
+ LMP_HOLD* = 0x00000040
+ LMP_SNIFF* = 0x00000080
+ LMP_PARK* = 0x00000001
+ LMP_RSSI* = 0x00000002
+ LMP_QUALITY* = 0x00000004
+ LMP_SCO* = 0x00000008
+ LMP_HV2* = 0x00000010
+ LMP_HV3* = 0x00000020
+ LMP_ULAW* = 0x00000040
+ LMP_ALAW* = 0x00000080
+ LMP_CVSD* = 0x00000001
+ LMP_PSCHEME* = 0x00000002
+ LMP_PCONTROL* = 0x00000004
+ LMP_TRSP_SCO* = 0x00000008
+ LMP_BCAST_ENC* = 0x00000080
+ LMP_EDR_ACL_2M* = 0x00000002
+ LMP_EDR_ACL_3M* = 0x00000004
+ LMP_ENH_ISCAN* = 0x00000008
+ LMP_ILACE_ISCAN* = 0x00000010
+ LMP_ILACE_PSCAN* = 0x00000020
+ LMP_RSSI_INQ* = 0x00000040
+ LMP_ESCO* = 0x00000080
+ LMP_EV4* = 0x00000001
+ LMP_EV5* = 0x00000002
+ LMP_AFH_CAP_SLV* = 0x00000008
+ LMP_AFH_CLS_SLV* = 0x00000010
+ LMP_NO_BREDR* = 0x00000020
+ LMP_LE* = 0x00000040
+ LMP_EDR_3SLOT* = 0x00000080
+ LMP_EDR_5SLOT* = 0x00000001
+ LMP_SNIFF_SUBR* = 0x00000002
+ LMP_PAUSE_ENC* = 0x00000004
+ LMP_AFH_CAP_MST* = 0x00000008
+ LMP_AFH_CLS_MST* = 0x00000010
+ LMP_EDR_ESCO_2M* = 0x00000020
+ LMP_EDR_ESCO_3M* = 0x00000040
+ LMP_EDR_3S_ESCO* = 0x00000080
+ LMP_EXT_INQ* = 0x00000001
+ LMP_LE_BREDR* = 0x00000002
+ LMP_SIMPLE_PAIR* = 0x00000008
+ LMP_ENCAPS_PDU* = 0x00000010
+ LMP_ERR_DAT_REP* = 0x00000020
+ LMP_NFLUSH_PKTS* = 0x00000040
+ LMP_LSTO* = 0x00000001
+ LMP_INQ_TX_PWR* = 0x00000002
+ LMP_EPC* = 0x00000004
+ LMP_EXT_FEAT* = 0x00000080
+ # Extended LMP features
+ const
+ LMP_HOST_SSP* = 0x00000001
+ LMP_HOST_LE* = 0x00000002
+ LMP_HOST_LE_BREDR* = 0x00000004
+ # Link policies
+ const
+ HCI_LP_RSWITCH* = 0x00000001
+ HCI_LP_HOLD* = 0x00000002
+ HCI_LP_SNIFF* = 0x00000004
+ HCI_LP_PARK* = 0x00000008
+ # Link mode
+ const
+ HCI_LM_ACCEPT* = 0x00008000
+ HCI_LM_MASTER* = 0x00000001
+ HCI_LM_AUTH* = 0x00000002
+ HCI_LM_ENCRYPT* = 0x00000004
+ HCI_LM_TRUSTED* = 0x00000008
+ HCI_LM_RELIABLE* = 0x00000010
+ HCI_LM_SECURE* = 0x00000020
+ # Link Key types
+ const
+ HCI_LK_COMBINATION* = 0x00000000
+ HCI_LK_LOCAL_UNIT* = 0x00000001
+ HCI_LK_REMOTE_UNIT* = 0x00000002
+ HCI_LK_DEBUG_COMBINATION* = 0x00000003
+ HCI_LK_UNAUTH_COMBINATION* = 0x00000004
+ HCI_LK_AUTH_COMBINATION* = 0x00000005
+ HCI_LK_CHANGED_COMBINATION* = 0x00000006
+ HCI_LK_INVALID* = 0x000000FF
+ # ----- HCI Commands -----
+ # Link Control
+ const
+ OGF_LINK_CTL* = 0x00000001
+ OCF_INQUIRY* = 0x00000001
+ type
+ inquiry_cp* = object {.packed.}
+ lap*: array[3, uint8]
+ length*: uint8 # 1.28s units
+ num_rsp*: uint8
+
+ const
+ INQUIRY_CP_SIZE* = 5
+ type
+ status_bdaddr_rp* = object {.packed.}
+ status*: uint8
+ bdaddr*: bdaddr_t
+
+ const
+ STATUS_BDADDR_RP_SIZE* = 7
+ OCF_INQUIRY_CANCEL* = 0x00000002
+ OCF_PERIODIC_INQUIRY* = 0x00000003
+ type
+ periodic_inquiry_cp* = object {.packed.}
+ max_period*: uint16 # 1.28s units
+ min_period*: uint16 # 1.28s units
+ lap*: array[3, uint8]
+ length*: uint8 # 1.28s units
+ num_rsp*: uint8
+
+ const
+ PERIODIC_INQUIRY_CP_SIZE* = 9
+ OCF_EXIT_PERIODIC_INQUIRY* = 0x00000004
+ OCF_CREATE_CONN* = 0x00000005
+ type
+ create_conn_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+ pkt_type*: uint16
+ pscan_rep_mode*: uint8
+ pscan_mode*: uint8
+ clock_offset*: uint16
+ role_switch*: uint8
+
+ const
+ CREATE_CONN_CP_SIZE* = 13
+ OCF_DISCONNECT* = 0x00000006
+ type
+ disconnect_cp* = object {.packed.}
+ handle*: uint16
+ reason*: uint8
+
+ const
+ DISCONNECT_CP_SIZE* = 3
+ OCF_ADD_SCO* = 0x00000007
+ type
+ add_sco_cp* = object {.packed.}
+ handle*: uint16
+ pkt_type*: uint16
+
+ const
+ ADD_SCO_CP_SIZE* = 4
+ OCF_CREATE_CONN_CANCEL* = 0x00000008
+ type
+ create_conn_cancel_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+
+ const
+ CREATE_CONN_CANCEL_CP_SIZE* = 6
+ OCF_ACCEPT_CONN_REQ* = 0x00000009
+ type
+ accept_conn_req_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+ role*: uint8
+
+ const
+ ACCEPT_CONN_REQ_CP_SIZE* = 7
+ OCF_REJECT_CONN_REQ* = 0x0000000A
+ type
+ reject_conn_req_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+ reason*: uint8
+
+ const
+ REJECT_CONN_REQ_CP_SIZE* = 7
+ OCF_LINK_KEY_REPLY* = 0x0000000B
+ type
+ link_key_reply_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+ link_key*: array[16, uint8]
+
+ const
+ LINK_KEY_REPLY_CP_SIZE* = 22
+ OCF_LINK_KEY_NEG_REPLY* = 0x0000000C
+ OCF_PIN_CODE_REPLY* = 0x0000000D
+ type
+ pin_code_reply_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+ pin_len*: uint8
+ pin_code*: array[16, uint8]
+
+ const
+ PIN_CODE_REPLY_CP_SIZE* = 23
+ OCF_PIN_CODE_NEG_REPLY* = 0x0000000E
+ OCF_SET_CONN_PTYPE* = 0x0000000F
+ type
+ set_conn_ptype_cp* = object {.packed.}
+ handle*: uint16
+ pkt_type*: uint16
+
+ const
+ SET_CONN_PTYPE_CP_SIZE* = 4
+ OCF_AUTH_REQUESTED* = 0x00000011
+ type
+ auth_requested_cp* = object {.packed.}
+ handle*: uint16
+
+ const
+ AUTH_REQUESTED_CP_SIZE* = 2
+ OCF_SET_CONN_ENCRYPT* = 0x00000013
+ type
+ set_conn_encrypt_cp* = object {.packed.}
+ handle*: uint16
+ encrypt*: uint8
+
+ const
+ SET_CONN_ENCRYPT_CP_SIZE* = 3
+ OCF_CHANGE_CONN_LINK_KEY* = 0x00000015
+ type
+ change_conn_link_key_cp* = object {.packed.}
+ handle*: uint16
+
+ const
+ CHANGE_CONN_LINK_KEY_CP_SIZE* = 2
+ OCF_MASTER_LINK_KEY* = 0x00000017
+ type
+ master_link_key_cp* = object {.packed.}
+ key_flag*: uint8
+
+ const
+ MASTER_LINK_KEY_CP_SIZE* = 1
+ OCF_REMOTE_NAME_REQ* = 0x00000019
+ type
+ remote_name_req_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+ pscan_rep_mode*: uint8
+ pscan_mode*: uint8
+ clock_offset*: uint16
+
+ const
+ REMOTE_NAME_REQ_CP_SIZE* = 10
+ OCF_REMOTE_NAME_REQ_CANCEL* = 0x0000001A
+ type
+ remote_name_req_cancel_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+
+ const
+ REMOTE_NAME_REQ_CANCEL_CP_SIZE* = 6
+ OCF_READ_REMOTE_FEATURES* = 0x0000001B
+ type
+ read_remote_features_cp* = object {.packed.}
+ handle*: uint16
+
+ const
+ READ_REMOTE_FEATURES_CP_SIZE* = 2
+ OCF_READ_REMOTE_EXT_FEATURES* = 0x0000001C
+ type
+ read_remote_ext_features_cp* = object {.packed.}
+ handle*: uint16
+ page_num*: uint8
+
+ const
+ READ_REMOTE_EXT_FEATURES_CP_SIZE* = 3
+ OCF_READ_REMOTE_VERSION* = 0x0000001D
+ type
+ read_remote_version_cp* = object {.packed.}
+ handle*: uint16
+
+ const
+ READ_REMOTE_VERSION_CP_SIZE* = 2
+ OCF_READ_CLOCK_OFFSET* = 0x0000001F
+ type
+ read_clock_offset_cp* = object {.packed.}
+ handle*: uint16
+
+ const
+ READ_CLOCK_OFFSET_CP_SIZE* = 2
+ OCF_READ_LMP_HANDLE* = 0x00000020
+ OCF_SETUP_SYNC_CONN* = 0x00000028
+ type
+ setup_sync_conn_cp* = object {.packed.}
+ handle*: uint16
+ tx_bandwith*: uint32
+ rx_bandwith*: uint32
+ max_latency*: uint16
+ voice_setting*: uint16
+ retrans_effort*: uint8
+ pkt_type*: uint16
+
+ const
+ SETUP_SYNC_CONN_CP_SIZE* = 17
+ OCF_ACCEPT_SYNC_CONN_REQ* = 0x00000029
+ type
+ accept_sync_conn_req_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+ tx_bandwith*: uint32
+ rx_bandwith*: uint32
+ max_latency*: uint16
+ voice_setting*: uint16
+ retrans_effort*: uint8
+ pkt_type*: uint16
+
+ const
+ ACCEPT_SYNC_CONN_REQ_CP_SIZE* = 21
+ OCF_REJECT_SYNC_CONN_REQ* = 0x0000002A
+ type
+ reject_sync_conn_req_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+ reason*: uint8
+
+ const
+ REJECT_SYNC_CONN_REQ_CP_SIZE* = 7
+ OCF_IO_CAPABILITY_REPLY* = 0x0000002B
+ type
+ io_capability_reply_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+ capability*: uint8
+ oob_data*: uint8
+ authentication*: uint8
+
+ const
+ IO_CAPABILITY_REPLY_CP_SIZE* = 9
+ OCF_USER_CONFIRM_REPLY* = 0x0000002C
+ type
+ user_confirm_reply_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+
+ const
+ USER_CONFIRM_REPLY_CP_SIZE* = 6
+ OCF_USER_CONFIRM_NEG_REPLY* = 0x0000002D
+ OCF_USER_PASSKEY_REPLY* = 0x0000002E
+ type
+ user_passkey_reply_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+ passkey*: uint32
+
+ const
+ USER_PASSKEY_REPLY_CP_SIZE* = 10
+ OCF_USER_PASSKEY_NEG_REPLY* = 0x0000002F
+ OCF_REMOTE_OOB_DATA_REPLY* = 0x00000030
+ type
+ remote_oob_data_reply_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+ hash*: array[16, uint8]
+ randomizer*: array[16, uint8]
+
+ const
+ REMOTE_OOB_DATA_REPLY_CP_SIZE* = 38
+ OCF_REMOTE_OOB_DATA_NEG_REPLY* = 0x00000033
+ OCF_IO_CAPABILITY_NEG_REPLY* = 0x00000034
+ type
+ io_capability_neg_reply_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+ reason*: uint8
+
+ const
+ IO_CAPABILITY_NEG_REPLY_CP_SIZE* = 7
+ OCF_CREATE_PHYSICAL_LINK* = 0x00000035
+ type
+ create_physical_link_cp* = object {.packed.}
+ handle*: uint8
+ key_length*: uint8
+ key_type*: uint8
+ key*: array[32, uint8]
+
+ const
+ CREATE_PHYSICAL_LINK_CP_SIZE* = 35
+ OCF_ACCEPT_PHYSICAL_LINK* = 0x00000036
+ OCF_DISCONNECT_PHYSICAL_LINK* = 0x00000037
+ type
+ disconnect_physical_link_cp* = object {.packed.}
+ handle*: uint8
+ reason*: uint8
+
+ const
+ DISCONNECT_PHYSICAL_LINK_CP_SIZE* = 2
+ OCF_CREATE_LOGICAL_LINK* = 0x00000038
+ type
+ create_logical_link_cp* = object {.packed.}
+ handle*: uint8
+ tx_flow*: array[16, uint8]
+ rx_flow*: array[16, uint8]
+
+ const
+ CREATE_LOGICAL_LINK_CP_SIZE* = 33
+ OCF_ACCEPT_LOGICAL_LINK* = 0x00000039
+ OCF_DISCONNECT_LOGICAL_LINK* = 0x0000003A
+ type
+ disconnect_logical_link_cp* = object {.packed.}
+ handle*: uint16
+
+ const
+ DISCONNECT_LOGICAL_LINK_CP_SIZE* = 2
+ OCF_LOGICAL_LINK_CANCEL* = 0x0000003B
+ type
+ cancel_logical_link_cp* = object {.packed.}
+ handle*: uint8
+ tx_flow_id*: uint8
+
+ const
+ LOGICAL_LINK_CANCEL_CP_SIZE* = 2
+ type
+ cancel_logical_link_rp* = object {.packed.}
+ status*: uint8
+ handle*: uint8
+ tx_flow_id*: uint8
+
+ const
+ LOGICAL_LINK_CANCEL_RP_SIZE* = 3
+ OCF_FLOW_SPEC_MODIFY* = 0x0000003C
+ # Link Policy
+ const
+ OGF_LINK_POLICY* = 0x00000002
+ OCF_HOLD_MODE* = 0x00000001
+ type
+ hold_mode_cp* = object {.packed.}
+ handle*: uint16
+ max_interval*: uint16
+ min_interval*: uint16
+
+ const
+ HOLD_MODE_CP_SIZE* = 6
+ OCF_SNIFF_MODE* = 0x00000003
+ type
+ sniff_mode_cp* = object {.packed.}
+ handle*: uint16
+ max_interval*: uint16
+ min_interval*: uint16
+ attempt*: uint16
+ timeout*: uint16
+
+ const
+ SNIFF_MODE_CP_SIZE* = 10
+ OCF_EXIT_SNIFF_MODE* = 0x00000004
+ type
+ exit_sniff_mode_cp* = object {.packed.}
+ handle*: uint16
+
+ const
+ EXIT_SNIFF_MODE_CP_SIZE* = 2
+ OCF_PARK_MODE* = 0x00000005
+ type
+ park_mode_cp* = object {.packed.}
+ handle*: uint16
+ max_interval*: uint16
+ min_interval*: uint16
+
+ const
+ PARK_MODE_CP_SIZE* = 6
+ OCF_EXIT_PARK_MODE* = 0x00000006
+ type
+ exit_park_mode_cp* = object {.packed.}
+ handle*: uint16
+
+ const
+ EXIT_PARK_MODE_CP_SIZE* = 2
+ OCF_QOS_SETUP* = 0x00000007
+ type
+ hci_qos* = object {.packed.}
+ service_type*: uint8 # 1 = best effort
+ token_rate*: uint32 # Byte per seconds
+ peak_bandwidth*: uint32 # Byte per seconds
+ latency*: uint32 # Microseconds
+ delay_variation*: uint32 # Microseconds
+
+ const
+ HCI_QOS_CP_SIZE* = 17
+ type
+ qos_setup_cp* = object {.packed.}
+ handle*: uint16
+ flags*: uint8 # Reserved
+ qos*: hci_qos
+
+ const
+ QOS_SETUP_CP_SIZE* = (3 + HCI_QOS_CP_SIZE)
+ OCF_ROLE_DISCOVERY* = 0x00000009
+ type
+ role_discovery_cp* = object {.packed.}
+ handle*: uint16
+
+ const
+ ROLE_DISCOVERY_CP_SIZE* = 2
+ type
+ role_discovery_rp* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ role*: uint8
+
+ const
+ ROLE_DISCOVERY_RP_SIZE* = 4
+ OCF_SWITCH_ROLE* = 0x0000000B
+ type
+ switch_role_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+ role*: uint8
+
+ const
+ SWITCH_ROLE_CP_SIZE* = 7
+ OCF_READ_LINK_POLICY* = 0x0000000C
+ type
+ read_link_policy_cp* = object {.packed.}
+ handle*: uint16
+
+ const
+ READ_LINK_POLICY_CP_SIZE* = 2
+ type
+ read_link_policy_rp* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ policy*: uint16
+
+ const
+ READ_LINK_POLICY_RP_SIZE* = 5
+ OCF_WRITE_LINK_POLICY* = 0x0000000D
+ type
+ write_link_policy_cp* = object {.packed.}
+ handle*: uint16
+ policy*: uint16
+
+ const
+ WRITE_LINK_POLICY_CP_SIZE* = 4
+ type
+ write_link_policy_rp* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+
+ const
+ WRITE_LINK_POLICY_RP_SIZE* = 3
+ OCF_READ_DEFAULT_LINK_POLICY* = 0x0000000E
+ OCF_WRITE_DEFAULT_LINK_POLICY* = 0x0000000F
+ OCF_FLOW_SPECIFICATION* = 0x00000010
+ OCF_SNIFF_SUBRATING* = 0x00000011
+ type
+ sniff_subrating_cp* = object {.packed.}
+ handle*: uint16
+ max_latency*: uint16
+ min_remote_timeout*: uint16
+ min_local_timeout*: uint16
+
+ const
+ SNIFF_SUBRATING_CP_SIZE* = 8
+ # Host Controller and Baseband
+ const
+ OGF_HOST_CTL* = 0x00000003
+ OCF_SET_EVENT_MASK* = 0x00000001
+ type
+ set_event_mask_cp* = object {.packed.}
+ mask*: array[8, uint8]
+
+ const
+ SET_EVENT_MASK_CP_SIZE* = 8
+ OCF_RESET* = 0x00000003
+ OCF_SET_EVENT_FLT* = 0x00000005
+ type
+ set_event_flt_cp* = object {.packed.}
+ flt_type*: uint8
+ cond_type*: uint8
+ condition*: array[0, uint8]
+
+ const
+ SET_EVENT_FLT_CP_SIZE* = 2
+ # Filter types
+ const
+ FLT_CLEAR_ALL* = 0x00000000
+ FLT_INQ_RESULT* = 0x00000001
+ FLT_CONN_SETUP* = 0x00000002
+ # INQ_RESULT Condition types
+ const
+ INQ_RESULT_RETURN_ALL* = 0x00000000
+ INQ_RESULT_RETURN_CLASS* = 0x00000001
+ INQ_RESULT_RETURN_BDADDR* = 0x00000002
+ # CONN_SETUP Condition types
+ const
+ CONN_SETUP_ALLOW_ALL* = 0x00000000
+ CONN_SETUP_ALLOW_CLASS* = 0x00000001
+ CONN_SETUP_ALLOW_BDADDR* = 0x00000002
+ # CONN_SETUP Conditions
+ const
+ CONN_SETUP_AUTO_OFF* = 0x00000001
+ CONN_SETUP_AUTO_ON* = 0x00000002
+ OCF_FLUSH* = 0x00000008
+ OCF_READ_PIN_TYPE* = 0x00000009
+ type
+ read_pin_type_rp* = object {.packed.}
+ status*: uint8
+ pin_type*: uint8
+
+ const
+ READ_PIN_TYPE_RP_SIZE* = 2
+ OCF_WRITE_PIN_TYPE* = 0x0000000A
+ type
+ write_pin_type_cp* = object {.packed.}
+ pin_type*: uint8
+
+ const
+ WRITE_PIN_TYPE_CP_SIZE* = 1
+ OCF_CREATE_NEW_UNIT_KEY* = 0x0000000B
+ OCF_READ_STORED_LINK_KEY* = 0x0000000D
+ type
+ read_stored_link_key_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+ read_all*: uint8
+
+ const
+ READ_STORED_LINK_KEY_CP_SIZE* = 7
+ type
+ read_stored_link_key_rp* = object {.packed.}
+ status*: uint8
+ max_keys*: uint16
+ num_keys*: uint16
+
+ const
+ READ_STORED_LINK_KEY_RP_SIZE* = 5
+ OCF_WRITE_STORED_LINK_KEY* = 0x00000011
+ type
+ write_stored_link_key_cp* = object {.packed.}
+ num_keys*: uint8 # variable length part
+
+ const
+ WRITE_STORED_LINK_KEY_CP_SIZE* = 1
+ type
+ write_stored_link_key_rp* = object {.packed.}
+ status*: uint8
+ num_keys*: uint8
+
+ const
+ READ_WRITE_LINK_KEY_RP_SIZE* = 2
+ OCF_DELETE_STORED_LINK_KEY* = 0x00000012
+ type
+ delete_stored_link_key_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+ delete_all*: uint8
+
+ const
+ DELETE_STORED_LINK_KEY_CP_SIZE* = 7
+ type
+ delete_stored_link_key_rp* = object {.packed.}
+ status*: uint8
+ num_keys*: uint16
+
+ const
+ DELETE_STORED_LINK_KEY_RP_SIZE* = 3
+ HCI_MAX_NAME_LENGTH* = 248
+ OCF_CHANGE_LOCAL_NAME* = 0x00000013
+ type
+ change_local_name_cp* = object {.packed.}
+ name*: array[HCI_MAX_NAME_LENGTH, uint8]
+
+ const
+ CHANGE_LOCAL_NAME_CP_SIZE* = 248
+ OCF_READ_LOCAL_NAME* = 0x00000014
+ type
+ read_local_name_rp* = object {.packed.}
+ status*: uint8
+ name*: array[HCI_MAX_NAME_LENGTH, uint8]
+
+ const
+ READ_LOCAL_NAME_RP_SIZE* = 249
+ OCF_READ_CONN_ACCEPT_TIMEOUT* = 0x00000015
+ type
+ read_conn_accept_timeout_rp* = object {.packed.}
+ status*: uint8
+ timeout*: uint16
+
+ const
+ READ_CONN_ACCEPT_TIMEOUT_RP_SIZE* = 3
+ OCF_WRITE_CONN_ACCEPT_TIMEOUT* = 0x00000016
+ type
+ write_conn_accept_timeout_cp* = object {.packed.}
+ timeout*: uint16
+
+ const
+ WRITE_CONN_ACCEPT_TIMEOUT_CP_SIZE* = 2
+ OCF_READ_PAGE_TIMEOUT* = 0x00000017
+ type
+ read_page_timeout_rp* = object {.packed.}
+ status*: uint8
+ timeout*: uint16
+
+ const
+ READ_PAGE_TIMEOUT_RP_SIZE* = 3
+ OCF_WRITE_PAGE_TIMEOUT* = 0x00000018
+ type
+ write_page_timeout_cp* = object {.packed.}
+ timeout*: uint16
+
+ const
+ WRITE_PAGE_TIMEOUT_CP_SIZE* = 2
+ OCF_READ_SCAN_ENABLE* = 0x00000019
+ type
+ read_scan_enable_rp* = object {.packed.}
+ status*: uint8
+ enable*: uint8
+
+ const
+ READ_SCAN_ENABLE_RP_SIZE* = 2
+ OCF_WRITE_SCAN_ENABLE* = 0x0000001A
+ SCAN_DISABLED* = 0x00000000
+ SCAN_INQUIRY* = 0x00000001
+ SCAN_PAGE* = 0x00000002
+ OCF_READ_PAGE_ACTIVITY* = 0x0000001B
+ type
+ read_page_activity_rp* = object {.packed.}
+ status*: uint8
+ interval*: uint16
+ window*: uint16
+
+ const
+ READ_PAGE_ACTIVITY_RP_SIZE* = 5
+ OCF_WRITE_PAGE_ACTIVITY* = 0x0000001C
+ type
+ write_page_activity_cp* = object {.packed.}
+ interval*: uint16
+ window*: uint16
+
+ const
+ WRITE_PAGE_ACTIVITY_CP_SIZE* = 4
+ OCF_READ_INQ_ACTIVITY* = 0x0000001D
+ type
+ read_inq_activity_rp* = object {.packed.}
+ status*: uint8
+ interval*: uint16
+ window*: uint16
+
+ const
+ READ_INQ_ACTIVITY_RP_SIZE* = 5
+ OCF_WRITE_INQ_ACTIVITY* = 0x0000001E
+ type
+ write_inq_activity_cp* = object {.packed.}
+ interval*: uint16
+ window*: uint16
+
+ const
+ WRITE_INQ_ACTIVITY_CP_SIZE* = 4
+ OCF_READ_AUTH_ENABLE* = 0x0000001F
+ OCF_WRITE_AUTH_ENABLE* = 0x00000020
+ AUTH_DISABLED* = 0x00000000
+ AUTH_ENABLED* = 0x00000001
+ OCF_READ_ENCRYPT_MODE* = 0x00000021
+ OCF_WRITE_ENCRYPT_MODE* = 0x00000022
+ ENCRYPT_DISABLED* = 0x00000000
+ ENCRYPT_P2P* = 0x00000001
+ ENCRYPT_BOTH* = 0x00000002
+ OCF_READ_CLASS_OF_DEV* = 0x00000023
+ type
+ read_class_of_dev_rp* = object {.packed.}
+ status*: uint8
+ dev_class*: array[3, uint8]
+
+ const
+ READ_CLASS_OF_DEV_RP_SIZE* = 4
+ OCF_WRITE_CLASS_OF_DEV* = 0x00000024
+ type
+ write_class_of_dev_cp* = object {.packed.}
+ dev_class*: array[3, uint8]
+
+ const
+ WRITE_CLASS_OF_DEV_CP_SIZE* = 3
+ OCF_READ_VOICE_SETTING* = 0x00000025
+ type
+ read_voice_setting_rp* = object {.packed.}
+ status*: uint8
+ voice_setting*: uint16
+
+ const
+ READ_VOICE_SETTING_RP_SIZE* = 3
+ OCF_WRITE_VOICE_SETTING* = 0x00000026
+ type
+ write_voice_setting_cp* = object {.packed.}
+ voice_setting*: uint16
+
+ const
+ WRITE_VOICE_SETTING_CP_SIZE* = 2
+ OCF_READ_AUTOMATIC_FLUSH_TIMEOUT* = 0x00000027
+ OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT* = 0x00000028
+ OCF_READ_NUM_BROADCAST_RETRANS* = 0x00000029
+ OCF_WRITE_NUM_BROADCAST_RETRANS* = 0x0000002A
+ OCF_READ_HOLD_MODE_ACTIVITY* = 0x0000002B
+ OCF_WRITE_HOLD_MODE_ACTIVITY* = 0x0000002C
+ OCF_READ_TRANSMIT_POWER_LEVEL* = 0x0000002D
+ type
+ read_transmit_power_level_cp* = object {.packed.}
+ handle*: uint16
+ `type`*: uint8
+
+ const
+ READ_TRANSMIT_POWER_LEVEL_CP_SIZE* = 3
+ type
+ read_transmit_power_level_rp* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ level*: int8
+
+ const
+ READ_TRANSMIT_POWER_LEVEL_RP_SIZE* = 4
+ OCF_READ_SYNC_FLOW_ENABLE* = 0x0000002E
+ OCF_WRITE_SYNC_FLOW_ENABLE* = 0x0000002F
+ OCF_SET_CONTROLLER_TO_HOST_FC* = 0x00000031
+ OCF_HOST_BUFFER_SIZE* = 0x00000033
+ type
+ host_buffer_size_cp* = object {.packed.}
+ acl_mtu*: uint16
+ sco_mtu*: uint8
+ acl_max_pkt*: uint16
+ sco_max_pkt*: uint16
+
+ const
+ HOST_BUFFER_SIZE_CP_SIZE* = 7
+ OCF_HOST_NUM_COMP_PKTS* = 0x00000035
+ type
+ host_num_comp_pkts_cp* = object {.packed.}
+ num_hndl*: uint8 # variable length part
+
+ const
+ HOST_NUM_COMP_PKTS_CP_SIZE* = 1
+ OCF_READ_LINK_SUPERVISION_TIMEOUT* = 0x00000036
+ type
+ read_link_supervision_timeout_rp* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ timeout*: uint16
+
+ const
+ READ_LINK_SUPERVISION_TIMEOUT_RP_SIZE* = 5
+ OCF_WRITE_LINK_SUPERVISION_TIMEOUT* = 0x00000037
+ type
+ write_link_supervision_timeout_cp* = object {.packed.}
+ handle*: uint16
+ timeout*: uint16
+
+ const
+ WRITE_LINK_SUPERVISION_TIMEOUT_CP_SIZE* = 4
+ type
+ write_link_supervision_timeout_rp* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+
+ const
+ WRITE_LINK_SUPERVISION_TIMEOUT_RP_SIZE* = 3
+ OCF_READ_NUM_SUPPORTED_IAC* = 0x00000038
+ MAX_IAC_LAP* = 0x00000040
+ OCF_READ_CURRENT_IAC_LAP* = 0x00000039
+ type
+ read_current_iac_lap_rp* = object {.packed.}
+ status*: uint8
+ num_current_iac*: uint8
+ lap*: array[MAX_IAC_LAP, array[3, uint8]]
+
+ const
+ READ_CURRENT_IAC_LAP_RP_SIZE* = 2 + 3 * MAX_IAC_LAP
+ OCF_WRITE_CURRENT_IAC_LAP* = 0x0000003A
+ type
+ write_current_iac_lap_cp* = object {.packed.}
+ num_current_iac*: uint8
+ lap*: array[MAX_IAC_LAP, array[3, uint8]]
+
+ const
+ WRITE_CURRENT_IAC_LAP_CP_SIZE* = 1 + 3 * MAX_IAC_LAP
+ OCF_READ_PAGE_SCAN_PERIOD_MODE* = 0x0000003B
+ OCF_WRITE_PAGE_SCAN_PERIOD_MODE* = 0x0000003C
+ OCF_READ_PAGE_SCAN_MODE* = 0x0000003D
+ OCF_WRITE_PAGE_SCAN_MODE* = 0x0000003E
+ OCF_SET_AFH_CLASSIFICATION* = 0x0000003F
+ type
+ set_afh_classification_cp* = object {.packed.}
+ map*: array[10, uint8]
+
+ const
+ SET_AFH_CLASSIFICATION_CP_SIZE* = 10
+ type
+ set_afh_classification_rp* = object {.packed.}
+ status*: uint8
+
+ const
+ SET_AFH_CLASSIFICATION_RP_SIZE* = 1
+ OCF_READ_INQUIRY_SCAN_TYPE* = 0x00000042
+ type
+ read_inquiry_scan_type_rp* = object {.packed.}
+ status*: uint8
+ `type`*: uint8
+
+ const
+ READ_INQUIRY_SCAN_TYPE_RP_SIZE* = 2
+ OCF_WRITE_INQUIRY_SCAN_TYPE* = 0x00000043
+ type
+ write_inquiry_scan_type_cp* = object {.packed.}
+ `type`*: uint8
+
+ const
+ WRITE_INQUIRY_SCAN_TYPE_CP_SIZE* = 1
+ type
+ write_inquiry_scan_type_rp* = object {.packed.}
+ status*: uint8
+
+ const
+ WRITE_INQUIRY_SCAN_TYPE_RP_SIZE* = 1
+ OCF_READ_INQUIRY_MODE* = 0x00000044
+ type
+ read_inquiry_mode_rp* = object {.packed.}
+ status*: uint8
+ mode*: uint8
+
+ const
+ READ_INQUIRY_MODE_RP_SIZE* = 2
+ OCF_WRITE_INQUIRY_MODE* = 0x00000045
+ type
+ write_inquiry_mode_cp* = object {.packed.}
+ mode*: uint8
+
+ const
+ WRITE_INQUIRY_MODE_CP_SIZE* = 1
+ type
+ write_inquiry_mode_rp* = object {.packed.}
+ status*: uint8
+
+ const
+ WRITE_INQUIRY_MODE_RP_SIZE* = 1
+ OCF_READ_PAGE_SCAN_TYPE* = 0x00000046
+ OCF_WRITE_PAGE_SCAN_TYPE* = 0x00000047
+ PAGE_SCAN_TYPE_STANDARD* = 0x00000000
+ PAGE_SCAN_TYPE_INTERLACED* = 0x00000001
+ OCF_READ_AFH_MODE* = 0x00000048
+ type
+ read_afh_mode_rp* = object {.packed.}
+ status*: uint8
+ mode*: uint8
+
+ const
+ READ_AFH_MODE_RP_SIZE* = 2
+ OCF_WRITE_AFH_MODE* = 0x00000049
+ type
+ write_afh_mode_cp* = object {.packed.}
+ mode*: uint8
+
+ const
+ WRITE_AFH_MODE_CP_SIZE* = 1
+ type
+ write_afh_mode_rp* = object {.packed.}
+ status*: uint8
+
+ const
+ WRITE_AFH_MODE_RP_SIZE* = 1
+ HCI_MAX_EIR_LENGTH* = 240
+ OCF_READ_EXT_INQUIRY_RESPONSE* = 0x00000051
+ type
+ read_ext_inquiry_response_rp* = object {.packed.}
+ status*: uint8
+ fec*: uint8
+ data*: array[HCI_MAX_EIR_LENGTH, uint8]
+
+ const
+ READ_EXT_INQUIRY_RESPONSE_RP_SIZE* = 242
+ OCF_WRITE_EXT_INQUIRY_RESPONSE* = 0x00000052
+ type
+ write_ext_inquiry_response_cp* = object {.packed.}
+ fec*: uint8
+ data*: array[HCI_MAX_EIR_LENGTH, uint8]
+
+ const
+ WRITE_EXT_INQUIRY_RESPONSE_CP_SIZE* = 241
+ type
+ write_ext_inquiry_response_rp* = object {.packed.}
+ status*: uint8
+
+ const
+ WRITE_EXT_INQUIRY_RESPONSE_RP_SIZE* = 1
+ OCF_REFRESH_ENCRYPTION_KEY* = 0x00000053
+ type
+ refresh_encryption_key_cp* = object {.packed.}
+ handle*: uint16
+
+ const
+ REFRESH_ENCRYPTION_KEY_CP_SIZE* = 2
+ type
+ refresh_encryption_key_rp* = object {.packed.}
+ status*: uint8
+
+ const
+ REFRESH_ENCRYPTION_KEY_RP_SIZE* = 1
+ OCF_READ_SIMPLE_PAIRING_MODE* = 0x00000055
+ type
+ read_simple_pairing_mode_rp* = object {.packed.}
+ status*: uint8
+ mode*: uint8
+
+ const
+ READ_SIMPLE_PAIRING_MODE_RP_SIZE* = 2
+ OCF_WRITE_SIMPLE_PAIRING_MODE* = 0x00000056
+ type
+ write_simple_pairing_mode_cp* = object {.packed.}
+ mode*: uint8
+
+ const
+ WRITE_SIMPLE_PAIRING_MODE_CP_SIZE* = 1
+ type
+ write_simple_pairing_mode_rp* = object {.packed.}
+ status*: uint8
+
+ const
+ WRITE_SIMPLE_PAIRING_MODE_RP_SIZE* = 1
+ OCF_READ_LOCAL_OOB_DATA* = 0x00000057
+ type
+ read_local_oob_data_rp* = object {.packed.}
+ status*: uint8
+ hash*: array[16, uint8]
+ randomizer*: array[16, uint8]
+
+ const
+ READ_LOCAL_OOB_DATA_RP_SIZE* = 33
+ OCF_READ_INQ_RESPONSE_TX_POWER_LEVEL* = 0x00000058
+ type
+ read_inq_response_tx_power_level_rp* = object {.packed.}
+ status*: uint8
+ level*: int8
+
+ const
+ READ_INQ_RESPONSE_TX_POWER_LEVEL_RP_SIZE* = 2
+ OCF_READ_INQUIRY_TRANSMIT_POWER_LEVEL* = 0x00000058
+ type
+ read_inquiry_transmit_power_level_rp* = object {.packed.}
+ status*: uint8
+ level*: int8
+
+ const
+ READ_INQUIRY_TRANSMIT_POWER_LEVEL_RP_SIZE* = 2
+ OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL* = 0x00000059
+ type
+ write_inquiry_transmit_power_level_cp* = object {.packed.}
+ level*: int8
+
+ const
+ WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_CP_SIZE* = 1
+ type
+ write_inquiry_transmit_power_level_rp* = object {.packed.}
+ status*: uint8
+
+ const
+ WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_RP_SIZE* = 1
+ OCF_READ_DEFAULT_ERROR_DATA_REPORTING* = 0x0000005A
+ type
+ read_default_error_data_reporting_rp* = object {.packed.}
+ status*: uint8
+ reporting*: uint8
+
+ const
+ READ_DEFAULT_ERROR_DATA_REPORTING_RP_SIZE* = 2
+ OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING* = 0x0000005B
+ type
+ write_default_error_data_reporting_cp* = object {.packed.}
+ reporting*: uint8
+
+ const
+ WRITE_DEFAULT_ERROR_DATA_REPORTING_CP_SIZE* = 1
+ type
+ write_default_error_data_reporting_rp* = object {.packed.}
+ status*: uint8
+
+ const
+ WRITE_DEFAULT_ERROR_DATA_REPORTING_RP_SIZE* = 1
+ OCF_ENHANCED_FLUSH* = 0x0000005F
+ type
+ enhanced_flush_cp* = object {.packed.}
+ handle*: uint16
+ `type`*: uint8
+
+ const
+ ENHANCED_FLUSH_CP_SIZE* = 3
+ OCF_SEND_KEYPRESS_NOTIFY* = 0x00000060
+ type
+ send_keypress_notify_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+ `type`*: uint8
+
+ const
+ SEND_KEYPRESS_NOTIFY_CP_SIZE* = 7
+ type
+ send_keypress_notify_rp* = object {.packed.}
+ status*: uint8
+
+ const
+ SEND_KEYPRESS_NOTIFY_RP_SIZE* = 1
+ OCF_READ_LOGICAL_LINK_ACCEPT_TIMEOUT* = 0x00000061
+ type
+ read_log_link_accept_timeout_rp* = object {.packed.}
+ status*: uint8
+ timeout*: uint16
+
+ const
+ READ_LOGICAL_LINK_ACCEPT_TIMEOUT_RP_SIZE* = 3
+ OCF_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT* = 0x00000062
+ type
+ write_log_link_accept_timeout_cp* = object {.packed.}
+ timeout*: uint16
+
+ const
+ WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_CP_SIZE* = 2
+ OCF_SET_EVENT_MASK_PAGE_2* = 0x00000063
+ OCF_READ_LOCATION_DATA* = 0x00000064
+ OCF_WRITE_LOCATION_DATA* = 0x00000065
+ OCF_READ_FLOW_CONTROL_MODE* = 0x00000066
+ OCF_WRITE_FLOW_CONTROL_MODE* = 0x00000067
+ OCF_READ_ENHANCED_TRANSMIT_POWER_LEVEL* = 0x00000068
+ type
+ read_enhanced_transmit_power_level_rp* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ level_gfsk*: int8
+ level_dqpsk*: int8
+ level_8dpsk*: int8
+
+ const
+ READ_ENHANCED_TRANSMIT_POWER_LEVEL_RP_SIZE* = 6
+ OCF_READ_BEST_EFFORT_FLUSH_TIMEOUT* = 0x00000069
+ type
+ read_best_effort_flush_timeout_rp* = object {.packed.}
+ status*: uint8
+ timeout*: uint32
+
+ const
+ READ_BEST_EFFORT_FLUSH_TIMEOUT_RP_SIZE* = 5
+ OCF_WRITE_BEST_EFFORT_FLUSH_TIMEOUT* = 0x0000006A
+ type
+ write_best_effort_flush_timeout_cp* = object {.packed.}
+ handle*: uint16
+ timeout*: uint32
+
+ const
+ WRITE_BEST_EFFORT_FLUSH_TIMEOUT_CP_SIZE* = 6
+ type
+ write_best_effort_flush_timeout_rp* = object {.packed.}
+ status*: uint8
+
+ const
+ WRITE_BEST_EFFORT_FLUSH_TIMEOUT_RP_SIZE* = 1
+ OCF_READ_LE_HOST_SUPPORTED* = 0x0000006C
+ type
+ read_le_host_supported_rp* = object {.packed.}
+ status*: uint8
+ le*: uint8
+ simul*: uint8
+
+ const
+ READ_LE_HOST_SUPPORTED_RP_SIZE* = 3
+ OCF_WRITE_LE_HOST_SUPPORTED* = 0x0000006D
+ type
+ write_le_host_supported_cp* = object {.packed.}
+ le*: uint8
+ simul*: uint8
+
+ const
+ WRITE_LE_HOST_SUPPORTED_CP_SIZE* = 2
+ # Informational Parameters
+ const
+ OGF_INFO_PARAM* = 0x00000004
+ OCF_READ_LOCAL_VERSION* = 0x00000001
+ type
+ read_local_version_rp* = object {.packed.}
+ status*: uint8
+ hci_ver*: uint8
+ hci_rev*: uint16
+ lmp_ver*: uint8
+ manufacturer*: uint16
+ lmp_subver*: uint16
+
+ const
+ READ_LOCAL_VERSION_RP_SIZE* = 9
+ OCF_READ_LOCAL_COMMANDS* = 0x00000002
+ type
+ read_local_commands_rp* = object {.packed.}
+ status*: uint8
+ commands*: array[64, uint8]
+
+ const
+ READ_LOCAL_COMMANDS_RP_SIZE* = 65
+ OCF_READ_LOCAL_FEATURES* = 0x00000003
+ type
+ read_local_features_rp* = object {.packed.}
+ status*: uint8
+ features*: array[8, uint8]
+
+ const
+ READ_LOCAL_FEATURES_RP_SIZE* = 9
+ OCF_READ_LOCAL_EXT_FEATURES* = 0x00000004
+ type
+ read_local_ext_features_cp* = object {.packed.}
+ page_num*: uint8
+
+ const
+ READ_LOCAL_EXT_FEATURES_CP_SIZE* = 1
+ type
+ read_local_ext_features_rp* = object {.packed.}
+ status*: uint8
+ page_num*: uint8
+ max_page_num*: uint8
+ features*: array[8, uint8]
+
+ const
+ READ_LOCAL_EXT_FEATURES_RP_SIZE* = 11
+ OCF_READ_BUFFER_SIZE* = 0x00000005
+ type
+ read_buffer_size_rp* = object {.packed.}
+ status*: uint8
+ acl_mtu*: uint16
+ sco_mtu*: uint8
+ acl_max_pkt*: uint16
+ sco_max_pkt*: uint16
+
+ const
+ READ_BUFFER_SIZE_RP_SIZE* = 8
+ OCF_READ_COUNTRY_CODE* = 0x00000007
+ OCF_READ_BD_ADDR* = 0x00000009
+ type
+ read_bd_addr_rp* = object {.packed.}
+ status*: uint8
+ bdaddr*: bdaddr_t
+
+ const
+ READ_BD_ADDR_RP_SIZE* = 7
+ # Status params
+ const
+ OGF_STATUS_PARAM* = 0x00000005
+ OCF_READ_FAILED_CONTACT_COUNTER* = 0x00000001
+ type
+ read_failed_contact_counter_rp* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ counter*: uint8
+
+ const
+ READ_FAILED_CONTACT_COUNTER_RP_SIZE* = 4
+ OCF_RESET_FAILED_CONTACT_COUNTER* = 0x00000002
+ type
+ reset_failed_contact_counter_rp* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+
+ const
+ RESET_FAILED_CONTACT_COUNTER_RP_SIZE* = 4
+ OCF_READ_LINK_QUALITY* = 0x00000003
+ type
+ read_link_quality_rp* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ link_quality*: uint8
+
+ const
+ READ_LINK_QUALITY_RP_SIZE* = 4
+ OCF_READ_RSSI* = 0x00000005
+ type
+ read_rssi_rp* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ rssi*: int8
+
+ const
+ READ_RSSI_RP_SIZE* = 4
+ OCF_READ_AFH_MAP* = 0x00000006
+ type
+ read_afh_map_rp* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ mode*: uint8
+ map*: array[10, uint8]
+
+ const
+ READ_AFH_MAP_RP_SIZE* = 14
+ OCF_READ_CLOCK* = 0x00000007
+ type
+ read_clock_cp* = object {.packed.}
+ handle*: uint16
+ which_clock*: uint8
+
+ const
+ READ_CLOCK_CP_SIZE* = 3
+ type
+ read_clock_rp* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ clock*: uint32
+ accuracy*: uint16
+
+ const
+ READ_CLOCK_RP_SIZE* = 9
+ OCF_READ_LOCAL_AMP_INFO* = 0x00000009
+ type
+ read_local_amp_info_rp* = object {.packed.}
+ status*: uint8
+ amp_status*: uint8
+ total_bandwidth*: uint32
+ max_guaranteed_bandwidth*: uint32
+ min_latency*: uint32
+ max_pdu_size*: uint32
+ controller_type*: uint8
+ pal_caps*: uint16
+ max_amp_assoc_length*: uint16
+ max_flush_timeout*: uint32
+ best_effort_flush_timeout*: uint32
+
+ const
+ READ_LOCAL_AMP_INFO_RP_SIZE* = 31
+ OCF_READ_LOCAL_AMP_ASSOC* = 0x0000000A
+ type
+ read_local_amp_assoc_cp* = object {.packed.}
+ handle*: uint8
+ len_so_far*: uint16
+ max_len*: uint16
+
+ read_local_amp_assoc_rp* = object {.packed.}
+ status*: uint8
+ handle*: uint8
+ rem_len*: uint16
+ frag*: array[0, uint8]
+
+ const
+ OCF_WRITE_REMOTE_AMP_ASSOC* = 0x0000000B
+ type
+ write_remote_amp_assoc_cp* = object {.packed.}
+ handle*: uint8
+ length_so_far*: uint16
+ assoc_length*: uint16
+ fragment*: array[HCI_MAX_NAME_LENGTH, uint8]
+
+ const
+ WRITE_REMOTE_AMP_ASSOC_CP_SIZE* = 253
+ type
+ write_remote_amp_assoc_rp* = object {.packed.}
+ status*: uint8
+ handle*: uint8
+
+ const
+ WRITE_REMOTE_AMP_ASSOC_RP_SIZE* = 2
+ # Testing commands
+ const
+ OGF_TESTING_CMD* = 0x0000003E
+ OCF_READ_LOOPBACK_MODE* = 0x00000001
+ OCF_WRITE_LOOPBACK_MODE* = 0x00000002
+ OCF_ENABLE_DEVICE_UNDER_TEST_MODE* = 0x00000003
+ OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE* = 0x00000004
+ type
+ write_simple_pairing_debug_mode_cp* = object {.packed.}
+ mode*: uint8
+
+ const
+ WRITE_SIMPLE_PAIRING_DEBUG_MODE_CP_SIZE* = 1
+ type
+ write_simple_pairing_debug_mode_rp* = object {.packed.}
+ status*: uint8
+
+ const
+ WRITE_SIMPLE_PAIRING_DEBUG_MODE_RP_SIZE* = 1
+ # LE commands
+ const
+ OGF_LE_CTL* = 0x00000008
+ OCF_LE_SET_EVENT_MASK* = 0x00000001
+ type
+ le_set_event_mask_cp* = object {.packed.}
+ mask*: array[8, uint8]
+
+ const
+ LE_SET_EVENT_MASK_CP_SIZE* = 8
+ OCF_LE_READ_BUFFER_SIZE* = 0x00000002
+ type
+ le_read_buffer_size_rp* = object {.packed.}
+ status*: uint8
+ pkt_len*: uint16
+ max_pkt*: uint8
+
+ const
+ LE_READ_BUFFER_SIZE_RP_SIZE* = 4
+ OCF_LE_READ_LOCAL_SUPPORTED_FEATURES* = 0x00000003
+ type
+ le_read_local_supported_features_rp* = object {.packed.}
+ status*: uint8
+ features*: array[8, uint8]
+
+ const
+ LE_READ_LOCAL_SUPPORTED_FEATURES_RP_SIZE* = 9
+ OCF_LE_SET_RANDOM_ADDRESS* = 0x00000005
+ type
+ le_set_random_address_cp* = object {.packed.}
+ bdaddr*: bdaddr_t
+
+ const
+ LE_SET_RANDOM_ADDRESS_CP_SIZE* = 6
+ OCF_LE_SET_ADVERTISING_PARAMETERS* = 0x00000006
+ type
+ le_set_advertising_parameters_cp* = object {.packed.}
+ min_interval*: uint16
+ max_interval*: uint16
+ advtype*: uint8
+ own_bdaddr_type*: uint8
+ direct_bdaddr_type*: uint8
+ direct_bdaddr*: bdaddr_t
+ chan_map*: uint8
+ filter*: uint8
+
+ const
+ LE_SET_ADVERTISING_PARAMETERS_CP_SIZE* = 15
+ OCF_LE_READ_ADVERTISING_CHANNEL_TX_POWER* = 0x00000007
+ type
+ le_read_advertising_channel_tx_power_rp* = object {.packed.}
+ status*: uint8
+ level*: uint8
+
+ const
+ LE_READ_ADVERTISING_CHANNEL_TX_POWER_RP_SIZE* = 2
+ OCF_LE_SET_ADVERTISING_DATA* = 0x00000008
+ type
+ le_set_advertising_data_cp* = object {.packed.}
+ length*: uint8
+ data*: array[31, uint8]
+
+ const
+ LE_SET_ADVERTISING_DATA_CP_SIZE* = 32
+ OCF_LE_SET_SCAN_RESPONSE_DATA* = 0x00000009
+ type
+ le_set_scan_response_data_cp* = object {.packed.}
+ length*: uint8
+ data*: array[31, uint8]
+
+ const
+ LE_SET_SCAN_RESPONSE_DATA_CP_SIZE* = 32
+ OCF_LE_SET_ADVERTISE_ENABLE* = 0x0000000A
+ type
+ le_set_advertise_enable_cp* = object {.packed.}
+ enable*: uint8
+
+ const
+ LE_SET_ADVERTISE_ENABLE_CP_SIZE* = 1
+ OCF_LE_SET_SCAN_PARAMETERS* = 0x0000000B
+ type
+ le_set_scan_parameters_cp* = object {.packed.}
+ `type`*: uint8
+ interval*: uint16
+ window*: uint16
+ own_bdaddr_type*: uint8
+ filter*: uint8
+
+ const
+ LE_SET_SCAN_PARAMETERS_CP_SIZE* = 7
+ OCF_LE_SET_SCAN_ENABLE* = 0x0000000C
+ type
+ le_set_scan_enable_cp* = object {.packed.}
+ enable*: uint8
+ filter_dup*: uint8
+
+ const
+ LE_SET_SCAN_ENABLE_CP_SIZE* = 2
+ OCF_LE_CREATE_CONN* = 0x0000000D
+ type
+ le_create_connection_cp* = object {.packed.}
+ interval*: uint16
+ window*: uint16
+ initiator_filter*: uint8
+ peer_bdaddr_type*: uint8
+ peer_bdaddr*: bdaddr_t
+ own_bdaddr_type*: uint8
+ min_interval*: uint16
+ max_interval*: uint16
+ latency*: uint16
+ supervision_timeout*: uint16
+ min_ce_length*: uint16
+ max_ce_length*: uint16
+
+ const
+ LE_CREATE_CONN_CP_SIZE* = 25
+ OCF_LE_CREATE_CONN_CANCEL* = 0x0000000E
+ OCF_LE_READ_WHITE_LIST_SIZE* = 0x0000000F
+ type
+ le_read_white_list_size_rp* = object {.packed.}
+ status*: uint8
+ size*: uint8
+
+ const
+ LE_READ_WHITE_LIST_SIZE_RP_SIZE* = 2
+ OCF_LE_CLEAR_WHITE_LIST* = 0x00000010
+ OCF_LE_ADD_DEVICE_TO_WHITE_LIST* = 0x00000011
+ type
+ le_add_device_to_white_list_cp* = object {.packed.}
+ bdaddr_type*: uint8
+ bdaddr*: bdaddr_t
+
+ const
+ LE_ADD_DEVICE_TO_WHITE_LIST_CP_SIZE* = 7
+ OCF_LE_REMOVE_DEVICE_FROM_WHITE_LIST* = 0x00000012
+ type
+ le_remove_device_from_white_list_cp* = object {.packed.}
+ bdaddr_type*: uint8
+ bdaddr*: bdaddr_t
+
+ const
+ LE_REMOVE_DEVICE_FROM_WHITE_LIST_CP_SIZE* = 7
+ OCF_LE_CONN_UPDATE* = 0x00000013
+ type
+ le_connection_update_cp* = object {.packed.}
+ handle*: uint16
+ min_interval*: uint16
+ max_interval*: uint16
+ latency*: uint16
+ supervision_timeout*: uint16
+ min_ce_length*: uint16
+ max_ce_length*: uint16
+
+ const
+ LE_CONN_UPDATE_CP_SIZE* = 14
+ OCF_LE_SET_HOST_CHANNEL_CLASSIFICATION* = 0x00000014
+ type
+ le_set_host_channel_classification_cp* = object {.packed.}
+ map*: array[5, uint8]
+
+ const
+ LE_SET_HOST_CHANNEL_CLASSIFICATION_CP_SIZE* = 5
+ OCF_LE_READ_CHANNEL_MAP* = 0x00000015
+ type
+ le_read_channel_map_cp* = object {.packed.}
+ handle*: uint16
+
+ const
+ LE_READ_CHANNEL_MAP_CP_SIZE* = 2
+ type
+ le_read_channel_map_rp* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ map*: array[5, uint8]
+
+ const
+ LE_READ_CHANNEL_MAP_RP_SIZE* = 8
+ OCF_LE_READ_REMOTE_USED_FEATURES* = 0x00000016
+ type
+ le_read_remote_used_features_cp* = object {.packed.}
+ handle*: uint16
+
+ const
+ LE_READ_REMOTE_USED_FEATURES_CP_SIZE* = 2
+ OCF_LE_ENCRYPT* = 0x00000017
+ type
+ le_encrypt_cp* = object {.packed.}
+ key*: array[16, uint8]
+ plaintext*: array[16, uint8]
+
+ const
+ LE_ENCRYPT_CP_SIZE* = 32
+ type
+ le_encrypt_rp* = object {.packed.}
+ status*: uint8
+ data*: array[16, uint8]
+
+ const
+ LE_ENCRYPT_RP_SIZE* = 17
+ OCF_LE_RAND* = 0x00000018
+ type
+ le_rand_rp* = object {.packed.}
+ status*: uint8
+ random*: uint64
+
+ const
+ LE_RAND_RP_SIZE* = 9
+ OCF_LE_START_ENCRYPTION* = 0x00000019
+ type
+ le_start_encryption_cp* = object {.packed.}
+ handle*: uint16
+ random*: uint64
+ diversifier*: uint16
+ key*: array[16, uint8]
+
+ const
+ LE_START_ENCRYPTION_CP_SIZE* = 28
+ OCF_LE_LTK_REPLY* = 0x0000001A
+ type
+ le_ltk_reply_cp* = object {.packed.}
+ handle*: uint16
+ key*: array[16, uint8]
+
+ const
+ LE_LTK_REPLY_CP_SIZE* = 18
+ type
+ le_ltk_reply_rp* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+
+ const
+ LE_LTK_REPLY_RP_SIZE* = 3
+ OCF_LE_LTK_NEG_REPLY* = 0x0000001B
+ type
+ le_ltk_neg_reply_cp* = object {.packed.}
+ handle*: uint16
+
+ const
+ LE_LTK_NEG_REPLY_CP_SIZE* = 2
+ type
+ le_ltk_neg_reply_rp* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+
+ const
+ LE_LTK_NEG_REPLY_RP_SIZE* = 3
+ OCF_LE_READ_SUPPORTED_STATES* = 0x0000001C
+ type
+ le_read_supported_states_rp* = object {.packed.}
+ status*: uint8
+ states*: uint64
+
+ const
+ LE_READ_SUPPORTED_STATES_RP_SIZE* = 9
+ OCF_LE_RECEIVER_TEST* = 0x0000001D
+ type
+ le_receiver_test_cp* = object {.packed.}
+ frequency*: uint8
+
+ const
+ LE_RECEIVER_TEST_CP_SIZE* = 1
+ OCF_LE_TRANSMITTER_TEST* = 0x0000001E
+ type
+ le_transmitter_test_cp* = object {.packed.}
+ frequency*: uint8
+ length*: uint8
+ payload*: uint8
+
+ const
+ LE_TRANSMITTER_TEST_CP_SIZE* = 3
+ OCF_LE_TEST_END* = 0x0000001F
+ type
+ le_test_end_rp* = object {.packed.}
+ status*: uint8
+ num_pkts*: uint16
+
+ const
+ LE_TEST_END_RP_SIZE* = 3
+ # Vendor specific commands
+ const
+ OGF_VENDOR_CMD* = 0x0000003F
+ # ---- HCI Events ----
+ const
+ EVT_INQUIRY_COMPLETE* = 0x00000001
+ EVT_INQUIRY_RESULT* = 0x00000002
+ type
+ inquiry_info* = object {.packed.}
+ bdaddr*: bdaddr_t
+ pscan_rep_mode*: uint8
+ pscan_period_mode*: uint8
+ pscan_mode*: uint8
+ dev_class*: array[3, uint8]
+ clock_offset*: uint16
+
+ const
+ INQUIRY_INFO_SIZE* = 14
+ EVT_CONN_COMPLETE* = 0x00000003
+ type
+ evt_conn_complete* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ bdaddr*: bdaddr_t
+ link_type*: uint8
+ encr_mode*: uint8
+
+ const
+ EVT_CONN_COMPLETE_SIZE* = 13
+ EVT_CONN_REQUEST* = 0x00000004
+ type
+ evt_conn_request* = object {.packed.}
+ bdaddr*: bdaddr_t
+ dev_class*: array[3, uint8]
+ link_type*: uint8
+
+ const
+ EVT_CONN_REQUEST_SIZE* = 10
+ EVT_DISCONN_COMPLETE* = 0x00000005
+ type
+ evt_disconn_complete* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ reason*: uint8
+
+ const
+ EVT_DISCONN_COMPLETE_SIZE* = 4
+ EVT_AUTH_COMPLETE* = 0x00000006
+ type
+ evt_auth_complete* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+
+ const
+ EVT_AUTH_COMPLETE_SIZE* = 3
+ EVT_REMOTE_NAME_REQ_COMPLETE* = 0x00000007
+ type
+ evt_remote_name_req_complete* = object {.packed.}
+ status*: uint8
+ bdaddr*: bdaddr_t
+ name*: array[HCI_MAX_NAME_LENGTH, uint8]
+
+ const
+ EVT_REMOTE_NAME_REQ_COMPLETE_SIZE* = 255
+ EVT_ENCRYPT_CHANGE* = 0x00000008
+ type
+ evt_encrypt_change* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ encrypt*: uint8
+
+ const
+ EVT_ENCRYPT_CHANGE_SIZE* = 5
+ EVT_CHANGE_CONN_LINK_KEY_COMPLETE* = 0x00000009
+ type
+ evt_change_conn_link_key_complete* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+
+ const
+ EVT_CHANGE_CONN_LINK_KEY_COMPLETE_SIZE* = 3
+ EVT_MASTER_LINK_KEY_COMPLETE* = 0x0000000A
+ type
+ evt_master_link_key_complete* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ key_flag*: uint8
+
+ const
+ EVT_MASTER_LINK_KEY_COMPLETE_SIZE* = 4
+ EVT_READ_REMOTE_FEATURES_COMPLETE* = 0x0000000B
+ type
+ evt_read_remote_features_complete* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ features*: array[8, uint8]
+
+ const
+ EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE* = 11
+ EVT_READ_REMOTE_VERSION_COMPLETE* = 0x0000000C
+ type
+ evt_read_remote_version_complete* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ lmp_ver*: uint8
+ manufacturer*: uint16
+ lmp_subver*: uint16
+
+ const
+ EVT_READ_REMOTE_VERSION_COMPLETE_SIZE* = 8
+ EVT_QOS_SETUP_COMPLETE* = 0x0000000D
+ type
+ evt_qos_setup_complete* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ flags*: uint8 # Reserved
+ qos*: hci_qos
+
+ const
+ EVT_QOS_SETUP_COMPLETE_SIZE* = (4 + HCI_QOS_CP_SIZE)
+ EVT_CMD_COMPLETE* = 0x0000000E
+ type
+ evt_cmd_complete* = object {.packed.}
+ ncmd*: uint8
+ opcode*: uint16
+
+ const
+ EVT_CMD_COMPLETE_SIZE* = 3
+ EVT_CMD_STATUS* = 0x0000000F
+ type
+ evt_cmd_status* = object {.packed.}
+ status*: uint8
+ ncmd*: uint8
+ opcode*: uint16
+
+ const
+ EVT_CMD_STATUS_SIZE* = 4
+ EVT_HARDWARE_ERROR* = 0x00000010
+ type
+ evt_hardware_error* = object {.packed.}
+ code*: uint8
+
+ const
+ EVT_HARDWARE_ERROR_SIZE* = 1
+ EVT_FLUSH_OCCURRED* = 0x00000011
+ type
+ evt_flush_occured* = object {.packed.}
+ handle*: uint16
+
+ const
+ EVT_FLUSH_OCCURRED_SIZE* = 2
+ EVT_ROLE_CHANGE* = 0x00000012
+ type
+ evt_role_change* = object {.packed.}
+ status*: uint8
+ bdaddr*: bdaddr_t
+ role*: uint8
+
+ const
+ EVT_ROLE_CHANGE_SIZE* = 8
+ EVT_NUM_COMP_PKTS* = 0x00000013
+ type
+ evt_num_comp_pkts* = object {.packed.}
+ num_hndl*: uint8 # variable length part
+
+ const
+ EVT_NUM_COMP_PKTS_SIZE* = 1
+ EVT_MODE_CHANGE* = 0x00000014
+ type
+ evt_mode_change* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ mode*: uint8
+ interval*: uint16
+
+ const
+ EVT_MODE_CHANGE_SIZE* = 6
+ EVT_RETURN_LINK_KEYS* = 0x00000015
+ type
+ evt_return_link_keys* = object {.packed.}
+ num_keys*: uint8 # variable length part
+
+ const
+ EVT_RETURN_LINK_KEYS_SIZE* = 1
+ EVT_PIN_CODE_REQ* = 0x00000016
+ type
+ evt_pin_code_req* = object {.packed.}
+ bdaddr*: bdaddr_t
+
+ const
+ EVT_PIN_CODE_REQ_SIZE* = 6
+ EVT_LINK_KEY_REQ* = 0x00000017
+ type
+ evt_link_key_req* = object {.packed.}
+ bdaddr*: bdaddr_t
+
+ const
+ EVT_LINK_KEY_REQ_SIZE* = 6
+ EVT_LINK_KEY_NOTIFY* = 0x00000018
+ type
+ evt_link_key_notify* = object {.packed.}
+ bdaddr*: bdaddr_t
+ link_key*: array[16, uint8]
+ key_type*: uint8
+
+ const
+ EVT_LINK_KEY_NOTIFY_SIZE* = 23
+ EVT_LOOPBACK_COMMAND* = 0x00000019
+ EVT_DATA_BUFFER_OVERFLOW* = 0x0000001A
+ type
+ evt_data_buffer_overflow* = object {.packed.}
+ link_type*: uint8
+
+ const
+ EVT_DATA_BUFFER_OVERFLOW_SIZE* = 1
+ EVT_MAX_SLOTS_CHANGE* = 0x0000001B
+ type
+ evt_max_slots_change* = object {.packed.}
+ handle*: uint16
+ max_slots*: uint8
+
+ const
+ EVT_MAX_SLOTS_CHANGE_SIZE* = 3
+ EVT_READ_CLOCK_OFFSET_COMPLETE* = 0x0000001C
+ type
+ evt_read_clock_offset_complete* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ clock_offset*: uint16
+
+ const
+ EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE* = 5
+ EVT_CONN_PTYPE_CHANGED* = 0x0000001D
+ type
+ evt_conn_ptype_changed* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ ptype*: uint16
+
+ const
+ EVT_CONN_PTYPE_CHANGED_SIZE* = 5
+ EVT_QOS_VIOLATION* = 0x0000001E
+ type
+ evt_qos_violation* = object {.packed.}
+ handle*: uint16
+
+ const
+ EVT_QOS_VIOLATION_SIZE* = 2
+ EVT_PSCAN_REP_MODE_CHANGE* = 0x00000020
+ type
+ evt_pscan_rep_mode_change* = object {.packed.}
+ bdaddr*: bdaddr_t
+ pscan_rep_mode*: uint8
+
+ const
+ EVT_PSCAN_REP_MODE_CHANGE_SIZE* = 7
+ EVT_FLOW_SPEC_COMPLETE* = 0x00000021
+ type
+ evt_flow_spec_complete* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ flags*: uint8
+ direction*: uint8
+ qos*: hci_qos
+
+ const
+ EVT_FLOW_SPEC_COMPLETE_SIZE* = (5 + HCI_QOS_CP_SIZE)
+ EVT_INQUIRY_RESULT_WITH_RSSI* = 0x00000022
+ type
+ inquiry_info_with_rssi* = object {.packed.}
+ bdaddr*: bdaddr_t
+ pscan_rep_mode*: uint8
+ pscan_period_mode*: uint8
+ dev_class*: array[3, uint8]
+ clock_offset*: uint16
+ rssi*: int8
+
+ const
+ INQUIRY_INFO_WITH_RSSI_SIZE* = 14
+ type
+ inquiry_info_with_rssi_and_pscan_mode* = object {.packed.}
+ bdaddr*: bdaddr_t
+ pscan_rep_mode*: uint8
+ pscan_period_mode*: uint8
+ pscan_mode*: uint8
+ dev_class*: array[3, uint8]
+ clock_offset*: uint16
+ rssi*: int8
+
+ const
+ INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE* = 15
+ EVT_READ_REMOTE_EXT_FEATURES_COMPLETE* = 0x00000023
+ type
+ evt_read_remote_ext_features_complete* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ page_num*: uint8
+ max_page_num*: uint8
+ features*: array[8, uint8]
+
+ const
+ EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE* = 13
+ EVT_SYNC_CONN_COMPLETE* = 0x0000002C
+ type
+ evt_sync_conn_complete* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ bdaddr*: bdaddr_t
+ link_type*: uint8
+ trans_interval*: uint8
+ retrans_window*: uint8
+ rx_pkt_len*: uint16
+ tx_pkt_len*: uint16
+ air_mode*: uint8
+
+ const
+ EVT_SYNC_CONN_COMPLETE_SIZE* = 17
+ EVT_SYNC_CONN_CHANGED* = 0x0000002D
+ type
+ evt_sync_conn_changed* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ trans_interval*: uint8
+ retrans_window*: uint8
+ rx_pkt_len*: uint16
+ tx_pkt_len*: uint16
+
+ const
+ EVT_SYNC_CONN_CHANGED_SIZE* = 9
+ EVT_SNIFF_SUBRATING* = 0x0000002E
+ type
+ evt_sniff_subrating* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ max_tx_latency*: uint16
+ max_rx_latency*: uint16
+ min_remote_timeout*: uint16
+ min_local_timeout*: uint16
+
+ const
+ EVT_SNIFF_SUBRATING_SIZE* = 11
+ EVT_EXTENDED_INQUIRY_RESULT* = 0x0000002F
+ type
+ extended_inquiry_info* = object {.packed.}
+ bdaddr*: bdaddr_t
+ pscan_rep_mode*: uint8
+ pscan_period_mode*: uint8
+ dev_class*: array[3, uint8]
+ clock_offset*: uint16
+ rssi*: int8
+ data*: array[HCI_MAX_EIR_LENGTH, uint8]
+
+ const
+ EXTENDED_INQUIRY_INFO_SIZE* = 254
+ EVT_ENCRYPTION_KEY_REFRESH_COMPLETE* = 0x00000030
+ type
+ evt_encryption_key_refresh_complete* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+
+ const
+ EVT_ENCRYPTION_KEY_REFRESH_COMPLETE_SIZE* = 3
+ EVT_IO_CAPABILITY_REQUEST* = 0x00000031
+ type
+ evt_io_capability_request* = object {.packed.}
+ bdaddr*: bdaddr_t
+
+ const
+ EVT_IO_CAPABILITY_REQUEST_SIZE* = 6
+ EVT_IO_CAPABILITY_RESPONSE* = 0x00000032
+ type
+ evt_io_capability_response* = object {.packed.}
+ bdaddr*: bdaddr_t
+ capability*: uint8
+ oob_data*: uint8
+ authentication*: uint8
+
+ const
+ EVT_IO_CAPABILITY_RESPONSE_SIZE* = 9
+ EVT_USER_CONFIRM_REQUEST* = 0x00000033
+ type
+ evt_user_confirm_request* = object {.packed.}
+ bdaddr*: bdaddr_t
+ passkey*: uint32
+
+ const
+ EVT_USER_CONFIRM_REQUEST_SIZE* = 10
+ EVT_USER_PASSKEY_REQUEST* = 0x00000034
+ type
+ evt_user_passkey_request* = object {.packed.}
+ bdaddr*: bdaddr_t
+
+ const
+ EVT_USER_PASSKEY_REQUEST_SIZE* = 6
+ EVT_REMOTE_OOB_DATA_REQUEST* = 0x00000035
+ type
+ evt_remote_oob_data_request* = object {.packed.}
+ bdaddr*: bdaddr_t
+
+ const
+ EVT_REMOTE_OOB_DATA_REQUEST_SIZE* = 6
+ EVT_SIMPLE_PAIRING_COMPLETE* = 0x00000036
+ type
+ evt_simple_pairing_complete* = object {.packed.}
+ status*: uint8
+ bdaddr*: bdaddr_t
+
+ const
+ EVT_SIMPLE_PAIRING_COMPLETE_SIZE* = 7
+ EVT_LINK_SUPERVISION_TIMEOUT_CHANGED* = 0x00000038
+ type
+ evt_link_supervision_timeout_changed* = object {.packed.}
+ handle*: uint16
+ timeout*: uint16
+
+ const
+ EVT_LINK_SUPERVISION_TIMEOUT_CHANGED_SIZE* = 4
+ EVT_ENHANCED_FLUSH_COMPLETE* = 0x00000039
+ type
+ evt_enhanced_flush_complete* = object {.packed.}
+ handle*: uint16
+
+ const
+ EVT_ENHANCED_FLUSH_COMPLETE_SIZE* = 2
+ EVT_USER_PASSKEY_NOTIFY* = 0x0000003B
+ type
+ evt_user_passkey_notify* = object {.packed.}
+ bdaddr*: bdaddr_t
+ passkey*: uint32
+ entered*: uint8
+
+ const
+ EVT_USER_PASSKEY_NOTIFY_SIZE* = 11
+ EVT_KEYPRESS_NOTIFY* = 0x0000003C
+ type
+ evt_keypress_notify* = object {.packed.}
+ bdaddr*: bdaddr_t
+ `type`*: uint8
+
+ const
+ EVT_KEYPRESS_NOTIFY_SIZE* = 7
+ EVT_REMOTE_HOST_FEATURES_NOTIFY* = 0x0000003D
+ type
+ evt_remote_host_features_notify* = object {.packed.}
+ bdaddr*: bdaddr_t
+ features*: array[8, uint8]
+
+ const
+ EVT_REMOTE_HOST_FEATURES_NOTIFY_SIZE* = 14
+ EVT_LE_META_EVENT* = 0x0000003E
+ type
+ evt_le_meta_event* = object {.packed.}
+ subevent*: uint8
+ data*: array[0, uint8]
+
+ const
+ EVT_LE_META_EVENT_SIZE* = 1
+ EVT_LE_CONN_COMPLETE* = 0x00000001
+ type
+ evt_le_connection_complete* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ role*: uint8
+ peer_bdaddr_type*: uint8
+ peer_bdaddr*: bdaddr_t
+ interval*: uint16
+ latency*: uint16
+ supervision_timeout*: uint16
+ master_clock_accuracy*: uint8
+
+ const
+ EVT_LE_CONN_COMPLETE_SIZE* = 18
+ EVT_LE_ADVERTISING_REPORT* = 0x00000002
+ type
+ le_advertising_info* = object {.packed.}
+ evt_type*: uint8
+ bdaddr_type*: uint8
+ bdaddr*: bdaddr_t
+ length*: uint8
+ data*: array[0, uint8]
+
+ const
+ LE_ADVERTISING_INFO_SIZE* = 9
+ EVT_LE_CONN_UPDATE_COMPLETE* = 0x00000003
+ type
+ evt_le_connection_update_complete* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ interval*: uint16
+ latency*: uint16
+ supervision_timeout*: uint16
+
+ const
+ EVT_LE_CONN_UPDATE_COMPLETE_SIZE* = 9
+ EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE* = 0x00000004
+ type
+ evt_le_read_remote_used_features_complete* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+ features*: array[8, uint8]
+
+ const
+ EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE_SIZE* = 11
+ EVT_LE_LTK_REQUEST* = 0x00000005
+ type
+ evt_le_long_term_key_request* = object {.packed.}
+ handle*: uint16
+ random*: uint64
+ diversifier*: uint16
+
+ const
+ EVT_LE_LTK_REQUEST_SIZE* = 12
+ EVT_PHYSICAL_LINK_COMPLETE* = 0x00000040
+ type
+ evt_physical_link_complete* = object {.packed.}
+ status*: uint8
+ handle*: uint8
+
+ const
+ EVT_PHYSICAL_LINK_COMPLETE_SIZE* = 2
+ EVT_CHANNEL_SELECTED* = 0x00000041
+ EVT_DISCONNECT_PHYSICAL_LINK_COMPLETE* = 0x00000042
+ type
+ evt_disconn_physical_link_complete* = object {.packed.}
+ status*: uint8
+ handle*: uint8
+ reason*: uint8
+
+ const
+ EVT_DISCONNECT_PHYSICAL_LINK_COMPLETE_SIZE* = 3
+ EVT_PHYSICAL_LINK_LOSS_EARLY_WARNING* = 0x00000043
+ type
+ evt_physical_link_loss_warning* = object {.packed.}
+ handle*: uint8
+ reason*: uint8
+
+ const
+ EVT_PHYSICAL_LINK_LOSS_WARNING_SIZE* = 2
+ EVT_PHYSICAL_LINK_RECOVERY* = 0x00000044
+ type
+ evt_physical_link_recovery* = object {.packed.}
+ handle*: uint8
+
+ const
+ EVT_PHYSICAL_LINK_RECOVERY_SIZE* = 1
+ EVT_LOGICAL_LINK_COMPLETE* = 0x00000045
+ type
+ evt_logical_link_complete* = object {.packed.}
+ status*: uint8
+ log_handle*: uint16
+ handle*: uint8
+ tx_flow_id*: uint8
+
+ const
+ EVT_LOGICAL_LINK_COMPLETE_SIZE* = 5
+ EVT_DISCONNECT_LOGICAL_LINK_COMPLETE* = 0x00000046
+ EVT_FLOW_SPEC_MODIFY_COMPLETE* = 0x00000047
+ type
+ evt_flow_spec_modify_complete* = object {.packed.}
+ status*: uint8
+ handle*: uint16
+
+ const
+ EVT_FLOW_SPEC_MODIFY_COMPLETE_SIZE* = 3
+ EVT_NUMBER_COMPLETED_BLOCKS* = 0x00000048
+ EVT_AMP_STATUS_CHANGE* = 0x0000004D
+ type
+ evt_amp_status_change* = object {.packed.}
+ status*: uint8
+ amp_status*: uint8
+
+ const
+ EVT_AMP_STATUS_CHANGE_SIZE* = 2
+ EVT_TESTING* = 0x000000FE
+ EVT_VENDOR* = 0x000000FF
+ # Internal events generated by BlueZ stack
+ const
+ EVT_STACK_INTERNAL* = 0x000000FD
+ type
+ evt_stack_internal* = object {.packed.}
+ `type`*: uint16
+ data*: array[0, uint8]
+
+ const
+ EVT_STACK_INTERNAL_SIZE* = 2
+ EVT_SI_DEVICE* = 0x00000001
+ type
+ evt_si_device* = object {.packed.}
+ event*: uint16
+ dev_id*: uint16
+
+ const
+ EVT_SI_DEVICE_SIZE* = 4
+ # -------- HCI Packet structures --------
+ const
+ HCI_TYPE_LEN* = 1
+ type
+ hci_command_hdr* = object {.packed.}
+ opcode*: uint16 # OCF & OGF
+ plen*: uint8
+
+ const
+ HCI_COMMAND_HDR_SIZE* = 3
+ type
+ hci_event_hdr* = object {.packed.}
+ evt*: uint8
+ plen*: uint8
+
+ const
+ HCI_EVENT_HDR_SIZE* = 2
+ type
+ hci_acl_hdr* = object {.packed.}
+ handle*: uint16 # Handle & Flags(PB, BC)
+ dlen*: uint16
+
+ const
+ HCI_ACL_HDR_SIZE* = 4
+ type
+ hci_sco_hdr* = object {.packed.}
+ handle*: uint16
+ dlen*: uint8
+
+ const
+ HCI_SCO_HDR_SIZE* = 3
+ type
+ hci_msg_hdr* = object {.packed.}
+ device*: uint16
+ `type`*: uint16
+ plen*: uint16
+
+ const
+ HCI_MSG_HDR_SIZE* = 6
+ # Command opcode pack/unpack
+ template cmd_opcode_pack*(ogf, ocf: expr): expr =
+ (uint16)((ocf and 0x000003FF) or (ogf shl 10))
+
+ template cmd_opcode_ogf*(op: expr): expr =
+ (op shr 10)
+
+ template cmd_opcode_ocf*(op: expr): expr =
+ (op and 0x000003FF)
+
+ # ACL handle and flags pack/unpack
+ template acl_handle_pack*(h, f: expr): expr =
+ (uint16)((h and 0x00000FFF) or (f shl 12))
+
+ template acl_handle*(h: expr): expr =
+ (h and 0x00000FFF)
+
+ template acl_flags*(h: expr): expr =
+ (h shr 12)
+
+# HCI Socket options
+
+const
+ HCI_DATA_DIR* = 1
+ HCI_FILTER* = 2
+ HCI_TIME_STAMP* = 3
+
+# HCI CMSG flags
+
+const
+ HCI_CMSG_DIR* = 0x00000001
+ HCI_CMSG_TSTAMP* = 0x00000002
+
+type
+ sockaddr_hci* = object
+ hci_family*: cushort
+ hci_dev*: cushort
+ hci_channel*: cushort
+
+
+const
+ HCI_DEV_NONE* = 0x0000FFFF
+ HCI_CHANNEL_RAW* = 0
+ HCI_CHANNEL_MONITOR* = 2
+ HCI_CHANNEL_CONTROL* = 3
+
+type
+ hci_filter* = object
+ type_mask*: uint32
+ event_mask*: array[2, uint32]
+ opcode*: uint16
+
+
+const
+ HCI_FLT_TYPE_BITS* = 31
+ HCI_FLT_EVENT_BITS* = 63
+ HCI_FLT_OGF_BITS* = 63
+ HCI_FLT_OCF_BITS* = 127
+
+# Ioctl requests structures
+
+type
+ hci_dev_stats* = object
+ err_rx*: uint32
+ err_tx*: uint32
+ cmd_tx*: uint32
+ evt_rx*: uint32
+ acl_tx*: uint32
+ acl_rx*: uint32
+ sco_tx*: uint32
+ sco_rx*: uint32
+ byte_rx*: uint32
+ byte_tx*: uint32
+
+ hci_dev_info* = object
+ dev_id*: uint16
+ name*: array[8, char]
+ bdaddr*: bdaddr_t
+ flags*: uint32
+ `type`*: uint8
+ features*: array[8, uint8]
+ pkt_type*: uint32
+ link_policy*: uint32
+ link_mode*: uint32
+ acl_mtu*: uint16
+ acl_pkts*: uint16
+ sco_mtu*: uint16
+ sco_pkts*: uint16
+ stat*: hci_dev_stats
+
+ hci_conn_info* = object
+ handle*: uint16
+ bdaddr*: bdaddr_t
+ `type`*: uint8
+ `out`*: uint8
+ state*: uint16
+ link_mode*: uint32
+
+ hci_dev_req* = object
+ dev_id*: uint16
+ dev_opt*: uint32
+
+ hci_dev_list_req* = object
+ dev_num*: uint16
+ # dev_req*: array[0, hci_dev_req] # hci_dev_req structures
+ dev_req*: array[HCI_MAX_DEV, hci_dev_req] # hci_dev_req structures
+
+ hci_conn_list_req* = object
+ dev_id*: uint16
+ conn_num*: uint16
+ conn_info*: array[0, hci_conn_info]
+
+ hci_conn_info_req* = object
+ bdaddr*: bdaddr_t
+ `type`*: uint8
+ conn_info*: array[0, hci_conn_info]
+
+ hci_auth_info_req* = object
+ bdaddr*: bdaddr_t
+ `type`*: uint8
+
+ hci_inquiry_req* = object
+ dev_id*: uint16
+ flags*: uint16
+ lap*: array[3, uint8]
+ length*: uint8
+ num_rsp*: uint8
+
+
+const
+ IREQ_CACHE_FLUSH* = 0x00000001