网关参考实现

为了能够监控社交互动,SDT提供了一个从设备检索日志的接口。为了加快上市时间,参考实现提供了C源代码。网关使用BLUEZ蓝牙栈和gattlib在树莓派上进行测试。

功能概述

调用gateway_scan_and_log.c的脚本将扫描具有BLE服务UUID的设备d643d847 - 157 f - 07 - a1 - e741 - 6 - fef4d79e9c6广告。如果发布的UUID发生了更改,请确保也进行更改#定义UUID_FILTER_VALUE在文件gateway_scan_and_log.c中反映更改。

任何发现的设备都将被放入一个列表中,并为每个元素创建一个单独的线程来处理特定的设备。

每个线程将尝试连接到远程SDT,并设置远程设备的时间(通过当前时间服务)。设置的时间为网关的UTC时间源。

接下来,设备将请求远程设备信息以检索远程设备唯一ID。远程设备唯一ID将用于构造将为特定设备创建的日志文件的文件名。文件的文件名是#定义PATH_AND_FILENAME常量和远端设备唯一标识符。缺省情况下,日志保存在Desktop中。

然后SDT网关将请求存储在远端设备的Flash上的所有zone的日志。一旦读取了所有的日志,SDT网关将截断Remote Device的所有文件夹,释放Flash中日志所占用的所有空间,将其释放回用于新日志。

最后,线程将关闭打开的文件,然后释放MUTEX并断开连接,允许其他线程为其他设备执行相同的进程。

系统需求

硬件需求:

  • 树莓派3模型B+

软件要求:

  • Raspbian克星

  • BLUEZ版本5.50或更新。

  • Gattlib开源库。

  • Cmake。

符号

从这一点开始,每当使用下列术语时,它们将反映下面给出的含义。

  • GATTLIB -master——这是解压后的GATTLIB库的主文件夹。

  • client_folder——这是将Gateway文件复制到的地方,它将反映客户端选择的名称。

环境的准备

为了运行该示例,应该遵循以下步骤。

  • Gateway软件运行在运行Raspberry Pi 3 Model B+的Raspbian Buster上。想了解更多关于树莓Buster的信息,请查看Raspbian官方下载网页

  • 软件要求BLUEZ 5.50版本或更高版本。的桌面和推荐软件的覆盆子Buster包包含BLUEZ 5.50。如果您使用的是旧版本的BLUEZ,请务必更新它,以确保兼容性。

  • 从下面下载Gattlib库的开放源代码在这里

  • 将下载的文件解压缩到您选择的目的地。

  • 打开终端并执行安装和缺失的依赖项…

    sudo恰当的安装libbluetooth-dev

    sudo恰当的安装libreadline-dev

    sudoapt-get安装cmake

  • 导航到gattlib-master/examples文件夹

  • 创建一个新文件夹并选择您所选择的名称。从现在开始,它将被称为client_folder。

  • 复制其中的Gateway文件。

  • 在gattlib-master中编辑cmakelist .txt文件。在那里找到片段…

    如果(GATTLIB_BUILD_EXAMPLES)

    #例子

    并将client_folder添加为子目录。

    添加子目录(例子/ < client_folder >)

  • 在终端中导航到gattlib-master文件夹,创建一个名为build的文件夹并输入它。

    mkdir构建& &cd构建

  • 制作Gateway文件。

    cmake..& &使

    如果没有安装Doxygen,请在cmake之后立即添加参数-DGATTLIB_BUILD_DOCS=OFF。命令应该如下所示:

    cmake-DGATTLIB_BUILD_DOCS =了..& &使

  • 可选步骤:为了能够从终端中的任何目录调用程序,导航到/home/pi文件夹,并使用文本编辑器修改.profile文件,在文件末尾添加以下行…

    路径= " ${路径:+ ${}路径:}~ / < path-to-gattlib-master > /构建/例子/ < client_folder >”

    …替换 使用gattlib-master文件夹的路径和名称为client_folder的client_folder。

    注意:重启系统后才会生效。

使用

如果可选步骤已完成,则键入终端…

>gtw_scan_and_log

从终端导航到gattlib-master/build/examples/client_folder,然后在终端中输入上面的命令。