Bluetooth набрать с 32feet.net и C # - PullRequest
7 голосов
/ 11 мая 2011

Я пытаюсь предоставить решение «нажми и набирай» для кого-то на устройстве Bluetooth, таком как мобильный телефон.Я пытался сделать это, используя 32feet.net Bluetooth API.

Я ничего не сделал с Bluetooth (со времен команды на через последовательный порт Bluetooth), но я подключил устройство ввопрос, который поддерживает сервис громкой связи с ПК.У меня есть следующий код, чтобы попытаться подключиться и отправить команду набора номера.

String deviceAddr = "11:11:11:11:11:11";
BluetoothAddress addr = BluetoothAddress.Parse(deviceAddr);
BluetoothEndPoint rep = new BluetoothEndPoint(addr, BluetoothService.Handsfree);
BluetoothClient cli = new BluetoothClient();
cli.Connect(rep);
Stream peerStream = cli.GetStream();

String dialCmd = "ATD 0000000000\r\n";
Byte[] dcB = System.Text.Encoding.ASCII.GetBytes(dialCmd);
peerStream.Write(dcB, 0, dcB.Length);

// Begin Edit ------------------------------------------------------------
Byte[] sResponse = new Byte[100];
peerStream.Read(sResponse, 0, 99);
TextBox1.Text = System.Text.Encoding.ASCII.GetString(sResponse);
// End Edit --------------------------------------------------------------

peerStream.Close();
cli.Close();
MessageBox.Show("Done");

Так как кажется, что он проходит через эти строки кода, требуется определенное время для подключения в соответствующем месте или сбой, еслиневерный адрес устройства и он не может подключиться.Очевидно, что команда AT не подходит для отправки.

Может кто-нибудь подсказать мне, что мне может понадобиться отправить на устройство Bluetooth через профиль громкой связи, чтобы заставить его набирать номер?

Начать редактирование -------------------------------------------

Я решил прочитать из потока и посмотреть, был ли какой-либо ответ после отправки команды AT.Поскольку я просто проверяю, могу ли я заставить его работать, я просто выгружаю ответ в текстовое поле.

Ответ, который я читаю из потока:

ERROR

Там нет 'Кажется, это коды ошибок или что-то в этом роде.

Конец редактирования ---------------------------------------------

Редактировать --------------------------------------------------

Отправленная команда: AT + CMER \ r

Результат: OK

затем

Отправленная команда: AT + CIND =? \ R

Результат: + CIND: ("service", (0-1)), ("call", (0-1)), ( "callsetup", (0-3)), ( "battchg", (0-5)), ( "сигнал", (0-5)), ( "странствовать", (0-1)), ("callheld", (0-2))

, затем

Отправить команду: ATD 0000000000 \ r

Результат: OK D: ("service", (0-1)), ( "вызов", (0-1)), ( "callsetup", (0-3)), ( "battchg", (0-5)), ( "сигнал", (0-5)), ("роуминг", (0-1)), ("callheld", (0-2))

Тем не менее, он фактически не набирает: (

End Edit ----------------------------------------------

Решение----------------------------------------------

Следующий код теперь работает для набора номера через мой iPhone.На данный момент это действительно сложно, так как я только что тестировал, чтобы посмотреть, смогу ли я заставить это работать.Достаточно начать работу для тех, кто хочет сделать подобное.

String deviceAddr = "00:00:00:00:00:00"; 
        BluetoothAddress addr = BluetoothAddress.Parse(deviceAddr);
        BluetoothEndPoint rep = new BluetoothEndPoint(addr, BluetoothService.Handsfree);

        BluetoothClient cli = new BluetoothClient();
        cli.Connect(rep);
        Stream peerStream = cli.GetStream();

        String dialCmd1 = "AT+CMER\r";
        String dialCmd2 = "AT+CIND=?\r";
        String dialCmd3 = "AT+BRSF=\r";
        String dialCmd4 = "ATD 0000000000;\r";

        Byte[] dcB = System.Text.Encoding.ASCII.GetBytes(dialCmd1);
        peerStream.Write(dcB, 0, dcB.Length);

        Byte[] sRes = new Byte[200];
        peerStream.Read(sRes, 0, 199);
        textBox1.Text = textBox1.Text + "\n\r----------\n\r" + System.Text.Encoding.ASCII.GetString(sRes);

        dcB = System.Text.Encoding.ASCII.GetBytes(dialCmd2);
        peerStream.Write(dcB, 0, dcB.Length);

        peerStream.Read(sRes, 0, 199);
        textBox1.Text = textBox1.Text + "\n\r----------\n\r" + System.Text.Encoding.ASCII.GetString(sRes);

        dcB = System.Text.Encoding.ASCII.GetBytes(dialCmd3);
        peerStream.Write(dcB, 0, dcB.Length);

        peerStream.Read(sRes, 0, 199);
        textBox1.Text = textBox1.Text + "\n\r----------\n\r" + System.Text.Encoding.ASCII.GetString(sRes);

        dcB = System.Text.Encoding.ASCII.GetBytes(dialCmd4);
        peerStream.Write(dcB, 0, dcB.Length);

        peerStream.Read(sRes, 0, 199);
        textBox1.Text = textBox1.Text + "\n\r----------\n\r" + System.Text.Encoding.ASCII.GetString(sRes);

        peerStream.Close();
        cli.Close();

Ответы [ 2 ]

3 голосов
/ 23 мая 2011

Попробуйте найти ответ на AT \ r (или) ATH \ r.Если ответ «ОК \ r \ n», попробуйте набрать команду без пробела после ATD и номера.

1 голос
/ 11 мая 2011

Как сопровождающий 32feet.NET, я бы хотел найти ответ на этот вопрос. Надеюсь, кто-то со знанием HSP / HFP объяснит, почему это не работает. Мое единственное общее предположение состоит в том, что, поскольку мы не принимаем / не создаем канал SCO для аудиоканала, телефон отклоняет соединение.

Однажды в вашем случае, однако ... AT-команды завершаются CR (0Dh); или точка с запятой действует одинаково ??

...