如果有基于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-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;静态UINT8_T计数= 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(“连接%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,如果你还没有做任何服务发现、如何知道包含该特征的服务的开始句柄和结束句柄?你会静态地做吗?此外,还会执行发现来检查每个特征中所拥有的权限,因此,如果读取一个特征而不知道该特征有什么权限,设备将返回一个错误。无论如何,可以阅读特点的价值,只要你事先知道UUID的特点,最后,开始处理包括个性化的服务,当然如果特征确实是可读的(如果它不是一个错误返回)。关于你想要的示例,请检查以下代码:
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的设置,然后我就可以发出上面的命令。
所以你可以启用你的自定义设备,而不需要执行发现过程,在连接(填写配置文件作为需求方的环境),然后使结束后(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,
不幸的是,关于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-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;
静态UINT8_T计数= 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(“连接%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,如果你还没有做任何服务发现、如何知道包含该特征的服务的开始句柄和结束句柄?你会静态地做吗?此外,还会执行发现来检查每个特征中所拥有的权限,因此,如果读取一个特征而不知道该特征有什么权限,设备将返回一个错误。无论如何,可以阅读特点的价值,只要你事先知道UUID的特点,最后,开始处理包括个性化的服务,当然如果特征确实是可读的(如果它不是一个错误返回)。关于你想要的示例,请检查以下代码:
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的设置,然后我就可以发出上面的命令。
所以你可以启用你的自定义设备,而不需要执行发现过程,在连接(填写配置文件作为需求方的环境),然后使结束后(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