2016-03-17 2 views
1

У меня есть Leica DISTO D3a BT. Это измерительное устройство, и оно отправляет меру через Bluetooth.Как читать данные от Leica DISTO через bluetooth?

Я написал код для получения потока bluetooth, я получаю данные, но у меня всегда появляется сообщение «Ошибка 240».

Это означает (из руководства пользователя), что я не подтверждаю успешность передачи данных.

Как я могу это сделать?

Вот мой код:

int bytesRead = 0; 
System.IO.Stream stream = client_.GetStream(); 
byte[] buffer = new byte[k_BUFFER_BYTES]; 
while(true) 
{ 
    Task.Delay(100); 
    if (client_.Available > 0) // Available contains the available bytes 
    { 
     int counter = 0; 
     string output = ""; 

     while (counter < client_.Available) 
     { 
      bytesRead = stream.Read(buffer, 0, k_BUFFER_BYTES); 
      counter += bytesRead ; 

      output += System.Text.Encoding.ASCII.GetString(buffer, 0, bytesRead); 
     } 
     stream.Write(Encoding.ASCII.GetBytes("\r\n"), 0, 2); 
     stream.Flush(); 

     Console.WriteLine(output + " - " + counter + " - " + client_.Available); 
    } 
} 

Заранее спасибо за любую помощь!

ответ

1

Наконец я получил ответ! я установил последовательный порт снифер и обнаружил, что квитирования строка реагировать является:

CFM \ п

Так что код теперь:

await stream.WriteAsync(Encoding.ASCII.GetBytes("cfm\n"), 0, 4); 
await stream.FlushAsync(); 

enter image description here

PS: Я очень хотел бы поблагодарить клиента Leica за , а не ответить на мои письма и телефонные звонки.

+1

Отправить «cfb 0 \ r \ n», чтобы навсегда выключить E240; или "cfb 128 \ r \ n", чтобы снова включить его. «Эта команда действительна только для устройств BT 2.1, но не для BT 4.0». – ali

0

Попробуйте послать CRLF на потоке. Затем промыть его.

Я проверил это здесь: https://www.b4x.com/android/forum/threads/connect-leica-disto-via-bluetooth-spp.53104/

хотя язык отличается, концепция должна быть такой же.

Надеюсь, это поможет!

+0

Спасибо Octanic, я добавил эти две строки: 'stream.Write (Encoding.ASCII.GetBytes (" \ r \ n "), 0, 2); stream.Flush(); 'но это не решило проблему! Я делаю это неправильно? – Michele

+0

@Michele Кажется правильным. Но вы могли бы подумать, что поток не принимает кодировку ASCII. Вы пробовали другую кодировку, например UTF-8? Помимо ошибки, имеет ли поток какие-либо дополнительные данные? Я имею в виду, вы получаете какую-либо другую информацию вместе с ошибкой? – Octanic

+1

Если я использую кодировку UTF-8, байты являются теми же двумя (13, 10). Если я использую Unicode, байты составляют четыре (13,0,10,0) вместо двух, и я получаю ответ @ E203. Но это не решило мою проблему к несчастью. – Michele

1

Используйте Disto Transfer PC приложения, чтобы выключить признанный сигнал (E240)

(Вы должны максимизировать приложение, чтобы увидеть, что это дополнительные функции)

Смежные вопросы