⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hci_sysfs.c

📁 Linux嵌入式平台蓝牙协议栈软件
💻 C
字号:
/* Bluetooth HCI driver model support. */#include <linux/config.h>#include <linux/kernel.h>#include <linux/init.h>#include <net/bluetooth/bluetooth.h>#include <net/bluetooth/hci_core.h>#ifndef CONFIG_BT_HCI_CORE_DEBUG#undef  BT_DBG#define BT_DBG(D...)#endifstatic ssize_t show_name(struct class_device *cdev, char *buf){	struct hci_dev *hdev = class_get_devdata(cdev);	return sprintf(buf, "%s\n", hdev->name);}static ssize_t show_type(struct class_device *cdev, char *buf){	struct hci_dev *hdev = class_get_devdata(cdev);	return sprintf(buf, "%d\n", hdev->type);}static ssize_t show_address(struct class_device *cdev, char *buf){	struct hci_dev *hdev = class_get_devdata(cdev);	bdaddr_t bdaddr;	baswap(&bdaddr, &hdev->bdaddr);	return sprintf(buf, "%s\n", batostr(&bdaddr));}static ssize_t show_flags(struct class_device *cdev, char *buf){	struct hci_dev *hdev = class_get_devdata(cdev);	return sprintf(buf, "0x%lx\n", hdev->flags);}static ssize_t show_inquiry_cache(struct class_device *cdev, char *buf){	struct hci_dev *hdev = class_get_devdata(cdev);	struct inquiry_cache *cache = &hdev->inq_cache;	struct inquiry_entry *e;	int n = 0;	hci_dev_lock_bh(hdev);	for (e = cache->list; e; e = e->next) {		struct inquiry_info *info = &e->info;		bdaddr_t bdaddr;		baswap(&bdaddr, &info->bdaddr);		n += sprintf(buf + n, "%s %d %d %d 0x%.2x%.2x%.2x 0x%.4x 0x%.2x %u\n",				batostr(&bdaddr),				info->pscan_rep_mode, info->pscan_period_mode, info->pscan_mode,				info->dev_class[2], info->dev_class[1], info->dev_class[0],				info->clock_offset, 0, e->timestamp);	}	hci_dev_unlock_bh(hdev);	return n;}static CLASS_DEVICE_ATTR(name, S_IRUGO, show_name, NULL);static CLASS_DEVICE_ATTR(type, S_IRUGO, show_type, NULL);static CLASS_DEVICE_ATTR(address, S_IRUGO, show_address, NULL);static CLASS_DEVICE_ATTR(flags, S_IRUGO, show_flags, NULL);static CLASS_DEVICE_ATTR(inquiry_cache, S_IRUGO, show_inquiry_cache, NULL);static struct class_device_attribute *bt_attrs[] = {	&class_device_attr_name,	&class_device_attr_type,	&class_device_attr_address,	&class_device_attr_flags,	&class_device_attr_inquiry_cache,	NULL};#ifdef CONFIG_HOTPLUGstatic int bt_hotplug(struct class_device *cdev, char **envp, int num_envp, char *buf, int size){	struct hci_dev *hdev = class_get_devdata(cdev);	int n, i = 0;	envp[i++] = buf;	n = snprintf(buf, size, "INTERFACE=%s", hdev->name) + 1;	buf += n;	size -= n;	if ((size <= 0) || (i >= num_envp))		return -ENOMEM;	envp[i] = NULL;	return 0;}#endifstatic void bt_release(struct class_device *cdev){	struct hci_dev *hdev = class_get_devdata(cdev);	kfree(hdev);}static struct class bt_class = {	.name		= "bluetooth",	.release	= bt_release,#ifdef CONFIG_HOTPLUG	.hotplug	= bt_hotplug,#endif};int hci_register_sysfs(struct hci_dev *hdev){	struct class_device *cdev = &hdev->class_dev;	int i, err;	BT_DBG("%p name %s type %d", hdev, hdev->name, hdev->type);	cdev->class = &bt_class;	class_set_devdata(cdev, hdev);	strlcpy(cdev->class_id, hdev->name, BUS_ID_SIZE);	err = class_device_register(cdev);	if (err < 0)		return err;	for (i = 0; bt_attrs[i]; i++)		class_device_create_file(cdev, bt_attrs[i]);	return 0;}void hci_unregister_sysfs(struct hci_dev *hdev){	struct class_device * cdev = &hdev->class_dev;	BT_DBG("%p name %s type %d", hdev, hdev->name, hdev->type);	class_device_del(cdev);}int __init bt_sysfs_init(void){	return class_register(&bt_class);}void __exit bt_sysfs_cleanup(void){	class_unregister(&bt_class);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -