В настоящее время я работаю над приложением, написанным на Xamarin.Forms, которое связывается с устройством ESP через BLE. Я уже установил связь, и я также смог отправить некоторые Данные на Устройство и даже получить их.
Когда я пытаюсь получить немного более длинный фрагмент конфигурации, начало сообщения вроде как запутано. Деформация сообщения кажется детерминированной c, поскольку она всегда одинакова.
Я получаю следующее сообщение:
async private Task<string> ReadDeviceConfiguration(IDevice device) {
ICharacteristic characteristic = await GetCharacteristic(device, WTServiceUUIDs.CHARACT_CONFIG);
if (characteristic.CanRead) {
try {
var bytes = await characteristic.ReadAsync();
var str = Encoding.UTF8.GetString(bytes,0,bytes.Length);
return str;
} catch (Exception ex) {
Debug.WriteLine(ex.Message);
}
}
return null;
}
private async Task<ICharacteristic> GetCharacteristic(IDevice device, Guid wtServiceCharacteristicUUID) {
IService service = await device.GetServiceAsync(WTServiceUUIDs.SERVICE);
if (service != null) {
var characteristic = await service.GetCharacteristicAsync(wtServiceCharacteristicUUID);
if (characteristic != null) {
return characteristic;
}
}
return null;
}
Сообщение, которое я хочу получить, начинается как this:
{"MODE": 0, "DEVICE_ID": 123456789, "DEVICE_NAME": "Имя теста", ... et c
Что вместо этого я нахожу:
{"DEVICE_NAME": "Test N123456789," DEVICE_NAME ":" Test Name ", ... et c
в основном первая часть DEVICE_NAME, за которой следует значение DEVICE_ID. MODE полностью опущен.
Я посмотрел на массив байтов, выходящий из ReadAsyn c () (в случае неправильной кодировки), и он отображает те же ошибки.
Я также проверил вывод моего устройства ESP с помощью приложения nRF Connect на моем Android телефоне, и он отображает правильное и ожидаемое сообщение.
** РЕДАКТИРОВАТЬ: Удалил несвязанные sidenote, и я получил обновление:
Я немного перешел и реализовал функцию Ion, где я посылаю некоторую информацию Wi-Fi на устройство ESP, которое в свою очередь проверяет, является ли информация правильной и возвращает результат. если результаты в порядке, я запрашиваю конфигурацию, как описано выше, и получаю ту же ошибку, НО я понял, что строка, которая находится в начале, является частью информационного сообщения Wi-Fi, которое я ранее отправил на устройство. Я решил запросить конфиг дважды в строке и закодировать байты в строку, и вот результат:
{"TYPE": "WIFI_CHECK", "123456789," DEVICE_NAME ":" Test Имя ", ... et c
{" MODE ": 0," DEVICE_ID ": 123456789," DEVICE_NAME ":" Имя теста ", ... et c
Первое сообщение должно быть ошибочным, второе сообщение, как я и ожидал. Поэтому я считаю, что должен быть буфер, который не был очищен, и в этом случае оказывается, что он переопределяет первые 22 символа. Я могу использовать это в качестве обходного пути, но очевидно, что это не решение. Для интерфейса ICharacteristi c нет никакого гриппа sh или метода очистки. Есть ли что-нибудь еще, чтобы я мог избежать этой проблемы?
Надеюсь, у кого-нибудь есть подсказка, как с этим справиться. Заранее спасибо.