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.

2640r2f simple_perial 怎样定时发送20个字节的蓝牙数据

如题 。。。。。。。。。。。

  • 蓝牙从机向主机发送信息可以通过notification或者indication,在simpleBLEPeripheral工程里面,可调用GATTServApp_ProcessCharCfg()来进行发送,具体请看代码:

    /*-------------------------------------------------------------------
     * GATT Server Sub-Procedure APIs
     */
    
    /**
     * @brief   Send a GATT Indication
     *
     * This sub-procedure is used when a server is configured to
     * indicate a characteristic value to a client and expects an
     * attribute protocol layer acknowledgement that the indication
     * was successfully received.
     *
     * @ref ATT_HandleValueInd is used in this sub-procedure.
     *
     * @par Corresponding Events
     * If the return status from this function is @ref SUCCESS and the GATT client
     * succesfully sends an acknowledgement,  the calling
     * application task will receive a @ref GATT_MSG_EVENT message with method:
     * @ref ATT_HANDLE_VALUE_CFM of type @ref attHandleValueInd_t , with
     * status @ref SUCCESS or @ref bleTimeout . At this point, the procedure
     * is complete.
     *
     * @warning The payload must be dynamically allocated using @ref GATT_bm_alloc
     *
     * @note The client must use @ref GATT_RegisterForInd in order to receive
     * Indications in the application task and use
     * @ref ATT_HandleValueCfm to return the acknowledgement to the server
     *
     * @param   connHandle - connection to use
     * @param   pInd - pointer to indication to be sent
     * @param   authenticated - whether an authenticated link is required
     *                          0x01: LE Legacy authenticated
     *                          0x02: Secure Connections authenticated
     * @param   taskId - task to be notified of response
     *
     * @return  @ref SUCCESS : Indication was queued successfully.
     * @return  @ref INVALIDPARAMETER
     * @return  @ref MSG_BUFFER_NOT_AVAIL
     * @return  @ref bleNotConnected
     * @return  @ref blePending : A confirmation is pending with this client.
     * @return  @ref bleMemAllocError
     * @return  @ref bleInvalidMtuSize : Packet length is larger than connection's MTU size.
     * @return  @ref bleTimeout : Previous transaction timed out.
     */
    extern bStatus_t GATT_Indication( uint16 connHandle, attHandleValueInd_t *pInd,
                                      uint8 authenticated, uint8 taskId );
    
    /**
     * @brief   Send a GATT Notification
     *
     * This sub-procedure is used when a server is configured to
     * notify a characteristic value to a client without expecting
     * any attribute protocol layer acknowledgement that the
     * notification was successfully received.
     *
     * @ref ATT_HandleValueNoti is used in this sub-procedure.
     *
     * @note
     * A notification may be sent at any time.
     * No confirmation will be sent to the calling task for
     * this sub-procedure.
     *
     * @warning The payload must be dynamically allocated using @ref GATT_bm_alloc
     *
     * @note The client must use @ref GATT_RegisterForInd in order to receive
     * Notifications in the application task
     *
     * @param   connHandle - connection to use
     * @param   pNoti - pointer to notification to be sent
     * @param   authenticated - whether an authenticated link is required
     *                          0x01: LE Legacy authenticated
     *                          0x02: Secure Connections authenticated
     *
     * @return  @ref SUCCESS : Notification was queued successfully.
     * @return  @ref INVALIDPARAMETER
     * @return  @ref MSG_BUFFER_NOT_AVAIL
     * @return  @ref bleNotConnected
     * @return  @ref bleMemAllocError
     * @return  @ref bleInvalidMtuSize : Packet length is larger than connection's MTU size.
     * @return  @ref bleTimeout : Previous transaction timed out.
     */
    extern bStatus_t GATT_Notification( uint16 connHandle, attHandleValueNoti_t *pNoti,
                                        uint8 authenticated );
    
    /*********************************************************************
     * @fn      GATTServApp_ProcessCharCfg
     *
     * @brief   Process Client Characteristic Configuration change.
     *
     * @param   charCfgTbl - characteristic configuration table.
     * @param   pValue - pointer to attribute value.
     * @param   authenticated - whether an authenticated link is required.
     * @param   attrTbl - attribute table.
     * @param   numAttrs - number of attributes in attribute table.
     * @param   taskId - task to be notified of confirmation.
     * @param   pfnReadAttrCB - read callback function pointer.
     *
     * @return  Success or Failure
     */
    bStatus_t GATTServApp_ProcessCharCfg( gattCharCfg_t *charCfgTbl, uint8 *pValue,
                                          uint8 authenticated, gattAttribute_t *attrTbl,
                                          uint16 numAttrs, uint8 taskId,
                                          pfnGATTReadAttrCB_t pfnReadAttrCB )
    {
      uint8 i;
      bStatus_t status = SUCCESS;
    
      // Verify input parameters
      if ( ( charCfgTbl == NULL ) || ( pValue == NULL ) ||
           ( attrTbl == NULL )    || ( pfnReadAttrCB == NULL ) )
      {
        return ( INVALIDPARAMETER );
      }
    
      for ( i = 0; i < linkDBNumConns; i++ )
      {
        gattCharCfg_t *pItem = &(charCfgTbl[i]);
    
        if ( ( pItem->connHandle != CONNHANDLE_INVALID ) &&
             ( pItem->value != GATT_CFG_NO_OPERATION ) )
        {
          gattAttribute_t *pAttr;
    
          // Find the characteristic value attribute
          pAttr = GATTServApp_FindAttr( attrTbl, numAttrs, pValue );
          if ( pAttr != NULL )
          {
            if ( pItem->value & GATT_CLIENT_CFG_NOTIFY )
            {
               status |= gattServApp_SendNotiInd( pItem->connHandle, GATT_CLIENT_CFG_NOTIFY,
                                                  authenticated, pAttr, taskId, pfnReadAttrCB );
            }
    
            if ( pItem->value & GATT_CLIENT_CFG_INDICATE )
            {
               status |= gattServApp_SendNotiInd( pItem->connHandle, GATT_CLIENT_CFG_INDICATE,
                                                  authenticated, pAttr, taskId, pfnReadAttrCB );
            }
          }
        }
      } // for
    
      return ( status );
    }