簡體   English   中英

如何找到觸發了寫回調的外圍設備?

[英]How can I find which peripheral a write callback was triggered by?

我正在制作一個Chrome應用程序,其中涉及連接到多個BLE外設並同時向它們發送寫消息。 我需要知道每個寫操作何時在哪個外圍設備上完成,以便可以對該外圍設備啟動更多操作,但是似乎沒有辦法從回調函數中引用外圍設備。 回調函數作為參數傳遞給藍牙API寫入函數:

chrome.bluetoothLowEnergy.writeCharacteristicValue(string characteristicId, ArrayBuffer value, function callback)

API顯示READ回調函數具有一個特征參數:

function(Characteristic result) {...};

然后,我一直在使用result.service.deviceAddress查找回調所針對的設備。 但是WRITE回調沒有參數。

這使我無法引用已寫入的外圍設備,因此我無法弄清楚是哪個外圍設備導致此寫回調運行。 我可以看到您可以通過為固定數量的設備中的每一個設備配備唯一的回調函數來做到這一點,但是有人可以詳細說明如何使用單個回調函數更動態地做到這一點嗎?

我最終為回調添加了一個共享函數( d是一個Device實例):

var writeCallback = function (d) {
  //...
}

然后,在跟蹤設備的對象中,我使用this命令為該函數添加了一個屬性:

class Device {
  constructor(device) {
    //...
    this.writeCallbackLink = (function () {
      writeCallback(this);
    }).bind(this);
  }
}

bind(this)是至關重要的,以確保this指的是實際的對象,而不是運行時環境。 然后,當我調用API函數時,我使用了回調鏈接:

chrome.bluetoothLowEnergy.writeCharacteristicValue(d.write.instanceId,
  data_buffer, d.writeCallbackLink);

這將導致writeCallback與觸發它的d作為參數一起運行。

暫無
暫無

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

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