亲爱的对话框
首先,我将描述我的项目,我的奴隶是SNM模块,连接后,主写请求从,然后传感器数据传输。
第二,我的master是从DSPS项目修改过来的。
Q1:当master连接到Slave_1时,master发送一个写请求给它(我把代码放在user_sps_client_enable_cfm_handler中)。然后主机可以接收传感器数据。
然后连接到Slave_2,但是master不能写请求到Slave_2。
调试之后,我发现在连接到Slave_1之后,主更改为SPS_CLIENT_CONNECTED。
所以我想问,如何处理SPS_CLIENT_CONNECTED(我的意思是什么时候设置它?连接Slave_1或连接所有slave)和APP_CONNECTABLE ?或其他原因引起的。
问2:当主服务器连接到Slave_1并进行数据传输时,主服务器是否可以向Slave_2发送控制cmd(通知)?
问题3:master可以同时用Slave_1和Slave_2传输数据吗?或者必须轮流交换数据,如果轮流如何将Slave_1更改为Slave_2
你有没有更好的方法来检查主机是否处于扫描状态
谢谢你的回复
设备:
嗨RandyYu,
Q1。关于SPS_CLIENT_CONNECTED,它只是应用程序为了知道设备是否已连接而检查的配置文件的状态。当建立连接时,将调用user_on_connection回调来通知应用程序,在user_on_connection函数中,app_prf_enable()函数将遍传并启用所有涉及的项目概要文件。在DSPS项目中,由于DSPS配置文件是唯一的现有配置文件,app_prf_enable()只调用特定连接的user_sps_enable()。当在客户机中启用配置文件时,您将启动中央的发现过程,当发现过程结束时,dsps客户机将切换SPS_CLIENT_CONNECTED中的应用程序状态。在一般应用程序中,将设备设置为已连接依赖于用户应用程序。
Q2。第三季。关于这篇文章中提到的多重联系http://support.dialog-semiconductor.com/multiple-slaveda14580-connection..。DSPS不支持不同外设上的多个连接,为了实现这样的功能,您需要进行大量的定制,处理SPS_CLIENT_CONNECTED不是您的问题。DSPS假设只有一个连接(conidx 0,这是您建立的第一个连接)。请查看下面的帖子http://support.dialog-semiconductor.com/multiple-slaveda14580-connection..。为了使用DSPS进行多次传输,需要考虑哪些修改。
第四季度。由于DSPS只支持一个连接,连接完成后,设备认为它是自己连接的,无论何时调用扫描操作,TASK_APP的状态变为APP_CONNECTABLE,当设备连接时,它变为APP_CONNECTED。在一个多连接场景中,在一个连接完成后,调用user_scan_start()会再次将TASK_APP状态更改为APP_CONNECTABLE,因此这是设备正在扫描的合理指示。
由于MT_dialog
Q2/Q3第一个网址是“无法找到此页面”
我需要下面的功能,使奴隶发送数据
Uint8_t measure_start[3] = {0x20, 0x03, 0x01};
/ * * /写请求
prf_gatt_write_ntf_ind (con_info,0 x16, PRF_CLI_START_NTF);/ / custom2通知启用
prf_gatt_write_ntf_ind (con_info, 0 * 13, PRF_CLI_START_NTF);/ / custom1通知启用
prf_gatt_write(con_info, 0x18, measure_start, sizeof (uint8_t)*3,GATTC_WRITE_NO_RESPONSE);
现在我有一个问题,
问:在SPS主机环境变量中有多少个con_info ?
如何更改con_info来启用下一个slave?
嗨RandyYu,
需求方,结构化,每次执行一个连接和sps服务发现,相关数据概要(连接的处理,数据库结构的过程中,发现和其他信息)都存储在一个eviroment变量(变量是sps_client_init发起)。在DSPS中,由于其实现仅支持一个连接,因此环境变量与一个SPS_TASK紧密相关。例如,当您执行对外围设备的写操作时,将调用宏PRF_CLIENT_GET_ENV,以便声明该数据并填充本地spsc_env_tag类型变量。因为当调用PRF_CLIENT_GET_ENV时,它只支持一个连接,所以它检索唯一的spsc_env_tag,该spsc_env_tag只保存一个连接,因此只有一个con_info。
你可以尝试使用app_env变量存储可用的连接的设备,你可以看看con_info spsc环境填充(sps_client_enable_req_handler),或许你可以只使用一个环境和改变连接信息,但这只是一个临时解决方案我提到过让DSPS支持多个奴隶需要大量定制而不仅仅是对原始代码的修改.
由于MT_dialog
现在我对这个多重连接的过程有点困惑,下面的过程是对的吗?
- > user_scan_start
>修改APP_STATE为APP_SCANNING (APP_SCANNING被我自己添加到APP_STATE中)
->去连接需要的从机
->修改APP_STATE为APP_CONNECTABLE
- > user_on_scanning_completed
- > user_on_connection
- > user_sps_enable
->向连接的slave发送写请求
->,然后重复此过程
嗨RandyYu,
有多个连接可能需要一个相当不同的方案,以了解你的设备的状态,我的意思是,可能当连接到第一个你将有你的设备的状态连接,但之后你将开始再次扫描。应用程序将如何处理它的状态由您决定。例如,在处理多个连接的接近监视器应用程序中,连接和扫描应用程序时不会将其状态更改为SCAN,但状态仍然为connected。
由于MT_dialog
1.你说的状态是应用程序状态还是任务状态?连接后,我的任务状态设置为CONNECTED。
2.如果主端连接到一个从端并进行数据交换,主端是否可以继续扫描?
3.如果要将TASK_APP状态的所有任务索引设置为CONNECTABLE,如何修改ke_state_set(TASK_APP,APP_CONNECTABLE);
嗨RandyYu,
1.我所指的状态是应用程序状态而不是概要文件状态,如果这是您的意思的话。如果你已经连接到一个设备,你正在扫描下一个设备,你的概要文件的状态应该被连接,因为在DSPS根据概要文件的状态触发适当的处理程序。例如,当设备连接时,有不同的处理程序,当设备处于发现状态时,有不同的处理程序可用。
2.我不认为这有任何问题,你可以连接到一个奴隶并继续扫描。
3.你可以通过使用ke_state_set(application_task, state_of_the_task)来改变TASK的状态。
由于MT_dialog