【涂鸦蓝牙SDK】基于涂鸦蓝牙SDK数据传输与函数接口解析

news2024/11/17 12:43:00

基于涂鸦蓝牙SDK数据传输与函数接口解析

    • 1.【数据初始化部分】
    • 2.【蓝牙状态机控制】
    • 3.【数据广播过程】
    • 4.【涂鸦平台申请设备以及SDK】
    • 5.【涂鸦SDK模组源码思路解析】---- 重要:
      • 5.1 数据收发
    • 5.【移植涂鸦评估】

2023.1.21
本文是基于涂鸦SDK的低功耗蓝牙BLE协议的数据传输过程的分析,包括数据传输流程以及函数接口分析,有助于加快二次开发流程。以泰凌微的Tlink开发板为例介绍涂鸦蓝牙SDK模组的数据流程。
文章中若有错误,欢迎大家留言指出。

1.【数据初始化部分】

  • 在泰凌微平台的框架下,初始化时设置好广播数据的格式
  • 利用应用层定时唤醒的功能,设置回调函数,当APP扫描设备后,触发事件,发送扫描回应,建立连接
  • 应用层定时唤醒:不考虑GPIO PAD的前提下,一点进入sleep mode,只能在计算好的时间点T_wakeup唤醒,用户无法在特定时间点将sleep提前唤醒,为了增加PM(低功耗管理)的灵活性,采用应用层定时唤醒的功能bls_pm_setAppWakeupLowPower(u32 wakeup_tick, u8 enable) // enable =1 时 ,打开唤醒功能唤醒发生时执行回调函数,bls_pm_registerAppWakeupLowPowerCb()

2.【蓝牙状态机控制】

  • MCU上电后,处于空闲状态(idle state)
  • 在初始化中设置好广播相关格式和参数,设置adv enabe ,link layer 切换到 广播状态(advertising stata)
  • 处于广播状态时,在广播channel上发送广播数据包。
  • master 收到广播包,并发送 connection request,slave 的 link layer 收到主机连接请求后,响应并建立连接,进入已连接状态
  • 注意 进入已连接状态之后,就不再是广播状态了,就不再发送广播数据包了

3.【数据广播过程】

泰凌微数据广播的过程:

调用函数设备好广播数据包,然后在main_loop()中的库函数blt_sdk_main_loop()函数,查资料得出,库函数blt_sdk_main_loop()的作用之一是:循环遍历设置好的广播数据格式, 然后按照设定好的参数广播出去。

在代码中过程如下:

在TI的SDK内部已经帮我们实现好了循环广播,只需要在初始的时候分别通过bls_ll_setAdvData接口注册进不同的Handle即可,协议栈会遍历广播每个handle的内容。调用bls_ll_setAdvData 并不是直接配置了数据缓存区,真正的数据处理需要等到下个周期调用 blt_sdk_main_loop 去处理。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.【涂鸦平台申请设备以及SDK】

5.【涂鸦SDK模组源码思路解析】---- 重要:

  1. 在硬件平台主循环调用tuya_sdk,在tuya_sdk的 ty_system_mainloop() 中,实现遍历队列中的所有事件,并处理相关事件
main()
  ->main_loop()                                    // ---------telink 框架 --------------------
    ->rx_from_uart_cb();     // 串口收到数据时,rx_fifo中有数据时,将 event 放在 事件队列中
	->tx_to_uart_cb();       // 串口要发送消息时,通过 DMA 的形式发送数据
  	->ty_system_mainloop()                          // -----------涂鸦sdk的主循环----------------
		->tuya_ble_main_tasks_exec()  				//  涂鸦蓝牙 SDK 的事件主调度器,在主循环中调用
             ->tuya_sched_execute()       			//遍历队列中所有的event
                 ->tuya_ble_event_process(evt);      //函数进行分发命令事件

5.1 数据收发

  • 数据接收

    • 当rx_fifo中有数,表示串口接收到数据,然后将数据的信息、长度等记录在 tuya_ble_evt_param_t这个大结构体中,通过以下函数实现将event放在event_queue中,然后在1的 tuya_ble_event_process()函数中,处理event

      tuya_ble_event_send(&event)
         ->tuya_ble_message_send(event)
            ->tuya_ble_sched_event_put()		 // 将 event push到 event_queue
      
  • 数据发送

    • 当 tx_fifo 中有数据时,uart_dma_send()发送数据。(通过配置,通知MCU的DMA从然中获取数据然后,然后start DMA transmission)

在这里插入图片描述
在这里插入图片描述

  1. 初始化过程分析
  • ty_ble_init()

    • ble蓝牙协议栈部分初始化,mac_init host_init smp_init

    • user app 初始化

      / USER application initialization /
      ty_ble_adv_init();  // 设置广播格式
        ->bls_ll_setAdvData();
        ->bls_ll_setScanRspData();
        ->bls_ll_setAdvParam();
      
      ty_ble_evt_init();
        ->blc_hci_registerControllerEventHandler(controller_event_handler);   // 注册控制器响应事件
           ->controller_event_handler();
              ->BLT_EV_FLAG_CONNECT:    tuya_ble_connected_handler()      ->tuya_ble_event_send(&event)  // 蓝牙连接
              ->BLT_EV_FLAG_TERMINATE:  tuya_ble_disconnected_handler();  ->tuya_ble_event_send(&event)  // 蓝牙断开
      
      // 三 tuya_ble_sdk_demo_init();
      // 四 tuya_ble_sdk_test_init();   
                  
      ty_ble_start_adv();            
      
      tuya_ble_sdk_demo_init();
        -> tuya_ble_sdk_init(&tuya_ble_device_param); // 传入 产品的  id  mac key name 等信息(需要在平台上申请)
        -> tuya_ble_callback_queue_register(tuya_ble_sdk_callback);  //回调函数
          ->tuya_ble_sdk_callback():  // 当触发不同的事件时,最终都是通过 send 函数发送数据
                TUYA_BLE_CB_EVT_CONNECTE_STATUS:  tuya_ble_sdk_test_send()     ->  tuya_ble_event_send(&event)
                TUYA_BLE_CB_EVT_DP_DATA_RECEIVED: tuya_ble_sdk_test_send()     ->  tuya_ble_event_send(&event)
          
      
      tuya_ble_sdk_test_init();
        ->  tuya_ble_sdk_test_send()     
            ->  tuya_ble_event_send(&event)
      

5.【移植涂鸦评估】

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Linux创建解压后的应用程序的桌面快捷方式

下面用一个例子演示,其他应用也差不多 下载好的安装文件为.tar.xz格式,通常默认在系统的下载文件夹下(按你实际路径)。右键点击文件,在下拉框中点击提取到此处(意思就是解压)。 解压后&#xff…

DocArray 0.21.0版本发布!新增OpenSearch后端存储,支持Redis后端存储的多语言文本搜索!...

github.com/docarray/docarrayDocArray 是一个用于处理、传输和存储多模态数据的 Python 工具包。DocArray 提供便捷的多模态数据处理功能,具备基于 Protobuf 提供高性能的网络传输性能,同时也为多种向量存储方案提供统一的 API 接口。💡 Doc…

三十三、Kubernetes中Service详解、实例第三篇

1、概述 在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。 为了解决这个问题,kubernetes提供了Service资源&…

06.动态内存管理

1. 存在动态内存分配的原因我们已经掌握的内存开辟方式有:int val 20;//在栈空间上开辟四个字节 char arr[10] { 0 };//在栈空间上开辟10个字节的连续空间//写死了 //变长数组,int arr[n],变量的方式可以指定大小,并非意味着数组…

0th HPC Game小结

PART 1 - 基础知识 一、文件读取 二进制文件 mmap https://hpcgame.pku.edu.cn/demo/scow/api/proxy/relative/192.168.100.61/35515/ fread fwrite //readFILE* fi;if(fi fopen("input.bin", "rb")){fread(&p, sizeof(int), 1, fi);fread(&n,…

RabbitMQ之消息转换器

前言:大家好,我是小威,24届毕业生,曾经在某央企公司实习,目前在某税务公司。本篇文章将记录和分享RabbitMQ消息转换器的知识点。 本篇文章记录的基础知识,适合在学Java的小白,也适合复习中&…

深入理解机器学习——关联规则挖掘:基础知识

分类目录:《深入理解机器学习》总目录 许多商业企业在日复一日的运营中积聚了大量的数据。例如,食品商店的收银台每天都收集大量的顾客购物数据。下图给出一个这种数据的例子,通常称作购物篮事务(Market Basket Transaction&#…

Elasticsearch基本使用初体验01

ElasticSearch是一款非常强大的、基于Lucene的开源搜索及分析引擎;它是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据。 1.es的安装 工欲善其事,必先利其器;想要学es,我们…

九龙证券|磷酸铁锂电池包和铅酸电池有哪些区别?

目前,新能源汽车电动车一般用的电池有3种,铅酸蓄电池、镍氢充电电池、锂离子电池。伴随着电动车蓄电池技能工艺的升级换代,锂电池的发展壮大和应用领域日益持续上升。那么,磷酸铁锂电池包和铅酸电池有哪些差异呢?铅酸蓄…

PowerShell 美化(oh-my-posh)

文章目录PowerShell 美化一、 添加右键菜单1、 修改默认右键菜单2、 寻找安装目录3、 修改注册表二、 样式修改1、 环境安装2、 配置使用PowerShell 美化 一、 添加右键菜单 1、 修改默认右键菜单 直接使用这个命令可以将 win11 的右键菜单修改为 win10 的右键菜单&#xff1…

基础数学(三)位运算 JZ 15.位1的个数

正在刷DFS相关题的时候突然间,给我蹦出来这样一个回溯题: 401. 二进制手表 二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1&#xff…

maven 解决Cannot access alimaven以及Process terminated

maven 解决Cannot access alimaven以及Process terminated 目录maven 解决Cannot access alimaven以及Process terminated方案一:用idea打开settings.xml,更正红色报错方案二:将IDEA的Maven默认版本更换成你下载的maven文件夹方案三&#xff…

单片机堆栈知识总结

堆栈 在片内RAM中,常常要指定一个专门的区域来存放某些特别的数据 它遵循顺序存取和后进先出(LIFO/FILO)的原则,这个RAM区叫堆栈。 其实堆栈就是单片机中的一些存储单元,这些存储单元被指定保存一些特殊信息,比如地址&#xff0…

DFS(二)岛屿问题合集

目录 一、 463. 岛屿的周长 二、 130. 被围绕的区域 三、 200. 岛屿数量 四、695. 岛屿的最大面积 一、463. 岛屿的周长 给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] 1 表示陆地, grid[i][j] 0 表示水域。 网格中的格子 …

Java设计模式-解释器模式、解释器模式什么回事,抽象语法树又是什么

继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 6.12 解释器模式 6.12.1 概述 思维:翻译识别机器,如解析由数字、“”、“-”号构成的合法运算序列,若将数字和字符看作结点&a…

Lesson 4.1 逻辑回归模型构建与多分类学习方法

文章目录一、广义线性模型(Generalized liner model)的基本定义二、对数几率模型与逻辑回归1. 对数几率模型(logit model)2. 逻辑回归与 Sigmoid 函数3. Sigmoid 函数性质三、逻辑回归模型输出结果与模型可解释性四、多分类学习与…

CPU缓存一致性

CPU缓存一致性写直达写回缓存一致性总线嗅探MESI协议CPU Cache通常分为三级缓存,L1Cache,L2Cache,L3Cache,级别越低的离CPU越近,访问速度越快,但同时容量越小,价格越贵。在多核的CPU中,每个核都…

今天大年三十,新年快乐,我在这里给大家整理了一下除夕的习俗,来看看吧

今天是大年三十,阿玥在这里祝大家,一来风水,二来平安,阖家欢乐,四季平安,五福临门,六六大顺,七星高照,八方来财,十全十美,新年好! 名字:不晓得 学习:python,c 主页:木有 今天给大家整理一下大年三十的习俗等小知识,就不更python啦 目录 除夕要做的事情有什么…

Meta CTO:真正的全天候轻量化AR眼镜,可能要到2030年

去年Meta发布了售价高达1500美元的VST头显Quest Pro,该头显与Meta的Quest 2等产品在定价、技术路径上有很大不同,其搭载了眼球追踪、彩色VST等更高端的功能,而产品发布后,外界对其反馈也褒贬不一。作为Pro产品线首个产品&#xff…

Markdown基础总结

Markdown Tools TyporaVSCode Markdown Preview Enhanced扩展 有道云笔记… 上述工具都能很好地支持markdown书写 Markdown标题 1 使用 和 - 标记一级和二级标题 和 - 标记语法格式如下: 我展示的是一级标题我展示的是二级标题 ---效果如下: 2 使用 # 号标…