[英]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.