微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > BLE中如何实现SPP类似协议?

BLE中如何实现SPP类似协议?

时间:10-02 整理:3721RD 点击:

dear all:

   看到BLE中好像不支持SPP协议,我该如何实现类似SPP协议,来进行无线数据传输?

 

这是个好问题.

其实很简单, 你可以自己定义一个很简单的service,  这个service的作用只是最其中的characteristic的value进行读写或者notify.

这个value就可以是一个指向某个内存空间的buffer, 用来接收或者发送数据.

类似如下: (这个只是本人随手写的, 但是大概框架就是如此, 仅供参考)

/* Attribute table. */
static gattAttribute_t customSPPServiceAttrTbl[] =
{
                    /* Service defination */
                   {
                              { ATT_BT_UUID_SIZE, primaryServiceUUID }, /* type */
                              GATT_PERMIT_READ, /* permissions */
                               0, /* handle */
                               (uint8 *)&customSPPService /* pValue */
                   },

                  /* Characteristic Declaration */
                 {
                          { ATT_BT_UUID_SIZE, characterUUID },
                          GATT_PERMIT_READ,
                          0,
                          &customSPPCharValProps
                    },

                   /* Characteristic value Declaration */
                  {
                          { ATT_BT_UUID_SIZE, customSPPValueUUID },
                          GATT_PERMIT_READ | GATT_PERMIT_WRITE,
                           0,
                          sppBuffer                         /* SPP的数据buffer, 可以用一个buffer来接收发送, 也可以再定义一个characteristic, 指定另外一个buffer, 两个可以分开, 一个发送, 一个接收. */
                    },
             

                  /* Characteristic value User Description */
                 {
                            { ATT_BT_UUID_SIZE, charUserDescUUID },
                            GATT_PERMIT_READ,
                            0,
                           (uint8*)&customSPPUserDesc
                  },

};

然后再定义一下callback, 用于通知应用层数据的收发:

/* For registering the service */
CONST gattServiceCBs_t customSPP_GattCBs =
{
customSPP_ReadAttrCB, // Read callback function pointer
customSPP_WriteAttrCB, // Write callback function pointer
NULL // Authorization callback function pointer
};

最后你可以再参照一下TI提供的其他服务如何注册初始化的代码, 进行一些添加.

另外, UUID什么的也请参考TI的实例代码进行自定义.

其实TI的wiki上有个现成的BLE SPP的例子, 有代码:

http://processors.wiki.ti.com/index.php/LPRF_BLE_SerialApp

Yan:

这个示例怎么不能编译?

编译错误[Su007]: Unable to open the command file "D:\UCOS\SerialApp2\Projects\ble\SerialAppCentral\CC2541\..\..\config\buildComponents.cfg"

建议你下载安装一下BLE的协议栈, 然后比较, 把缺的文件从BLE协议栈里面拷过去

编译错误[Su007]: Unable to open the command file "D:\UCOS\SerialApp2\Projects\ble\SerialAppCentral\CC2541\..\..\config\buildComponents.cfg"

请问这个问题你怎么解决的啊,我也遇到了。。。

命令行语句执行到了buildComponents.cfg这个文件,而该文件不存在。

可以到Project->Option->C/C++ Complier界面,Extra Options下面找一找是不是有对应的命令行语句。或者在Option的其他界面。

D:\UCOS\SerialApp2\Projects\ble\SerialAppCentral\CC2541应该是工作区,\..\..\config代表工作区的上上层路径下的config文件夹

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top