lazarus-ccr/examples/bluetooth/bluetooth.pas
mgaertner c4ee9e297f added bluetooth
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2729 8e941d3f-bd1b-0410-a28a-d453659cc2b4
2013-04-19 23:58:30 +00:00

3496 lines
94 KiB
ObjectPascal

{ Access Linux Bluetooth via BlueZ lib.
Copyright (C) 2008 Mattias Gaertner mattias@freepascal.org
This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version with the following modification:
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent modules,and
to copy and distribute the resulting executable under terms of your choice,
provided that you also meet, for each linked independent module, the terms
and conditions of the license of that module. An independent module is a
module which is not derived from or based on this library. If you modify
this library, you may extend this exception to your version of the library,
but you are not obligated to do so. If you do not wish to do so, delete this
exception statement from your 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 Library General Public License
for more details.
You should have received a copy of the GNU Library General Public License
along with this library; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
}
unit Bluetooth;
{$mode objfpc}{$H+}
interface
uses
ctypes;
const
ETH_ALEN = 6;
type
sa_family_t = cushort;
{$IfNDef __BLUETOOTH_H}
{$IfNDef AF_BLUETOOTH}
const
AF_BLUETOOTH = 31;
PF_BLUETOOTH = AF_BLUETOOTH;
{$EndIf}
const
BTPROTO_L2CAP = 0;
BTPROTO_HCI = 1;
BTPROTO_SCO = 2;
BTPROTO_RFCOMM = 3;
BTPROTO_BNEP = 4;
BTPROTO_CMTP = 5;
BTPROTO_HIDP = 6;
BTPROTO_AVDTP = 7;
SOL_HCI = 0;
SOL_L2CAP = 6;
SOL_SCO = 17;
SOL_RFCOMM = 18;
type
enumBT_CONNECTED1BT_OPENBT_BOUNDBT_LISTENBT_CONNECTBT_CONNECT2 = (
BT_CONNECTED = 1,
BT_OPEN,
BT_BOUND,
BT_LISTEN,
BT_CONNECT,
BT_CONNECT2,
BT_CONFIG,
BT_DISCONN,
BT_CLOSED
);
{$If defined(ENDIAN_LITTLE)}
{$ElseIf defined(ENDIAN_BIG)}
{$Else}
{$Error "Unknown byte order"}
{$EndIf}
type
TArray0to61Ofcuint8 = array[0..6-1] of cuint8;
bdaddr_t = record
b: TArray0to61Ofcuint8;
end;
{off $Define BDADDR_ANY:=(&(bdaddr_t) #123#1230, 0, 0, 0, 0, 0#125#125)}
{off $Define BDADDR_ALL:=(&(bdaddr_t) #123#1230xff, 0xff, 0xff, 0xff, 0xff, 0xff#125#125)}
{off $Define BDADDR_LOCAL:=(&(bdaddr_t) #123#1230, 0, 0, 0xff, 0xff, 0xff#125#125)}
type
Pbdaddr_t = ^bdaddr_t;
procedure baswap(dst: Pbdaddr_t; src: Pbdaddr_t); cdecl; external;
function strtoba(str: pcchar): Pbdaddr_t; cdecl; external;
function batostr(ba: Pbdaddr_t): pcchar; cdecl; external;
function ba2str(ba: Pbdaddr_t; str: pcchar): cint; cdecl; external;
function str2ba(str: pcchar; ba: Pbdaddr_t): cint; cdecl; external;
function ba2oui(ba: Pbdaddr_t; oui: pcchar): cint; cdecl; external;
function bachk(str: pcchar): cint; cdecl; external;
function baprintf(format: pcchar; param1arrayof: array of const): cint; cdecl; external;
type
PFILE = ^FILE;
function bafprintf(stream: PFILE; format: pcchar; param1arrayof: array of const): cint; cdecl; external;
function basprintf(str: pcchar; format: pcchar; param1arrayof: array of const): cint; cdecl; external;
function basnprintf(str: pcchar; size: PtrUInt; format: pcchar; param1arrayof: array of const): cint; cdecl; external;
function bt_malloc(size: PtrUInt): pointer; cdecl; external;
procedure bt_free(ptr: pointer); cdecl; external;
function bt_error(code: cuint16): cint; cdecl; external;
function bt_compidtostr(id: cint): pcchar; cdecl; external;
{$EndIf}
{$IfNDef __BNEP_H}
{off $Define BNEP_BASE_UUID:=0x0000000000001000800000805F9B34FB}
const
BNEP_UUID16 = $02;
BNEP_UUID32 = $04;
BNEP_UUID128 = $16;
BNEP_SVC_PANU = $1115;
BNEP_SVC_NAP = $1116;
BNEP_SVC_GN = $1117;
BNEP_GENERAL = $00;
BNEP_CONTROL = $01;
BNEP_COMPRESSED = $02;
BNEP_COMPRESSED_SRC_ONLY = $03;
BNEP_COMPRESSED_DST_ONLY = $04;
BNEP_CMD_NOT_UNDERSTOOD = $00;
BNEP_SETUP_CONN_REQ_1 = $01;
BNEP_SETUP_CONN_RSP = $02;
BNEP_FILTER_NET_TYPE_SET = $03;
BNEP_FILTER_NET_TYPE_RSP = $04;
BNEP_FILTER_MULT_ADDR_SET = $05;
BNEP_FILTER_MULT_ADDR_RSP = $06;
BNEP_SUCCESS = $00;
BNEP_CONN_INVALID_DST = $01;
BNEP_CONN_INVALID_SRC = $02;
BNEP_CONN_INVALID_SVC = $03;
BNEP_CONN_NOT_ALLOWED = $04;
BNEP_FILTER_UNSUPPORTED_REQ = $01;
BNEP_FILTER_INVALID_RANGE = $02;
BNEP_FILTER_INVALID_MCADDR = $02;
BNEP_FILTER_LIMIT_REACHED = $03;
BNEP_FILTER_DENIED_SECURITY = $04;
BNEP_MTU = 1691;
BNEP_FLUSH_TO = $ffff;
BNEP_CONNECT_TO = 15;
BNEP_FILTER_TO = 15;
{$IfNDef BNEP_PSM}
const
BNEP_PSM = $0f;
{$EndIf}
const
BNEP_TYPE_MASK = $7f;
BNEP_EXT_HEADER = $80;
type
TArray0to0Ofcuint8 = array[0..0] of cuint8;
bnep_setup_conn_req = record
type_: cuint8;
ctrl: cuint8;
uuid_size: cuint8;
service: TArray0to0Ofcuint8;
end;
bnep_set_filter_req = record
type_: cuint8;
ctrl: cuint8;
len: cuint16;
list: TArray0to0Ofcuint8;
end;
bnep_control_rsp = record
type_: cuint8;
ctrl: cuint8;
resp: cuint16;
end;
bnep_ext_hdr = record
type_: cuint8;
len: cuint8;
data: TArray0to0Ofcuint8;
end;
{off $Define BNEPCONNADD:=_IOW('B', 200, int)}
{off $Define BNEPCONNDEL:=_IOW('B', 201, int)}
{off $Define BNEPGETCONNLIST:=_IOR('B', 210, int)}
{off $Define BNEPGETCONNINFO:=_IOR('B', 211, int)}
type
TArray0to161Ofcchar = array[0..16-1] of cchar;
bnep_connadd_req = record
sock: cint;
flags: cuint32;
role: cuint16;
device: TArray0to161Ofcchar;
end;
TArray0toETH_ALEN1Ofcuint8 = array[0..ETH_ALEN-1] of cuint8;
bnep_conndel_req = record
flags: cuint32;
dst: TArray0toETH_ALEN1Ofcuint8;
end;
bnep_conninfo = record
flags: cuint32;
role: cuint16;
state: cuint16;
dst: TArray0toETH_ALEN1Ofcuint8;
device: TArray0to161Ofcchar;
end;
Pbnep_conninfo = ^bnep_conninfo;
bnep_connlist_req = record
cnum: cuint32;
ci: Pbnep_conninfo;
end;
{$EndIf}
{$IfNDef __CMTP_H}
const
CMTP_MINIMUM_MTU = 152;
CMTP_DEFAULT_MTU = 672;
{off $Define CMTPCONNADD:=_IOW('C', 200, int)}
{off $Define CMTPCONNDEL:=_IOW('C', 201, int)}
{off $Define CMTPGETCONNLIST:=_IOR('C', 210, int)}
{off $Define CMTPGETCONNINFO:=_IOR('C', 211, int)}
const
CMTP_LOOPBACK = 0;
type
cmtp_connadd_req = record
sock: cint;
flags: cuint32;
end;
cmtp_conndel_req = record
bdaddr: bdaddr_t;
flags: cuint32;
end;
cmtp_conninfo = record
bdaddr: bdaddr_t;
flags: cuint32;
state: cuint16;
num: cint;
end;
Pcmtp_conninfo = ^cmtp_conninfo;
cmtp_connlist_req = record
cnum: cuint32;
ci: Pcmtp_conninfo;
end;
{$EndIf}
{$IfNDef __HCI_H}
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_REG = 1;
HCI_DEV_UNREG = 2;
HCI_DEV_UP = 3;
HCI_DEV_DOWN = 4;
HCI_DEV_SUSPEND = 5;
HCI_DEV_RESUME = 6;
HCI_VIRTUAL = 0;
HCI_USB = 1;
HCI_PCCARD = 2;
HCI_UART = 3;
HCI_RS232 = 4;
HCI_PCI = 5;
HCI_SDIO = 6;
type
enumHCI_UPHCI_INITHCI_RUNNINGHCI_PSCANHCI_ISCANHCI_AUTHHCI_ENCRYPT = (
HCI_UP,
HCI_INIT,
HCI_RUNNING,
HCI_PSCAN,
HCI_ISCAN,
HCI_AUTH,
HCI_ENCRYPT,
HCI_INQUIRY,
HCI_RAW,
HCI_SECMGR
);
{off $Define HCIDEVUP:=_IOW('H', 201, int)}
{off $Define HCIDEVDOWN:=_IOW('H', 202, int)}
{off $Define HCIDEVRESET:=_IOW('H', 203, int)}
{off $Define HCIDEVRESTAT:=_IOW('H', 204, int)}
{off $Define HCIGETDEVLIST:=_IOR('H', 210, int)}
{off $Define HCIGETDEVINFO:=_IOR('H', 211, int)}
{off $Define HCIGETCONNLIST:=_IOR('H', 212, int)}
{off $Define HCIGETCONNINFO:=_IOR('H', 213, int)}
{off $Define HCISETRAW:=_IOW('H', 220, int)}
{off $Define HCISETSCAN:=_IOW('H', 221, int)}
{off $Define HCISETAUTH:=_IOW('H', 222, int)}
{off $Define HCISETENCRYPT:=_IOW('H', 223, int)}
{off $Define HCISETPTYPE:=_IOW('H', 224, int)}
{off $Define HCISETLINKPOL:=_IOW('H', 225, int)}
{off $Define HCISETLINKMODE:=_IOW('H', 226, int)}
{off $Define HCISETACLMTU:=_IOW('H', 227, int)}
{off $Define HCISETSCOMTU:=_IOW('H', 228, int)}
{off $Define HCISETSECMGR:=_IOW('H', 230, int)}
{off $Define HCIINQUIRY:=_IOR('H', 240, int)}
{$IfNDef __NO_HCI_DEFS}
const
HCI_COMMAND_PKT = $01;
HCI_ACLDATA_PKT = $02;
HCI_SCODATA_PKT = $03;
HCI_EVENT_PKT = $04;
HCI_VENDOR_PKT = $ff;
HCI_2DH1 = $0002;
HCI_3DH1 = $0004;
HCI_DM1 = $0008;
HCI_DH1 = $0010;
HCI_2DH3 = $0100;
HCI_3DH3 = $0200;
HCI_DM3 = $0400;
HCI_DH3 = $0800;
HCI_2DH5 = $1000;
HCI_3DH5 = $2000;
HCI_DM5 = $4000;
HCI_DH5 = $8000;
HCI_HV1 = $0020;
HCI_HV2 = $0040;
HCI_HV3 = $0080;
HCI_EV3 = $0008;
HCI_EV4 = $0010;
HCI_EV5 = $0020;
HCI_2EV3 = $0040;
HCI_3EV3 = $0080;
HCI_2EV5 = $0100;
HCI_3EV5 = $0200;
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_UNKNOWN_COMMAND = $01;
HCI_NO_CONNECTION = $02;
HCI_HARDWARE_FAILURE = $03;
HCI_PAGE_TIMEOUT = $04;
HCI_AUTHENTICATION_FAILURE = $05;
HCI_PIN_OR_KEY_MISSING = $06;
HCI_MEMORY_FULL = $07;
HCI_CONNECTION_TIMEOUT = $08;
HCI_MAX_NUMBER_OF_CONNECTIONS = $09;
HCI_MAX_NUMBER_OF_SCO_CONNECTIONS = $0a;
HCI_ACL_CONNECTION_EXISTS = $0b;
HCI_COMMAND_DISALLOWED = $0c;
HCI_REJECTED_LIMITED_RESOURCES = $0d;
HCI_REJECTED_SECURITY = $0e;
HCI_REJECTED_PERSONAL = $0f;
HCI_HOST_TIMEOUT = $10;
HCI_UNSUPPORTED_FEATURE = $11;
HCI_INVALID_PARAMETERS = $12;
HCI_OE_USER_ENDED_CONNECTION = $13;
HCI_OE_LOW_RESOURCES = $14;
HCI_OE_POWER_OFF = $15;
HCI_CONNECTION_TERMINATED = $16;
HCI_REPEATED_ATTEMPTS = $17;
HCI_PAIRING_NOT_ALLOWED = $18;
HCI_UNKNOWN_LMP_PDU = $19;
HCI_UNSUPPORTED_REMOTE_FEATURE = $1a;
HCI_SCO_OFFSET_REJECTED = $1b;
HCI_SCO_INTERVAL_REJECTED = $1c;
HCI_AIR_MODE_REJECTED = $1d;
HCI_INVALID_LMP_PARAMETERS = $1e;
HCI_UNSPECIFIED_ERROR = $1f;
HCI_UNSUPPORTED_LMP_PARAMETER_VALUE = $20;
HCI_ROLE_CHANGE_NOT_ALLOWED = $21;
HCI_LMP_RESPONSE_TIMEOUT = $22;
HCI_LMP_ERROR_TRANSACTION_COLLISION = $23;
HCI_LMP_PDU_NOT_ALLOWED = $24;
HCI_ENCRYPTION_MODE_NOT_ACCEPTED = $25;
HCI_UNIT_LINK_KEY_USED = $26;
HCI_QOS_NOT_SUPPORTED = $27;
HCI_INSTANT_PASSED = $28;
HCI_PAIRING_NOT_SUPPORTED = $29;
HCI_TRANSACTION_COLLISION = $2a;
HCI_QOS_UNACCEPTABLE_PARAMETER = $2c;
HCI_QOS_REJECTED = $2d;
HCI_CLASSIFICATION_NOT_SUPPORTED = $2e;
HCI_INSUFFICIENT_SECURITY = $2f;
HCI_PARAMETER_OUT_OF_RANGE = $30;
HCI_ROLE_SWITCH_PENDING = $32;
HCI_SLOT_VIOLATION = $34;
HCI_ROLE_SWITCH_FAILED = $35;
HCI_EIR_TOO_LARGE = $36;
HCI_SIMPLE_PAIRING_NOT_SUPPORTED = $37;
HCI_HOST_BUSY_PAIRING = $38;
ACL_CONT = $01;
ACL_START = $02;
ACL_ACTIVE_BCAST = $04;
ACL_PICO_BCAST = $08;
SCO_LINK = $00;
ACL_LINK = $01;
ESCO_LINK = $02;
LMP_3SLOT = $01;
LMP_5SLOT = $02;
LMP_ENCRYPT = $04;
LMP_SOFFSET = $08;
LMP_TACCURACY = $10;
LMP_RSWITCH = $20;
LMP_HOLD = $40;
LMP_SNIFF = $80;
LMP_PARK = $01;
LMP_RSSI = $02;
LMP_QUALITY = $04;
LMP_SCO = $08;
LMP_HV2 = $10;
LMP_HV3 = $20;
LMP_ULAW = $40;
LMP_ALAW = $80;
LMP_CVSD = $01;
LMP_PSCHEME = $02;
LMP_PCONTROL = $04;
LMP_TRSP_SCO = $08;
LMP_BCAST_ENC = $80;
LMP_EDR_ACL_2M = $02;
LMP_EDR_ACL_3M = $04;
LMP_ENH_ISCAN = $08;
LMP_ILACE_ISCAN = $10;
LMP_ILACE_PSCAN = $20;
LMP_RSSI_INQ = $40;
LMP_ESCO = $80;
LMP_EV4 = $01;
LMP_EV5 = $02;
LMP_AFH_CAP_SLV = $08;
LMP_AFH_CLS_SLV = $10;
LMP_EDR_3SLOT = $80;
LMP_EDR_5SLOT = $01;
LMP_SNIFF_SUBR = $02;
LMP_PAUSE_ENC = $04;
LMP_AFH_CAP_MST = $08;
LMP_AFH_CLS_MST = $10;
LMP_EDR_ESCO_2M = $20;
LMP_EDR_ESCO_3M = $40;
LMP_EDR_3S_ESCO = $80;
LMP_EXT_INQ = $01;
LMP_SIMPLE_PAIR = $08;
LMP_ENCAPS_PDU = $10;
LMP_ERR_DAT_REP = $20;
LMP_NFLUSH_PKTS = $40;
LMP_LSTO = $01;
LMP_INQ_TX_PWR = $02;
LMP_EXT_FEAT = $80;
HCI_LP_RSWITCH = $0001;
HCI_LP_HOLD = $0002;
HCI_LP_SNIFF = $0004;
HCI_LP_PARK = $0008;
HCI_LM_ACCEPT = $8000;
HCI_LM_MASTER = $0001;
HCI_LM_AUTH = $0002;
HCI_LM_ENCRYPT = $0004;
HCI_LM_TRUSTED = $0008;
HCI_LM_RELIABLE = $0010;
HCI_LM_SECURE = $0020;
OGF_LINK_CTL = $01;
OCF_INQUIRY = $0001;
type
TArray0to31Ofcuint8 = array[0..3-1] of cuint8;
inquiry_cp = record
lap: TArray0to31Ofcuint8;
length: cuint8;
num_rsp: cuint8;
end;
const
INQUIRY_CP_SIZE = 5;
type
status_bdaddr_rp = record
status: cuint8;
bdaddr: bdaddr_t;
end;
const
STATUS_BDADDR_RP_SIZE = 7;
OCF_INQUIRY_CANCEL = $0002;
OCF_PERIODIC_INQUIRY = $0003;
type
periodic_inquiry_cp = record
max_period: cuint16;
min_period: cuint16;
lap: TArray0to31Ofcuint8;
length: cuint8;
num_rsp: cuint8;
end;
const
PERIODIC_INQUIRY_CP_SIZE = 9;
OCF_EXIT_PERIODIC_INQUIRY = $0004;
OCF_CREATE_CONN = $0005;
type
create_conn_cp = record
bdaddr: bdaddr_t;
pkt_type: cuint16;
pscan_rep_mode: cuint8;
pscan_mode: cuint8;
clock_offset: cuint16;
role_switch: cuint8;
end;
const
CREATE_CONN_CP_SIZE = 13;
OCF_DISCONNECT = $0006;
type
disconnect_cp = record
handle: cuint16;
reason: cuint8;
end;
const
DISCONNECT_CP_SIZE = 3;
OCF_ADD_SCO = $0007;
type
add_sco_cp = record
handle: cuint16;
pkt_type: cuint16;
end;
const
ADD_SCO_CP_SIZE = 4;
OCF_CREATE_CONN_CANCEL = $0008;
type
create_conn_cancel_cp = record
bdaddr: bdaddr_t;
end;
const
CREATE_CONN_CANCEL_CP_SIZE = 6;
OCF_ACCEPT_CONN_REQ = $0009;
type
accept_conn_req_cp = record
bdaddr: bdaddr_t;
role: cuint8;
end;
const
ACCEPT_CONN_REQ_CP_SIZE = 7;
OCF_REJECT_CONN_REQ = $000A;
type
reject_conn_req_cp = record
bdaddr: bdaddr_t;
reason: cuint8;
end;
const
REJECT_CONN_REQ_CP_SIZE = 7;
OCF_LINK_KEY_REPLY = $000B;
type
TArray0to161Ofcuint8 = array[0..16-1] of cuint8;
link_key_reply_cp = record
bdaddr: bdaddr_t;
link_key: TArray0to161Ofcuint8;
end;
const
LINK_KEY_REPLY_CP_SIZE = 22;
OCF_LINK_KEY_NEG_REPLY = $000C;
OCF_PIN_CODE_REPLY = $000D;
type
pin_code_reply_cp = record
bdaddr: bdaddr_t;
pin_len: cuint8;
pin_code: TArray0to161Ofcuint8;
end;
const
PIN_CODE_REPLY_CP_SIZE = 23;
OCF_PIN_CODE_NEG_REPLY = $000E;
OCF_SET_CONN_PTYPE = $000F;
type
set_conn_ptype_cp = record
handle: cuint16;
pkt_type: cuint16;
end;
const
SET_CONN_PTYPE_CP_SIZE = 4;
OCF_AUTH_REQUESTED = $0011;
type
auth_requested_cp = record
handle: cuint16;
end;
const
AUTH_REQUESTED_CP_SIZE = 2;
OCF_SET_CONN_ENCRYPT = $0013;
type
set_conn_encrypt_cp = record
handle: cuint16;
encrypt: cuint8;
end;
const
SET_CONN_ENCRYPT_CP_SIZE = 3;
OCF_CHANGE_CONN_LINK_KEY = $0015;
type
change_conn_link_key_cp = record
handle: cuint16;
end;
const
CHANGE_CONN_LINK_KEY_CP_SIZE = 2;
OCF_MASTER_LINK_KEY = $0017;
type
master_link_key_cp = record
key_flag: cuint8;
end;
const
MASTER_LINK_KEY_CP_SIZE = 1;
OCF_REMOTE_NAME_REQ = $0019;
type
remote_name_req_cp = record
bdaddr: bdaddr_t;
pscan_rep_mode: cuint8;
pscan_mode: cuint8;
clock_offset: cuint16;
end;
const
REMOTE_NAME_REQ_CP_SIZE = 10;
OCF_REMOTE_NAME_REQ_CANCEL = $001A;
type
remote_name_req_cancel_cp = record
bdaddr: bdaddr_t;
end;
const
REMOTE_NAME_REQ_CANCEL_CP_SIZE = 6;
OCF_READ_REMOTE_FEATURES = $001B;
type
read_remote_features_cp = record
handle: cuint16;
end;
const
READ_REMOTE_FEATURES_CP_SIZE = 2;
OCF_READ_REMOTE_EXT_FEATURES = $001C;
type
read_remote_ext_features_cp = record
handle: cuint16;
page_num: cuint8;
end;
const
READ_REMOTE_EXT_FEATURES_CP_SIZE = 3;
OCF_READ_REMOTE_VERSION = $001D;
type
read_remote_version_cp = record
handle: cuint16;
end;
const
READ_REMOTE_VERSION_CP_SIZE = 2;
OCF_READ_CLOCK_OFFSET = $001F;
type
read_clock_offset_cp = record
handle: cuint16;
end;
const
READ_CLOCK_OFFSET_CP_SIZE = 2;
OCF_READ_LMP_HANDLE = $0020;
OCF_SETUP_SYNC_CONN = $0028;
type
setup_sync_conn_cp = record
handle: cuint16;
tx_bandwith: cuint32;
rx_bandwith: cuint32;
max_latency: cuint16;
voice_setting: cuint16;
retrans_effort: cuint8;
pkt_type: cuint16;
end;
const
SETUP_SYNC_CONN_CP_SIZE = 17;
OCF_ACCEPT_SYNC_CONN_REQ = $0029;
type
accept_sync_conn_req_cp = record
bdaddr: bdaddr_t;
tx_bandwith: cuint32;
rx_bandwith: cuint32;
max_latency: cuint16;
voice_setting: cuint16;
retrans_effort: cuint8;
pkt_type: cuint16;
end;
const
ACCEPT_SYNC_CONN_REQ_CP_SIZE = 21;
OCF_REJECT_SYNC_CONN_REQ = $002A;
type
reject_sync_conn_req_cp = record
bdaddr: bdaddr_t;
reason: cuint8;
end;
const
REJECT_SYNC_CONN_REQ_CP_SIZE = 7;
OCF_IO_CAPABILITY_REPLY = $002B;
type
io_capability_reply_cp = record
bdaddr: bdaddr_t;
capability: cuint8;
oob_data: cuint8;
authentication: cuint8;
end;
const
IO_CAPABILITY_REPLY_CP_SIZE = 9;
OCF_USER_CONFIRM_REPLY = $002C;
type
user_confirm_reply_cp = record
bdaddr: bdaddr_t;
end;
const
USER_CONFIRM_REPLY_CP_SIZE = 6;
OCF_USER_CONFIRM_NEG_REPLY = $002D;
OCF_USER_PASSKEY_REPLY = $002E;
type
user_passkey_reply_cp = record
bdaddr: bdaddr_t;
passkey: cuint32;
end;
const
USER_PASSKEY_REPLY_CP_SIZE = 10;
OCF_USER_PASSKEY_NEG_REPLY = $002F;
OCF_REMOTE_OOB_DATA_REPLY = $0030;
type
remote_oob_data_reply_cp = record
bdaddr: bdaddr_t;
hash: TArray0to161Ofcuint8;
randomizer: TArray0to161Ofcuint8;
end;
const
REMOTE_OOB_DATA_REPLY_CP_SIZE = 38;
OCF_REMOTE_OOB_DATA_NEG_REPLY = $0033;
OCF_IO_CAPABILITY_NEG_REPLY = $0034;
type
io_capability_neg_reply_cp = record
bdaddr: bdaddr_t;
reason: cuint8;
end;
const
IO_CAPABILITY_NEG_REPLY_CP_SIZE = 7;
OGF_LINK_POLICY = $02;
OCF_HOLD_MODE = $0001;
type
hold_mode_cp = record
handle: cuint16;
max_interval: cuint16;
min_interval: cuint16;
end;
const
HOLD_MODE_CP_SIZE = 6;
OCF_SNIFF_MODE = $0003;
type
sniff_mode_cp = record
handle: cuint16;
max_interval: cuint16;
min_interval: cuint16;
attempt: cuint16;
timeout: cuint16;
end;
const
SNIFF_MODE_CP_SIZE = 10;
OCF_EXIT_SNIFF_MODE = $0004;
type
exit_sniff_mode_cp = record
handle: cuint16;
end;
const
EXIT_SNIFF_MODE_CP_SIZE = 2;
OCF_PARK_MODE = $0005;
type
park_mode_cp = record
handle: cuint16;
max_interval: cuint16;
min_interval: cuint16;
end;
const
PARK_MODE_CP_SIZE = 6;
OCF_EXIT_PARK_MODE = $0006;
type
exit_park_mode_cp = record
handle: cuint16;
end;
const
EXIT_PARK_MODE_CP_SIZE = 2;
OCF_QOS_SETUP = $0007;
type
hci_qos = record
service_type: cuint8;
token_rate: cuint32;
peak_bandwidth: cuint32;
latency: cuint32;
delay_variation: cuint32;
end;
const
HCI_QOS_CP_SIZE = 17;
type
qos_setup_cp = record
handle: cuint16;
flags: cuint8;
qos: hci_qos;
end;
const
QOS_SETUP_CP_SIZE = (3 + HCI_QOS_CP_SIZE);
OCF_ROLE_DISCOVERY = $0009;
type
role_discovery_cp = record
handle: cuint16;
end;
const
ROLE_DISCOVERY_CP_SIZE = 2;
type
role_discovery_rp = record
status: cuint8;
handle: cuint16;
role: cuint8;
end;
const
ROLE_DISCOVERY_RP_SIZE = 4;
OCF_SWITCH_ROLE = $000B;
type
switch_role_cp = record
bdaddr: bdaddr_t;
role: cuint8;
end;
const
SWITCH_ROLE_CP_SIZE = 7;
OCF_READ_LINK_POLICY = $000C;
type
read_link_policy_cp = record
handle: cuint16;
end;
const
READ_LINK_POLICY_CP_SIZE = 2;
type
read_link_policy_rp = record
status: cuint8;
handle: cuint16;
policy: cuint16;
end;
const
READ_LINK_POLICY_RP_SIZE = 5;
OCF_WRITE_LINK_POLICY = $000D;
type
write_link_policy_cp = record
handle: cuint16;
policy: cuint16;
end;
const
WRITE_LINK_POLICY_CP_SIZE = 4;
type
write_link_policy_rp = record
status: cuint8;
handle: cuint16;
end;
const
WRITE_LINK_POLICY_RP_SIZE = 3;
OCF_READ_DEFAULT_LINK_POLICY = $000E;
OCF_WRITE_DEFAULT_LINK_POLICY = $000F;
OCF_FLOW_SPECIFICATION = $0010;
OCF_SNIFF_SUBRATING = $0011;
type
sniff_subrating_cp = record
handle: cuint16;
max_latency: cuint16;
min_remote_timeout: cuint16;
min_local_timeout: cuint16;
end;
const
SNIFF_SUBRATING_CP_SIZE = 8;
OGF_HOST_CTL = $03;
OCF_SET_EVENT_MASK = $0001;
type
TArray0to81Ofcuint8 = array[0..8-1] of cuint8;
set_event_mask_cp = record
mask: TArray0to81Ofcuint8;
end;
const
SET_EVENT_MASK_CP_SIZE = 8;
OCF_RESET = $0003;
OCF_SET_EVENT_FLT = $0005;
type
set_event_flt_cp = record
flt_type: cuint8;
cond_type: cuint8;
condition: TArray0to0Ofcuint8;
end;
const
SET_EVENT_FLT_CP_SIZE = 2;
FLT_CLEAR_ALL = $00;
FLT_INQ_RESULT = $01;
FLT_CONN_SETUP = $02;
INQ_RESULT_RETURN_ALL = $00;
INQ_RESULT_RETURN_CLASS = $01;
INQ_RESULT_RETURN_BDADDR = $02;
CONN_SETUP_ALLOW_ALL = $00;
CONN_SETUP_ALLOW_CLASS = $01;
CONN_SETUP_ALLOW_BDADDR = $02;
CONN_SETUP_AUTO_OFF = $01;
CONN_SETUP_AUTO_ON = $02;
OCF_FLUSH = $0008;
OCF_READ_PIN_TYPE = $0009;
type
read_pin_type_rp = record
status: cuint8;
pin_type: cuint8;
end;
const
READ_PIN_TYPE_RP_SIZE = 2;
OCF_WRITE_PIN_TYPE = $000A;
type
write_pin_type_cp = record
pin_type: cuint8;
end;
const
WRITE_PIN_TYPE_CP_SIZE = 1;
OCF_CREATE_NEW_UNIT_KEY = $000B;
OCF_READ_STORED_LINK_KEY = $000D;
type
read_stored_link_key_cp = record
bdaddr: bdaddr_t;
read_all: cuint8;
end;
const
READ_STORED_LINK_KEY_CP_SIZE = 7;
type
read_stored_link_key_rp = record
status: cuint8;
max_keys: cuint16;
num_keys: cuint16;
end;
const
READ_STORED_LINK_KEY_RP_SIZE = 5;
OCF_WRITE_STORED_LINK_KEY = $0011;
type
write_stored_link_key_cp = record
num_keys: cuint8;
end;
const
WRITE_STORED_LINK_KEY_CP_SIZE = 1;
type
write_stored_link_key_rp = record
status: cuint8;
num_keys: cuint8;
end;
const
READ_WRITE_LINK_KEY_RP_SIZE = 2;
OCF_DELETE_STORED_LINK_KEY = $0012;
type
delete_stored_link_key_cp = record
bdaddr: bdaddr_t;
delete_all: cuint8;
end;
const
DELETE_STORED_LINK_KEY_CP_SIZE = 7;
type
delete_stored_link_key_rp = record
status: cuint8;
num_keys: cuint16;
end;
const
DELETE_STORED_LINK_KEY_RP_SIZE = 3;
OCF_CHANGE_LOCAL_NAME = $0013;
type
TArray0to2481Ofcuint8 = array[0..248-1] of cuint8;
change_local_name_cp = record
name: TArray0to2481Ofcuint8;
end;
const
CHANGE_LOCAL_NAME_CP_SIZE = 248;
OCF_READ_LOCAL_NAME = $0014;
type
read_local_name_rp = record
status: cuint8;
name: TArray0to2481Ofcuint8;
end;
const
READ_LOCAL_NAME_RP_SIZE = 249;
OCF_READ_CONN_ACCEPT_TIMEOUT = $0015;
type
read_conn_accept_timeout_rp = record
status: cuint8;
timeout: cuint16;
end;
const
READ_CONN_ACCEPT_TIMEOUT_RP_SIZE = 3;
OCF_WRITE_CONN_ACCEPT_TIMEOUT = $0016;
type
write_conn_accept_timeout_cp = record
timeout: cuint16;
end;
const
WRITE_CONN_ACCEPT_TIMEOUT_CP_SIZE = 2;
OCF_READ_PAGE_TIMEOUT = $0017;
type
read_page_timeout_rp = record
status: cuint8;
timeout: cuint16;
end;
const
READ_PAGE_TIMEOUT_RP_SIZE = 3;
OCF_WRITE_PAGE_TIMEOUT = $0018;
type
write_page_timeout_cp = record
timeout: cuint16;
end;
const
WRITE_PAGE_TIMEOUT_CP_SIZE = 2;
OCF_READ_SCAN_ENABLE = $0019;
type
read_scan_enable_rp = record
status: cuint8;
enable: cuint8;
end;
const
READ_SCAN_ENABLE_RP_SIZE = 2;
OCF_WRITE_SCAN_ENABLE = $001A;
SCAN_DISABLED = $00;
SCAN_INQUIRY = $01;
SCAN_PAGE = $02;
OCF_READ_PAGE_ACTIVITY = $001B;
type
read_page_activity_rp = record
status: cuint8;
interval: cuint16;
window: cuint16;
end;
const
READ_PAGE_ACTIVITY_RP_SIZE = 5;
OCF_WRITE_PAGE_ACTIVITY = $001C;
type
write_page_activity_cp = record
interval: cuint16;
window: cuint16;
end;
const
WRITE_PAGE_ACTIVITY_CP_SIZE = 4;
OCF_READ_INQ_ACTIVITY = $001D;
type
read_inq_activity_rp = record
status: cuint8;
interval: cuint16;
window: cuint16;
end;
const
READ_INQ_ACTIVITY_RP_SIZE = 5;
OCF_WRITE_INQ_ACTIVITY = $001E;
type
write_inq_activity_cp = record
interval: cuint16;
window: cuint16;
end;
const
WRITE_INQ_ACTIVITY_CP_SIZE = 4;
OCF_READ_AUTH_ENABLE = $001F;
OCF_WRITE_AUTH_ENABLE = $0020;
AUTH_DISABLED = $00;
AUTH_ENABLED = $01;
OCF_READ_ENCRYPT_MODE = $0021;
OCF_WRITE_ENCRYPT_MODE = $0022;
ENCRYPT_DISABLED = $00;
ENCRYPT_P2P = $01;
ENCRYPT_BOTH = $02;
OCF_READ_CLASS_OF_DEV = $0023;
type
read_class_of_dev_rp = record
status: cuint8;
dev_class: TArray0to31Ofcuint8;
end;
const
READ_CLASS_OF_DEV_RP_SIZE = 4;
OCF_WRITE_CLASS_OF_DEV = $0024;
type
write_class_of_dev_cp = record
dev_class: TArray0to31Ofcuint8;
end;
const
WRITE_CLASS_OF_DEV_CP_SIZE = 3;
OCF_READ_VOICE_SETTING = $0025;
type
read_voice_setting_rp = record
status: cuint8;
voice_setting: cuint16;
end;
const
READ_VOICE_SETTING_RP_SIZE = 3;
OCF_WRITE_VOICE_SETTING = $0026;
type
write_voice_setting_cp = record
voice_setting: cuint16;
end;
const
WRITE_VOICE_SETTING_CP_SIZE = 2;
OCF_READ_AUTOMATIC_FLUSH_TIMEOUT = $0027;
OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT = $0028;
OCF_READ_NUM_BROADCAST_RETRANS = $0029;
OCF_WRITE_NUM_BROADCAST_RETRANS = $002A;
OCF_READ_HOLD_MODE_ACTIVITY = $002B;
OCF_WRITE_HOLD_MODE_ACTIVITY = $002C;
OCF_READ_TRANSMIT_POWER_LEVEL = $002D;
type
read_transmit_power_level_cp = record
handle: cuint16;
type_: cuint8;
end;
const
READ_TRANSMIT_POWER_LEVEL_CP_SIZE = 3;
type
read_transmit_power_level_rp = record
status: cuint8;
handle: cuint16;
level: cint8;
end;
const
READ_TRANSMIT_POWER_LEVEL_RP_SIZE = 4;
OCF_SET_CONTROLLER_TO_HOST_FC = $0031;
OCF_HOST_BUFFER_SIZE = $0033;
type
host_buffer_size_cp = record
acl_mtu: cuint16;
sco_mtu: cuint8;
acl_max_pkt: cuint16;
sco_max_pkt: cuint16;
end;
const
HOST_BUFFER_SIZE_CP_SIZE = 7;
OCF_HOST_NUM_COMP_PKTS = $0035;
type
host_num_comp_pkts_cp = record
num_hndl: cuint8;
end;
const
HOST_NUM_COMP_PKTS_CP_SIZE = 1;
OCF_READ_LINK_SUPERVISION_TIMEOUT = $0036;
type
read_link_supervision_timeout_rp = record
status: cuint8;
handle: cuint16;
timeout: cuint16;
end;
const
READ_LINK_SUPERVISION_TIMEOUT_RP_SIZE = 5;
OCF_WRITE_LINK_SUPERVISION_TIMEOUT = $0037;
type
write_link_supervision_timeout_cp = record
handle: cuint16;
timeout: cuint16;
end;
const
WRITE_LINK_SUPERVISION_TIMEOUT_CP_SIZE = 4;
type
write_link_supervision_timeout_rp = record
status: cuint8;
handle: cuint16;
end;
const
WRITE_LINK_SUPERVISION_TIMEOUT_RP_SIZE = 3;
OCF_READ_NUM_SUPPORTED_IAC = $0038;
MAX_IAC_LAP = $40;
OCF_READ_CURRENT_IAC_LAP = $0039;
type
TArray0to31OfArray0toMAX_IAC_LAP1Ofcuint8 = array[0..3-1] of array[0..MAX_IAC_LAP-1] of cuint8;
read_current_iac_lap_rp = record
status: cuint8;
num_current_iac: cuint8;
lap: TArray0to31OfArray0toMAX_IAC_LAP1Ofcuint8;
end;
const
READ_CURRENT_IAC_LAP_RP_SIZE = 2+3*MAX_IAC_LAP;
OCF_WRITE_CURRENT_IAC_LAP = $003A;
type
write_current_iac_lap_cp = record
num_current_iac: cuint8;
lap: TArray0to31OfArray0toMAX_IAC_LAP1Ofcuint8;
end;
const
WRITE_CURRENT_IAC_LAP_CP_SIZE = 1+3*MAX_IAC_LAP;
OCF_READ_PAGE_SCAN_PERIOD_MODE = $003B;
OCF_WRITE_PAGE_SCAN_PERIOD_MODE = $003C;
OCF_READ_PAGE_SCAN_MODE = $003D;
OCF_WRITE_PAGE_SCAN_MODE = $003E;
OCF_SET_AFH_CLASSIFICATION = $003F;
type
TArray0to101Ofcuint8 = array[0..10-1] of cuint8;
set_afh_classification_cp = record
map: TArray0to101Ofcuint8;
end;
const
SET_AFH_CLASSIFICATION_CP_SIZE = 10;
type
set_afh_classification_rp = record
status: cuint8;
end;
const
SET_AFH_CLASSIFICATION_RP_SIZE = 1;
OCF_READ_INQUIRY_SCAN_TYPE = $0042;
type
read_inquiry_scan_type_rp = record
status: cuint8;
type_: cuint8;
end;
const
READ_INQUIRY_SCAN_TYPE_RP_SIZE = 2;
OCF_WRITE_INQUIRY_SCAN_TYPE = $0043;
type
write_inquiry_scan_type_cp = record
type_: cuint8;
end;
const
WRITE_INQUIRY_SCAN_TYPE_CP_SIZE = 1;
type
write_inquiry_scan_type_rp = record
status: cuint8;
end;
const
WRITE_INQUIRY_SCAN_TYPE_RP_SIZE = 1;
OCF_READ_INQUIRY_MODE = $0044;
type
read_inquiry_mode_rp = record
status: cuint8;
mode: cuint8;
end;
const
READ_INQUIRY_MODE_RP_SIZE = 2;
OCF_WRITE_INQUIRY_MODE = $0045;
type
write_inquiry_mode_cp = record
mode: cuint8;
end;
const
WRITE_INQUIRY_MODE_CP_SIZE = 1;
type
write_inquiry_mode_rp = record
status: cuint8;
end;
const
WRITE_INQUIRY_MODE_RP_SIZE = 1;
OCF_READ_PAGE_SCAN_TYPE = $0046;
OCF_WRITE_PAGE_SCAN_TYPE = $0047;
OCF_READ_AFH_MODE = $0048;
type
read_afh_mode_rp = record
status: cuint8;
mode: cuint8;
end;
const
READ_AFH_MODE_RP_SIZE = 2;
OCF_WRITE_AFH_MODE = $0049;
type
write_afh_mode_cp = record
mode: cuint8;
end;
const
WRITE_AFH_MODE_CP_SIZE = 1;
type
write_afh_mode_rp = record
status: cuint8;
end;
const
WRITE_AFH_MODE_RP_SIZE = 1;
OCF_READ_EXT_INQUIRY_RESPONSE = $0051;
type
TArray0to2401Ofcuint8 = array[0..240-1] of cuint8;
read_ext_inquiry_response_rp = record
status: cuint8;
fec: cuint8;
data: TArray0to2401Ofcuint8;
end;
const
READ_EXT_INQUIRY_RESPONSE_RP_SIZE = 242;
OCF_WRITE_EXT_INQUIRY_RESPONSE = $0052;
type
write_ext_inquiry_response_cp = record
fec: cuint8;
data: TArray0to2401Ofcuint8;
end;
const
WRITE_EXT_INQUIRY_RESPONSE_CP_SIZE = 241;
type
write_ext_inquiry_response_rp = record
status: cuint8;
end;
const
WRITE_EXT_INQUIRY_RESPONSE_RP_SIZE = 1;
OCF_REFRESH_ENCRYPTION_KEY = $0053;
type
refresh_encryption_key_cp = record
handle: cuint16;
end;
const
REFRESH_ENCRYPTION_KEY_CP_SIZE = 2;
type
refresh_encryption_key_rp = record
status: cuint8;
end;
const
REFRESH_ENCRYPTION_KEY_RP_SIZE = 1;
OCF_READ_SIMPLE_PAIRING_MODE = $0055;
type
read_simple_pairing_mode_rp = record
status: cuint8;
mode: cuint8;
end;
const
READ_SIMPLE_PAIRING_MODE_RP_SIZE = 2;
OCF_WRITE_SIMPLE_PAIRING_MODE = $0056;
type
write_simple_pairing_mode_cp = record
mode: cuint8;
end;
const
WRITE_SIMPLE_PAIRING_MODE_CP_SIZE = 1;
type
write_simple_pairing_mode_rp = record
status: cuint8;
end;
const
WRITE_SIMPLE_PAIRING_MODE_RP_SIZE = 1;
OCF_READ_LOCAL_OOB_DATA = $0057;
type
read_local_oob_data_rp = record
status: cuint8;
hash: TArray0to161Ofcuint8;
randomizer: TArray0to161Ofcuint8;
end;
const
READ_LOCAL_OOB_DATA_RP_SIZE = 33;
OCF_READ_INQUIRY_TRANSMIT_POWER_LEVEL = $0058;
type
read_inquiry_transmit_power_level_rp = record
status: cuint8;
level: cint8;
end;
const
READ_INQUIRY_TRANSMIT_POWER_LEVEL_RP_SIZE = 2;
OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL = $0059;
type
write_inquiry_transmit_power_level_cp = record
level: cint8;
end;
const
WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_CP_SIZE = 1;
type
write_inquiry_transmit_power_level_rp = record
status: cuint8;
end;
const
WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_RP_SIZE = 1;
OCF_READ_DEFAULT_ERROR_DATA_REPORTING = $005A;
type
read_default_error_data_reporting_rp = record
status: cuint8;
reporting: cuint8;
end;
const
READ_DEFAULT_ERROR_DATA_REPORTING_RP_SIZE = 2;
OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING = $005B;
type
write_default_error_data_reporting_cp = record
reporting: cuint8;
end;
const
WRITE_DEFAULT_ERROR_DATA_REPORTING_CP_SIZE = 1;
type
write_default_error_data_reporting_rp = record
status: cuint8;
end;
const
WRITE_DEFAULT_ERROR_DATA_REPORTING_RP_SIZE = 1;
OCF_ENHANCED_FLUSH = $005F;
type
enhanced_flush_cp = record
handle: cuint16;
type_: cuint8;
end;
const
ENHANCED_FLUSH_CP_SIZE = 3;
OCF_SEND_KEYPRESS_NOTIFY = $0060;
type
send_keypress_notify_cp = record
bdaddr: bdaddr_t;
type_: cuint8;
end;
const
SEND_KEYPRESS_NOTIFY_CP_SIZE = 7;
type
send_keypress_notify_rp = record
status: cuint8;
end;
const
SEND_KEYPRESS_NOTIFY_RP_SIZE = 1;
OGF_INFO_PARAM = $04;
OCF_READ_LOCAL_VERSION = $0001;
type
read_local_version_rp = record
status: cuint8;
hci_ver: cuint8;
hci_rev: cuint16;
lmp_ver: cuint8;
manufacturer: cuint16;
lmp_subver: cuint16;
end;
const
READ_LOCAL_VERSION_RP_SIZE = 9;
OCF_READ_LOCAL_COMMANDS = $0002;
type
TArray0to641Ofcuint8 = array[0..64-1] of cuint8;
read_local_commands_rp = record
status: cuint8;
commands: TArray0to641Ofcuint8;
end;
const
READ_LOCAL_COMMANDS_RP_SIZE = 65;
OCF_READ_LOCAL_FEATURES = $0003;
type
read_local_features_rp = record
status: cuint8;
features: TArray0to81Ofcuint8;
end;
const
READ_LOCAL_FEATURES_RP_SIZE = 9;
OCF_READ_LOCAL_EXT_FEATURES = $0004;
type
read_local_ext_features_cp = record
page_num: cuint8;
end;
const
READ_LOCAL_EXT_FEATURES_CP_SIZE = 1;
type
read_local_ext_features_rp = record
status: cuint8;
page_num: cuint8;
max_page_num: cuint8;
features: TArray0to81Ofcuint8;
end;
const
READ_LOCAL_EXT_FEATURES_RP_SIZE = 11;
OCF_READ_BUFFER_SIZE = $0005;
type
read_buffer_size_rp = record
status: cuint8;
acl_mtu: cuint16;
sco_mtu: cuint8;
acl_max_pkt: cuint16;
sco_max_pkt: cuint16;
end;
const
READ_BUFFER_SIZE_RP_SIZE = 8;
OCF_READ_COUNTRY_CODE = $0007;
OCF_READ_BD_ADDR = $0009;
type
read_bd_addr_rp = record
status: cuint8;
bdaddr: bdaddr_t;
end;
const
READ_BD_ADDR_RP_SIZE = 7;
OGF_STATUS_PARAM = $05;
OCF_READ_FAILED_CONTACT_COUNTER = $0001;
type
read_failed_contact_counter_rp = record
status: cuint8;
handle: cuint16;
counter: cuint8;
end;
const
READ_FAILED_CONTACT_COUNTER_RP_SIZE = 4;
OCF_RESET_FAILED_CONTACT_COUNTER = $0002;
type
reset_failed_contact_counter_rp = record
status: cuint8;
handle: cuint16;
end;
const
RESET_FAILED_CONTACT_COUNTER_RP_SIZE = 4;
OCF_READ_LINK_QUALITY = $0003;
type
read_link_quality_rp = record
status: cuint8;
handle: cuint16;
link_quality: cuint8;
end;
const
READ_LINK_QUALITY_RP_SIZE = 4;
OCF_READ_RSSI = $0005;
type
read_rssi_rp = record
status: cuint8;
handle: cuint16;
rssi: cint8;
end;
const
READ_RSSI_RP_SIZE = 4;
OCF_READ_AFH_MAP = $0006;
type
read_afh_map_rp = record
status: cuint8;
handle: cuint16;
mode: cuint8;
map: TArray0to101Ofcuint8;
end;
const
READ_AFH_MAP_RP_SIZE = 14;
OCF_READ_CLOCK = $0007;
type
read_clock_cp = record
handle: cuint16;
which_clock: cuint8;
end;
const
READ_CLOCK_CP_SIZE = 3;
type
read_clock_rp = record
status: cuint8;
handle: cuint16;
clock: cuint32;
accuracy: cuint16;
end;
const
READ_CLOCK_RP_SIZE = 9;
OGF_TESTING_CMD = $3e;
OCF_READ_LOOPBACK_MODE = $0001;
OCF_WRITE_LOOPBACK_MODE = $0002;
OCF_ENABLE_DEVICE_UNDER_TEST_MODE = $0003;
OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE = $0004;
type
write_simple_pairing_debug_mode_cp = record
mode: cuint8;
end;
const
WRITE_SIMPLE_PAIRING_DEBUG_MODE_CP_SIZE = 1;
type
write_simple_pairing_debug_mode_rp = record
status: cuint8;
end;
const
WRITE_SIMPLE_PAIRING_DEBUG_MODE_RP_SIZE = 1;
OGF_VENDOR_CMD = $3f;
EVT_INQUIRY_COMPLETE = $01;
EVT_INQUIRY_RESULT = $02;
type
inquiry_info = record
bdaddr: bdaddr_t;
pscan_rep_mode: cuint8;
pscan_period_mode: cuint8;
pscan_mode: cuint8;
dev_class: TArray0to31Ofcuint8;
clock_offset: cuint16;
end;
const
INQUIRY_INFO_SIZE = 14;
EVT_CONN_COMPLETE_1 = $03;
type
evt_conn_complete = record
status: cuint8;
handle: cuint16;
bdaddr: bdaddr_t;
link_type: cuint8;
encr_mode: cuint8;
end;
const
EVT_CONN_COMPLETE_SIZE = 13;
EVT_CONN_REQUEST_1 = $04;
type
evt_conn_request = record
bdaddr: bdaddr_t;
dev_class: TArray0to31Ofcuint8;
link_type: cuint8;
end;
const
EVT_CONN_REQUEST_SIZE = 10;
EVT_DISCONN_COMPLETE_1 = $05;
type
evt_disconn_complete = record
status: cuint8;
handle: cuint16;
reason: cuint8;
end;
const
EVT_DISCONN_COMPLETE_SIZE = 4;
EVT_AUTH_COMPLETE_1 = $06;
type
evt_auth_complete = record
status: cuint8;
handle: cuint16;
end;
const
EVT_AUTH_COMPLETE_SIZE = 3;
EVT_REMOTE_NAME_REQ_COMPLETE_1 = $07;
type
evt_remote_name_req_complete = record
status: cuint8;
bdaddr: bdaddr_t;
name: TArray0to2481Ofcuint8;
end;
const
EVT_REMOTE_NAME_REQ_COMPLETE_SIZE = 255;
EVT_ENCRYPT_CHANGE_1 = $08;
type
evt_encrypt_change = record
status: cuint8;
handle: cuint16;
encrypt: cuint8;
end;
const
EVT_ENCRYPT_CHANGE_SIZE = 5;
EVT_CHANGE_CONN_LINK_KEY_COMPLETE_1 = $09;
type
evt_change_conn_link_key_complete = record
status: cuint8;
handle: cuint16;
end;
const
EVT_CHANGE_CONN_LINK_KEY_COMPLETE_SIZE = 3;
EVT_MASTER_LINK_KEY_COMPLETE_1 = $0A;
type
evt_master_link_key_complete = record
status: cuint8;
handle: cuint16;
key_flag: cuint8;
end;
const
EVT_MASTER_LINK_KEY_COMPLETE_SIZE = 4;
EVT_READ_REMOTE_FEATURES_COMPLETE_1 = $0B;
type
evt_read_remote_features_complete = record
status: cuint8;
handle: cuint16;
features: TArray0to81Ofcuint8;
end;
const
EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE = 11;
EVT_READ_REMOTE_VERSION_COMPLETE_1 = $0C;
type
evt_read_remote_version_complete = record
status: cuint8;
handle: cuint16;
lmp_ver: cuint8;
manufacturer: cuint16;
lmp_subver: cuint16;
end;
const
EVT_READ_REMOTE_VERSION_COMPLETE_SIZE = 8;
EVT_QOS_SETUP_COMPLETE_1 = $0D;
type
evt_qos_setup_complete = record
status: cuint8;
handle: cuint16;
flags: cuint8;
qos: hci_qos;
end;
const
EVT_QOS_SETUP_COMPLETE_SIZE = (4 + HCI_QOS_CP_SIZE);
EVT_CMD_COMPLETE_1 = $0E;
type
evt_cmd_complete = record
ncmd: cuint8;
opcode: cuint16;
end;
const
EVT_CMD_COMPLETE_SIZE = 3;
EVT_CMD_STATUS_1 = $0F;
type
evt_cmd_status = record
status: cuint8;
ncmd: cuint8;
opcode: cuint16;
end;
const
EVT_CMD_STATUS_SIZE = 4;
EVT_HARDWARE_ERROR_1 = $10;
type
evt_hardware_error = record
code: cuint8;
end;
const
EVT_HARDWARE_ERROR_SIZE = 1;
EVT_FLUSH_OCCURRED = $11;
type
evt_flush_occured = record
handle: cuint16;
end;
const
EVT_FLUSH_OCCURRED_SIZE = 2;
EVT_ROLE_CHANGE_1 = $12;
type
evt_role_change = record
status: cuint8;
bdaddr: bdaddr_t;
role: cuint8;
end;
const
EVT_ROLE_CHANGE_SIZE = 8;
EVT_NUM_COMP_PKTS_1 = $13;
type
evt_num_comp_pkts = record
num_hndl: cuint8;
end;
const
EVT_NUM_COMP_PKTS_SIZE = 1;
EVT_MODE_CHANGE_1 = $14;
type
evt_mode_change = record
status: cuint8;
handle: cuint16;
mode: cuint8;
interval: cuint16;
end;
const
EVT_MODE_CHANGE_SIZE = 6;
EVT_RETURN_LINK_KEYS_1 = $15;
type
evt_return_link_keys = record
num_keys: cuint8;
end;
const
EVT_RETURN_LINK_KEYS_SIZE = 1;
EVT_PIN_CODE_REQ_1 = $16;
type
evt_pin_code_req = record
bdaddr: bdaddr_t;
end;
const
EVT_PIN_CODE_REQ_SIZE = 6;
EVT_LINK_KEY_REQ_1 = $17;
type
evt_link_key_req = record
bdaddr: bdaddr_t;
end;
const
EVT_LINK_KEY_REQ_SIZE = 6;
EVT_LINK_KEY_NOTIFY_1 = $18;
type
evt_link_key_notify = record
bdaddr: bdaddr_t;
link_key: TArray0to161Ofcuint8;
key_type: cuint8;
end;
const
EVT_LINK_KEY_NOTIFY_SIZE = 23;
EVT_LOOPBACK_COMMAND = $19;
EVT_DATA_BUFFER_OVERFLOW_1 = $1A;
type
evt_data_buffer_overflow = record
link_type: cuint8;
end;
const
EVT_DATA_BUFFER_OVERFLOW_SIZE = 1;
EVT_MAX_SLOTS_CHANGE_1 = $1B;
type
evt_max_slots_change = record
handle: cuint16;
max_slots: cuint8;
end;
const
EVT_MAX_SLOTS_CHANGE_SIZE = 3;
EVT_READ_CLOCK_OFFSET_COMPLETE_1 = $1C;
type
evt_read_clock_offset_complete = record
status: cuint8;
handle: cuint16;
clock_offset: cuint16;
end;
const
EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE = 5;
EVT_CONN_PTYPE_CHANGED_1 = $1D;
type
evt_conn_ptype_changed = record
status: cuint8;
handle: cuint16;
ptype: cuint16;
end;
const
EVT_CONN_PTYPE_CHANGED_SIZE = 5;
EVT_QOS_VIOLATION_1 = $1E;
type
evt_qos_violation = record
handle: cuint16;
end;
const
EVT_QOS_VIOLATION_SIZE = 2;
EVT_PSCAN_REP_MODE_CHANGE_1 = $20;
type
evt_pscan_rep_mode_change = record
bdaddr: bdaddr_t;
pscan_rep_mode: cuint8;
end;
const
EVT_PSCAN_REP_MODE_CHANGE_SIZE = 7;
EVT_FLOW_SPEC_COMPLETE_1 = $21;
type
evt_flow_spec_complete = record
status: cuint8;
handle: cuint16;
flags: cuint8;
direction: cuint8;
qos: hci_qos;
end;
const
EVT_FLOW_SPEC_COMPLETE_SIZE = (5 + HCI_QOS_CP_SIZE);
EVT_INQUIRY_RESULT_WITH_RSSI = $22;
type
inquiry_info_with_rssi = record
bdaddr: bdaddr_t;
pscan_rep_mode: cuint8;
pscan_period_mode: cuint8;
dev_class: TArray0to31Ofcuint8;
clock_offset: cuint16;
rssi: cint8;
end;
const
INQUIRY_INFO_WITH_RSSI_SIZE = 14;
type
inquiry_info_with_rssi_and_pscan_mode = record
bdaddr: bdaddr_t;
pscan_rep_mode: cuint8;
pscan_period_mode: cuint8;
pscan_mode: cuint8;
dev_class: TArray0to31Ofcuint8;
clock_offset: cuint16;
rssi: cint8;
end;
const
INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE = 15;
EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_1 = $23;
type
evt_read_remote_ext_features_complete = record
status: cuint8;
handle: cuint16;
page_num: cuint8;
max_page_num: cuint8;
features: TArray0to81Ofcuint8;
end;
const
EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE = 13;
EVT_SYNC_CONN_COMPLETE_1 = $2C;
type
evt_sync_conn_complete = record
status: cuint8;
handle: cuint16;
bdaddr: bdaddr_t;
link_type: cuint8;
trans_interval: cuint8;
retrans_window: cuint8;
rx_pkt_len: cuint16;
tx_pkt_len: cuint16;
air_mode: cuint8;
end;
const
EVT_SYNC_CONN_COMPLETE_SIZE = 17;
EVT_SYNC_CONN_CHANGED_1 = $2D;
type
evt_sync_conn_changed = record
status: cuint8;
handle: cuint16;
trans_interval: cuint8;
retrans_window: cuint8;
rx_pkt_len: cuint16;
tx_pkt_len: cuint16;
end;
const
EVT_SYNC_CONN_CHANGED_SIZE = 9;
EVT_SNIFF_SUBRATING_1 = $2E;
type
evt_sniff_subrating = record
status: cuint8;
handle: cuint16;
max_tx_latency: cuint16;
max_rx_latency: cuint16;
min_remote_timeout: cuint16;
min_local_timeout: cuint16;
end;
const
EVT_SNIFF_SUBRATING_SIZE = 11;
EVT_EXTENDED_INQUIRY_RESULT = $2F;
type
extended_inquiry_info = record
bdaddr: bdaddr_t;
pscan_rep_mode: cuint8;
pscan_period_mode: cuint8;
dev_class: TArray0to31Ofcuint8;
clock_offset: cuint16;
rssi: cint8;
data: TArray0to2401Ofcuint8;
end;
const
EXTENDED_INQUIRY_INFO_SIZE = 254;
EVT_ENCRYPTION_KEY_REFRESH_COMPLETE_1 = $30;
type
evt_encryption_key_refresh_complete = record
status: cuint8;
handle: cuint16;
end;
const
EVT_ENCRYPTION_KEY_REFRESH_COMPLETE_SIZE = 3;
EVT_IO_CAPABILITY_REQUEST_1 = $31;
type
evt_io_capability_request = record
bdaddr: bdaddr_t;
end;
const
EVT_IO_CAPABILITY_REQUEST_SIZE = 6;
EVT_IO_CAPABILITY_RESPONSE_1 = $32;
type
evt_io_capability_response = record
bdaddr: bdaddr_t;
capability: cuint8;
oob_data: cuint8;
authentication: cuint8;
end;
const
EVT_IO_CAPABILITY_RESPONSE_SIZE = 9;
EVT_USER_CONFIRM_REQUEST_1 = $33;
type
evt_user_confirm_request = record
bdaddr: bdaddr_t;
passkey: cuint32;
end;
const
EVT_USER_CONFIRM_REQUEST_SIZE = 10;
EVT_USER_PASSKEY_REQUEST_1 = $34;
type
evt_user_passkey_request = record
bdaddr: bdaddr_t;
end;
const
EVT_USER_PASSKEY_REQUEST_SIZE = 6;
EVT_REMOTE_OOB_DATA_REQUEST_1 = $35;
type
evt_remote_oob_data_request = record
bdaddr: bdaddr_t;
end;
const
EVT_REMOTE_OOB_DATA_REQUEST_SIZE = 6;
EVT_SIMPLE_PAIRING_COMPLETE_1 = $36;
type
evt_simple_pairing_complete = record
status: cuint8;
bdaddr: bdaddr_t;
end;
const
EVT_SIMPLE_PAIRING_COMPLETE_SIZE = 7;
EVT_LINK_SUPERVISION_TIMEOUT_CHANGED_1 = $38;
type
evt_link_supervision_timeout_changed = record
handle: cuint16;
timeout: cuint16;
end;
const
EVT_LINK_SUPERVISION_TIMEOUT_CHANGED_SIZE = 4;
EVT_ENHANCED_FLUSH_COMPLETE_1 = $39;
type
evt_enhanced_flush_complete = record
handle: cuint16;
end;
const
EVT_ENHANCED_FLUSH_COMPLETE_SIZE = 2;
EVT_USER_PASSKEY_NOTIFY_1 = $3B;
type
evt_user_passkey_notify = record
bdaddr: bdaddr_t;
passkey: cuint32;
end;
const
EVT_USER_PASSKEY_NOTIFY_SIZE = 10;
EVT_KEYPRESS_NOTIFY_1 = $3C;
type
evt_keypress_notify = record
bdaddr: bdaddr_t;
type_: cuint8;
end;
const
EVT_KEYPRESS_NOTIFY_SIZE = 7;
EVT_REMOTE_HOST_FEATURES_NOTIFY_1 = $3D;
type
evt_remote_host_features_notify = record
bdaddr: bdaddr_t;
features: TArray0to81Ofcuint8;
end;
const
EVT_REMOTE_HOST_FEATURES_NOTIFY_SIZE = 14;
EVT_TESTING = $FE;
EVT_VENDOR = $FF;
EVT_STACK_INTERNAL_1 = $FD;
type
evt_stack_internal = record
type_: cuint16;
data: TArray0to0Ofcuint8;
end;
const
EVT_STACK_INTERNAL_SIZE = 2;
EVT_SI_DEVICE_1 = $01;
type
evt_si_device = record
event: cuint16;
dev_id: cuint16;
end;
const
EVT_SI_DEVICE_SIZE = 4;
EVT_SI_SECURITY_1 = $02;
type
evt_si_security = record
event: cuint16;
proto: cuint16;
subproto: cuint16;
incoming: cuint8;
end;
const
HCI_TYPE_LEN = 1;
type
hci_command_hdr = record
opcode: cuint16;
plen: cuint8;
end;
const
HCI_COMMAND_HDR_SIZE = 3;
type
hci_event_hdr = record
evt: cuint8;
plen: cuint8;
end;
const
HCI_EVENT_HDR_SIZE = 2;
type
hci_acl_hdr = record
handle: cuint16;
dlen: cuint16;
end;
const
HCI_ACL_HDR_SIZE = 4;
type
hci_sco_hdr = record
handle: cuint16;
dlen: cuint8;
end;
const
HCI_SCO_HDR_SIZE = 3;
type
hci_msg_hdr = record
device: cuint16;
type_: cuint16;
plen: cuint16;
end;
const
HCI_MSG_HDR_SIZE = 6;
{$EndIf}
const
HCI_DATA_DIR = 1;
HCI_FILTER_1 = 2;
HCI_TIME_STAMP = 3;
HCI_CMSG_DIR = $0001;
HCI_CMSG_TSTAMP = $0002;
type
sockaddr_hci = record
hci_family: sa_family_t;
hci_dev: cushort;
end;
const
HCI_DEV_NONE = $ffff;
type
TArray0to21Ofcuint32 = array[0..2-1] of cuint32;
hci_filter = record
type_mask: cuint32;
event_mask: TArray0to21Ofcuint32;
opcode: cuint16;
end;
const
HCI_FLT_TYPE_BITS = 31;
HCI_FLT_EVENT_BITS = 63;
HCI_FLT_OGF_BITS = 63;
HCI_FLT_OCF_BITS = 127;
type
hci_dev_stats = record
err_rx: cuint32;
err_tx: cuint32;
cmd_tx: cuint32;
evt_rx: cuint32;
acl_tx: cuint32;
acl_rx: cuint32;
sco_tx: cuint32;
sco_rx: cuint32;
byte_rx: cuint32;
byte_tx: cuint32;
end;
TArray0to81Ofcchar = array[0..8-1] of cchar;
hci_dev_info = record
dev_id: cuint16;
name: TArray0to81Ofcchar;
bdaddr: bdaddr_t;
flags: cuint32;
type_: cuint8;
features: TArray0to81Ofcuint8;
pkt_type: cuint32;
link_policy: cuint32;
link_mode: cuint32;
acl_mtu: cuint16;
acl_pkts: cuint16;
sco_mtu: cuint16;
sco_pkts: cuint16;
stat: hci_dev_stats;
end;
hci_conn_info = record
handle: cuint16;
bdaddr: bdaddr_t;
type_: cuint8;
out: cuint8;
state: cuint16;
link_mode: cuint32;
end;
hci_dev_req = record
dev_id: cuint16;
dev_opt: cuint32;
end;
TArray0to0Ofhci_dev_req = array[0..0] of hci_dev_req;
hci_dev_list_req = record
dev_num: cuint16;
dev_req: TArray0to0Ofhci_dev_req;
end;
TArray0to0Ofhci_conn_info = array[0..0] of hci_conn_info;
hci_conn_list_req = record
dev_id: cuint16;
conn_num: cuint16;
conn_info: TArray0to0Ofhci_conn_info;
end;
hci_conn_info_req = record
bdaddr: bdaddr_t;
type_: cuint8;
conn_info: TArray0to0Ofhci_conn_info;
end;
hci_inquiry_req = record
dev_id: cuint16;
flags: cuint16;
lap: TArray0to31Ofcuint8;
length: cuint8;
num_rsp: cuint8;
end;
const
IREQ_CACHE_FLUSH = $0001;
type
hci_remotename_req = record
dev_id: cuint16;
flags: cuint16;
bdaddr: bdaddr_t;
name: TArray0to2481Ofcuint8;
end;
{$EndIf}
{$IfNDef __HCI_LIB_H}
type
hci_request = record
ogf: cuint16;
ocf: cuint16;
event: cint;
cparam: pointer;
clen: cint;
rparam: pointer;
rlen: cint;
end;
hci_version = record
manufacturer: cuint16;
hci_ver: cuint8;
hci_rev: cuint16;
lmp_ver: cuint8;
lmp_subver: cuint16;
end;
function hci_open_dev(dev_id: cint): cint; cdecl; external;
function hci_close_dev(dd: cint): cint; cdecl; external;
function hci_send_cmd(dd: cint; ogf: cuint16; ocf: cuint16; plen: cuint8; param: pointer): cint; cdecl; external;
type
Phci_request = ^hci_request;
function hci_send_req(dd: cint; req: Phci_request; timeout: cint): cint; cdecl; external;
function hci_create_connection(dd: cint; bdaddr: Pbdaddr_t; ptype: cuint16; clkoffset: cuint16; rswitch: cuint8; handle: pcuint16; to_: cint): cint; cdecl; external;
function hci_disconnect(dd: cint; handle: cuint16; reason: cuint8; to_: cint): cint; cdecl; external;
type
Pinquiry_info = ^inquiry_info;
PPinquiry_info = ^Pinquiry_info;
function hci_inquiry_1(dev_id: cint; len: cint; num_rsp: cint; lap: pcuint8; ii: PPinquiry_info; flags: clong): cint; cdecl; external name 'hci_inquiry';
type
Phci_dev_info = ^hci_dev_info;
function hci_devinfo(dev_id: cint; di: Phci_dev_info): cint; cdecl; external;
function hci_devba(dev_id: cint; bdaddr: Pbdaddr_t): cint; cdecl; external;
function hci_devid(str: pcchar): cint; cdecl; external;
function hci_read_local_name(dd: cint; len: cint; name: pcchar; to_: cint): cint; cdecl; external;
function hci_write_local_name(dd: cint; name: pcchar; to_: cint): cint; cdecl; external;
function hci_read_remote_name(dd: cint; bdaddr: Pbdaddr_t; len: cint; name: pcchar; to_: cint): cint; cdecl; external;
function hci_read_remote_name_with_clock_offset(dd: cint; bdaddr: Pbdaddr_t; pscan_rep_mode: cuint8; clkoffset: cuint16; len: cint; name: pcchar; to_: cint): cint; cdecl; external;
function hci_read_remote_name_cancel(dd: cint; bdaddr: Pbdaddr_t; to_: cint): cint; cdecl; external;
type
Phci_version = ^hci_version;
function hci_read_remote_version(dd: cint; handle: cuint16; ver: Phci_version; to_: cint): cint; cdecl; external;
function hci_read_remote_features(dd: cint; handle: cuint16; features: pcuint8; to_: cint): cint; cdecl; external;
function hci_read_remote_ext_features(dd: cint; handle: cuint16; page: cuint8; max_page: pcuint8; features: pcuint8; to_: cint): cint; cdecl; external;
function hci_read_clock_offset(dd: cint; handle: cuint16; clkoffset: pcuint16; to_: cint): cint; cdecl; external;
function hci_read_local_version(dd: cint; ver: Phci_version; to_: cint): cint; cdecl; external;
function hci_read_local_commands(dd: cint; commands: pcuint8; to_: cint): cint; cdecl; external;
function hci_read_local_features(dd: cint; features: pcuint8; to_: cint): cint; cdecl; external;
function hci_read_local_ext_features(dd: cint; page: cuint8; max_page: pcuint8; features: pcuint8; to_: cint): cint; cdecl; external;
function hci_read_bd_addr(dd: cint; bdaddr: Pbdaddr_t; to_: cint): cint; cdecl; external;
function hci_read_class_of_dev(dd: cint; cls: pcuint8; to_: cint): cint; cdecl; external;
function hci_write_class_of_dev(dd: cint; cls: cuint32; to_: cint): cint; cdecl; external;
function hci_read_voice_setting(dd: cint; vs: pcuint16; to_: cint): cint; cdecl; external;
function hci_write_voice_setting(dd: cint; vs: cuint16; to_: cint): cint; cdecl; external;
function hci_read_current_iac_lap(dd: cint; num_iac: pcuint8; lap: pcuint8; to_: cint): cint; cdecl; external;
function hci_write_current_iac_lap(dd: cint; num_iac: cuint8; lap: pcuint8; to_: cint): cint; cdecl; external;
function hci_read_stored_link_key(dd: cint; bdaddr: Pbdaddr_t; all: cuint8; to_: cint): cint; cdecl; external;
function hci_write_stored_link_key(dd: cint; bdaddr: Pbdaddr_t; key: pcuint8; to_: cint): cint; cdecl; external;
function hci_delete_stored_link_key(dd: cint; bdaddr: Pbdaddr_t; all: cuint8; to_: cint): cint; cdecl; external;
function hci_authenticate_link(dd: cint; handle: cuint16; to_: cint): cint; cdecl; external;
function hci_encrypt_link(dd: cint; handle: cuint16; encrypt: cuint8; to_: cint): cint; cdecl; external;
function hci_change_link_key(dd: cint; handle: cuint16; to_: cint): cint; cdecl; external;
function hci_switch_role(dd: cint; bdaddr: Pbdaddr_t; role: cuint8; to_: cint): cint; cdecl; external;
function hci_park_mode(dd: cint; handle: cuint16; max_interval: cuint16; min_interval: cuint16; to_: cint): cint; cdecl; external;
function hci_exit_park_mode(dd: cint; handle: cuint16; to_: cint): cint; cdecl; external;
function hci_read_inquiry_scan_type(dd: cint; type_: pcuint8; to_: cint): cint; cdecl; external;
function hci_write_inquiry_scan_type(dd: cint; type_: cuint8; to_: cint): cint; cdecl; external;
function hci_read_inquiry_mode(dd: cint; mode: pcuint8; to_: cint): cint; cdecl; external;
function hci_write_inquiry_mode(dd: cint; mode: cuint8; to_: cint): cint; cdecl; external;
function hci_read_afh_mode(dd: cint; mode: pcuint8; to_: cint): cint; cdecl; external;
function hci_write_afh_mode(dd: cint; mode: cuint8; to_: cint): cint; cdecl; external;
function hci_read_ext_inquiry_response(dd: cint; fec: pcuint8; data: pcuint8; to_: cint): cint; cdecl; external;
function hci_write_ext_inquiry_response(dd: cint; fec: cuint8; data: pcuint8; to_: cint): cint; cdecl; external;
function hci_read_simple_pairing_mode(dd: cint; mode: pcuint8; to_: cint): cint; cdecl; external;
function hci_write_simple_pairing_mode(dd: cint; mode: cuint8; to_: cint): cint; cdecl; external;
function hci_read_local_oob_data(dd: cint; hash: pcuint8; randomizer: pcuint8; to_: cint): cint; cdecl; external;
function hci_read_transmit_power_level(dd: cint; handle: cuint16; type_: cuint8; level: pcint8; to_: cint): cint; cdecl; external;
function hci_read_link_supervision_timeout(dd: cint; handle: cuint16; timeout: pcuint16; to_: cint): cint; cdecl; external;
function hci_write_link_supervision_timeout(dd: cint; handle: cuint16; timeout: cuint16; to_: cint): cint; cdecl; external;
function hci_set_afh_classification(dd: cint; map: pcuint8; to_: cint): cint; cdecl; external;
function hci_read_link_quality(dd: cint; handle: cuint16; link_quality: pcuint8; to_: cint): cint; cdecl; external;
function hci_read_rssi(dd: cint; handle: cuint16; rssi: pcint8; to_: cint): cint; cdecl; external;
function hci_read_afh_map(dd: cint; handle: cuint16; mode: pcuint8; map: pcuint8; to_: cint): cint; cdecl; external;
function hci_read_clock(dd: cint; handle: cuint16; which: cuint8; clock: pcuint32; accuracy: pcuint16; to_: cint): cint; cdecl; external;
function hci_local_name(dd: cint; len: cint; name: pcchar; to_: cint): cint; cdecl; external;
function hci_remote_name(dd: cint; bdaddr: Pbdaddr_t; len: cint; name: pcchar; to_: cint): cint; cdecl; external;
type
funcintddintdev_idlongarg = function(dd: cint; dev_id: cint; arg: clong): cint; cdecl;
function hci_for_each_dev(flag: cint; func: funcintddintdev_idlongarg; arg: clong): cint; cdecl; external;
function hci_get_route(bdaddr: Pbdaddr_t): cint; cdecl; external;
function hci_dtypetostr(type_: cint): pcchar; cdecl; external;
function hci_dflagstostr(flags: cuint32): pcchar; cdecl; external;
function hci_ptypetostr(ptype: cuint): pcchar; cdecl; external;
function hci_strtoptype(str: pcchar; val: pcuint): cint; cdecl; external;
function hci_scoptypetostr(ptype: cuint): pcchar; cdecl; external;
function hci_strtoscoptype(str: pcchar; val: pcuint): cint; cdecl; external;
function hci_lptostr(ptype: cuint): pcchar; cdecl; external;
function hci_strtolp(str: pcchar; val: pcuint): cint; cdecl; external;
function hci_lmtostr(ptype: cuint): pcchar; cdecl; external;
function hci_strtolm(str: pcchar; val: pcuint): cint; cdecl; external;
function hci_cmdtostr(cmd: cuint): pcchar; cdecl; external;
function hci_commandstostr(commands: pcuint8; pref: pcchar; width: cint): pcchar; cdecl; external;
function hci_vertostr(ver: cuint): pcchar; cdecl; external;
function hci_strtover(str: pcchar; ver: pcuint): cint; cdecl; external;
function lmp_vertostr(ver: cuint): pcchar; cdecl; external;
function lmp_strtover(str: pcchar; ver: pcuint): cint; cdecl; external;
function lmp_featurestostr(features: pcuint8; pref: pcchar; width: cint): pcchar; cdecl; external;
{$EndIf}
{$IfNDef __HIDP_H}
const
HIDP_MINIMUM_MTU = 48;
HIDP_DEFAULT_MTU = 48;
{off $Define HIDPCONNADD:=_IOW('H', 200, int)}
{off $Define HIDPCONNDEL:=_IOW('H', 201, int)}
{off $Define HIDPGETCONNLIST:=_IOR('H', 210, int)}
{off $Define HIDPGETCONNINFO:=_IOR('H', 211, int)}
const
HIDP_VIRTUAL_CABLE_UNPLUG = 0;
HIDP_BOOT_PROTOCOL_MODE = 1;
HIDP_BLUETOOTH_VENDOR_ID = 9;
type
TArray0to1281Ofcchar = array[0..128-1] of cchar;
hidp_connadd_req = record
ctrl_sock: cint;
intr_sock: cint;
parser: cuint16;
rd_size: cuint16;
rd_data: pcuint8;
country: cuint8;
subclass: cuint8;
vendor: cuint16;
product: cuint16;
version: cuint16;
flags: cuint32;
idle_to: cuint32;
name: TArray0to1281Ofcchar;
end;
hidp_conndel_req = record
bdaddr: bdaddr_t;
flags: cuint32;
end;
hidp_conninfo = record
bdaddr: bdaddr_t;
flags: cuint32;
state: cuint16;
vendor: cuint16;
product: cuint16;
version: cuint16;
name: TArray0to1281Ofcchar;
end;
Phidp_conninfo = ^hidp_conninfo;
hidp_connlist_req = record
cnum: cuint32;
ci: Phidp_conninfo;
end;
{$EndIf}
{$IfNDef __L2CAP_H}
const
L2CAP_DEFAULT_MTU = 672;
L2CAP_DEFAULT_FLUSH_TO = $FFFF;
{off $Define L2CAP_CONN_TIMEOUT:=(HZ * 40)}
type
sockaddr_l2 = record
l2_family: sa_family_t;
l2_psm: cushort;
l2_bdaddr: bdaddr_t;
end;
const
L2CAP_OPTIONS_1 = $01;
type
l2cap_options = record
omtu: cuint16;
imtu: cuint16;
flush_to: cuint16;
mode: cuint8;
end;
const
L2CAP_CONNINFO_1 = $02;
type
l2cap_conninfo = record
hci_handle: cuint16;
dev_class: TArray0to31Ofcuint8;
end;
const
L2CAP_LM = $03;
L2CAP_LM_MASTER = $0001;
L2CAP_LM_AUTH = $0002;
L2CAP_LM_ENCRYPT = $0004;
L2CAP_LM_TRUSTED = $0008;
L2CAP_LM_RELIABLE = $0010;
L2CAP_LM_SECURE = $0020;
L2CAP_COMMAND_REJ = $01;
L2CAP_CONN_REQ_1 = $02;
L2CAP_CONN_RSP_1 = $03;
L2CAP_CONF_REQ_1 = $04;
L2CAP_CONF_RSP_1 = $05;
L2CAP_DISCONN_REQ_1 = $06;
L2CAP_DISCONN_RSP_1 = $07;
L2CAP_ECHO_REQ = $08;
L2CAP_ECHO_RSP = $09;
L2CAP_INFO_REQ_1 = $0a;
L2CAP_INFO_RSP_1 = $0b;
type
l2cap_hdr = record
len: cuint16;
cid: cuint16;
end;
const
L2CAP_HDR_SIZE = 4;
type
l2cap_cmd_hdr = record
code: cuint8;
ident: cuint8;
len: cuint16;
end;
const
L2CAP_CMD_HDR_SIZE = 4;
type
l2cap_cmd_rej = record
reason: cuint16;
end;
const
L2CAP_CMD_REJ_SIZE = 2;
type
l2cap_conn_req = record
psm: cuint16;
scid: cuint16;
end;
const
L2CAP_CONN_REQ_SIZE = 4;
type
l2cap_conn_rsp = record
dcid: cuint16;
scid: cuint16;
result: cuint16;
status: cuint16;
end;
const
L2CAP_CONN_RSP_SIZE = 8;
L2CAP_CR_SUCCESS = $0000;
L2CAP_CR_PEND = $0001;
L2CAP_CR_BAD_PSM = $0002;
L2CAP_CR_SEC_BLOCK = $0003;
L2CAP_CR_NO_MEM = $0004;
L2CAP_CS_NO_INFO = $0000;
L2CAP_CS_AUTHEN_PEND = $0001;
L2CAP_CS_AUTHOR_PEND = $0002;
type
l2cap_conf_req = record
dcid: cuint16;
flags: cuint16;
data: TArray0to0Ofcuint8;
end;
const
L2CAP_CONF_REQ_SIZE = 4;
type
l2cap_conf_rsp = record
scid: cuint16;
flags: cuint16;
result: cuint16;
data: TArray0to0Ofcuint8;
end;
const
L2CAP_CONF_RSP_SIZE = 6;
L2CAP_CONF_SUCCESS = $0000;
L2CAP_CONF_UNACCEPT = $0001;
L2CAP_CONF_REJECT = $0002;
L2CAP_CONF_UNKNOWN = $0003;
type
l2cap_conf_opt = record
type_: cuint8;
len: cuint8;
val: TArray0to0Ofcuint8;
end;
const
L2CAP_CONF_OPT_SIZE = 2;
L2CAP_CONF_MTU = $01;
L2CAP_CONF_FLUSH_TO = $02;
L2CAP_CONF_QOS = $03;
L2CAP_CONF_RFC = $04;
L2CAP_CONF_RFC_MODE = $04;
L2CAP_CONF_MAX_SIZE = 22;
L2CAP_MODE_BASIC = $00;
L2CAP_MODE_RETRANS = $01;
L2CAP_MODE_FLOWCTL = $02;
type
l2cap_disconn_req = record
dcid: cuint16;
scid: cuint16;
end;
const
L2CAP_DISCONN_REQ_SIZE = 4;
type
l2cap_disconn_rsp = record
dcid: cuint16;
scid: cuint16;
end;
const
L2CAP_DISCONN_RSP_SIZE = 4;
type
l2cap_info_req = record
type_: cuint16;
end;
const
L2CAP_INFO_REQ_SIZE = 2;
type
l2cap_info_rsp = record
type_: cuint16;
result: cuint16;
data: TArray0to0Ofcuint8;
end;
const
L2CAP_INFO_RSP_SIZE = 4;
L2CAP_IT_CL_MTU = $0001;
L2CAP_IT_FEAT_MASK = $0002;
L2CAP_IR_SUCCESS = $0000;
L2CAP_IR_NOTSUPP = $0001;
{$EndIf}
{$IfNDef __RFCOMM_H}
const
RFCOMM_DEFAULT_MTU = 127;
RFCOMM_PSM = 3;
{off $Define RFCOMM_CONN_TIMEOUT:=(HZ * 30)}
{off $Define RFCOMM_DISC_TIMEOUT:=(HZ * 20)}
type
sockaddr_rc = record
rc_family: sa_family_t;
rc_bdaddr: bdaddr_t;
rc_channel: cuint8;
end;
const
RFCOMM_CONNINFO_1 = $02;
type
rfcomm_conninfo = record
hci_handle: cuint16;
dev_class: TArray0to31Ofcuint8;
end;
const
RFCOMM_LM = $03;
RFCOMM_LM_MASTER = $0001;
RFCOMM_LM_AUTH = $0002;
RFCOMM_LM_ENCRYPT = $0004;
RFCOMM_LM_TRUSTED = $0008;
RFCOMM_LM_RELIABLE = $0010;
RFCOMM_LM_SECURE = $0020;
RFCOMM_MAX_DEV = 256;
{off $Define RFCOMMCREATEDEV:=_IOW('R', 200, int)}
{off $Define RFCOMMRELEASEDEV:=_IOW('R', 201, int)}
{off $Define RFCOMMGETDEVLIST:=_IOR('R', 210, int)}
{off $Define RFCOMMGETDEVINFO:=_IOR('R', 211, int)}
type
rfcomm_dev_req = record
dev_id: cint16;
flags: cuint32;
src: bdaddr_t;
dst: bdaddr_t;
channel: cuint8;
end;
const
RFCOMM_REUSE_DLC = 0;
RFCOMM_RELEASE_ONHUP = 1;
RFCOMM_HANGUP_NOW = 2;
RFCOMM_TTY_ATTACHED = 3;
type
rfcomm_dev_info = record
id: cint16;
flags: cuint32;
state: cuint16;
src: bdaddr_t;
dst: bdaddr_t;
channel: cuint8;
end;
TArray0to0Ofrfcomm_dev_info = array[0..0] of rfcomm_dev_info;
rfcomm_dev_list_req = record
dev_num: cuint16;
dev_info: TArray0to0Ofrfcomm_dev_info;
end;
{$EndIf}
{$IfNDef __SCO_H}
const
SCO_DEFAULT_MTU = 500;
SCO_DEFAULT_FLUSH_TO = $FFFF;
{off $Define SCO_CONN_TIMEOUT:=(HZ * 40)}
{off $Define SCO_DISCONN_TIMEOUT:=(HZ * 2)}
{off $Define SCO_CONN_IDLE_TIMEOUT:=(HZ * 60)}
type
sockaddr_sco = record
sco_family: sa_family_t;
sco_bdaddr: bdaddr_t;
end;
const
SCO_OPTIONS_1 = $01;
type
sco_options = record
mtu: cuint16;
end;
const
SCO_CONNINFO_1 = $02;
type
sco_conninfo = record
hci_handle: cuint16;
dev_class: TArray0to31Ofcuint8;
end;
{$EndIf}
{$IfNDef __SDP_H}
const
SDP_UNIX_PATH = '/var/run/sdp';
SDP_RESPONSE_TIMEOUT = 20;
SDP_REQ_BUFFER_SIZE = 2048;
SDP_RSP_BUFFER_SIZE = 65535;
SDP_PDU_CHUNK_SIZE = 1024;
SDP_PSM = $0001;
SDP_UUID = $0001;
UDP_UUID = $0002;
RFCOMM_UUID = $0003;
TCP_UUID = $0004;
TCS_BIN_UUID = $0005;
TCS_AT_UUID = $0006;
OBEX_UUID = $0008;
IP_UUID = $0009;
FTP_UUID = $000a;
HTTP_UUID = $000c;
WSP_UUID = $000e;
BNEP_UUID = $000f;
UPNP_UUID = $0010;
HIDP_UUID = $0011;
HCRP_CTRL_UUID = $0012;
HCRP_DATA_UUID = $0014;
HCRP_NOTE_UUID = $0016;
AVCTP_UUID = $0017;
AVDTP_UUID = $0019;
CMTP_UUID = $001b;
UDI_UUID = $001d;
L2CAP_UUID = $0100;
SDP_SERVER_SVCLASS_ID = $1000;
BROWSE_GRP_DESC_SVCLASS_ID = $1001;
PUBLIC_BROWSE_GROUP = $1002;
SERIAL_PORT_SVCLASS_ID = $1101;
LAN_ACCESS_SVCLASS_ID = $1102;
DIALUP_NET_SVCLASS_ID = $1103;
IRMC_SYNC_SVCLASS_ID = $1104;
OBEX_OBJPUSH_SVCLASS_ID = $1105;
OBEX_FILETRANS_SVCLASS_ID = $1106;
IRMC_SYNC_CMD_SVCLASS_ID = $1107;
HEADSET_SVCLASS_ID = $1108;
CORDLESS_TELEPHONY_SVCLASS_ID = $1109;
AUDIO_SOURCE_SVCLASS_ID = $110a;
AUDIO_SINK_SVCLASS_ID = $110b;
AV_REMOTE_TARGET_SVCLASS_ID = $110c;
ADVANCED_AUDIO_SVCLASS_ID = $110d;
AV_REMOTE_SVCLASS_ID = $110e;
VIDEO_CONF_SVCLASS_ID = $110f;
INTERCOM_SVCLASS_ID = $1110;
FAX_SVCLASS_ID = $1111;
HEADSET_AGW_SVCLASS_ID = $1112;
WAP_SVCLASS_ID = $1113;
WAP_CLIENT_SVCLASS_ID = $1114;
PANU_SVCLASS_ID = $1115;
NAP_SVCLASS_ID = $1116;
GN_SVCLASS_ID = $1117;
DIRECT_PRINTING_SVCLASS_ID = $1118;
REFERENCE_PRINTING_SVCLASS_ID = $1119;
IMAGING_SVCLASS_ID = $111a;
IMAGING_RESPONDER_SVCLASS_ID = $111b;
IMAGING_ARCHIVE_SVCLASS_ID = $111c;
IMAGING_REFOBJS_SVCLASS_ID = $111d;
HANDSFREE_SVCLASS_ID = $111e;
HANDSFREE_AGW_SVCLASS_ID = $111f;
DIRECT_PRT_REFOBJS_SVCLASS_ID = $1120;
REFLECTED_UI_SVCLASS_ID = $1121;
BASIC_PRINTING_SVCLASS_ID = $1122;
PRINTING_STATUS_SVCLASS_ID = $1123;
HID_SVCLASS_ID = $1124;
HCR_SVCLASS_ID = $1125;
HCR_PRINT_SVCLASS_ID = $1126;
HCR_SCAN_SVCLASS_ID = $1127;
CIP_SVCLASS_ID = $1128;
VIDEO_CONF_GW_SVCLASS_ID = $1129;
UDI_MT_SVCLASS_ID = $112a;
UDI_TA_SVCLASS_ID = $112b;
AV_SVCLASS_ID = $112c;
SAP_SVCLASS_ID = $112d;
PBAP_PCE_SVCLASS_ID = $112e;
PBAP_PSE_SVCLASS_ID = $112f;
PBAP_SVCLASS_ID = $1130;
PNP_INFO_SVCLASS_ID = $1200;
GENERIC_NETWORKING_SVCLASS_ID = $1201;
GENERIC_FILETRANS_SVCLASS_ID = $1202;
GENERIC_AUDIO_SVCLASS_ID = $1203;
GENERIC_TELEPHONY_SVCLASS_ID = $1204;
UPNP_SVCLASS_ID = $1205;
UPNP_IP_SVCLASS_ID = $1206;
UPNP_PAN_SVCLASS_ID = $1300;
UPNP_LAP_SVCLASS_ID = $1301;
UPNP_L2CAP_SVCLASS_ID = $1302;
VIDEO_SOURCE_SVCLASS_ID = $1303;
VIDEO_SINK_SVCLASS_ID = $1304;
VIDEO_DISTRIBUTION_SVCLASS_ID = $1305;
APPLE_AGENT_SVCLASS_ID = $2112;
SDP_SERVER_PROFILE_ID = SDP_SERVER_SVCLASS_ID;
BROWSE_GRP_DESC_PROFILE_ID = BROWSE_GRP_DESC_SVCLASS_ID;
SERIAL_PORT_PROFILE_ID = SERIAL_PORT_SVCLASS_ID;
LAN_ACCESS_PROFILE_ID = LAN_ACCESS_SVCLASS_ID;
DIALUP_NET_PROFILE_ID = DIALUP_NET_SVCLASS_ID;
IRMC_SYNC_PROFILE_ID = IRMC_SYNC_SVCLASS_ID;
OBEX_OBJPUSH_PROFILE_ID = OBEX_OBJPUSH_SVCLASS_ID;
OBEX_FILETRANS_PROFILE_ID = OBEX_FILETRANS_SVCLASS_ID;
IRMC_SYNC_CMD_PROFILE_ID = IRMC_SYNC_CMD_SVCLASS_ID;
HEADSET_PROFILE_ID = HEADSET_SVCLASS_ID;
CORDLESS_TELEPHONY_PROFILE_ID = CORDLESS_TELEPHONY_SVCLASS_ID;
AUDIO_SOURCE_PROFILE_ID = AUDIO_SOURCE_SVCLASS_ID;
AUDIO_SINK_PROFILE_ID = AUDIO_SINK_SVCLASS_ID;
AV_REMOTE_TARGET_PROFILE_ID = AV_REMOTE_TARGET_SVCLASS_ID;
ADVANCED_AUDIO_PROFILE_ID = ADVANCED_AUDIO_SVCLASS_ID;
AV_REMOTE_PROFILE_ID = AV_REMOTE_SVCLASS_ID;
VIDEO_CONF_PROFILE_ID = VIDEO_CONF_SVCLASS_ID;
INTERCOM_PROFILE_ID = INTERCOM_SVCLASS_ID;
FAX_PROFILE_ID = FAX_SVCLASS_ID;
HEADSET_AGW_PROFILE_ID = HEADSET_AGW_SVCLASS_ID;
WAP_PROFILE_ID = WAP_SVCLASS_ID;
WAP_CLIENT_PROFILE_ID = WAP_CLIENT_SVCLASS_ID;
PANU_PROFILE_ID = PANU_SVCLASS_ID;
NAP_PROFILE_ID = NAP_SVCLASS_ID;
GN_PROFILE_ID = GN_SVCLASS_ID;
DIRECT_PRINTING_PROFILE_ID = DIRECT_PRINTING_SVCLASS_ID;
REFERENCE_PRINTING_PROFILE_ID = REFERENCE_PRINTING_SVCLASS_ID;
IMAGING_PROFILE_ID = IMAGING_SVCLASS_ID;
IMAGING_RESPONDER_PROFILE_ID = IMAGING_RESPONDER_SVCLASS_ID;
IMAGING_ARCHIVE_PROFILE_ID = IMAGING_ARCHIVE_SVCLASS_ID;
IMAGING_REFOBJS_PROFILE_ID = IMAGING_REFOBJS_SVCLASS_ID;
HANDSFREE_PROFILE_ID = HANDSFREE_SVCLASS_ID;
HANDSFREE_AGW_PROFILE_ID = HANDSFREE_AGW_SVCLASS_ID;
DIRECT_PRT_REFOBJS_PROFILE_ID = DIRECT_PRT_REFOBJS_SVCLASS_ID;
REFLECTED_UI_PROFILE_ID = REFLECTED_UI_SVCLASS_ID;
BASIC_PRINTING_PROFILE_ID = BASIC_PRINTING_SVCLASS_ID;
PRINTING_STATUS_PROFILE_ID = PRINTING_STATUS_SVCLASS_ID;
HID_PROFILE_ID = HID_SVCLASS_ID;
HCR_PROFILE_ID = HCR_SCAN_SVCLASS_ID;
HCR_PRINT_PROFILE_ID = HCR_PRINT_SVCLASS_ID;
HCR_SCAN_PROFILE_ID = HCR_SCAN_SVCLASS_ID;
CIP_PROFILE_ID = CIP_SVCLASS_ID;
VIDEO_CONF_GW_PROFILE_ID = VIDEO_CONF_GW_SVCLASS_ID;
UDI_MT_PROFILE_ID = UDI_MT_SVCLASS_ID;
UDI_TA_PROFILE_ID = UDI_TA_SVCLASS_ID;
AV_PROFILE_ID = AV_SVCLASS_ID;
SAP_PROFILE_ID = SAP_SVCLASS_ID;
PBAP_PCE_PROFILE_ID = PBAP_PCE_SVCLASS_ID;
PBAP_PSE_PROFILE_ID = PBAP_PSE_SVCLASS_ID;
PBAP_PROFILE_ID = PBAP_SVCLASS_ID;
PNP_INFO_PROFILE_ID = PNP_INFO_SVCLASS_ID;
GENERIC_NETWORKING_PROFILE_ID = GENERIC_NETWORKING_SVCLASS_ID;
GENERIC_FILETRANS_PROFILE_ID = GENERIC_FILETRANS_SVCLASS_ID;
GENERIC_AUDIO_PROFILE_ID = GENERIC_AUDIO_SVCLASS_ID;
GENERIC_TELEPHONY_PROFILE_ID = GENERIC_TELEPHONY_SVCLASS_ID;
UPNP_PROFILE_ID = UPNP_SVCLASS_ID;
UPNP_IP_PROFILE_ID = UPNP_IP_SVCLASS_ID;
UPNP_PAN_PROFILE_ID = UPNP_PAN_SVCLASS_ID;
UPNP_LAP_PROFILE_ID = UPNP_LAP_SVCLASS_ID;
UPNP_L2CAP_PROFILE_ID = UPNP_L2CAP_SVCLASS_ID;
VIDEO_SOURCE_PROFILE_ID = VIDEO_SOURCE_SVCLASS_ID;
VIDEO_SINK_PROFILE_ID = VIDEO_SINK_SVCLASS_ID;
VIDEO_DISTRIBUTION_PROFILE_ID = VIDEO_DISTRIBUTION_SVCLASS_ID;
APPLE_AGENT_PROFILE_ID = APPLE_AGENT_SVCLASS_ID;
SDP_SERVER_RECORD_HANDLE = $0000;
SDP_ATTR_RECORD_HANDLE = $0000;
SDP_ATTR_SVCLASS_ID_LIST = $0001;
SDP_ATTR_RECORD_STATE = $0002;
SDP_ATTR_SERVICE_ID = $0003;
SDP_ATTR_PROTO_DESC_LIST = $0004;
SDP_ATTR_BROWSE_GRP_LIST = $0005;
SDP_ATTR_LANG_BASE_ATTR_ID_LIST = $0006;
SDP_ATTR_SVCINFO_TTL = $0007;
SDP_ATTR_SERVICE_AVAILABILITY = $0008;
SDP_ATTR_PFILE_DESC_LIST = $0009;
SDP_ATTR_DOC_URL = $000a;
SDP_ATTR_CLNT_EXEC_URL = $000b;
SDP_ATTR_ICON_URL = $000c;
SDP_ATTR_ADD_PROTO_DESC_LIST = $000d;
SDP_ATTR_GROUP_ID = $0200;
SDP_ATTR_IP_SUBNET = $0200;
SDP_ATTR_VERSION_NUM_LIST = $0200;
SDP_ATTR_SVCDB_STATE = $0201;
SDP_ATTR_SERVICE_VERSION = $0300;
SDP_ATTR_EXTERNAL_NETWORK = $0301;
SDP_ATTR_SUPPORTED_DATA_STORES_LIST = $0301;
SDP_ATTR_FAX_CLASS1_SUPPORT = $0302;
SDP_ATTR_REMOTE_AUDIO_VOLUME_CONTROL = $0302;
SDP_ATTR_FAX_CLASS20_SUPPORT = $0303;
SDP_ATTR_SUPPORTED_FORMATS_LIST = $0303;
SDP_ATTR_FAX_CLASS2_SUPPORT = $0304;
SDP_ATTR_AUDIO_FEEDBACK_SUPPORT = $0305;
SDP_ATTR_NETWORK_ADDRESS = $0306;
SDP_ATTR_WAP_GATEWAY = $0307;
SDP_ATTR_HOMEPAGE_URL = $0308;
SDP_ATTR_WAP_STACK_TYPE = $0309;
SDP_ATTR_SECURITY_DESC = $030a;
SDP_ATTR_NET_ACCESS_TYPE = $030b;
SDP_ATTR_MAX_NET_ACCESSRATE = $030c;
SDP_ATTR_IP4_SUBNET = $030d;
SDP_ATTR_IP6_SUBNET = $030e;
SDP_ATTR_SUPPORTED_CAPABILITIES = $0310;
SDP_ATTR_SUPPORTED_FEATURES = $0311;
SDP_ATTR_SUPPORTED_FUNCTIONS = $0312;
SDP_ATTR_TOTAL_IMAGING_DATA_CAPACITY = $0313;
SDP_ATTR_SUPPORTED_REPOSITORIES = $0314;
SDP_ATTR_SPECIFICATION_ID = $0200;
SDP_ATTR_VENDOR_ID = $0201;
SDP_ATTR_PRODUCT_ID = $0202;
SDP_ATTR_VERSION = $0203;
SDP_ATTR_PRIMARY_RECORD = $0204;
SDP_ATTR_VENDOR_ID_SOURCE = $0205;
SDP_ATTR_HID_DEVICE_RELEASE_NUMBER = $0200;
SDP_ATTR_HID_PARSER_VERSION = $0201;
SDP_ATTR_HID_DEVICE_SUBCLASS = $0202;
SDP_ATTR_HID_COUNTRY_CODE = $0203;
SDP_ATTR_HID_VIRTUAL_CABLE = $0204;
SDP_ATTR_HID_RECONNECT_INITIATE = $0205;
SDP_ATTR_HID_DESCRIPTOR_LIST = $0206;
SDP_ATTR_HID_LANG_ID_BASE_LIST = $0207;
SDP_ATTR_HID_SDP_DISABLE = $0208;
SDP_ATTR_HID_BATTERY_POWER = $0209;
SDP_ATTR_HID_REMOTE_WAKEUP = $020a;
SDP_ATTR_HID_PROFILE_VERSION = $020b;
SDP_ATTR_HID_SUPERVISION_TIMEOUT = $020c;
SDP_ATTR_HID_NORMALLY_CONNECTABLE = $020d;
SDP_ATTR_HID_BOOT_DEVICE = $020e;
SDP_PRIMARY_LANG_BASE = $0100;
SDP_ATTR_SVCNAME_PRIMARY = $0000 + SDP_PRIMARY_LANG_BASE;
SDP_ATTR_SVCDESC_PRIMARY = $0001 + SDP_PRIMARY_LANG_BASE;
SDP_ATTR_PROVNAME_PRIMARY = $0002 + SDP_PRIMARY_LANG_BASE;
SDP_DATA_NIL = $00;
SDP_UINT8 = $08;
SDP_UINT16 = $09;
SDP_UINT32 = $0A;
SDP_UINT64 = $0B;
SDP_UINT128 = $0C;
SDP_INT8 = $10;
SDP_INT16 = $11;
SDP_INT32 = $12;
SDP_INT64 = $13;
SDP_INT128 = $14;
SDP_UUID_UNSPEC = $18;
SDP_UUID16 = $19;
SDP_UUID32 = $1A;
SDP_UUID128 = $1C;
SDP_TEXT_STR_UNSPEC = $20;
SDP_TEXT_STR8 = $25;
SDP_TEXT_STR16 = $26;
SDP_TEXT_STR32 = $27;
SDP_BOOL = $28;
SDP_SEQ_UNSPEC = $30;
SDP_SEQ8 = $35;
SDP_SEQ16 = $36;
SDP_SEQ32 = $37;
SDP_ALT_UNSPEC = $38;
SDP_ALT8 = $3D;
SDP_ALT16 = $3E;
SDP_ALT32 = $3F;
SDP_URL_STR_UNSPEC = $40;
SDP_URL_STR8 = $45;
SDP_URL_STR16 = $46;
SDP_URL_STR32 = $47;
SDP_ERROR_RSP = $01;
SDP_SVC_SEARCH_REQ = $02;
SDP_SVC_SEARCH_RSP = $03;
SDP_SVC_ATTR_REQ = $04;
SDP_SVC_ATTR_RSP = $05;
SDP_SVC_SEARCH_ATTR_REQ = $06;
SDP_SVC_SEARCH_ATTR_RSP = $07;
SDP_SVC_REGISTER_REQ = $75;
SDP_SVC_REGISTER_RSP = $76;
SDP_SVC_UPDATE_REQ = $77;
SDP_SVC_UPDATE_RSP = $78;
SDP_SVC_REMOVE_REQ = $79;
SDP_SVC_REMOVE_RSP = $80;
SDP_INVALID_VERSION = $0001;
SDP_INVALID_RECORD_HANDLE = $0002;
SDP_INVALID_SYNTAX = $0003;
SDP_INVALID_PDU_SIZE = $0004;
SDP_INVALID_CSTATE = $0005;
type
sdp_pdu_hdr_t = record
pdu_id: cuint8;
tid: cuint16;
plen: cuint16;
end;
uint128_t = record
data: TArray0to161Ofcuint8;
end;
uuid_t = record
type_: cuint8;
value: record
case longint of
0: (uuid16: cuint16 );
1: (uuid32: cuint32 );
2: (uuid128: uint128_t );
end;
end;
Psdp_list_t = ^sdp_list_t;
_sdp_list = record
next: Psdp_list_t;
data: pointer;
end;
sdp_list_t = _sdp_list;
sdp_lang_attr_t = record
code_ISO639: cuint16;
encoding: cuint16;
base_offset: cuint16;
end;
sdp_profile_desc_t = record
uuid: uuid_t;
version: cuint16;
end;
sdp_version_t = record
major: cuint8;
minor: cuint8;
end;
sdp_buf_t = record
data: pcuint8;
data_size: cuint32;
buf_size: cuint32;
end;
sdp_record_t = record
handle: cuint32;
pattern: Psdp_list_t;
attrlist: Psdp_list_t;
svclass: uuid_t;
end;
Psdp_data_t = ^sdp_data_t;
sdp_data_struct = record
dtd: cuint8;
attrId: cuint16;
val: record
case longint of
0: (int8: cint8 );
1: (int16: cint16 );
2: (int32: cint32 );
3: (int64: cint64 );
4: (int128: uint128_t );
5: (uint8: cuint8 );
6: (uint16: cuint16 );
7: (uint32: cuint32 );
8: (uint64: cuint64 );
9: (uint128: uint128_t );
10: (uuid: uuid_t );
11: (str: pcchar );
12: (dataseq: Psdp_data_t );
end;
next: Psdp_data_t;
unitSize: cint;
end;
sdp_data_t = sdp_data_struct;
{$EndIf}
{$IfNDef __SDP_LIB_H}
type
sdp_list_func_t = procedure(param1pointer: pointer; param2pointer: pointer); cdecl;
sdp_free_func_t = procedure(param1pointer: pointer); cdecl;
sdp_comp_func_t = function(param1pointer: pointer; param2pointer: pointer): cint; cdecl;
function sdp_list_append(list: Psdp_list_t; d: pointer): Psdp_list_t; cdecl; external;
function sdp_list_remove(list: Psdp_list_t; d: pointer): Psdp_list_t; cdecl; external;
function sdp_list_insert_sorted(list: Psdp_list_t; data: pointer; f: sdp_comp_func_t): Psdp_list_t; cdecl; external;
procedure sdp_list_free(list: Psdp_list_t; f: sdp_free_func_t); cdecl; external;
const
SDP_RECORD_PERSIST = $01;
SDP_DEVICE_RECORD = $02;
SDP_RETRY_IF_BUSY = $01;
SDP_WAIT_ON_CLOSE = $02;
SDP_NON_BLOCKING = $04;
type
sdp_session_t = record
sock: cint;
state: cint;
local: cint;
flags: cint;
tid: cuint16;
priv: pointer;
end;
sdp_attrreq_type_t = (
SDP_ATTR_REQ_INDIVIDUAL = 1,
SDP_ATTR_REQ_RANGE
);
Psdp_session_t = ^sdp_session_t;
function sdp_connect(src: Pbdaddr_t; dst: Pbdaddr_t; flags: cuint32): Psdp_session_t; cdecl; external;
function sdp_close(session: Psdp_session_t): cint; cdecl; external;
function sdp_get_socket(session: Psdp_session_t): cint; cdecl; external;
function sdp_create(sk: cint; flags: cuint32): Psdp_session_t; cdecl; external;
function sdp_get_error(session: Psdp_session_t): cint; cdecl; external;
function sdp_process(session: Psdp_session_t): cint; cdecl; external;
function sdp_service_search_async(session: Psdp_session_t; search: Psdp_list_t; max_rec_num: cuint16): cint; cdecl; external;
function sdp_service_attr_async(session: Psdp_session_t; handle: cuint32; reqtype: sdp_attrreq_type_t; attrid_list: Psdp_list_t): cint; cdecl; external;
function sdp_service_search_attr_async(session: Psdp_session_t; search: Psdp_list_t; reqtype: sdp_attrreq_type_t; attrid_list: Psdp_list_t): cint; cdecl; external;
function sdp_gen_tid(session: Psdp_session_t): cuint16; cdecl; external;
function sdp_general_inquiry(ii: Pinquiry_info; dev_num: cint; duration: cint; found: pcuint8): cint; cdecl; external;
type
Psdp_record_t = ^sdp_record_t;
function sdp_get_int_attr(rec: Psdp_record_t; attr: cuint16; value: pcint): cint; cdecl; external;
function sdp_get_string_attr(rec: Psdp_record_t; attr: cuint16; value: pcchar; valuelen: cint): cint; cdecl; external;
function sdp_data_alloc(dtd: cuint8; value: pointer): Psdp_data_t; cdecl; external;
function sdp_data_alloc_with_length(dtd: cuint8; value: pointer; length: cuint32): Psdp_data_t; cdecl; external;
procedure sdp_data_free(data: Psdp_data_t); cdecl; external;
function sdp_data_get(rec: Psdp_record_t; attr_id: cuint16): Psdp_data_t; cdecl; external;
type
Ppointer = ^pointer;
function sdp_seq_alloc(dtds: Ppointer; values: Ppointer; len: cint): Psdp_data_t; cdecl; external;
function sdp_seq_alloc_with_length(dtds: Ppointer; values: Ppointer; length: pcint; len: cint): Psdp_data_t; cdecl; external;
function sdp_seq_append(seq: Psdp_data_t; data: Psdp_data_t): Psdp_data_t; cdecl; external;
function sdp_attr_add(rec: Psdp_record_t; attr: cuint16; data: Psdp_data_t): cint; cdecl; external;
procedure sdp_attr_remove(rec: Psdp_record_t; attr: cuint16); cdecl; external;
procedure sdp_attr_replace(rec: Psdp_record_t; attr: cuint16; data: Psdp_data_t); cdecl; external;
function sdp_set_uuidseq_attr(rec: Psdp_record_t; attr: cuint16; seq: Psdp_list_t): cint; cdecl; external;
type
PPsdp_list_t = ^Psdp_list_t;
function sdp_get_uuidseq_attr(rec: Psdp_record_t; attr: cuint16; seqp: PPsdp_list_t): cint; cdecl; external;
function sdp_attr_add_new(rec: Psdp_record_t; attr: cuint16; dtd: cuint8; p: pointer): cint; cdecl; external;
procedure sdp_set_info_attr(rec: Psdp_record_t; name: pcchar; prov: pcchar; desc: pcchar); cdecl; external;
function sdp_set_access_protos(rec: Psdp_record_t; proto: Psdp_list_t): cint; cdecl; external;
function sdp_set_add_access_protos(rec: Psdp_record_t; proto: Psdp_list_t): cint; cdecl; external;
function sdp_get_proto_port(list: Psdp_list_t; proto: cint): cint; cdecl; external;
function sdp_get_proto_desc(list: Psdp_list_t; proto: cint): Psdp_data_t; cdecl; external;
function sdp_set_lang_attr(rec: Psdp_record_t; list: Psdp_list_t): cint; cdecl; external;
procedure sdp_set_service_id(rec: Psdp_record_t; uuid: uuid_t); cdecl; external;
procedure sdp_set_group_id(rec: Psdp_record_t; grouuuid: uuid_t); cdecl; external;
function sdp_set_profile_descs(rec: Psdp_record_t; desc: Psdp_list_t): cint; cdecl; external;
procedure sdp_set_url_attr(rec: Psdp_record_t; clientExecURL: pcchar; docURL: pcchar; iconURL: pcchar); cdecl; external;
function sdp_service_search_req(session: Psdp_session_t; search: Psdp_list_t; max_rec_num: cuint16; rsp_list: PPsdp_list_t): cint; cdecl; external;
function sdp_service_attr_req(session: Psdp_session_t; handle: cuint32; reqtype: sdp_attrreq_type_t; attrid_list: Psdp_list_t): Psdp_record_t; cdecl; external;
function sdp_service_search_attr_req(session: Psdp_session_t; search: Psdp_list_t; reqtype: sdp_attrreq_type_t; attrid_list: Psdp_list_t; rsp_list: PPsdp_list_t): cint; cdecl; external;
function sdp_record_alloc: Psdp_record_t; cdecl; external;
procedure sdp_record_free(rec: Psdp_record_t); cdecl; external;
function sdp_device_record_register_binary(session: Psdp_session_t; device: Pbdaddr_t; data: pcuint8; size: cuint32; flags: cuint8; handle: pcuint32): cint; cdecl; external;
function sdp_device_record_register(session: Psdp_session_t; device: Pbdaddr_t; rec: Psdp_record_t; flags: cuint8): cint; cdecl; external;
function sdp_record_register(session: Psdp_session_t; rec: Psdp_record_t; flags: cuint8): cint; cdecl; external;
function sdp_device_record_unregister_binary(session: Psdp_session_t; device: Pbdaddr_t; handle: cuint32): cint; cdecl; external;
function sdp_device_record_unregister(session: Psdp_session_t; device: Pbdaddr_t; rec: Psdp_record_t): cint; cdecl; external;
function sdp_record_unregister(session: Psdp_session_t; rec: Psdp_record_t): cint; cdecl; external;
function sdp_device_record_update_binary(session: Psdp_session_t; device: Pbdaddr_t; handle: cuint32; data: pcuint8; size: cuint32): cint; cdecl; external;
function sdp_device_record_update(session: Psdp_session_t; device: Pbdaddr_t; rec: Psdp_record_t): cint; cdecl; external;
function sdp_record_update(sess: Psdp_session_t; rec: Psdp_record_t): cint; cdecl; external;
procedure sdp_record_print(rec: Psdp_record_t); cdecl; external;
type
Puuid_t = ^uuid_t;
function sdp_uuid16_create(uuid: Puuid_t; data: cuint16): Puuid_t; cdecl; external;
function sdp_uuid32_create(uuid: Puuid_t; data: cuint32): Puuid_t; cdecl; external;
function sdp_uuid128_create(uuid: Puuid_t; data: pointer): Puuid_t; cdecl; external;
function sdp_uuid16_cmp(p1: pointer; p2: pointer): cint; cdecl; external;
function sdp_uuid128_cmp(p1: pointer; p2: pointer): cint; cdecl; external;
function sdp_uuid_to_uuid128(uuid: Puuid_t): Puuid_t; cdecl; external;
procedure sdp_uuid16_to_uuid128(uuid128: Puuid_t; uuid16: Puuid_t); cdecl; external;
procedure sdp_uuid32_to_uuid128(uuid128: Puuid_t; uuid32: Puuid_t); cdecl; external;
function sdp_uuid128_to_uuid(uuid: Puuid_t): cint; cdecl; external;
function sdp_uuid_to_proto(uuid: Puuid_t): cint; cdecl; external;
function sdp_uuid_extract(buffer: pcuint8; uuid: Puuid_t; scanned: pcint): cint; cdecl; external;
procedure sdp_uuid_print(uuid: Puuid_t); cdecl; external;
const
MAX_LEN_UUID_STR = 37;
MAX_LEN_PROTOCOL_UUID_STR = 8;
MAX_LEN_SERVICECLASS_UUID_STR = 28;
MAX_LEN_PROFILEDESCRIPTOR_UUID_STR = 28;
function sdp_uuid2strn(uuid: Puuid_t; str: pcchar; n: PtrUInt): cint; cdecl; external;
function sdp_proto_uuid2strn(uuid: Puuid_t; str: pcchar; n: PtrUInt): cint; cdecl; external;
function sdp_svclass_uuid2strn(uuid: Puuid_t; str: pcchar; n: PtrUInt): cint; cdecl; external;
function sdp_profile_uuid2strn(uuid: Puuid_t; str: pcchar; n: PtrUInt): cint; cdecl; external;
function sdp_get_access_protos(rec: Psdp_record_t; protos: PPsdp_list_t): cint; cdecl; external;
function sdp_get_add_access_protos(rec: Psdp_record_t; protos: PPsdp_list_t): cint; cdecl; external;
function sdp_get_lang_attr(rec: Psdp_record_t; langSeq: PPsdp_list_t): cint; cdecl; external;
function sdp_get_profile_descs(rec: Psdp_record_t; profDesc: PPsdp_list_t): cint; cdecl; external;
function sdp_get_server_ver(rec: Psdp_record_t; pVnumList: PPsdp_list_t): cint; cdecl; external;
function sdp_get_service_id(rec: Psdp_record_t; uuid: Puuid_t): cint; cdecl; external;
function sdp_get_group_id(rec: Psdp_record_t; uuid: Puuid_t): cint; cdecl; external;
function sdp_get_record_state(rec: Psdp_record_t; svcRecState: pcuint32): cint; cdecl; external;
function sdp_get_service_avail(rec: Psdp_record_t; svcAvail: pcuint8): cint; cdecl; external;
function sdp_get_service_ttl(rec: Psdp_record_t; svcTTLInfo: pcuint32): cint; cdecl; external;
function sdp_get_database_state(rec: Psdp_record_t; svcDBState: pcuint32): cint; cdecl; external;
function sdp_extract_pdu(pdata: pcuint8; scanned: pcint): Psdp_record_t; cdecl; external;
function sdp_extract_string(param1pcuint8: pcuint8; param2pcint: pcint): Psdp_data_t; cdecl; external;
procedure sdp_data_print(data: Psdp_data_t); cdecl; external;
procedure sdp_print_service_attr(alist: Psdp_list_t); cdecl; external;
function sdp_attrid_comp_func(key1: pointer; key2: pointer): cint; cdecl; external;
procedure sdp_set_seq_len(ptr: pcuint8; length: cuint32); cdecl; external;
type
Psdp_buf_t = ^sdp_buf_t;
procedure sdp_set_attrid(pdu: Psdp_buf_t; id: cuint16); cdecl; external;
procedure sdp_append_to_pdu(dst: Psdp_buf_t; d: Psdp_data_t); cdecl; external;
procedure sdp_append_to_buf(dst: Psdp_buf_t; data: pcuint8; len: cuint32); cdecl; external;
function sdp_gen_pdu(pdu: Psdp_buf_t; data: Psdp_data_t): cint; cdecl; external;
function sdp_gen_record_pdu(rec: Psdp_record_t; pdu: Psdp_buf_t): cint; cdecl; external;
function sdp_extract_seqtype(buf: pcuint8; dtdp: pcuint8; seqlen: pcint): cint; cdecl; external;
function sdp_extract_attr(pdata: pcuint8; extractedLength: pcint; rec: Psdp_record_t): Psdp_data_t; cdecl; external;
procedure sdp_pattern_add_uuid(rec: Psdp_record_t; uuid: Puuid_t); cdecl; external;
procedure sdp_pattern_add_uuidseq(rec: Psdp_record_t; seq: Psdp_list_t); cdecl; external;
function sdp_send_req_w4_rsp(session: Psdp_session_t; req: pcuint8; rsp: pcuint8; reqsize: cuint32; rspsize: pcuint32): cint; cdecl; external;
{$EndIf}
implementation
end.