簡體   English   中英

Function 指針 Arduino 作為回調 Bluefruit 庫

[英]Function Pointer Arduino as Callback Bluefruit Library

我一直在嘗試將回調傳遞給 Bluefruit 庫中的setConnectCallback() function。 當我將 function 名稱connect_callback傳遞到setConnectCallback()時,我收到錯誤invalid use of non-static member function of type 'void (AumeBluetooth::)()'

function setConnectCallback()看起來像是在請求 function 指針:

摘自 Adafruit_BLE Arduino 庫:

/******************************************************************************/
/*!
    @brief  Set handle for connect callback
    @param[in] fp function pointer, NULL will discard callback
*/
/******************************************************************************/
void Adafruit_BLE::setConnectCallback( void (*fp) (void) )
{
  this->_connect_callback = fp;
  install_callback(fp != NULL, EVENT_SYSTEM_CONNECT, -1);
}

我有一個這樣定義的 class “AumeBluetooth”,我試圖實現一個 function 指針來調用connect_callback

。H

class AumeBluetooth {


  public:

    bool isConnected = false;
    Adafruit_BluefruitLE_SPI *_ble;
    void error(const __FlashStringHelper*err);
    void begin();
    AumeBluetooth();
    void loop();
    void connect_callback(void);

};

.cpp

#include "AumeBluetooth.h"
#include <SPI.h>
#include "Adafruit_BLE.h"
#include "Adafruit_BluefruitLE_SPI.h"
#include "Adafruit_BluefruitLE_UART.h"
#include "BluefruitConfig.h"


AumeBluetooth::AumeBluetooth() {

}


void AumeBluetooth::begin() {

  isConnected = false;

  Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_CS, BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST);
  _ble = &ble;

   if ( !_ble->begin() )
  {
    error(F("Couldn't find Bluefruit, make sure it's in CoMmanD mode & check wiring?"));
  }

  _ble->echo(false);

  _ble->info();
  _ble->setMode(BLUEFRUIT_MODE_DATA);

  void (AumeBluetooth::*cc)(void) = &AumeBluetooth::connect_callback;
  ble.setConnectCallback(this->*cc);


}

void AumeBluetooth::connect_callback(void) {

       Serial.print("BLUETOOTH IS CONNECTED"); 
       isConnected = true;
}

}

Not sure what to do try next. Thanks!

setConnectCallback 正在尋找 static function 指針。 正如錯誤消息所說,您正在向它傳遞一個非靜態 function 指針。

Your callback function must be a static function - either a free function, or a class function that is specifically designated 'static' and therefore has no access to class variables.

這是一個棘手的 API,因為它看起來也像 function 參數列表是(void),這意味着您沒有辦法傳遞索引或指針以將其綁定到 ZA2F2ED4F8EBC06CBB4C21A219。 您只會收到一個對 static function 的回調,並且由您的代碼知道回調可能針對哪個 class 實例。

因此,您的 connect_callback function 將無法在回調中設置 class 變量 isConnected 。 您將只能訪問全局/靜態變量。

我希望 begin() 和 loop() function 調用也是 static,非類函數。 看起來您可能正在嘗試在不必是 class 的代碼周圍放置一個 class 包裝器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM