你好,
在我的应用程序中,使用从控制器上发送的命令创建GATT DB。我绝不使用标准配置文件或甚至是对话框SDK提供的自定义服务/特征。我现在已经完成了填充GATT数据库并开始广告。我可以在NRF应用程序中看到附件,并能够连接到它。
现在,我想捕获读、写和所有其他事件/请求(mtu信息、连接、断开连接、指示),以便我可以对它们进行操作。我可以在user_catch_rest_hndl()中这样做吗?
如果是,我需要处理的确切事件是什么?我尝试使用gattc_write_cmd_ind,gattc_read_ind,gattc_read_cmd_ind,但控制没有到达那里(增加了检查要检查的断点)
如果不是,那么什么才是正确的方法呢?
谢谢,
Hrishikesh
设备:
嗨Dhrishi,
您指的指示要引用GATTC_WRITE_CMD_IND等,是从BLE堆栈发送的命令,然后传达给应用程序以达到CATCH_REST_HANDLER函数。雷竞技安卓下载由于您正在实现完全自定义的内容,因此您不会使用SDK提供自定义配置文件的Fina菊库。我不确定您究竟是如何创建数据库,或者在哪些任务上,您已分配了所创建的配置文件。所以我只能承担你没有迹象的原因。如果您有BLE_CUSTOM1_SERVER定义,则为要创建的自定义任务,但您仍然使用SDK提供的CUSTS_PROFILE的基本实现,那么您可以通过自定义配置文件的现有实现和处理邮件,并且为什么没有在catch_rest函数中获取任何内容。尝试设置为1 exclude_dlg_custs1定义并检查catch_function是否已执行。
谢谢mt_dialog.
我会尝试将complude_dlg_custs1设置为1并执行。
我已将配置文件分配给task_app,我没有ble_custom1_server。
用于创建GATT数据库的命令:
struct gattm_add_svc_req *req = KE_MSG_ALLOC(gattm_add_svc_req, TASK_ATTM, TASK_APP,
gattm_add_svc_req);
struct gattm_add_attribute_req * req = ke_msg_alloc(gattm_add_attribute_req,
task_attm,task_app,gattm_add_attribute_req);
struct gattm_att_set_value_req *req = KE_MSG_ALLOC(gattm_att_set_value_req, TASK_ATTM, TASK_APP,
gattm_att_set_value_req);
在这种情况下,堆栈将提供给读/写/指示/ mtu协商的应用程序的事件是什么?
它们是否可以在user_catch_rest_hndl()中捕获,或者是否有其他方法。
嗨Dhrishi,
内核未处理的所有消息都将传达给Task_App(如果是消息的目标),因此如果您使用Gattm_add_svc_req创建服务时,它已将其填充与task_app的结构的task_id成员任务然后可以由user_catch_rest_hndl()函数处理关于该数据库的所有消息。关于您可以处理哪些消息,从TAFT_APP和GAPC,GAPM,邮件中的GATTC中的消息可以被处理,包括GATTC_WRITE_CMD_IND以及关于阅读的MTU_EXCHANGE,我不认为您将是能够获得该消息,自目前仅由RW配置文件支持。
谢谢mt_dialog.
因此,如果我创建了一个使用TASK_APP发送内核消息的自定义数据库,而没有使用任何标准配置文件,那么我如何处理读消息。
此外,在填充数据库并开始广告后,当中央(智能手机上的nRF应用程序)连接我看到的是:
我收到msgid 0x11中的ysgid 0x11中的消息。当我检查SDK时,它映射到Gattm_Destroy_DB_RSP。这里有什么不对吗?我们什么时候收到这条消息?
此外,对于相同的值0x11,我看到它映射到gattc_write_cmd_cfm。那么,将被考虑哪一个。
简而言之,我看到一个值的多条消息。通过我用于我的GATT数据库配置的任务,可以让我知道我需要考虑哪些消息(从哪些文件中的文件)
我没有得到mtu的信息。如何获得当前MTU的沟通价值?
是下面的呼叫强制性吗?或者这可以有效果吗?
attmdb_svc_set_permission(svc_hdl,perm(svc,启用));
我既没有在开始时禁用服务,也没有启用它。即使在定制数据库填充的情况下也需要它吗?不能使用上述电话导致上述问题?
当我从中央设备写入时,我得到消息0x0e,它是gattc_write_cmd_ind(我想)。这是正确的吗?
当我从中央设备读取时,我在user_catch_rest_hndl()中没有Mesage。我如何处理阅读?
嗨Dhrishi,
关于阅读作为上面提到的读数是不可能的,您不会在user_catch_rest_hndl()函数中获取gattc_read_ind,消息未传达给应用程序。在SDK5.0.4中在SDK5.0.4中完成了什么,以获取读取命令是添加了新消息(ATTS_READ_REQ_IND)。所以你可以做的是通过使用dg_register_task_for_read_request(task_app)来注册该消息的task_app;,通过这样做,您可以在user_catch_rest_hndl()中捕获atts_read_req_ind并检查读取的句柄。此外,您还必须使用DG_Atts_Read_cfm()函数响应该消息(如果您不响应这将导致断开连接)。
您获得0x11的消息对应于gattm_destroy_db_rsp,这意味着在您连接时的某些时候可能会调用gattm_destroy_db_req,因为这是您得到的响应,但它不仅是您必须要检查的消息,但它也必须检查的消息消息来自。如果您不调用Destroy数据库,我不认为数据库销毁确认就是您所看到的。
关于您没有在Task_App(MTU_EXCHANGE,GATTC_WRITE_CMD_IND)中获取任何消息的事实,在发送GATTM_ADD_SVC_REQ时是否将TASK_ID声明为TASK_APP?除此之外,我无法猜测任何其他原因都让人创造了数据库的创作(你得到了对数据库的响应的事实,如果这是你得到的话,那就太好了。关于它的一个gattc_write_cmd_cfm,这不是你在执行写的时候得到的指示,也是一个gattc_的确认,这意味着在收到gattc_cmp_evt时应发生这种情况(如果您发出的命令,则应完成您应该完成完成的命令),所以你首先要抓住gattc_cmp_evt的情况,然后可以检查req_type参数以确定完成的事件。这对您获得的大多数消息有效。
如果您在创建时未禁用服务(作为AN-B-029 DO的示例),则设置的权限调用不是强制性的,然后它不义务调用权限的启用。另一方面,如果您已禁用该服务并且在连接时启用它,则无法读取或写入该特性。
如果从中央设备编写,则应获得的正确消息是Gattc_Write_cmd_ind,您应该能够在GattC_cmp_evt之外捕获它。
关于阅读特色,请在提出您的问题上检查。
谢谢mt_dialog.
你好,
在每个服务的DG_REGISTER_TASK_FOR_READ_REQUEST(TASS_APP)的帮助下,当我从某些中央设备写入时,我在user_catch_rest_hndl()中获取ATTS_READ_REQ_IND。通过上面的说明,我看到DG_atts_Read_cfm()需要与适当的状态代码一起使用,并且在内部发送实际的读取响应。如果我想从应用程序本身发送数据,是否可能?
我的意思是,我不会将特征值存储在DA14580 GATT数据库中。当我转发收到的读取请求时,我将实际值作为来自控制器的响应。是否有一个机制/ api,我可以用来完全通过自己发送读取响应(以及数据)。
关于写请求,如果我有uint8_t类型的特征,如果中央设备在它上写入2个字节(uint16_t),那么sdk会做什么?
我所看到的是,在这种情况下,我没有得到gattc_write_cmd_ind事件。在生成事件之前是否有关于数据类型和/或大小的检查?
关于GATT数据库,所有服务,特征和描述符都以DEST_ID添加为TASK_ATTM和SRC_ID作为TASK_APP。
关于0x11事件,我看到当任何中心连接到我的设备,这是一个外设,我得到0x11事件几乎2-3次。那么这是什么呢?我没有从我的代码调用GATTM_DESTROY_DB_REQ。
此外,为MTU交换收到的明确事件是什么。我无法在活动中找到它。我基本上希望协商的MTU值为要发送到控制器的当前连接。
我无法理解你的以下声明:
如果从中央设备编写,则应获得的正确消息是Gattc_Write_cmd_ind,您应该能够在GattC_cmp_evt之外捕获它。
您能否在user_catch_rest_hndl()中使用上面的gattc_cmp_evt和gattc_write_cmd_ind给我一个样本示例。简而言之,在函数中使用gattc_cmp_evt。
嗨Dhrishi,
dg_register_task_for_read_request是一个函数,用于在中央读取特征而不是写入特征时向应用程序发出指示。关于第二个问题,是否有可能发送数据以及确认设备读取数据库时,这是不可能的,因为我已经提到这是一片和数据发送到中央被提供的设备,而不是从数据库的应用程序。
如果您向特性发送无效长度的值,则堆栈将直接在中央返回错误,它不会到达应用程序级别,以便您处理这种情况,它只通知中央发送无效属性值长度消息。
关于0x11检查命令作为源的任务,以检查此命令实际的是什么。关于MTU,请检查RW-BLE-GATT-IS.PDF MTU请求由GATT_EXC_MTU_REQ启动,并使用相应的操作使用GATTC_CMP_EVT发出完成。
关于gattc_write_cmd_ind我的意思是你只需要在catch_rest_handler中捕获它,你不必先捕捉gattc_cmp_evt然后检查操作,万一你正在做的东西,只需使用switch()gattc_write_cmd_ind。
谢谢mt_dialog.