主题中讨论的其他器件:SysConfig
工具与软件:
我正在寻找一个比 SDK 8.x 附带的 basic_ble 示例更小的东西、*仅**支持广播设备角色...
我看到一个源文件名为 app_broadcenter.c、但我不知道如何使用此功能构建应用...
我对"终端菜单"也不感兴趣..
我的最终目标是缩小我的可执行文件的大小,所以任何关于如何从这个最小的例子中删除东西的建议将非常感谢..
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
我正在寻找一个比 SDK 8.x 附带的 basic_ble 示例更小的东西、*仅**支持广播设备角色...
我看到一个源文件名为 app_broadcenter.c、但我不知道如何使用此功能构建应用...
我对"终端菜单"也不感兴趣..
我的最终目标是缩小我的可执行文件的大小,所以任何关于如何从这个最小的例子中删除东西的建议将非常感谢..
这对于我的用例来说太大了、我只需要一个信标...
我注意到该 SDK 包含一个 ti/drivers/rcl/handlers/ble5.c 文件、该文件似乎提供对 BLE 补丁映像的低级访问。。 我看到其中的函数用于发出各种 BLE 命令、包括广播。。
我已经将 generic.c 处理程序与您的 rfPacketTX 示例配合使用了。。 但我不能在 SDK 中任何实际使用 ble5.c 处理程序的代码...
在这个级别的广告示例可能会解决我的问题..
您好!
我是 Tanguy 的同事。
谢谢!
Toby
我要说的是、这个例子实际上是建立在 rfPacketTx 示例之上的--尽管它会将 BLE 映像加载到无线电本身、而不是 propRF (通用)映像...
更重要的是、我认为此代码将使用 generic.c RCL 处理程序...
我正在寻找一些使用 ble5.c 处理程序的人--它的命令和功能更符合 BLE 协议。。 例如、我可以将广播通道掩码传递给 RCL_Handler_BLE5_Adv 命令;在 ble5.c 中处理通道排序。
虽然这在理论上可以通过不超过基本无线电 TX/RX 来实现、但 ble5.c 中显然有额外的逻辑、我想利用它... 更重要的是、ble5.c 使用大量的无线电寄存器**特定**用于 BLE 修补程序...
这个问题很愚蠢、但 为什么 TI 随 SDK 一起提供 ble5.c (以及 ble_cs.c 和 IEEE-c)、但没有提供有关如何使用这些处理程序的示例???
ble5.c 旨在与 BLE 堆栈一起使用。
有关处理程序(例如 ble、generic、...)、请参阅此处的 RCL 文档: https://dev.ti.com/tirex/explore/content/simplelink_lowpower_f3_sdk_8_10_01_02/docs/rcl/html/index.html
/* * Copyright (c) 2013-2022, Texas Instruments Incorporated * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /***** Includes *****/ /* Standard C Libraries */ #include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <limits.h> /* TI Drivers */ #include <ti/drivers/GPIO.h> #include <ti/drivers/rcl/RCL.h> #include <ti/drivers/rcl/RCL_Scheduler.h> #include <ti/drivers/rcl/commands/ble5.h> /* SysConfig Generated */ #include "ti_ble_config.h" #include "ti_drivers_config.h" #include "ti_radio_config.h" /* Packet TX Configuration */ #define MAX_LENGTH (40U) // Max packet length #define NUM_DATA_ENTRIES (2U) // Number of data entries #define NUM_PAD_BYTES (3U) // Number of pad bytes #define HDR_LEN (1U) #define PACKET_INTERVAL 1000000 // Set packet interval to 500000us or 500ms /***** Variable declarations *****/ /* RCL Commands */ static RCL_CmdBle5Advertiser advCmd = RCL_CmdBle5Advertiser_Default(); static RCL_CtxAdvertiser advCtx = RCL_CtxAdvertiser_Default(); /* RCL Client used to open RCL */ static RCL_Client rclClient; /* Counters for RCL event callback */ volatile uint32_t gCmdDone = 0; // Command done /* TX packet buffer */ uint32_t packet[NUM_DATA_ENTRIES][NUM_PAD_BYTES + ((MAX_LENGTH + 10)/ 4)]; /* Adv data */ uint8_t advData[] = { 0x02, GAP_ADTYPE_FLAGS, GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED | GAP_ADTYPE_FLAGS_GENERAL, 0x04, GAP_ADTYPE_LOCAL_NAME_SHORT, 'T', 'X', 'N', }; /***** Callback Functions *****/ void defaultCallback(RCL_Command *cmd, LRF_Events lrfEvents, RCL_Events rclEvents) { if (rclEvents.lastCmdDone) { gCmdDone += 1; } } /***** Function definitions *****/ void *mainThread(void *arg0) { /* Initialize and open RCL */ RCL_init(); RCL_Handle rclHandle = RCL_open(&rclClient, &LRF_config); advCtx.advA[0] = 0xaaaa; advCtx.advA[1] = 0xbbbb; advCtx.advA[2] = 0xcccc; /* Callback triggers on last command done */ advCmd.common.runtime.callback = defaultCallback; advCmd.common.runtime.rclCallbackMask.value = RCL_EventLastCmdDone.value; advCmd.ctx = &advCtx; advCmd.chanMap = 0x7; advCmd.txPower.dBm = 0; advCmd.txPower.fraction = 0; /* Set RCL TX buffer packet to be packet buffer */ RCL_Buffer_TxBuffer *txPacket = (RCL_Buffer_TxBuffer *)&packet; uint8_t val = 0; while(1) { /* Create packet with random payload */ uint8_t *txData; txData = RCL_TxBuffer_init(txPacket, NUM_PAD_BYTES, 0, MAX_LENGTH); memcpy(txData, advData, sizeof(advData)); /* Set packet to transmit */ RCL_TxBuffer_put(&advCmd.ctx->txBuffers, packet); advCmd.common.status = RCL_CommandStatus_Idle; /* Submit command */ RCL_Command_submit(rclHandle, &advCmd); /* Pend on command completion */ RCL_Command_pend(&advCmd); // return 0; usleep(PACKET_INTERVAL); //HapiWaitUs(PACKET_INTERVAL); } }
根据我使用功率分析仪所说的、此程序在所有三个通道上每秒广播一次、频率为5dB……
我认为实际广播包(advData)不会被传输、但是...
当我单步执行处理程序代码时、它似乎挑选值0x2 (第一个长度字节)作为所使用的广播类型...
能否验证我是否正确地通过了缓冲区
感谢您分享您的进展。
我们的 SDK 不支持以这种方式使用 BLE、我们希望开发人员能够使用提供的 BLE Stack 库来使用任何 BLE 功能。
为了实现更简单的操作(例如仅 BLE 广播广播广播广播广播广播广播)、可以使用上面的示例、正如我之前提到的文章中所说的、它是从现有实施(TIDA00759、BLE PIR 传感器)移植的。
如果您需要在不同的信道/频率上广播、每条 TX 命令都有一个频率字段。