Bluetooth циферблат с 32feet.net и с#


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

На самом деле я ничего не делал с bluetooth (со времен at-команд через последовательный порт 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 0000000000rn";
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+CMERr

Результат : OK

Затем

Посланная команда: AT+CIN=?r

Результат : +Синд: ("service",(0-1)),("call",(0-1)),("callsetup",(0-3)),("battchg",(0-5)),("signal",(0-5)),("roam",(0-1)),("callheld",(0-2))

Затем

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

Результат: ОК Д: ("service",(0-1)),("call",(0-1)),("callsetup",(0-3)),("battchg",(0-5)),("signal",(0-5)),("roam",(0-1)),("callheld",(0-2))

Но на самом деле он не набирает: (

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

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

Следующий код теперь работает для набора номера через мой 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+CMERr";
        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 + "nr----------nr" + 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 + "nr----------nr" + 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 + "nr----------nr" + 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 + "nr----------nr" + System.Text.Encoding.ASCII.GetString(sRes);

        peerStream.Close();
        cli.Close();
2 6

2 ответа:

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

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

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