Bluetooth набрать с 32feet.net и C#
Я пытаюсь предоставить решение "нажми для набора" для кого-либо на устройстве 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 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
Результат: ОК
затем
Отправленная команда: 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)),("call",(0-1)),("callsetup",(0-3)),("battchg",(0-5))), ("сигнал",(0-5)),("странствовать",(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+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 ответа
Попробуйте найти ответ для AT\r (или) ATH\r. Если ответ "OK\r\n", попробуйте набрать команду без пробела после ATD и номера.
Как сопровождающий 32feet.NET я бы хотел найти ответ на этот вопрос. Надеюсь, кто-то со знанием HSP/HFP объяснит, почему это не работает. Мое единственное общее предположение состоит в том, что, поскольку мы не принимаем / не создаем канал SCO для аудиоканала, телефон отказывается от соединения.
Однажды в вашем случае, однако... AT-команды завершаются CR (0Dh); или точка с запятой действует одинаково??