请如果它是可能的后工作中心的例子基于ble_app_peripheral项目。在论坛上有很多成员发现DSPS主机应用程序太复杂,无法理解编写中心应用程序的过程。我认为这将足够我们大多数人,如果你放置一个示例项目读/写LED或长值特性。
提前谢谢!
嗨hssmltd,
annihilate没有其他中心的例子,对于需求方的复杂性,我相信,最复杂的部分的例子是数据的操作(循环缓冲区,起床和睡觉下降过程取决于缓冲区中的数据)和应用程序作为一个中央。本质上,一个中央应用程序需要扫描,当一个有效的设备发现问题,一个连接请求应该发出(我认为这是相当直接的,让我知道,如果需要任何指引在这)。建立连接后中央与发现过程应该开始(我想这是最迷惑你的一部分,如果我错了请纠正我),这个过程相当复杂,不是很难的需求方(也许它增加了一些复杂性自设备验证发现的服务)。因此,如果你需要这个过程的任何指导,你可以看一下RW-BLE-GATT-IS.pdf,它记录了一个中心应该执行的命令,以便发现位于中心的服务(检查4.4段服务发现)。如果发现确实是难以理解的部分你可以开始解码需求方主机例子通过检查user_sps_enable()函数,这使函数会发送一个SPS_CLIENT_ENABLE_REQ消息和相应的处理程序(sps_client_enable_req_handler())将会得到调用,处理程序将检查连接的有效性,然后通过prf_disc_svc_send128() api函数发送一个GATTC_DISC_CMD,发现过程将开始。
谢谢mt_dialog.
你好,我在论坛中找到了一个用户在这里发布了他对SPS主机项目的修改:https://support.dialog-semicondiondiondum/da14580-central-connection-two -...
我将其修改为启用任务扫描模式,并成功连接到我的自定义外设。这就是我现在震惊的地方:
void user_on_connection(uint8_t connection_idx,struct gapc_connection_req_ind const * param){const uint8_t * p_addr;Static uint8_t count =0;ARCH_PRINTF(“user_on_connection \ r \ n”);if(app_env [connection_idx] .conidx!= gap_invalid_conidx){p_addr = & (param - > peer_addr.addr [0]);app_easy_timer_cancel (connection_timer);//app_prf_enable (param - > conhdl);user_gattc_exc_mtu_cmd (connection_idx);//
arch_printf(“连接% 02 x % 02 x, x % 02, % 02 x % 2 x, x % 02 \ r \ n”,p_addr [5], p_addr [4], p_addr [3], p_addr [2], p_addr [1], p_addr [0]);
此时是否可能在不发现服务的情况下发出gattc_read_by_uuid命令?因为自定义特征UUID是已知的和固定的(它是长特征- 400字节固定长度)如果是,你能帮助我的示例代码段?
使用gattc_read_by_uuId命令来读取服务器的特性,而不知道特性的确切句柄,并通过提供与已知的uuid的特性的维护和启动和结束句柄,如果您没有完成任何服务发现,您如何知道包括特征的服务的开始和结束手柄?你会静态吗?此外,该发现还可以检查每个特征中拥有的权限,因此如果在不知道该设备的特征权限返回错误的情况下读取特征,则读取特性。无论如何,只要您预先知道特征的UUID,就可以读取特征的值,该服务的结束和启动句柄,其中包括字符和OFORSOUSS,如果特征确实是可读的(如果不是,则错误返回)。关于您希望您查看以下代码的示例:
struct prf_readbyuid_char_send (struct prf_con_info* con_info, uint16_t shdl, uint16_t ehdl, uint16_t valhdl){Uint8_t sps_server_tx[16] = {0xb9, 0x5c, 0x49, 0xd2, 0x04, 0xa3, 0x40, 0x71, 0xa0, 0xb5, 0x35, 0x85, 0x3e, 0xb0, 0x83, 0x07};/ /一个可读的特征struct gattc_read_cmd * req = ke_msg_alloc_dyn(gattc_read_cmd,ke_build_id(task_gattc,con_info-> conidx),con_info - > prf_id、gattc_read_cmd GATT_UUID_128_LEN);//请求类型申请- > req_type = GATTC_READ_BY_UUID;申请- > req.by_uuid。start_hdl = shdl;//预先知道这两个值申请- > req.by_uuid。end_hdl = ehdl;申请- > req.by_uuid。uuid_len = GATT_UUID_128_LEN;memcpy(请求- > req.by_uuid。uuid、sps_server_tx GATT_UUID_128_LEN);
//发送请求给GATTke_msg_send(要求的);}
你好,我将prf_readByUuid_char_send导入到prf_utils_128.c,现在在user_on_connection中使用它的正确方式是什么?你能告诉我如何使用函数,例如打印特征值/或错误消息吗?
谢谢!
上述实施只是一个概念的教授,您可以执行以前的帖子中所要求的内容,我完成的是使用DSPS主机示例并从启用配置文件中注释出了发现过程。因此,其余的代码刚刚完成了SPSC_ENV的设置,然后我可以发出上述命令。
因此,您可以在连接时启用您的自定义设备,而无需执行发现过程,在连接时(填写个人资料的环境,然后填充DSPS的情况),然后在启用后(User_sps_client_enable_cfm_handler()或您的自定义启用确认处理程序)您可以使用函数我粘贴上面才能读取特征(你必须改变你想要读取的UUID,手柄范围)。发送读取命令后,堆栈将在命令完成时与gattc_cmp_evt回复,并且在读取属性时使用gattc_read_ind(检查rw-ble-gatt-is.pdf),您应该能够捕获这些消息user_catch_rest_hndl回调(dsps已将此回调作为user_process_catch修改)所以如果您想对DSP执行此操作,我会以为您可以在全局变量定义部分中的SPS_CLIENT_TASK.c文件中添加一些消息和处理程序。您可以使用自定义处理程序添加sps_client_discover [] gattc_read_ind,您还可以添加一些附加代码来在sps_client_default_state []常量中的gattc_cmp_evt_handler()中处理gattc_cmp_evt。
嗨hssmltd,
annihilate没有其他中心的例子,对于需求方的复杂性,我相信,最复杂的部分的例子是数据的操作(循环缓冲区,起床和睡觉下降过程取决于缓冲区中的数据)和应用程序作为一个中央。本质上,一个中央应用程序需要扫描,当一个有效的设备发现问题,一个连接请求应该发出(我认为这是相当直接的,让我知道,如果需要任何指引在这)。建立连接后中央与发现过程应该开始(我想这是最迷惑你的一部分,如果我错了请纠正我),这个过程相当复杂,不是很难的需求方(也许它增加了一些复杂性自设备验证发现的服务)。因此,如果你需要这个过程的任何指导,你可以看一下RW-BLE-GATT-IS.pdf,它记录了一个中心应该执行的命令,以便发现位于中心的服务(检查4.4段服务发现)。如果发现确实是难以理解的部分你可以开始解码需求方主机例子通过检查user_sps_enable()函数,这使函数会发送一个SPS_CLIENT_ENABLE_REQ消息和相应的处理程序(sps_client_enable_req_handler())将会得到调用,处理程序将检查连接的有效性,然后通过prf_disc_svc_send128() api函数发送一个GATTC_DISC_CMD,发现过程将开始。
谢谢mt_dialog.
你好,
我在论坛中找到了一个用户在这里发布了他对SPS主机项目的修改:
https://support.dialog-semicondiondiondum/da14580-central-connection-two -...
我将其修改为启用任务扫描模式,并成功连接到我的自定义外设。
这就是我现在震惊的地方:
void user_on_connection(uint8_t connection_idx,struct gapc_connection_req_ind const * param)
{
const uint8_t * p_addr;
Static uint8_t count =0;
ARCH_PRINTF(“user_on_connection \ r \ n”);
if(app_env [connection_idx] .conidx!= gap_invalid_conidx)
{
p_addr = & (param - > peer_addr.addr [0]);
app_easy_timer_cancel (connection_timer);
//
app_prf_enable (param - > conhdl);
user_gattc_exc_mtu_cmd (connection_idx);
//
arch_printf(“连接% 02 x % 02 x, x % 02, % 02 x % 2 x, x % 02 \ r \ n”,
p_addr [5], p_addr [4], p_addr [3], p_addr [2], p_addr [1], p_addr [0]);
此时是否可能在不发现服务的情况下发出gattc_read_by_uuid命令?因为自定义特征UUID是已知的和固定的(它是长特征- 400字节固定长度)
如果是,你能帮助我的示例代码段?
嗨hssmltd,
使用gattc_read_by_uuId命令来读取服务器的特性,而不知道特性的确切句柄,并通过提供与已知的uuid的特性的维护和启动和结束句柄,如果您没有完成任何服务发现,您如何知道包括特征的服务的开始和结束手柄?你会静态吗?此外,该发现还可以检查每个特征中拥有的权限,因此如果在不知道该设备的特征权限返回错误的情况下读取特征,则读取特性。无论如何,只要您预先知道特征的UUID,就可以读取特征的值,该服务的结束和启动句柄,其中包括字符和OFORSOUSS,如果特征确实是可读的(如果不是,则错误返回)。关于您希望您查看以下代码的示例:
struct prf_readbyuid_char_send (struct prf_con_info* con_info, uint16_t shdl, uint16_t ehdl, uint16_t valhdl)
{
Uint8_t sps_server_tx[16] = {0xb9, 0x5c, 0x49, 0xd2, 0x04, 0xa3, 0x40, 0x71, 0xa0, 0xb5, 0x35, 0x85, 0x3e, 0xb0, 0x83, 0x07};/ /一个可读的特征
struct gattc_read_cmd * req = ke_msg_alloc_dyn(gattc_read_cmd,ke_build_id(task_gattc,con_info-> conidx),
con_info - > prf_id、gattc_read_cmd GATT_UUID_128_LEN);
//请求类型
申请- > req_type = GATTC_READ_BY_UUID;
申请- > req.by_uuid。start_hdl = shdl;//预先知道这两个值
申请- > req.by_uuid。end_hdl = ehdl;
申请- > req.by_uuid。uuid_len = GATT_UUID_128_LEN;
memcpy(请求- > req.by_uuid。uuid、sps_server_tx GATT_UUID_128_LEN);
//发送请求给GATT
ke_msg_send(要求的);
}
谢谢mt_dialog.
你好,
我将prf_readByUuid_char_send导入到prf_utils_128.c,
现在在user_on_connection中使用它的正确方式是什么?
你能告诉我如何使用函数,例如打印特征值/或错误消息吗?
谢谢!
嗨hssmltd,
上述实施只是一个概念的教授,您可以执行以前的帖子中所要求的内容,我完成的是使用DSPS主机示例并从启用配置文件中注释出了发现过程。因此,其余的代码刚刚完成了SPSC_ENV的设置,然后我可以发出上述命令。
因此,您可以在连接时启用您的自定义设备,而无需执行发现过程,在连接时(填写个人资料的环境,然后填充DSPS的情况),然后在启用后(User_sps_client_enable_cfm_handler()或您的自定义启用确认处理程序)您可以使用函数我粘贴上面才能读取特征(你必须改变你想要读取的UUID,手柄范围)。发送读取命令后,堆栈将在命令完成时与gattc_cmp_evt回复,并且在读取属性时使用gattc_read_ind(检查rw-ble-gatt-is.pdf),您应该能够捕获这些消息user_catch_rest_hndl回调(dsps已将此回调作为user_process_catch修改)所以如果您想对DSP执行此操作,我会以为您可以在全局变量定义部分中的SPS_CLIENT_TASK.c文件中添加一些消息和处理程序。您可以使用自定义处理程序添加sps_client_discover [] gattc_read_ind,您还可以添加一些附加代码来在sps_client_default_state []常量中的gattc_cmp_evt_handler()中处理gattc_cmp_evt。
谢谢mt_dialog.