【星闪开发连载】SLE_UUID_Server和SLE_UUID_Client程序分析

news2024/11/24 16:32:45

 

d2bc4d3d16f646d096321ad497a8339f.png

引言

星闪测试已经搁置了很久了,主要是8-9月份太忙了。今天重新捡回来。想看看官方提供的星闪例子,在application\samples\bt\sle\sle_uuid_client\和sle_uuid_server目录。这两个例子是一对,一个用来广播服务,另一个去连接。对应的BLE的例子是ble_gatt_client和ble_gatt_server,所以估计这两个例子实现的功能和BLE的GATT服务是差不多。

Server程序分析

这段代码是一个用于星闪(SLE)设备的UUID服务器示例程序。它展示了如何初始化一个SLE服务,注册回调函数,处理连接状态变化,以及如何发送通知。以下是对代码的详细分析:

  1. 包含的头文件

    • securec.h:提供安全字符串操作的函数。
    • errcode.h:定义了错误代码。
    • osal_addr.hsoc_osal.h:操作系统抽象层头文件,提供线程、内存分配等操作。
    • app_init.h:应用程序初始化相关的头文件。
    • sle_common.hsle_errcode.h:与安全轻量级加密(SLE)相关的头文件。
    • sle_ssap_server.hsle_connection_manager.hsle_device_discovery.hsle_server_adv.hsle_uuid_server.h:与SLE服务、连接管理、设备发现、服务器广告和UUID服务器相关的头文件。
  2. 宏定义

    • OCTET_BIT_LEN:定义了一个字节的位数,即8。
    • UUID_LEN_2:定义了UUID的长度为2。
    • BT_INDEX_4BT_INDEX_5BT_INDEX_0:定义了蓝牙地址数组的索引。
  3. 编码宏

    • encode2byte_little:用于将16位的数据以小端格式编码到一个字节数组中。
  4. 全局变量

    • g_sle_uuid_app_uuid:存储应用的UUID。
    • g_sle_property_value:存储属性值。
    • g_sle_conn_hdl:存储连接句柄。
    • g_server_idg_service_handleg_property_handle:分别存储服务器ID、服务句柄和属性句柄。
  5. 静态函数

    • sle_uuid_set_base:设置UUID的基础值。
    • sle_uuid_setu2:设置基于16位无符号整数的UUID。
    • ssaps_read_request_cbkssaps_write_request_cbkssaps_mtu_changed_cbkssaps_start_service_cbk:处理不同的SSAP请求和状态变化的回调函数。
    • sle_ssaps_register_cbks:注册SSAP回调函数。
    • sle_uuid_server_service_add:添加服务。
    • sle_uuid_server_property_add:添加属性。
    • sle_uuid_server_add:初始化并注册服务器。
    • sle_uuid_server_send_report_by_uuidsle_uuid_server_send_report_by_handle:通过UUID或句柄发送报告数据。
    • sle_connect_state_changed_cbksle_pair_complete_cbk:处理连接状态变化和配对完成的回调函数。
    • sle_conn_register_cbks:注册连接回调函数。
  6. 初始化和运行

    • sle_uuid_server_init:初始化UUID服务器。
    • sle_uuid_server_entry:创建一个任务来运行初始化函数。
  7. 日志打印

    • 使用sample_at_log_print宏来打印日志信息。
  8. 内存管理

    • 使用osal_vmallocosal_vfree进行动态内存分配和释放。
  9. 错误处理

    • 使用errcode_t类型的错误代码来处理不同的错误情况。
  10. 线程和任务管理

    • 使用osal_kthread_createosal_kthread_set_priority来创建和管理线程。

整体来看,这段代码是一个SLE UUID服务器的实现,它展示了如何设置和注册服务、属性和描述符,以及如何处理连接和配对事件。代码中使用了多个回调函数来处理不同的SLE事件,并且通过日志打印来调试和跟踪程序的运行状态。

Server_adv程序分析

这段代码是SLE UUID服务器的广播配置部分。它定义了如何设置广播参数、广播数据和扫描响应数据,并注册了广播相关的回调函数。以下是对代码的详细分析:

  1. 包含的头文件

    • securec.h:提供安全字符串操作的函数。
    • errcode.h:定义了错误代码。
    • osal_addr.h:操作系统抽象层头文件,提供地址相关的操作。
    • sle_common.hsle_device_discovery.hsle_connection_manager.h:与SLE通用操作、设备发现和连接管理相关的头文件。
    • test_suite_uart.h:用于通过UART发送测试套件日志。
    • sle_errcode.hsle_speed_server_adv.h:与SLE错误代码和服务器广播相关的头文件。
  2. 宏定义

    • NAME_MAX_LENGTH:定义设备名称的最大长度。
    • SLE_CONN_INTV_MIN_DEFAULTSLE_CONN_INTV_MAX_DEFAULT:定义最小和最大连接间隔。
    • SLE_ADV_INTERVAL_MIN_DEFAULTSLE_ADV_INTERVAL_MAX_DEFAULT:定义最小和最大广播间隔。
    • SLE_CONN_SUPERVISION_TIMEOUT_DEFAULTSLE_CONN_MAX_LATENCY:定义连接超时时间和最大延迟。
    • SLE_ADV_TX_POWER:定义广播发送功率。
    • SLE_ADV_HANDLE_DEFAULT:定义广播ID。
    • SLE_ADV_DATA_LEN_MAX:定义最大广播数据长度。
  3. 全局变量

    • sle_local_name:存储设备的广播名称。
  4. 日志打印宏

    • sample_at_log_print:定义日志打印宏。
  5. 设置广播数据的函数

    • sle_set_adv_local_name:设置广播数据中的设备名称。
    • sle_set_adv_data:设置广播数据。
    • sle_set_scan_response_data:设置扫描响应数据。
  6. 设置默认广播参数的函数

    • sle_set_default_announce_param:设置默认的广播参数。
  7. 设置默认广播数据的函数

    • sle_set_default_announce_data:设置默认的广播数据。
  8. 广播相关的回调函数

    • sle_announce_enable_cbksle_announce_disable_cbksle_announce_terminal_cbk:分别处理广播使能、禁用和终止的回调函数。
    • sle_enable_cbk:SLE使能的回调函数。
  9. 注册广播回调函数的函数

    • sle_announce_register_cbks:注册广播相关的回调函数。
  10. 初始化广播的函数

    • sle_uuid_server_adv_init:初始化UUID服务器的广播。
  11. 广播参数和数据结构

    • sle_announce_param_t:定义广播参数的结构体。
    • sle_announce_data_t:定义广播数据的结构体。
  12. 广播操作

    • sle_start_announce:启动广播。
  13. 内存管理

    • 使用memcpy_s函数进行内存复制。
  14. 错误处理

    • 使用errcode_t类型的错误代码来处理不同的错误情况。
  15. 日志打印

    • 使用test_suite_uart_sendf函数通过UART发送日志信息。

整体来看,这段代码负责初始化SLE UUID服务器的广播功能,包括设置广播参数、广播数据和扫描响应数据,并注册了相关的回调函数来处理广播过程中的事件。代码中使用了多个宏定义来配置广播参数,并通过日志打印来调试和跟踪程序的运行状态。

Client程序分析

这段代码是一个星闪(SLE)客户端的示例程序,用于演示如何注册私有服务。以下是对代码的详细分析:

  1. 包含的头文件

    • securec.h:提供安全字符串操作的函数。
    • test_suite_uart.h:用于通过UART发送测试套件日志。
    • soc_osal.h:操作系统抽象层头文件,提供线程、内存分配等操作。
    • app_init.h:应用程序初始化相关的头文件。
    • sle_device_discovery.hsle_connection_manager.hsle_ssap_client.hsle_uuid_client.h:与设备发现、连接管理、SSAP客户端和UUID客户端相关的头文件。
  2. 宏定义

    • THIS_FILE_ID:定义文件的唯一标识符。
    • SLE_MTU_SIZE_DEFAULTSLE_SEEK_INTERVAL_DEFAULTSLE_SEEK_WINDOW_DEFAULT:定义默认的MTU大小、扫描间隔和扫描窗口。
    • UUID_16BIT_LENUUID_128BIT_LEN:定义16位和128位UUID的长度。
  3. 全局变量

    • g_seek_cbkg_connect_cbkg_ssapc_cbk:分别存储扫描、连接和SSAP客户端的回调函数。
    • g_remote_addr:存储远程设备的地址。
    • g_conn_id:存储连接ID。
    • g_find_service_result:存储查找服务的结果。
  4. 回调函数

    • sle_sample_sle_enable_cbk:SLE使能回调函数。
    • sle_sample_seek_enable_cbksle_sample_seek_disable_cbk:扫描使能和禁用回调函数。
    • sle_sample_seek_result_info_cbk:扫描结果回调函数。
    • sle_sample_seek_cbk_register:注册扫描回调函数。
    • sle_sample_connect_state_changed_cbksle_sample_pair_complete_cbk:连接状态变化和配对完成回调函数。
    • sle_sample_connect_cbk_register:注册连接回调函数。
    • sle_sample_exchange_info_cbk:交换信息回调函数。
    • sle_sample_find_structure_cbksle_sample_find_structure_cmp_cbk:查找结构和比较结构回调函数。
    • sle_sample_find_property_cbk:查找属性回调函数。
    • sle_sample_write_cfm_cbksle_sample_read_cfm_cbk:写确认和读确认回调函数。
    • sle_sample_ssapc_cbk_register:注册SSAP客户端回调函数。
  5. 初始化和扫描

    • sle_client_init:客户端初始化函数,注册回调并使能SLE。
    • sle_start_scan:开始扫描函数。
  6. 任务和优先级

    • SLE_UUID_CLIENT_TASK_PRIOSLE_UUID_CLIENT_STACK_SIZE:定义客户端任务的优先级和堆栈大小。
  7. 入口函数

    • sle_uuid_client_entry:创建一个任务来运行客户端初始化函数。
    • app_run:运行应用程序入口。
  8. 日志打印

    • 使用test_suite_uart_sendf函数通过UART发送日志信息。
  9. 内存管理

    • 使用memcpy_s函数进行内存复制。
  10. 错误处理

    • 使用errcode_t类型的错误代码来处理不同的错误情况。
  11. 线程和任务管理

    • 使用osal_kthread_createosal_kthread_set_priority来创建和管理线程。

整体来看,这段代码是一个SLE客户端的实现,它展示了如何注册回调函数,处理扫描、连接、配对、交换信息、查找服务和属性等操作。代码中使用了多个回调函数来处理不同的SLE事件,并且通过UART发送日志信息来调试和跟踪程序的运行状态。

 

后面再详细介绍如何编译和测试程序。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2193723.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mybatis-plus的基础用法

文章目录 1. 核心功能1.1 配置与编写规则1.2 条件构造器1.3 自定义SQL1.4 IService接口1.4.1 Lambda方法1.4.2 批量新增 1.5 分页查询 2. 拓展功能2.1 代码生成器2.2 DB静态工具2.3 逻辑删除2.4 枚举处理器 参考 1. 核心功能 1.1 配置与编写规则 Maven依赖&#xff1a; <…

Autosar EcuM配置-初始化及下电执行函数-基于ETAS软件

文章目录 前言EcuMCommonConfigurationEcuMDriverInitListOneEcuMModuleIDEcuMModuleParameterEcuMModuleServiceEcuMRbDriverInitCoreIdEcuMDriverInitListZeroEcuMGeneralEcuMRbOnGoOffOneCalloutEcuMRbCalloutFunctionEcuMRbModuleIDEcuMRbServiceIsNonAutosarEcuMRbOnGoOff…

java控制台输出乱码

第一步&#xff1a;修改 IntelliJ IDEA 全局编码、项目编码、属性文件编码 File->Settings… Editor->File Encodings(不要忘记点击Apply然后OK) 第二步&#xff1a;修改当前 Web 项目 Tomcat Server 的虚拟机输出选项 Run->Edit Configurations… 复制代码->…

DBMS-3.2 SQL(2)——DML的SELECT(含WHERE、聚集函数、GROUP BY、HAVING之间的关系)

本文章的素材与知识来自李国良老师和王珊老师。 数据操纵语言DML&#xff08;Data Manipulation Language&#xff09; SELECT 一.SELECT的语法与构成 1.语法 2.构成 二.投影 投影操作可以选择表中的若干列&#xff0c;主要体现在SELECT子句后的列表达式。 1.列表达式 2.…

【书生浦语实战】茴香豆企业级知识库问答工具-搭建Dify问答助手

快速结论 1、用茴香豆快速搭建Dify问答助手&#xff0c;自带拒答、rerank、切片长度判断、阈值调节功能&#xff0c;回答还能带出图片&#xff0c;顶呱呱&#x1f44d; 2、茴香豆git仓地址&#xff1a;https://github.com/internlm/huixiangdou 遇到问题去翻这里会更多解释&…

如何利用免费音频剪辑软件制作出精彩音频

现在有许多免费的音频剪辑软件可供选择&#xff0c;它们为广大用户提供了丰富的功能和便捷的操作体验&#xff0c;让音频编辑变得更加轻松和有趣。接下来&#xff0c;让我们一起走进这些免费音频剪辑软件的世界&#xff0c;探索它们的独特魅力和强大功能。 1.福昕音频剪辑 链…

李宏毅深度学习-图神经网络GNN

图卷积的开源代码网站DGL 好用的还是 GAT, GIN&#xff08;指出最好的卷积 就是 hi 邻居特征&#xff08;而且只能用 sum&#xff09;&#xff09; Introduction GNN 可以理解为是由 Graph&#xff08;图) Nerual Networks 组合而成的&#xff0c;图结构应该都在数据结构与…

No.12 笔记 | 网络基础:ARP DNS TCP/IP与OSI模型

一、计算机网络&#xff1a;安全的基石 1. 网络的本质&#xff1a;数字世界的神经系统 定义&#xff1a;计算机的互联互通&#xff0c;实现资源共享和信息交换组成要素&#xff1a;发送者、接收者、介质、数据、协议&#xff08;五大要素&#xff09; 2. 网络架构&#xff1…

STM32PWM应用

一、输出比较(OC) OC&#xff08;Output Compare&#xff09;输出比较 可以通过比较CNT与CCR寄存器值的关系&#xff0c;来对输出电平进行置1、置0或翻转的操作&#xff0c;用于输出一定频率和占空比的PWM波形每个高级定时器和通用定时器都拥有4个输出比较通道高级定时器的前…

三菱FX3U定位控制接线示例(脉冲控制伺服)

一、FX3u系列基本单元(DC24V输入) 二、FX3u系列基本单元(晶体管输出) 脉冲输出用端子Y000、 Y001、 Y002为高速响应输出。 三、FX3UPLC链接MR-J4-A伺服连接实例 1、为了安全起见&#xff0c;不仅仅在可编程控制器侧&#xff0c;在伺服放大器侧也请设计正转限位和反转限位的限位…

查缺补漏----拥塞窗口

注意事项1&#xff1a; 首先区分超时和收到3个冗余ACK&#xff0c;显然超时更加严重。如下图所示&#xff1a; 如果网络出现超时&#xff0c;那么发送窗口cwnd变为1&#xff0c;门限值ssthresh变为原来拥塞窗口的一半 如果收到3个冗余ACK&#xff0c;发送窗口cwnd门限值ssth…

Java重修笔记 第六十一天 坦克大战(十一)IO 流 - 节点流和处理流、BufferedReader 和 BufferedWriter

节点流和处理流的区别和联系 1. 节点流是底层流/低级流&#xff0c;直接和数据源联系 2. 处理流是经过包装过后的节点流&#xff0c;也叫包装流&#xff0c;既可以消除不同节点流的实现差异&#xff0c;也可以提供更方便的方法来完成输入输出 3. 处理流&#xff08;包装流&…

二叉树基本概念讲解

一.树的概念 1.概念 树是⼀种非线性的数据结构&#xff0c;它是由 n&#xff08;n>0&#xff09;个有限结点组成⼀个具有层次关系的集合。把它叫 做树是因为它看起来像⼀棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有⼀个特殊的结点&#xff0c…

动态规划基础一>面试题 08.01. 三步问题

1.题目&#xff1a; 2.解析&#xff1a; 代码&#xff1a; public int waysToStep(int n) {/**1.创建dp表2.初始化3.填表4.返回值*/int MOD (int)1e9 7;//注意不能超出int范围&#xff0c;每做一次操作要取模//处理边界情况if(n 1 || n 2) return n;if(n 3) return 4;//1…

【小沐学CAD】ParaView Web的学习笔记(Python)

文章目录 1、简介1.1 visualizer1.2 Divvy1.3 Lite1.4 LightViz1.5 ArcticViewer1.6 HPCCloud1.7 glance1.8 trame 结语 1、简介 https://pvw.kitware.com/ VTK/ParaView Web&#xff0c;用于 Web 数据处理和可视化的框架 ParaViewWeb 是一个 Web 框架&#xff0c;用于在 Web …

[C++][第三方库][ODB]详细讲解

目录 1.介绍2.安装1.安装 build22.安装 odb-compiler3.安装 ODB 运行时库4.安装MySQL和客户端开发包5.安装 boost profile 库6.总体操作7.测试样例 3.ODB 常见操作1.ODB 类型映射2.ODB 编程1.指令2.示例 4.类与接口5.使用 1.介绍 ODB框架&#xff1a;数据库ORM框架 --> 对象…

vulnhub-Web Developer 1靶机

vulnhub&#xff1a;Web Developer: 1 ~ VulnHub 导入靶机&#xff0c;放在kali同网段&#xff0c;扫描 靶机在192.168.114.129&#xff0c;扫描端口 有网站服务&#xff0c;访问 没什么东西&#xff0c;扫目录 真不少&#xff0c;访问一下&#xff0c;也只是一些普通的Wordpr…

【机器学习】智驭未来:探索机器学习在食品生产中的革新之路

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀目录 &#x1f50d;1. 引言&#xff1a;探索机器学习在食品生产中的革新之路&#x1f4d2;2. 机器学习在食品质量控制中的应用&#x1f31e;实…

Crypto虐狗记---”你“和小鱼(六)

前言&#xff1a;剧情六 提示&#xff1a; 下载 手动&#xff1a; 脚本&#xff1a;我不会 参考大佬&#xff1a; 转轮机加密详解两种解题方法 -攻防世界-CSDN博客 import re sss1: < ZWAXJGDLUBVIQHKYPNTCRMOSFE < 2: < KPBELNACZDTRXMJQOYHGVSFUWI < 3: < …

计算机的错误计算(一百一十五)

摘要 用错数定量解释计算机的错误计算&#xff08;一百一十四&#xff09;中的错误计算原因。 例1. 已知 计算 在 的错数&#xff0c;并与计算机的错误计算&#xff08;一百一十四&#xff09;中的相应错误数字个数做比较。 由 知&#xff0c; 再由 可得&#xff0c…