Не отключайте рекламу на сайте - поможете проектуx86_64: LFD10-23.05 ; Roll23.05-23.06 ; LFU22 ; FASi686: DDR01-21.08 Русские PuppyLinux
0 Пользователей и 5 Гостей просматривают эту тему.
НАШЕЛ /sys/kernel/debug/bluetooth/hci0
# ./bdaddr Manufacturer: Integrated System Solution Corp. (57)Device address: 00:11:67:BF:03:0C
Если ориентируешься на bluez5, то придётся осваивать dbus.
#include <stdlib.h>#include <sys/ioctl.h>/*Эти добавить из bluez-5.45/lib/ */#include "bluetooth.h"#include "hci.h"static struct hci_dev_info di;int main(void) { int ctl; /* Open HCI socket */ if ((ctl = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI)) < 0) { perror("Can't open HCI socket."); exit(1); } if (ioctl(ctl, HCIGETDEVINFO, (void *) &di)) { perror("Can't get device info"); exit(1); } printf("%s\t%x\n", di.name, di.bdaddr); close(ctl); return 0;}
хрен знает что.
ты на bluez5 нацелился
Зато работает независимо от bluetoothd, hciconfig hci0 up и dbus-daemon.
dbus-send --system --print-reply --dest=org.bluez /org/bluez/hci0 org.freedesktop.DBus.Properties.Set string:org.bluez.Adapter1 string:Powered variant:boolean:true
static void cmd_up(int ctl, int hdev, char *opt){ /* Start HCI device */ if (ioctl(ctl, HCIDEVUP, hdev) < 0) { if (errno == EALREADY) return; fprintf(stderr, "Can't init device hci%d: %s (%d)\n", hdev, strerror(errno), errno); exit(1); }}static void cmd_down(int ctl, int hdev, char *opt){ /* Stop HCI device */ if (ioctl(ctl, HCIDEVDOWN, hdev) < 0) { fprintf(stderr, "Can't down device hci%d: %s (%d)\n", hdev, strerror(errno), errno); exit(1); }}
чем раньше он будет запущен - тем лучше.
Раньше, чем через udev только через init.d при старте.
Всё через ioctl, никакого dbus. И вообще непонятно, зачем он нужен?
утилита btmgmt
Предлагаю разделить функционал
У тебя она есть? А то могу поделиться.
# ./hci_info Device hci0:00:11:67:BF:03:0CUP RUNNING
system("urxvt -e /usr/bin/bluetoothctl");
if ((system("urxvt -e /usr/bin/bluetoothctl &")) == 0) system("/usr/bin/puppybt &");