int CBlueZStack::GetDeviceClass() { unsigned char cls[3]; if (hci_read_class_of_dev(m_fd, cls, BLUEZ_TIMEOUT) < 0) { PERROR("error reading device class"); return -1; } return (cls[0] << 16) | (cls[1] << 8) | cls[2]; }
/** * Reads the device class. cls must be a uint8[3]. */ int read_device_class(int hdev, uint8_t *cls) { int s = hci_open_dev(hdev); if (s < 0) { LOGE("Cannot open device hci%d: %s (%d)\n", hdev, strerror(errno), errno); return errno; } if (hci_read_class_of_dev(s, cls, 1000) < 0) { LOGE("Cannot read class of device hci%d: %s (%d)\n", hdev, strerror(errno), errno); return errno; } return 0; }
bool CBlueZStack::SetServiceClasses(int classes) { unsigned char cls[3]; if (hci_read_class_of_dev(m_fd, cls, BLUEZ_TIMEOUT) < 0) { PERROR("error reading device class"); return false; } classes |= cls[1] << 8; classes |= cls[2]; if (hci_write_class_of_dev(m_fd, classes, BLUEZ_TIMEOUT) < 0) { PERROR("error writing device class"); return false; } return true; }
static uint8_t* get_device_class(int hdev) { int s = hci_open_dev(hdev); if (s < 0) { fprintf(stderr, "Can't open device hci%d: %s (%d)\n", hdev, strerror(errno), errno); exit(1); } if (hci_read_class_of_dev(s, cls, 1000) < 0) { fprintf(stderr, "Can't read class of device on hci%d: %s (%d)\n", hdev, strerror(errno), errno); exit(1); } return cls; }
/* * Get the current Bluetooth adapter Device Class. * * Parameters: * dd: A opened HCI device. * cls: The result. * * Returns: * 0 on success or a negative error code (defined in error.h) on failure. */ static int get_device_class(int dd, uint32_t *cls) { int errsv; /* saved errno */ uint8_t cur_cls[3]; /* current Device Class */ uint32_t result; if (hci_read_class_of_dev(dd, cur_cls, 1000) < 0) { errsv = errno; log_ec(errsv, "Can't read HCI Device Class"); return hidc_convert_errno(errsv); } result = 0; result |= (uint32_t)cur_cls[0]; result |= (uint32_t)cur_cls[1] << 8; result |= (uint32_t)cur_cls[2] << 16; *cls = result; return 0; }