Windows Mobile - связь через последовательный порт - PullRequest
2 голосов
/ 08 октября 2009

Мне нужно установить связь через последовательный порт. Я пытаюсь сделать это сейчас, чтобы разрешить связь Bluetooth через 2 устройства, и ничего не получается.

У меня есть приложение на устройствах (называемое Bluetooth Explorer), которое позволяет мне осуществлять последовательную связь, и оно будет отправлено через Bluetooth, используя стек Stonestreet One, если вам интересно: (

В настройках я могу создать «Сервис», для которого определен COM-порт.

Поэтому я пытаюсь запустить следующий код (я вызываю Запись на одном устройстве и Чтение на другом устройстве). BTExplorer запускает приложение сопряжения при выполнении serialPort.Open(). В этом я выбираю, какой «сервис» я хочу использовать (последовательный порт 1).

Но serialPort.ReadLine() зависает и никогда не возвращается. (Я имею в виду ДЕЙСТВИТЕЛЬНО зависает. Мне нужно выполнить горячую загрузку устройства, чтобы убить мое приложение. Завершить процесс / процесс уничтожения не работает.)

Вот код для справки:

public void WriteSerial()
{
    SerialPort serialPort = new SerialPort("COM4");
    serialPort.Open();
    serialPort.WriteLine("Hello To The Other Side");
    serialPort.Close();
}

public void ReadSerial()
{
    SerialPort serialPort = new SerialPort("COM4");
    serialPort.Open();
    string output = serialPort.ReadLine();
    serialPort.Close();
    MessageBox.Show(output);
}

private void btnWrite_Click(object sender, EventArgs e)
{
    WriteSerial();
}

private void btnRead_Click(object sender, EventArgs e)
{
    ReadSerial();
}

Как заставить это работать?

Я использую Windows Mobile 5 с устройствами MC70. Стек Bluetooth - Stonestreet One (к сожалению, это не изменится). Разработка в C # Compact Framework .NET 3.5

1 Ответ

5 голосов
/ 08 октября 2009

Справка по API гласит: ,

По умолчанию метод ReadLine будет блокировать до получения строки. Если это поведение нежелательно, установите Свойство ReadTimeout для любого ненулевого значение, чтобы заставить метод ReadLine бросить TimeoutException, если строка недоступен в порту.

... так, сделайте это, если хотите избежать зависания.

В любом случае:

  • Откуда вы знаете, что два устройства / порта подключены друг к другу (через Bluetooth)?
  • Настраиваете ли вы свойства SerialPort (например, BaudRate и т. Д.) Перед вызовом метода Open?
  • Имеет ли какое-то значение то, что вы вызываете первым: ReadLine или WriteLine? Вместо того, чтобы делать открывать / писать / закрывать и открывать / читать / закрывать, как насчет делать вместо этого открывать / открывать / читать / писать / закрывать / закрывать?
  • Что возвращают BytesToRead свойства получателей после того, как отправитель вызвал WriteLine?
  • Вы посмотрели пример кода последовательного порта, который существует (согласно Stonestreet One Bluetooth SDK FAQ )

Если в их SDK есть пример программы, то я предлагаю вам использовать его (без изменений) для проверки настроек теста (например, для проверки правильности подключения ваших устройств) перед изменением программы примера и / или перед тестированием. ваше собственное программное обеспечение (с использованием тех же устройств / тестовых настроек, которые вы уже протестировали с их образцом программного обеспечения).

...