我有我的辦公桌上這裏有兩個方面:如何閱讀的特性(例如,在WICED智能例如 「speed_test」)
A)博通EVAL模塊,BCM920737TAG,與Broadcom的藍牙LE芯片和小皮層M0 MCU。 我也有一個終端程序運行,顯示模塊的跟蹤文本輸出。 這是用broadcom的「WICED Smart IDE」編程的。有一些例子附帶。 我目前使用speed_test示例。
B)Xamarin的iOS,從2013的VisualStudio(和MAC作爲構建主機),使用他們的跨平臺BluetoothLE庫Monkey.Robotics。
我想實現: 我的最終目標是發送數據的一大塊(〜500 KB - 我知道這將是緩慢的)從iPhone(BLE客戶端)到自定義設備是(BLE服務器)。由於我不能只發送數據包之後的20字節數據包而沒有來自接收機的某種ACK而不會破壞數據(正確?),並且Broadcom通過控制特性發送ACK指定數量的收到的數據包,我用這個例子。 由於特徵描述符似乎在iOS(1)的Monkey.Robotics中當前被破壞,我在broadcom speed_test中註釋了該部分,該部分檢查配置設置爲ACK。
(1)發現的特性中的特性保持爲空;有在Xamarin論壇中根據線索,未修復
else if (handle == HANDLE_SPEED_TEST_CHARACTERISTIC_DATA_VALUE)
{
if (++speed_test.received_unacked == speed_test.num_to_receive_before_ack)
{
// TEST: do ACK notify w/o this config // if (speed_test.control_client_configuration & CCC_NOTIFICATION)
{
UINT8 result[1] = {0x01};
bleprofile_sendNotification(HANDLE_SPEED_TEST_CHARACTERISTIC_CONTROL_VALUE, result, 1);
}
speed_test.received_unacked = 0;
- 我也注意到在speed_test的控制特性沒有「可讀」的標誌,所以我加了他們。
//CHARACTERISTIC_UUID128_WRITABLE
CHARACTERISTIC_UUID128(HANDLE_SPEED_TEST_CHARACTERISTIC_CONTROL, HANDLE_SPEED_TEST_CHARACTERISTIC_CONTROL_VALUE,
UUID_SPEED_TEST_CHARACTERISTIC_CONTROL_POINT,
LEGATTDB_CHAR_PROP_NOTIFY | LEGATTDB_CHAR_PROP_WRITE | LEGATTDB_CHAR_PROP_READ,
LEGATTDB_PERM_WRITE_REQ | LEGATTDB_PERM_READABLE, 2),
-
我修改Monkey.Robotics BLEExplorer例子。我添加了自己的頁面,當選定一個發現的設備時會顯示它,發現它的服務&特性,並且當它們具有正確的UUID時,將「啓動測試」命令發送到Broadcom模塊。然後它會通過數據特徵發送一些20字節的數據包,然後發送「結束測試」命令。 速度測試的開始和結束在我的串行終端的跟蹤輸出中得到確認,即broadcom模塊正確地獲得了此信息。 這個工作(2)只要我在下一個之後盲目地發送一個數據包,用一個用於「啓動測試」的命令參數來有效地禁用ACK。 只要我將它設置爲確認每個數據包,然後嘗試對ICHamatic的ReadAsync(),就會出現問題。 (2)好了,程序結束得太早了,也就是說,所有的數據可能都沒有真正接收到 - 因此我認爲我需要服務器端的ACK,而speed_test通過在控制中寫回一個值特性。
雖然我無法讀取控制特性。 Xamarin項目出現異常,因爲該特性沒有設置CanRead標誌 - 儘管我在broadcom端添加了這個標誌。 我試着通過ICharacteristic.ReadAsync()讀取。
我在做什麼錯? 我會很樂意在必要時提供更多細節。