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.

[参考译文] LP-CC1352P7:删除了两个按钮菜单并替换了 UART 命令

Guru**** 2412110 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1322216/lp-cc1352p7-remove-two-button-menu-and-replace-uart-command

器件型号:LP-CC1352P7

我在开发板上成功运行了简单中央 SDK。

它工作正常,但我需要更改菜单中的两个按钮(采取大量的备忘录)为基于 UART 的命令。  

例如、我想发送"SCAN"、"CONNECT"、"RESET"等命令。 您对如何执行此操作有任何建议吗?

#define SC_ITEM_SCANPHY TBM_item (0)//"设置扫描 PHY"
#define SC_ITEM_STARTDISC TBM_ITEM(1)//"发现设备"
#define SC_ITEM_STOPDISC TBM_ITEM(2)//"停止发现"
#define SC_ITEM_CONNECT TBM_ITEM(3)//"连接到"
#define SC_ITEM_CANCELCONN TBM_ITEM(4)//"取消连接"
#define SC_ITEM_SELECTCONN TBM_ITEM(5)//"使用"
#define SC_ITEM_AutoConnect TBM_ITEM(6)//"自动连接"

#define SC_ITEM_GATTREAD TAM_ITEM(0)//"GATT 读"
#define SC_ITEM_GATTWRITETBM_ITEM(1)//"GATT 写入"
#define SC_ITEM_STRTRSSI TBM_item (2)//"启动 RSSI 读数"
#define SC_ITEM_STOPRSSI TBM_ITEM(3)//"停止 RSSI 读数"
#define SC_ITEM_UPDATE TBM_ITEM(4)//"连接更新"
#define SC_ITEM_CONNPHY TBM_item (5)//"设置连接 PHY"
#define SC_ITEM_DISCONNECT TBM_ITEM(6)//"断开"

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Vishal:

    用户指南中有一节介绍如何删除双按钮菜单:

    https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_7_10_02_23/docs/ble5stack/ble_user_guide/html/ble-stack-5.x/optimization-cc13xx_cc26xx.html#remove-the-two-buttons-menu-and-display

    在同一页面中、您会找到几项有关 RAM 和闪存优化的建议。

    如果您要发送诸如扫描和连接之类的串行命令、我建议查看主机测试和主机控制器接口(HCI)。  

    谢谢、

    M·H

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我阅读了此链接并按照-> https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_7_10_02_23/docs/ble5stack/ble_user_guide/html/ble-stack-5.x/optimization-cc13xx_cc26xx.html#remove-the-two-buttons-menu-and-display 进行了更改  

    其中我需要读取串行数据并将其输入到事件列表中、  

    如何处理 -> UART 上的开关(pMsg->HDR.event)、如  

    #define SC_EVT_KEY_CHANGE 0x01
    #define SC_EVT_SCAN_ENABLED 0x02
    #define SC_EVT_SCAN_DISABLED 0x03
    #define SC_EVT_ADV_REPORT 0x04
    #define SC_EVT_SVC_DISC 0x05
    #define SC_EVT_READ_RSSI 0x06
    #define SC_EVT_PAIR_STATE 0x07
    #define SC_EVT_PASS_需要0x08
    #define SC_EVT_READ_RPA 0x09
    #define SC_EVT_Insuffical_MEM 0x0A

    #define APP_EVT_EVENT_MAX 0xA

    char *appEventStrings[]={


    "APP_EVT_ZERO "、
    "APP_EVT_KEY_CHANGE"、
    "APP_EVT_SCAN_ENABLED "、
    "APP_EVT_SCAN_DISABLED "、
    "APP_EVT_ADV_REPORT "、
    "APP_EVT_SVC_DISC "、
    "APP_EVT_READ_RSSI "、
    "APP_EVT_PAIR_STATE "、
    "APP_EVT_PASS_NEED"、
    "APP_EVT_READ_RPA "、
    "APP_EVT_Insuffical_MEM "、
    };



    static void SimpleCentral_init(void)
    {
    
    
        char input;
        const char echoPrompt[] = "SuperUS_Ble_\r\n";
        int32_t semStatus;
        uint32_t status = UART2_STATUS_SUCCESS;
        GPIO_init();
        /* Create a UART in CALLBACK read mode */
        UART2_Params_init(&uartParams);
        uartParams.readMode     = UART2_Mode_CALLBACK;
        uartParams.readCallback = callbackFxn;
        uartParams.baudRate     = 115200;
        uart = UART2_open(0, &uartParams);
    
    
      uint8_t i;
    
      BLE_LOG_INT_TIME(0, BLE_LOG_MODULE_APP, "APP : ---- init ", SC_TASK_PRIORITY);
      // Create the menu
     // SimpleCentral_buildMenu();
    
      // ******************************************************************
      // N0 STACK API CALLS CAN OCCUR BEFORE THIS CALL TO ICall_registerApp
      // ******************************************************************
      // Register the current thread as an ICall dispatcher application
      // so that the application can send and receive messages.
      ICall_registerApp(&selfEntity, &syncEvent);
    
      // Create an RTOS queue for message from profile to be sent to app.
      appMsgQueue = Util_constructQueue(&appMsg);
    
      // Initialize internal data
      for (i = 0; i < MAX_NUM_BLE_CONNS; i++)
      {
        connList[i].connHandle = LINKDB_CONNHANDLE_INVALID;
        connList[i].pRssiClock = NULL;
      }
    
     // Board_initKeys(SimpleCentral_keyChangeHandler);
    
      GGS_SetParameter(GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN,
                       (void *)attDeviceName);
    
      //Set default values for Data Length Extension
      //Extended Data Length Feature is already enabled by default
      //in build_config.opt in stack project.
      {
        //Change initial values of RX/TX PDU and Time, RX is set to max. by default(251 octets, 2120us)
        #define APP_SUGGESTED_RX_PDU_SIZE 251     //default is 251 octets(RX)
        #define APP_SUGGESTED_RX_TIME     17000   //default is 17000us(RX)
        #define APP_SUGGESTED_TX_PDU_SIZE 27      //default is 27 octets(TX)
        #define APP_SUGGESTED_TX_TIME     328     //default is 328us(TX)
    
        //This API is documented in hci.h
        //See the LE Data Length Extension section in the BLE5-Stack User's Guide for information on using this command:
        //software-dl.ti.com/.../
        HCI_EXT_SetMaxDataLenCmd(APP_SUGGESTED_TX_PDU_SIZE, APP_SUGGESTED_TX_TIME, APP_SUGGESTED_RX_PDU_SIZE, APP_SUGGESTED_RX_TIME);
      }
    
      // Initialize GATT Client
      VOID GATT_InitClient();
    
      // Register to receive incoming ATT Indications/Notifications
      GATT_RegisterForInd(selfEntity);
    
      // Initialize GATT attributes
      GGS_AddService(GAP_SERVICE);               // GAP
      GATTServApp_AddService(GATT_ALL_SERVICES); // GATT attributes
    
      // Register for GATT local events and ATT Responses pending for transmission
      GATT_RegisterForMsgs(selfEntity);
    
      // Set Bond Manager parameters
      setBondManagerParameters();
    
      // Start Bond Manager and register callback
      // This must be done before initialing the GAP layer
      VOID GAPBondMgr_Register(&bondMgrCBs);
    
      // Accept all parameter update requests
      GAP_SetParamValue(GAP_PARAM_LINK_UPDATE_DECISION, GAP_UPDATE_REQ_ACCEPT_ALL);
    
      // Register with GAP for HCI/Host messages (for RSSI)
      GAP_RegisterForMsgs(selfEntity);
    
      BLE_LOG_INT_TIME(0, BLE_LOG_MODULE_APP, "APP : ---- call GAP_DeviceInit", GAP_PROFILE_CENTRAL);
      // Initialize GAP layer for Central role and register to receive GAP events
      GAP_DeviceInit(GAP_PROFILE_CENTRAL, selfEntity, addrMode, &pRandomAddress);
    
      UART2_write(uart, echoPrompt, sizeof(echoPrompt), NULL);
      SimpleCentral_doDiscoverDevices();
    
    }
        case SC_EVT_ADV_REPORT:
        {
          GapScan_Evt_AdvRpt_t* pAdvRpt = (GapScan_Evt_AdvRpt_t*) (pMsg->pData);
    
          //Auto connect is enabled
          if (autoConnect)
          {
            if (numGroupMembers == MAX_NUM_BLE_CONNS)
            {
              GapScan_disable();
              break;
            }
            //Check if advertiser is part of the group
            if (SimpleCentral_isMember(pAdvRpt->pData , acGroup, GROUP_NAME_LENGTH))
    	      {
              groupListElem_t *tempMember;
              //Traverse list to search if advertiser already in list.
              for (tempMember = (groupListElem_t *)osal_list_head(&groupList); tempMember != NULL; tempMember = (groupListElem_t *)osal_list_next((osal_list_elem *)tempMember))
              {
                if (osal_memcmp((uint8_t *)tempMember->addr ,(uint8_t *)pAdvRpt->addr,B_ADDR_LEN))
                {
                  break;
                }
              }
              //If tempMemer is NULL this meams advertiser not in list.
              if (tempMember == NULL)
              {
                groupListElem_t *groupMember = (groupListElem_t *)ICall_malloc(sizeof(groupListElem_t));
                if (groupMember != NULL)
                {
                  //Copy member's details into Member's list.
                  osal_memcpy((uint8_t *)groupMember->addr , (uint8_t *)pAdvRpt->addr,B_ADDR_LEN);
                  groupMember->addrType = pAdvRpt->addrType;
                  groupMember->status = GROUP_MEMBER_INITIALIZED;
                  groupMember->connHandle = GROUP_INITIALIZED_CONNECTION_HANDLE;
                  //Add group member into list.
                  osal_list_putHead(&groupList,(osal_list_elem *)groupMember);
                  numGroupMembers++;
                }
                else
                {
              //    Display_printf(dispHandle, SC_ROW_AC, 0, "AutoConnect: Allocation failed!");
                  break;
                }
              }
            }
          }
    #if (DEFAULT_DEV_DISC_BY_SVC_UUID == TRUE)
          if (SimpleCentral_findSvcUuid(SIMPLEPROFILE_SERV_UUID,
                                        pAdvRpt->pData, pAdvRpt->dataLen))
          {
            uint8_t* Name_ble = pAdvRpt->pData;  // 
            Name_ble += 5;                         //
            Name_ble[8] = '\0';                    //
            SimpleCentral_addScanInfo(pAdvRpt->addr, pAdvRpt->addrType);
      // Usage:
            // Assuming pAdvRpt is your structure holding the RSSI value
            char rssi_string[4]; // Adjust buffer size according to the max RSSI value you expect
            rssiToString(pAdvRpt->rssi, rssi_string, sizeof(rssi_string));
    
    
            UART2_write(uart, "Discovered : ", 13, NULL);
            UART2_write(uart, Util_convertBdAddr2Str(pAdvRpt->addr), 14, NULL);
            UART2_write(uart, " ", 1, NULL);
            UART2_write(uart, "RSSI: ", 5, NULL);
            UART2_write(uart, rssi_string, strlen(rssi_string), NULL);
            UART2_write(uart, " ", 1, NULL);
            UART2_write(uart, "Name: ", 5, NULL);
            UART2_write(uart, Name_ble, 8, NULL);
            UART2_write(uart, "\n\r", 2, NULL);
    
    
    
          // Free report payload data
          if (pAdvRpt->pData != NULL)
          {
            ICall_free(pAdvRpt->pData);
          }
          break;
        }