From 5613a57406d1a81b68c78b5dbd4e2a236d76aef0 Mon Sep 17 00:00:00 2001 From: lcapra Date: Wed, 14 Mar 2018 10:49:23 +0100 Subject: [PATCH] expose hci up down --- linux/hci/socket/socket.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/linux/hci/socket/socket.go b/linux/hci/socket/socket.go index 14048187..1dc39a10 100644 --- a/linux/hci/socket/socket.go +++ b/linux/hci/socket/socket.go @@ -144,3 +144,29 @@ func (s *Socket) Close() error { defer s.rmu.Unlock() return errors.Wrap(unix.Close(s.fd), "can't close hci socket") } + +//Up turn up a HCI device by ID +func Up(id int) error { + // Create RAW HCI Socket. + fd, err := unix.Socket(unix.AF_BLUETOOTH, unix.SOCK_RAW, unix.BTPROTO_HCI) + if err != nil { + return errors.Wrap(err, "can't create socket") + } + if err := ioctl(uintptr(fd), hciUpDevice, uintptr(id)); err != nil { + return errors.Wrap(err, "can't down device") + } + return unix.Close(fd) +} + +//Down turn down a HCI device by ID +func Down(id int) error { + // Create RAW HCI Socket. + fd, err := unix.Socket(unix.AF_BLUETOOTH, unix.SOCK_RAW, unix.BTPROTO_HCI) + if err != nil { + return errors.Wrap(err, "can't create socket") + } + if err := ioctl(uintptr(fd), hciDownDevice, uintptr(id)); err != nil { + return errors.Wrap(err, "can't down device") + } + return unix.Close(fd) +}