如果有基于BLE_APP_PERITITEL项目的工作中的中央惯例,请咨询。这里有很多会员在这里找到DSPS主机应用程序太复杂,以了解编码中央应用程序的过程。如果您放置了读/写入LED或长价特征的示例项目,我们大多数我们的大多数人都足够了。
先感谢您!
嗨HSSMLTD,
不幸的是,关于DSP的复杂性,我不信任该示例的最复杂部分的中央的另一个例子是对数据的操纵(环形缓冲区,取决于数据,唤醒和睡眠过程。在缓冲区中)和应用程序作为中央。基本上是一个中央应用程序需要扫描,并且当找到有效的设备时,应发出连接请求(我想这是非常直接的,请告诉我,如果需要任何骚扰)。建立了一个连接后,一个中心应该从发现程序开始(我想这是让你最混淆的部分,请纠正我,如果我错了),这个程序非常复杂,而不是使它变得困难的DSP(也许它增加了一些复杂性,因为设备正在验证发现的服务)。因此,如果您需要在此过程上进行任何骚扰,则可以查看RW-BLE-GATT-IS.PDF,该文件记录中央应执行的命令,以便发现位于中央的服务(检查第4.4段服务发现)。此外,如果发现是难以理解的部分,可以通过检查user_sps_enable()函数来开始解码DSP主机示例,这个启用功能将发送SPS_CLIEND_ENABLE_REQ消息,并将调用相应的处理程序(SPS_CLIEND_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;静态UINT8_T计数= 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(“连接%02x,%02x,%02x,%02x,%02x,%02x \ 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,如果特征确实是可读的(如果不是,则错误返回)。关于您希望您查看以下代码的示例:
void prf_readbyuuuid_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-> req_type = gattc_read_by_uuuid;req-> req.by_uuid.start_hdl = shdl;//事先知道这两个的值req-> req.by_uuid.end_hdl = ehdl;req-> req.by_uuid.uuid_len = gatt_uuid_128_len;memcpy(req-> req.by_uuid.uuid,sps_server_tx,gatt_uuid_128_len);
//向GATT发送请求KE_MSG_SEND(REQ);}
你好,我将prf_readbyuuuid_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,
不幸的是,关于DSP的复杂性,我不信任该示例的最复杂部分的中央的另一个例子是对数据的操纵(环形缓冲区,取决于数据,唤醒和睡眠过程。在缓冲区中)和应用程序作为中央。基本上是一个中央应用程序需要扫描,并且当找到有效的设备时,应发出连接请求(我想这是非常直接的,请告诉我,如果需要任何骚扰)。建立了一个连接后,一个中心应该从发现程序开始(我想这是让你最混淆的部分,请纠正我,如果我错了),这个程序非常复杂,而不是使它变得困难的DSP(也许它增加了一些复杂性,因为设备正在验证发现的服务)。因此,如果您需要在此过程上进行任何骚扰,则可以查看RW-BLE-GATT-IS.PDF,该文件记录中央应执行的命令,以便发现位于中央的服务(检查第4.4段服务发现)。此外,如果发现是难以理解的部分,可以通过检查user_sps_enable()函数来开始解码DSP主机示例,这个启用功能将发送SPS_CLIEND_ENABLE_REQ消息,并将调用相应的处理程序(SPS_CLIEND_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;
静态UINT8_T计数= 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(“连接%02x,%02x,%02x,%02x,%02x,%02x \ 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,如果特征确实是可读的(如果不是,则错误返回)。关于您希望您查看以下代码的示例:
void prf_readbyuuuid_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-> req_type = gattc_read_by_uuuid;
req-> req.by_uuid.start_hdl = shdl;//事先知道这两个的值
req-> req.by_uuid.end_hdl = ehdl;
req-> req.by_uuid.uuid_len = gatt_uuid_128_len;
memcpy(req-> req.by_uuid.uuid,sps_server_tx,gatt_uuid_128_len);
//向GATT发送请求
KE_MSG_SEND(REQ);
}
谢谢mt_dialog.
你好,
我将prf_readbyuuuid_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.