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 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+CIND=?r
результат : + Синд: ("service",(0-1)),("call",(0-1)),("callsetup",(0-3)),("battchg",(0-5)),("signal",(0-5)),("roam",(0-1)),("callheld",(0-2))
затем
отправить команду: ATD 0000000000r
результат: ЛАДНО D: ("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 ответов
попробуйте найти, что такое ответ для AT\r (или) ATH\r. Если ответ "OK\r\n", попробуйте набрать команду без пробела после ATD и номера.
как сопровождающий 32feet.NET я бы хотел найти ответ на этот вопрос. Надеюсь, кто-то со знанием HSP/HFP объяснит, почему это не работает. Мое единственное общее предположение заключается в том, что, поскольку мы не принимаем/не создаем канал SCO для аудиоканала, телефон отказывается от соединения.
один раз в вашем случае, однако... Команды AT завершаются CR (0Dh); или точка с запятой действует одинаково??