Code: Alles auswählen
;Host_Controller_Interface_Test_Code ;)
;Linux rockt!
;Bluetooth Power On!
;Anleitung:
;Bitte als Binary kompilieren und mit SUDO-Rechten starten.
;Bitte nicht verarschen lassen.
;Die ioctl - Funktion gibt zwar einen zulässigen Wert zurück, aber dieser sollte hier FALSCH sein.
;Bitte wirklich nachprüfen ob es geklappt hat.
#_IOC_NRBITS = 8
#_IOC_TYPEBITS = 8
#_IOC_SIZEBITS = 14
#_IOC_DIRBITS = 2
#_IOC_NRMASK = ((1 << #_IOC_NRBITS)-1)
#_IOC_TYPEMASK = ((1 << #_IOC_TYPEBITS)-1)
#_IOC_SIZEMASK = ((1 << #_IOC_SIZEBITS)-1)
#_IOC_DIRMASK = ((1 << #_IOC_DIRBITS)-1)
#_IOC_NRSHIFT = 0
#_IOC_TYPESHIFT = (#_IOC_NRSHIFT+#_IOC_NRBITS)
#_IOC_SIZESHIFT = (#_IOC_TYPESHIFT+#_IOC_TYPEBITS)
#_IOC_DIRSHIFT = (#_IOC_SIZESHIFT+#_IOC_SIZEBITS)
#_IOC_NONE = 0 & $FF ; unsigned long ?
#_IOC_WRITE = 1 & $FF; unsigned long ?
#_IOC_READ = 2 & $FF ; unsigned long ?
Macro _IOC(dir,type,nr,size)
(((dir) << #_IOC_DIRSHIFT) | ((type) << #_IOC_TYPESHIFT) | ((nr) << #_IOC_NRSHIFT) | ((size) << #_IOC_SIZESHIFT))
EndMacro
Macro _IOC_TYPECHECK(t)
(SizeOf(t))
EndMacro
Macro _IO(type,nr)
_IOC(#_IOC_NONE,(type),(nr),0)
EndMacro
Macro _IOR(type,nr,size)
_IOC(#_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))
EndMacro
Macro _IOW(type,nr,size)
_IOC(#_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
EndMacro
Macro _IOWR(type,nr,size)
_IOC(#_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
EndMacro
Macro _IOR_BAD(type,nr,size)
_IOC(#_IOC_READ,(type),(nr),SizeOf(size))
EndMacro
Macro _IOW_BAD(type,nr,size)
_IOC(#_IOC_WRITE,(type),(nr),SizeOf(size))
EndMacro
Macro _IOWR_BAD(type,nr,size)
_IOC(#_IOC_READ|#_IOC_WRITE,(type),(nr),SizeOf(size))
EndMacro
Structure int
val.l
EndStructure
Structure uint
v1.u
v2.u
EndStructure
Structure ulong
v1.u
v2.u
v3.u
v4.u
EndStructure
#HCISETSCAN = _IOW('H', 221, int)
Structure bdaddr_t
blupp.b[6]
EndStructure
Structure hci_version
manufacturer.w
hci_ver.b
hci_rev.w
lmp_ver.b
lmp_subver.w
EndStructure
Structure hci_request
ogf.w
ocf.w
event.i
*cparam
clen.i
*rparam
rlen.i
EndStructure
;Ioctl requests structures
Structure hci_dev_stats
err_rx.l
err_tx.l
cmd_tx.l
evt_rx.l
acl_tx.l
acl_rx.l
sco_tx.l
sco_rx.l
byte_rx.l
byte_tx.l
EndStructure
Structure hci_dev_info
dev_id.w
name.c[8]
bdaddr.bdaddr_t
flags.l
type.b
features.b[8]
pkt_type.l
link_policy.l
link_mode.l
acl_mtu.w
acl_pkts.w
sco_mtu.w
sco_pkts.w
stat.hci_dev_stats
EndStructure
Structure hci_conn_info
handle.w
bdaddr.bdaddr_t
type.b
out.b
state.w
link_mode.l
EndStructure
; struct hci_dev_req { alignment ?
; uint16_t dev_id;
; uint32_t dev_opt;
; };
Structure hci_dev_req ;So geht es!
dev_id.l
dev_opt.l
EndStructure
Structure hci_dev_list_req
dev_num.w
dev_req.hci_dev_req[0]
EndStructure
Structure hci_conn_list_req
dev_id.w
conn_num.w
conn_info.hci_conn_info[0]
EndStructure
Structure hci_conn_info_req
bdaddr.bdaddr_t
type.b
conn_info.hci_conn_info[0]
EndStructure
Structure hci_auth_info_req
bdaddr.bdaddr_t
type.b
EndStructure
Structure hci_inquiry_req
dev_id.w
flags.w
lap.b[3]
length.b
num_rsp.b
EndStructure
#IREQ_CACHE_FLUSH = $0001
Structure inquiry_info
bdaddr.bdaddr_t
pscan_rep_mode.b
pscan_period_mode.b
pscan_mode.b
dev_class.b[3]
clock_offset.w
EndStructure
#INQUIRY_INFO_SIZE = SizeOf(inquiry_info) ;14
#SCAN_DISABLED = $00
#SCAN_INQUIRY = $01
#SCAN_PAGE = $02
Import "-lbluetooth"
hci_open_dev.i( dev_id.i )
hci_close_dev.i( dd.i )
hci_send_cmd.i( dd.i, ogf.w, ocf.w, plen.b, *param )
hci_send_req.i( dd.i, *req.hci_request, timeout.i )
hci_create_connection.i( dd.i, *bdaddr.bdaddr_t, ptype.w, clkoffset.w, rswitch.b, *handle, gto.i )
hci_disconnect.i( dd.i, handle.w, reason.b, gto.i )
hci_inquiry.i( dev_id.i, len.i, num_rsp.i, *lap, *ii.bdaddr_t, flags.l )
hci_devinfo.i( dev_id.i, *di.hci_dev_info )
hci_devba.i( dev_id.i, *bdaddr.bdaddr_t )
hci_devid.i( *str )
hci_read_local_name.i( dd.i, len.i, *name.p-utf8, gto.i )
hci_write_local_name.i( dd.i, *name.p-utf8, gto.i )
hci_read_remote_name.i( dd.i, *bdaddr.bdaddr_t, len.i, *name.p-utf8, gto.i )
hci_read_remote_name_with_clock_offset.i( dd.i, *bdaddr.bdaddr_t, pscan_rep_mode.b, clkoffset.w, len.i, *name.p-utf8, gto.i )
hci_read_remote_name_cancel.i( dd.i, *bdaddr.bdaddr_t, gto.i )
hci_read_remote_version.i( dd.i, handle.w, *ver.hci_version, gto.i )
hci_read_remote_features.i( dd.i, handle.w, *features, gto.i )
hci_read_remote_ext_features.i( dd.i, handle.w, page.b, *max_page, *features, gto.i )
hci_read_clock_offset.i( dd.i, handle.w, *clkoffset, gto.i )
hci_read_local_version.i( dd.i, *ver.hci_version, gto.i )
hci_read_local_commands.i( dd.i, *commands, gto.i )
hci_read_local_features.i( dd.i, *features, gto.i )
hci_read_local_ext_features.i( dd.i, page.b, *max_page, *features, gto.i )
hci_read_bd_addr.i( dd.i, *bdaddr.bdaddr_t, gto.i)
hci_read_class_of_dev.i( dd.i, *cls, gto.i )
hci_write_class_of_dev.i( dd.i, cls.l, gto.i )
hci_read_voice_setting.i( dd.i, *vs, gto.i )
hci_write_voice_setting.i( dd.i, vs.w, gto.i )
hci_read_current_iac_lap.i( dd.i, *num_iac, *lap, gto.i )
hci_write_current_iac_lap.i( dd.i, num_iac.b, *lap, gto.i )
hci_read_stored_link_key.i( dd.i, *bdaddr.bdaddr_t, all.b, gto.i )
hci_write_stored_link_key.i( dd.i, *bdaddr.bdaddr_t, *key, gto.i )
hci_delete_stored_link_key.i( dd.i, *bdaddr.bdaddr_t, all.b, gto.i )
hci_authenticate_link.i( dd.i, handle.w, gto.i )
hci_encrypt_link.i( dd.i, handle.w, encrypt.b, gto.i )
hci_change_link_key.i( dd.i, handle.w, gto.i )
hci_switch_role.i( dd.i, *bdaddr.bdaddr_t, role.b, gto.i )
hci_park_mode.i( dd.i, handle.w, max_interval.w, min_interval.w, gto.i )
hci_exit_park_mode.i( dd.i, handle.w, gto.i )
hci_read_inquiry_scan_type.i( dd.i, *type, gto.i )
hci_write_inquiry_scan_type.i( dd.i, type,b, gto.i )
hci_read_inquiry_mode.i( dd.i, *mode, gto.i )
hci_write_inquiry_mode.i( dd.i, mode.b, gto.i )
hci_read_afh_mode.i( dd.i, *mode, gto.i )
hci_write_afh_mode.i( dd.i, mode.b, gto.i )
hci_read_ext_inquiry_response.i( dd.i, *fec, *Datas, gto.i )
hci_write_ext_inquiry_response.i( dd.i, fec.b, *Datas, gto.i )
hci_read_simple_pairing_mode.i( dd.i, *mode, gto.i )
hci_write_simple_pairing_mode.i( dd.i, mode.b, gto.i )
hci_read_local_oob_data.i( dd.i, *hash, *randomizer, gto.i )
hci_read_inq_response_tx_power_level.i( dd.i, *level, gto.i )
hci_read_inquiry_transmit_power_level.i( dd.i, *level, gto.i )
hci_write_inquiry_transmit_power_level.i( dd.i, level.b, gto.i )
hci_read_transmit_power_level.i( dd.i, handle.w, type.b, *level, gto.i )
hci_read_link_policy.i( dd.i, handle.w, *policy, gto.i )
hci_write_link_policy.i( dd.i, handle.w, policy.w, gto.i )
hci_read_link_supervision_timeout.i( dd.i, handle.w, *timeout, gto.i )
hci_write_link_supervision_timeout.i( dd.i, handle.w, timeout.w, gto.i )
hci_set_afh_classification.i( dd.i, *Mapi, gto.i )
hci_read_link_quality.i( dd.i, handle.w, *link_quality, gto.i )
hci_read_rssi.i( dd.i, handle.w, *rssi, gto.i )
hci_read_afh_map.i( dd.i, handle.w, *mode, *Mapi, gto.i )
hci_read_clock.i( dd.i, handle.w, which.b, *clock, *accuracy, gto.i )
hci_le_set_scan_enable.i( dev_id.i, enable.b, filter_dup.b, gto.i )
hci_le_set_scan_parameters.i( dev_id.i, type.b, interval.w, window.w, uown_type.b, filter.b, gto.i )
hci_le_set_advertise_enable.i( dev_id.i, enable.b, gto.i)
hci_le_create_conn.i( dd.i, interval.w, window.w, initiator_filter.b, *peer_bdaddr_type.bdaddr_t, own_bdaddr_type.b, min_interval.w, max_interval.w, latency.w, supervision_timeout.w, min_ce_length.w, max_ce_length.w, *handle, gto.i )
hci_le_conn_update.i( dd.i, handle.w, min_interval.w, max_interval.w, latency.w, supervision_timeout.w, gto.i )
hci_le_add_white_list.i( dd.i, *bdaddr.bdaddr_t, type.b, gto.i )
hci_le_rm_white_list.i( dd.i, *bdaddr.bdaddr_t, type.b, gto.i )
hci_le_read_white_list_size.i( dd.i, *size, gto.i )
hci_le_clear_white_list.i( dd.i, gto.i )
hci_le_add_resolving_list.i( dd.i, *bdaddr.bdaddr_t, type.b, *peer_irk, *local_irk, gto.i )
hci_le_rm_resolving_list.i( dd.i, *bdaddr.bdaddr_t, type.b, gto.i )
hci_le_clear_resolving_list.i( dd.i, gto.i )
hci_le_read_resolving_list_size.i( dd.i, *size, gto.i )
hci_le_set_address_resolution_enable.i( dev_id.i, enable.b, gto.i )
hci_le_read_remote_features.i( dd.i, handle.w, *features, gto.i )
;hci_for_each_dev( flag.i, Int(*func)(int dd, int dev_id, long arg), long arg);
hci_get_route.u( *bdaddr.bdaddr_t )
hci_bustostr.i( bus.i )
hci_typetostr.i( type.i )
hci_dtypetostr.i( type.i )
hci_dflagstostr.i( flags.l )
hci_ptypetostr.i( ptype.i )
hci_strtoptype.i( *str, *val)
hci_scoptypetostr.i( ptype.i )
hci_strtoscoptype.i( *str, *val)
hci_lptostr.i( ptype.i )
hci_strtolp.i( *str, *val )
hci_lmtostr.i( ptype.i )
hci_strtolm.i( *str, *val )
hci_cmdtostr.i( cmd.i )
hci_commandstostr.i( *commands, *pref, width.i )
hci_vertostr.i( ver.i )
hci_strtover.i( *str, *ver )
lmp_vertostr.i( ver.i )
lmp_strtover.i( *str, *ver )
pal_vertostr.i( ver.i )
pal_strtover.i( *str, *ver )
lmp_featurestostr.i( *features, *pref, width.i )
baswap.i( *dst.bdaddr_t, *src.bdaddr_t )
strtoba.i( *str )
ba2str.i( *ba.bdaddr_t, *str )
str2ba.i( *str, *ba.bdaddr_t )
ba2oui.i( *ba.bdaddr_t, *oui)
bachk.i( *str )
bt_free( *ptr )
bt_error.i( code.w )
EndImport
;-Bluetooth Start
Define ii.inquiry_info
Define max_rsp.i, num_rsp.i
Define dev_id.i, sock.i, len.i, flags.i
Define i.i
Define addr.s{19}
Define name.s{248}
Define dr.hci_dev_req
OpenConsole("Bluetooth-Test!")
dev_id = hci_get_route(0)
sock = hci_open_dev(dev_id)
dr\dev_id = dev_id
;dr\dev_opt = #SCAN_DISABLED
dr\dev_opt = #SCAN_PAGE|#SCAN_INQUIRY
;*dr2 = @dr
If ioctl_(sock, #HCISETSCAN, @dr) < 0
Print(~"Der Bluetooth-Adapter konnte nicht auf Sichtbar geschaltet werden.\nBeachte:\nDieses Programm muss mit Root-Rechten ausgeführt werden.\n\n")
End
Else
Print(~"Alles Supi!\nDer Bluetooth-Adapter wurde auf Sichtbar geschaltet. (Vielleicht!) \nBitte überprüfen sie in ihren Bluetooth-Einstellung ob es geklappt hat.\n\n")
EndIf
CloseConsole()
Zum freien Probieren und Basteln. (Müsste jetzt funktionieren, aber einige Definitionen sind garantiert noch überarbeitbar.)