Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Service 什么是「;包括服务“;在一个对你有用的服务中?_Service_Bluetooth Lowenergy - Fatal编程技术网

Service 什么是「;包括服务“;在一个对你有用的服务中?

Service 什么是「;包括服务“;在一个对你有用的服务中?,service,bluetooth-lowenergy,Service,Bluetooth Lowenergy,我有一个专用设备的自定义配置文件(我的智能手机应用程序将是唯一与我的外设通信的设备),其中包括两个简单的服务。每个服务都允许客户端在外围设备上读写单个字节的数据。我想添加在单个事务中读取和写入两个字节的能力 我尝试添加第三个服务,该服务仅包含两个现有的单字节服务,但似乎要做的只是分配一个UUID,该UUID将现有服务的UUID组合在一起,我不知道如何使用组合的UUID,因为它没有任何特征值 我正在考虑的替代方案是为这两个字节创建一个单独的服务,并结合它们对我的服务器的影响,或者我可以用一个包含这

我有一个专用设备的自定义配置文件(我的智能手机应用程序将是唯一与我的外设通信的设备),其中包括两个简单的服务。每个服务都允许客户端在外围设备上读写单个字节的数据。我想添加在单个事务中读取和写入两个字节的能力

我尝试添加第三个服务,该服务仅包含两个现有的单字节服务,但似乎要做的只是分配一个UUID,该UUID将现有服务的UUID组合在一起,我不知道如何使用组合的UUID,因为它没有任何特征值

我正在考虑的替代方案是为这两个字节创建一个单独的服务,并结合它们对我的服务器的影响,或者我可以用一个包含这两个字节以及每个字节的布尔标志的服务来替换所有这些,该标志指示是否应该写入关联的字节

第一种方案似乎过于复杂,第二种方案将排除对单独字节的通知和指示的单独控制


有没有一种方法可以使用包含的服务来实现我的目标?

这是一个很老的问题,但如果其他人遇到它,我会在这里留下评论

这里有两个部分。一个是Lance F的迟来回答:您对BLE设计原则的理解是错误的。服务是在BLE堆栈的主机级别上定义的。您从应用程序级别的角度考虑问题,希望原子事务为您提供两个不同实体的复合对象。否则,为什么要定义两个服务

第二部分是对凯文·汤森(Kevin Townsend)等人的“蓝牙低能耗入门”中引用的实际问题的回答,O'Reilly,2014,第58页: 包含的服务有助于避免在GATT服务器中复制数据。如果一个服务将被其他服务引用,您可以使用此机制来节省内存并简化GATT服务器的布局。在前面的类和对象类比中,您可以看到包含定义作为指向现有对象实例的指针或引用

这是我的回答的更新,以澄清为什么在Lance F所述的问题中不需要包含服务

我对BLE在医疗设备中的应用非常熟悉,因此我简要地以SIG定义的葡萄糖曲线为例,与您的问题进行了一些类比

让我们设想一个服务器设备,它具有两个定义的特征:葡萄糖测量和葡萄糖测量上下文。客户端可以订阅这些特征之一或两者的通知。在一段时间之后,客户端设备可以通过简单地写入相应特征的客户端配置特征描述符来更改其订阅

服务器还有一个特殊的强制性特征——记录访问控制点(RACP),客户端使用它来检索或更新血糖测量历史记录

如果客户机希望获得大量存储的历史记录,它会将这些记录写入RACP{OpCode:4(报告存储记录的数量),Operator:1(所有记录)}。然后,服务器从RACP{操作码:5(存储记录数响应)、运算符:0(Null)、操作数:17(某些数字)}发送指示

如果客户机希望获取它写入RACP的任何特定记录{OpCode:1(报告存储的记录),运算符:4(在的范围内,包括在内),操作数:[13,14](例如记录13和14)}。作为响应,服务器逐个发送请求的记录作为葡萄糖测量和葡萄糖测量上下文特征的通知,然后从RACP特征发送指示以报告操作状态


因此,葡萄糖测量和葡萄糖测量上下文是您的模式和速率特征,那么您还需要一个控制特征-RACP的模拟。现在需要定义一些代码、运算符和操作数。创建最适合您的结构,例如,代码:1-更新,运算符:1-仅限模式,操作数:实际数。客户端将其写入控制点特性。服务器在写入时会收到通知,并对其进行解释,其行为方式由您的自定义配置文件定义。

谢谢您的回复,但我很难理解您的回答WRT第1部分。我提供两个服务有两个原因:1)我需要能够在不影响其他变量的情况下更改服务器中的任何一个局部变量,2)我希望能够独立地允许通知对任一局部变量的局部更改。我认为这基本上要求为两个局部变量中的每一个提供单独的服务。您是对的,我希望在一次交易中同时使用这两种特征的书写方式,是因为有时需要从客户处自动更新这两种特征。WRT第2部分,您的回答确实澄清了我对所包含服务的预期用途的困惑。我最终创建了第三个服务,它同时写入(或读取)两个局部变量。看起来很麻烦,但它完成了我需要的。你能推荐一个更好的替代方案吗?你为概念上相似的东西定义了一个服务。如果两个服务仅用于打开/关闭通知或指示,则无需定义它们。为此,您使用了客户端配置特征描述符来取消/订阅特定特征的通知/指示。另外,在解释您最初的问题和回答时,我有点困惑。前者提到了读写操作,我将使用这些操作在服务器端的一些功能控制点特性中。后者说的是与服务器相对应的通知,该服务器定期发送关于已完成事实的单向信息。我尽力向你推荐一个赌注