基于DSPS的主机修改

这篇文章主要针对在实际工程中需要对特定从机进行主机开发从而实现数据通信,所以记录下来,主机工程基于DSPS的demo:DA14585_DSPS\projects\target_apps\dsps\dsps_host\Keil_5。
一、在从机工程中,通信只有一个服务,但是这一个服务包括两个特征(句柄),一个用于接收数据,一个用于发送数据如下:
在这里插入图片描述
在这里插入图片描述

SVC1_ADC_VAL_1_UUID_128用于从机发送数据给主机(FFF2),且已notify方式发送
SVC1_ADC_VAL_2_UUID_128用于主机发送数据给从机(FFF1),且以GATTC_WRITE方式发送
二、在通过上面第一步添加好特征UUID及句柄后,我们需要在spsc_sps_char_desc中定义针对特征的描述符,这里通过手机app查看从机服务的描述符1号有两个,2号有一个,对应2901和2902如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、添加好特征属性后就是该如何使用这两个特征以便在主机进行扫描的时候与特定服务的从机进行检索对比。
1、在sps_client_enable_req_handler中,将首要服务添加进sps_data_service_uuid
在这里插入图片描述
2、将刚才添加的数据库spsc_sps_char_16添加进来:
在这里插入图片描述
3、在如下函数gattc_disc_char_desc_ind_handler将句柄总长度和数据库添加进来
在这里插入图片描述
4、sps_client_enable_cfm_send返回服务添加确认消息
在这里插入图片描述
返回状态status=ATT_ERR_NO_ERROR表示服务添加成功。
四、与从机的数据收发
在这里插入图片描述
该函数用于接收来自从机的消息。
在这里插入图片描述
至此,服务添加完毕,这个时候我们就可以通过调用这两个接口函数与从机进行数据通信了。

Note:
1、比较重要的函数是gattc_cmp_evt_handler,在该函数中,添加服务以及数据接收都是在该函数里完成。架构为:
if(state == SPS_CLIENT_DISCOVERING){}
else if (state == SPS_CLIENT_CONNECTED){}
2、添加流程:
->sps_client_enable_req_handler(将首要任务添加进去)
->gattc_disc_svc_ind_handler()
->gattc_cmp_evt_handler(主要的一个函数,发现服务的流程都在这里进行,参照Note1)
->prf_disc_char_all_send
->gattc_disc_char_ind_handler(通过调用prf_search_chars来将主机和从机的特征值数据库进行对比)
->prf_check_svc_char_validity_128(验证服务特征值有效性)
->prf_disc_char_desc_send
->gattc_disc_char_desc_ind_handler(通过调用prf_search_descs来将主机和从机的描述符数据库进行对比)
->prf_search_descs
->sps_client_enable_cfm_send(返回添加服务的结果是否成功)
3、向从机写数据时:需要通过以下函数将句柄写入,最后一个参数是写入方式
在这里插入图片描述
在这里插入图片描述
4、接收到来自从机的数据时:需要判断是哪个句柄发过来的。
在这里插入图片描述
5、值得注意的是,主从通信主要还是以UUID作为传输通道依据,所以在主从代码里,序号对不上很正常,关键看操作的序号对应的UUID是不是能对应上,这是最基本的操作。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_24179601/article/details/83788699