请如果它是可能的后工作中心的例子基于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-semiconductor.com/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”);如果(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,如果你还没有做任何服务发现、如何知道包含该特征的服务的开始句柄和结束句柄?你会静态地做吗?此外,还会执行发现来检查每个特征中所拥有的权限,因此,如果读取一个特征而不知道该特征有什么权限,设备将返回一个错误。无论如何,可以阅读特点的价值,只要你事先知道UUID的特点,最后,开始处理包括个性化的服务,当然如果特征确实是可读的(如果它不是一个错误返回)。关于你想要的示例,请检查以下代码:
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的设置,然后我就可以发出上面的命令。
所以你可以启用你的自定义设备,而不需要执行发现过程,在连接(填写配置文件作为需求方的环境),然后使结束后(user_sps_client_enable_cfm_handler()或您的自定义支持确认处理程序)就可以使用函数为了阅读我上面贴一个特征(您必须更改你想读的UUID,处理范围)。在发送读取命令之后,当命令完成时,堆栈将以GATTC_CMP_EVT回应,当属性被读取时,使用GATTC_READ_IND回应(检查RW-BLE-GATT-IS.pdf),你应该能够抓住这些消息在user_catch_rest_hndl回调(需求方修改这个回调user_process_catch)如果你想做这个需求方我假设您可以添加一些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-semiconductor.com/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”);
如果(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,如果你还没有做任何服务发现、如何知道包含该特征的服务的开始句柄和结束句柄?你会静态地做吗?此外,还会执行发现来检查每个特征中所拥有的权限,因此,如果读取一个特征而不知道该特征有什么权限,设备将返回一个错误。无论如何,可以阅读特点的价值,只要你事先知道UUID的特点,最后,开始处理包括个性化的服务,当然如果特征确实是可读的(如果它不是一个错误返回)。关于你想要的示例,请检查以下代码:
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的设置,然后我就可以发出上面的命令。
所以你可以启用你的自定义设备,而不需要执行发现过程,在连接(填写配置文件作为需求方的环境),然后使结束后(user_sps_client_enable_cfm_handler()或您的自定义支持确认处理程序)就可以使用函数为了阅读我上面贴一个特征(您必须更改你想读的UUID,处理范围)。在发送读取命令之后,当命令完成时,堆栈将以GATTC_CMP_EVT回应,当属性被读取时,使用GATTC_READ_IND回应(检查RW-BLE-GATT-IS.pdf),你应该能够抓住这些消息在user_catch_rest_hndl回调(需求方修改这个回调user_process_catch)如果你想做这个需求方我假设您可以添加一些sps_client_task.c文件中的消息和处理程序的全局变量定义部分例如您可以添加sps_client_discover[]使用您的自定义处理程序的GATTC_READ_IND,并且您还可以添加一些额外的代码来处理sps_client_default_state常量中的gattc_cmp_evt_handler()中的GATTC_CMP_EVT。
由于MT_dialog