c# - 无法从 Telit BLE 模块读取数据(读取特征通知)
问题描述
在授予 tx 和 rx 信用之前似乎无法通知 Tx 信用,并且可以从我的终端 I/O 应用程序写入数据但不能读回任何数据(特征)这是我的连接功能。应用程序最初尝试通知 tx 信用,并且通知等于没有发生。在授予信用后(在不同的模块中)成功通知 tx 信用,但 Telit 实施指南说初始 tx 信用通知是强制性的。https://www.telit.com/wp-content/uploads/2017/09/TIO_Implementation_Guide_r6.pdf
internal void Connect(CBPeripheral peripheral)
{
peripheral.DiscoveredService += (sender, e) =>
{
if (peripheral.Services == null) { return; }
foreach (var s in peripheral.Services)
{
if (s.UUID.ToString().Contains("fefb"))
{
service = s;
peripheral.DiscoverCharacteristics(service);
};
}
};
peripheral.DiscoveredCharacteristic += (sender, e) =>
{
// peripheral.DiscoveredCharacteristic += (sender, e) =>
// {
foreach (var c in service.Characteristics)
{
if (c.UUID.ToString() == (TIO_UART_RX_UUID))
{
UartRxCharacteristic = c;
}
}
};
peripheral.DiscoveredCharacteristic += (sender, e) =>
{
foreach (var c in service.Characteristics)
{
if (c.UUID.ToString() == (TIO_UART_RX_CREDITS_UUID)) //|| (c.UUID.ToString() == TIO_UART_TX_CREDITS_UUID))
{
UartRxCreditsCharacteristic = c;
}
}
};
peripheral.DiscoveredCharacteristic += (sender, e) =>
{
foreach (var c in service.Characteristics)
{
if (c.UUID.ToString() == (TIO_UART_TX_CREDITS_UUID))
{
UartTxCreditsCharacteristic = c;
if (Global.PeripheralManager != null)
{
// Global.PeripheralManager.Dispose();
}
this.PendingLocalUARTCreditsCount = this.MaxLocalUARTCreditsCount - this.LocalUARTCreditsCount;
Byte[] byteData = new Byte[1];
byteData[0] = (Byte)((this.PendingLocalUARTCreditsCount & 0xFF));
NSData valueData = (NSData.FromArray(byteData));
FirstViewController.UartRxCreditsCharacteristic, CBCharacteristicWriteType.WithResponse);
peripheral.WriteValue(valueData, FirstViewController.UartTxCreditsCharacteristic, CBCharacteristicWriteType.WithResponse);
peripheral.SetNotifyValue(true, c);
// {
Global.PeripheralManager = new PeripheralManager(peripheral, c);
Global.PeripheralManager.DidReceiveData += PeripheralManager_DidReceiveData;
PeripheralManager(peripheral, c);
}
}
};
peripheral.DiscoveredCharacteristic += (sender, e) =>
{
foreach (var c in service.Characteristics)
{
if (c.UUID.ToString() == (TIO_UART_TX_UUID)) // == UUID_TX)
// UartTxCharacteristic = c;
{
if (Global.PeripheralManager != null)
{
//Global.PeripheralManager.Dispose();
}
Global.PeripheralManager = new PeripheralManager(peripheral, c);
Global.PeripheralManager.DidReceiveData += PeripheralManager_DidReceiveData;
StrTemp = "";
Str1 = "";
var recdat = 3;
Global.PeripheralManager.Write(":F\r\n", recdat);
// name.Text = str;
};
}
};
myMgr.ConnectPeripheral(peripheral);
}
解决方案
推荐阅读
- java - How to define multiple query parameters in Spring boot
- c++ - 如何在 C++ 中的字符串函数中不返回任何值?
- vue.js - BootstrapVue 表粘性标题(CoreUI)
- git - 每当我尝试执行 git clone,git pull 时,Git 每次都会询问错误 URL 的密码
- spring - Spring Batch RabbitMQ 问题
- php - 如何对具有实时搜索功能的表进行分页?
- python-3.x - 使用带有方法的 python `eval()`
- c# - 使用递归创建一个程序,该程序将数组中的奇数作为特定格式的字符串返回 c#
- python - Python分割线并将其写入文件
- java - 从Java中的国家代码获取默认语言