勤基科技 陈杰明
导入工程
首先,我们通过开发环境的左上角 File->Import导入Demo例程。如下:
![](https://i-blog.csdnimg.cn/blog_migrate/ce31b47995c387ae04bdc9e3b0584ecf.png)
修改广播信息
打开pxp_reporter_task.c
打开pxp_reporter_task.c
![](https://i-blog.csdnimg.cn/blog_migrate/42459159d2ee65f6c15292ea195d42bf.png)
修改设备名
在pxp_reporter_task.c找到以下函数:
在pxp_reporter_task.c找到以下函数:
![](https://i-blog.csdnimg.cn/blog_migrate/010eaf81d57a910835ebd51f155f7b59.png)
标记出来的语句是把PX_REPORTER_DEFAULT_NAME这个变量copy到name_buf里面就是把变量赋值给设备名的buf。至于PX_REPORTER_DEFAULT_NAME在哪里设置,我们可以在pxp_reporter_config.h里面找到:
![](https://i-blog.csdnimg.cn/blog_migrate/1301f9cd4f96b0012a912e65c444c8df.png)
我们直接修改这个定义即可修改设备名。
最后在task任务实体里面可以看到调用的地方:
最后在task任务实体里面可以看到调用的地方:
![](https://i-blog.csdnimg.cn/blog_migrate/84b9a82bec09de1a917d28106e925c70.png)
修改MAC地址
一般情况下比较少用到,因为我们调试样板的时候都是用默认的MAC地址,而量产的时候是有量产工具烧录MAC地址的。
一般情况下比较少用到,因为我们调试样板的时候都是用默认的MAC地址,而量产的时候是有量产工具烧录MAC地址的。
![](https://i-blog.csdnimg.cn/blog_migrate/55370aad89d081724b07e3ac0a64fb01.png)
广播间隔和参数
![](https://i-blog.csdnimg.cn/blog_migrate/750db618128f3f96390461a0f0d2c79b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/74ffafcd26033130a3de004774a137fc.png)
调用上图的接口,可以修改广播间隔和广播参数。
添加服务
我们在pxp_reporter_task里面添加一个SPS服务,该服务在SDK已经是写好了的。
![](https://i-blog.csdnimg.cn/blog_migrate/029436001247d2516490883a8d87f09b.png)
可以在pxp_reporter->sdk->ble_service->src里面找到sps.c,就可以看到这个服务的所有内容。
服务UUID
![](https://i-blog.csdnimg.cn/blog_migrate/9ef215634f7787c023011086c68d6d10.png)
在sps…文件开头处有服务UUID的宏定义。
第一个是sps服务的UUID
第二个是发送特征的UUID
第三个是接收特征的UUID
第四个是流控特征的UUID
如果用户想自定义UUID,可以在此处修改。
第一个是sps服务的UUID
第二个是发送特征的UUID
第三个是接收特征的UUID
第四个是流控特征的UUID
如果用户想自定义UUID,可以在此处修改。
属性
在sps_init函数中可以看到特征值初始化和创建属性的相关操作:
![](https://i-blog.csdnimg.cn/blog_migrate/89a397e615a172c867a7466d6e43916e.png)
如果需要修改属性和添加属性,则 | 上相关的属性即可。
可供用户设置的属性如下,在ble_gatt.h中:
可供用户设置的属性如下,在ble_gatt.h中:
![](https://i-blog.csdnimg.cn/blog_migrate/2f1242e05eeca6efe0a87b87a13874e4.png)
数据接收
在sps.c中,可以找到数据接收的Handler
在sps.c中,可以找到数据接收的Handler
![](https://i-blog.csdnimg.cn/blog_migrate/807d5b84b865e592619aa1b681e5beba.png)
上面这个函数是接收函数,手机write数据给到RX特征的时候,数据将由底层返回到这个函数中。用户直接获取value指针即可获取到手机发送过来的数据。
If条件语句里面的内容实际上是把接收到的内容传递给回调函数(rx_data)但是我们初始化这个服务的时候,传入的回调函数是NULL,所以此处可以忽略。
If条件语句里面的内容实际上是把接收到的内容传递给回调函数(rx_data)但是我们初始化这个服务的时候,传入的回调函数是NULL,所以此处可以忽略。
数据发送
同样在sps.c,可以找到数据发送的接口:
![](https://i-blog.csdnimg.cn/blog_migrate/a41688cf6cf68f6e9e84b6b432979e60.png)
这个函数最终调用的其实是以下函数:
![](https://i-blog.csdnimg.cn/blog_migrate/94984a8fe4457b75568c5bf7d18cf54e.png)
此处默认使用NOTIFY发送方式,如需要改为INDICATE,把ble_gatts_send_event的第三个形参改成GATT_EVENT_INDICATION就可以。Sp_service_t 结构体内容如下:
![](https://i-blog.csdnimg.cn/blog_migrate/62446be4cf4abdd183236f80a811fa00.png)
通过调用以上接口,我们即可实现数据从芯片发送到手机。
Dialog技术讨论,QQ群871600668