【问题标题】:How to define the callback for an esp32 arduino ble scan result如何为 esp32 arduino ble 扫描结果定义回调
【发布时间】:2019-06-19 07:51:19
【问题描述】:

开始BLE扫描的定义是:

bool start(uint32_t duration, void (*scanCompleteCB)(BLEScanResults), bool is_continue = false);

第二个参数似乎是扫描完成时的回调,对此有点新我不确定如何定义它。

我试过这个:

void OnScanResults(BLEScanResults scanResults)
{ }

并像这样使用它:

scanResults = scan->start(60, OnScanResults, true);

但对其他人来说很明显,这不起作用。

请帮我破译那个签名

void (*scanCompleteCB)(BLEScanResults)

【问题讨论】:

  • 你的回调是空的——所以什么都不会发生。您是否尝试在回调中插入Serial.println("Scan complete");
  • 当然希望存在比定义中没有代码更大的问题
  • @Tarick Welling 不要害怕。由于简洁而为空

标签: c arduino esp32


【解决方案1】:

您需要将 & 添加到 OnScanResults,因为:

void (*scanCompleteCB)(BLEScanResults)

是一个指向函数的指针,它接受BLEScanResults,不返回任何内容并被称为scanCompleteCB

所以你的电话应该是:

scanResults = scan->start(60, &OnScanResults, true);

就像指向int 的指针指向int 的地址一样

int pointedTo;
int* ptr = &pointedTo;

【讨论】:

  • 函数指针不需要&。请参阅en.cppreference.com/w/cpp/language/pointer -> '指向函数的指针'。
  • 标签上写着 C,所以如果它确实不是 C++,那就是问题
  • 好吧,有人过来添加了 C 标签,我知道什么...好的,谢谢你们解决了这个非神秘问题。我也忘记将实现返回类型更改为 bool(非回调变体获取类型为“scanResults”的东西)所以这也是它没有编译的原因。我的坏
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-21
  • 2020-07-01
  • 1970-01-01
  • 2020-11-20
  • 2016-08-24
相关资源
最近更新 更多