/* * Set the Bluetooth adapter Device Class. * * Parameters: * dd: A opened HCI device. * cls: The new Device Class value. * * Returns: * 0 on success or a negative error code (defined in error.h) on failure. */ static int set_device_class(int dd, uint32_t cls) { int errsv; /* saved errno */ if (hci_write_class_of_dev(dd, cls, 2000) < 0) { errsv = errno; log_ec(errsv, "Can't write HCI Device Class"); return hidc_convert_errno(errsv); } return 0; }
/** * Spoofs the device class. cls is a string in the format 0xffffff. */ int spoof_device_class(int hdev, char *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; } uint32_t cod = strtoul(cls, NULL, 16); if (hci_write_class_of_dev(s, cod, 2000) < 0) { LOGE("Cannor write class for hci%d: %s(%d)\n", hdev, strerror(errno), errno); return errno; } return 0; }
/* * \brief This function writes the device class for a given device number. * * \param device_number the device number * \param devclass the device class to write * * \return 0 if successful, -1 otherwise */ int bt_write_device_class(int device_number, uint32_t devclass) { int ret = 0; int s = hci_open_dev (device_number); if(hci_write_class_of_dev(s, devclass, HCI_REQ_TIMEOUT) < 0) { ret = -1; } close(s); return ret; }
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; }