Exemple #1
0
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;
}
Exemple #3
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;
}
Exemple #4
0
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;

}
Exemple #5
0
/*
 * 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;
}