Отправьте bMessage на сервер доступа к сообщениям из Windows, используя библиотеку 32feet.net на C#

Я пытаюсь отправить bMessage из кода С# на ПК с Win7 на телефон Samsung Note 2. У меня есть 32-футовая библиотека Bluetooth, и я использую Visual Studio 2013 Community Edition.

Вот код, который у меня сейчас есть:

    string sendMessage = "";
    sendMessage = File.ReadAllText(file_path);

    BluetoothClient btClient = new BluetoothClient();
    btClient.Connect(btEp);
    Stream clientStream = btClient.GetStream();

    using (StreamWriter utfWriter = new StreamWriter(clientStream, Encoding.UTF8))
    {
        utfWriter.Write(sendMessage);
    }

btEp — это конечная точка Bluetooth, переданная функции для отправки сообщения и определенная в другом месте следующим образом:

BluetoothEndPoint BtEp;

Это построено с использованием переменных:

BtEp = new BluetoothEndPoint(device.DeviceInfo, mapServiceId);

Оба значения берутся с устройства во время выполнения и принимают следующие значения во время выполнения:

-       mapServiceId    {00001132-0000-1000-8000-00805f9b34fb}  System.Guid
+       BtEp    {BC20A4164A8C:0000113200001000800000805f9b34fb} InTheHand.Net.BluetoothEndPoint

При этом BC20A4164A8C является адресом устройства, сообщаемым устройством.

Соединение с телефоном, кажется, работает и обращается к правильной службе, потому что, когда я запускаю код, телефон предлагает мне спросить, готов ли я принять соединение с сервером сообщений с моего ПК. Это происходит, когда оператор 'btClient.Connect(btEp);' выполняется.

Насколько мне известно, текстовый файл, который я читаю и отправляю на телефон через поток, представляет собой правильно отформатированное bMessage, как определено спецификацией Bluetooth MAP и проверено в другом месте. Он построен следующим образом:

BEGIN:BMSG
VERSION:1.0
STATUS:UNREAD
TYPE:SMS_GSM
FOLDER:TELECOM/MSG/OUTBOX
BEGIN:VCARD
    VERSION:2.1
    N:(redacted)
    TEL:(redacted)
END:VCARD
BEGIN:BENV
    BEGIN:VCARD
        VERSION:2.1
        N:(redacted)
        TEL:(redacted)
    END:VCARD
    BEGIN:BBODY
        ENCODING:G-7BIT
        LENGTH:47
        BEGIN:MSG
            This is a short message
        END:MSG
    END:BBODY
END:BENV
END:BMSG

Я заменил личную информацию на (отредактировано), но фактический текстовый файл содержит собственные имена и номера. Я живу в Великобритании, поэтому, насколько я знаю, SMS_GSM должен быть правильным.

Будем очень благодарны любой помощи!

Обновление: я установил терминал Bluetooth на целевом телефоне и убедился, что сообщение получено, отправив те же данные на виртуальный порт на устройстве, а не на сервер доступа к сообщениям. Не уверен, что это была проблема с терминальной программой, но последняя строка сообщения добавлялась к началу и пропускалась с конца. Я добавил разрыв строки в конец файла, что устранило эту проблему, но по-прежнему не радует, когда я отправляю bMessage в MAS.

Я также пробовал несколько различных подходов к написанию потоков:

1) удаление оболочки StreamWriter Encoding - тот же результат 2) последовательная отправка каждого байта из цикла - аналогичный результат, по-прежнему никаких действий на телефоне.

Если есть специалисты по Bluetooth, буду очень признателен за совет! Не обязательно должен быть привязан к профилю доступа к сообщениям или, обязательно, к C#.

Я предполагаю, что моим следующим шагом будет посмотреть, смогу ли я найти современный автомобиль, который имеет Bluetooth-сопряжение для сервисов MAP и может подключаться к телефону и, возможно, перехватывать пакеты при использовании аналогичных функций ???

02.03.16 - Я перехватил пакеты между моим телефоном и новой машиной, отправляя/получая сообщения в обоих направлениях, и сравнил это с перехваченными пакетами между моим ПК/кодом и телефоном (спасибо Android! Параметры разработчика изначально позволяют вести журнал пакетов BT и были смог сбросить это в Wireshark для анализа). Мой код использует BluetoothClient, который работает через RFCOMM в стеке протоколов BT, тогда как автомобиль использует L2CAP. L2CAP — это уровень ниже RFCOMM в стеке BT, и 32Feet имеет эквивалентный клиент L2CapClient для работы на этом уровне. Реализовал это, но выдает ошибку. Оказывается, хотя L2CAP поддерживается не всеми профилями, которые его используют, и MAP, похоже, является одним из них.

Я собираюсь ответить на этот вопрос, чтобы дать возможные варианты всем, кто наткнется на него.


person fraggle    schedule 04.12.2015    source источник
comment
Спасибо за голоса! Предположим, что это голоса сочувствия за израсходованную награду, и до сих пор нет ответов? Очень ценю, почти поднял свою репутацию до того, как я предложил награду! Если я когда-нибудь решу эту проблему, я соответствующим образом обновлю сообщение...   -  person fraggle    schedule 16.12.2015


Ответы (3)


Думаю, я установил, что делать это с использованием 32Feet/C# не будет жизнеспособным. Если вы хотите получить доступ к серверу/профилю/клиенту доступа к сообщениям Bluetooth телефона (MAS MAP MAC), вы не можете сделать это, используя функции высокого уровня в библиотеке 32Feet.Net. Вместо этого вам нужно будет использовать код более низкого уровня на С++, как указано в MSDN:

https://msdn.microsoft.com/en-us/library/windows/hardware/ff536674%28v=vs.85%29.aspx

19/02/16 - Мне удалось использовать связь Bluetooth с профилем Hands Free на моем мобильном телефоне, чтобы инициировать вызов (это было что-то еще, что я хотел сделать, но ошибочно подумал, что SMS будет проще!). Для этого я использовал AT-команды. Затем я попытался использовать AT-команды для отправки SMS, но, видимо, мой телефон не реализует AT-команды для этого в своей реализации HFP. Так до сих пор и нет смс.

У меня есть несколько обнюхиваний пакетов SMS через Bluetooth между моим телефоном и автомобилем, поэтому я посмотрю, как это обрабатывается в какой-то момент. Мне нужно отсортировать SMS, но я могу работать с простой инициацией голосового вызова для текущего этапа проекта.

person fraggle    schedule 03.02.2016

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

Однако я заметил, что на MAC есть приложение под названием Handsfree, реализующее набор номера и отправку сообщений через bluetooth. Я использовал журнал Bluetooth HCI snoop для Android, чтобы понять, как это работает. Журнал можно скачать здесь: https://www.dropbox.com/s/34ol5kd0o3oceib/btsnoop_hci.log?dl=0

В логе есть пример отправки сообщения. Существует также уведомление о сообщении, отправленном по телефону. Надеюсь, это поможет решить проблемы с отправкой SMS.

person Mihail    schedule 02.04.2016
comment
Ура, Михаил, я сделал аналогичные журналы, используя Android BT HCI snoop, чтобы увидеть, как автомобильные системы делают такие вещи, очень похожие при беглом взгляде на журнал, на который вы ссылаетесь. Я предполагаю, что функции, которые мне нужны, скоро появятся в Win10, если эта недавняя статья с конференции Win Dev Build верна: uk.businessinsider.com/ - person fraggle; 05.04.2016
comment
Я не уверен, что Microsoft реализует эту функцию с помощью Bluetooth. Это, скорее всего, будет реализовано с использованием их облачной инфраструктуры. Это означает, что телефон должен быть подключен к сети (Wi-Fi или подключение для передачи данных). Учитывая, что в Windows 10 уже ведется слежка, я не решаюсь использовать эту функцию. - person Mihail; 06.04.2016
comment
Если вы хотите отправить SMS сегодня с помощью Wi-Fi, уже есть решение mysms.com ; также облачный; или justremotephone.com, который использует прямое соединение (BT или Wi-Fi). Мне лично не нравятся эти приложения, я хотел бы построить решение на основе стандарта bluetooth. - person Mihail; 06.04.2016
comment
Спасибо за предупреждение о том, что MS вряд ли будет использовать BT, только пометила заголовок для последующего наблюдения/мониторинга. Я абсолютно должен использовать BT для этого. Использование онлайн-решения не вариант. Кажется безумием не иметь возможности сделать это через BT, я полагаю, что вы могли бы сделать это в Vista (не знаю, я пропустил это и пошел прямо на Win7). Я думаю, что единственный вариант - изучить C++ - person fraggle; 06.04.2016
comment
Я также рассматривал возможность написания программного обеспечения на стороне клиента для Android, но я не программист для Android! Конечно, можно было бы предусмотреть установление связи по профилю последовательных данных BT с ПК на телефон, затем вы могли бы отправлять пользовательские дейтаграммы для реализации программного обеспечения телефона. - person fraggle; 06.04.2016
comment
Именно так работает justremotephone.com. У него есть приложение на Android, которое получает данные из настольного приложения. В настоящее время это лучший вариант для отправки SMS через Bluetooth в Windows. - person Mihail; 09.04.2016
comment
Что касается поддержки SMS в Vista, я еще не тестировал ее. Но, скорее всего, телефон был другим. Когда я подключаю старенькую Нокию, она создает COM-порт. Через этот COM-порт вы можете отправлять AT-команды для отправки SMS, набора номера, получения контактов. Вот пример: m2msupport.net/m2msupport/sms-at-commands. Это довольно легко. Я проверил это, используя последовательное соединение в Putty. Сегодня телефоны Android не подключаются через этот COM-порт. Более того, я не думаю, что Android реализует все AT-команды. - person Mihail; 09.04.2016

Итак, я еще немного покопался. Я использовал blucat для поиска доступных сервисов на своем телефоне. Среди сервисов были: "MAP SMS/MMS" - btgoep://980D2E0CFB51:4. Согласно спецификации MAP, MAP представляет собой профиль, созданный поверх протокола OBEX. Таким образом, имеет смысл использовать OBEX-ссылку для подключения к этому сервису. BTGOEP = универсальный протокол обмена объектами Bluetooth. Я попытался подключиться к MAP по приведенной выше ссылке, используя API bluecove java но я получил код ответа 198, что означает OBEX_HTTP_NOT_ACCEPTABLE.

Затем я нашел этот пост. Последний ответ: В основном вы создаете два сеанса OBEX: Служба доступа к сообщениям (MAS), которая затем регистрируется на устройстве для получения уведомлений с помощью службы уведомлений о сообщениях (MNS). После того, как вы зарегистрируетесь, устройство откроет с вами сеанс MNS и уведомит вас о входящих сообщениях. Вам также потребуется рекламировать службу MNS с помощью Bluetooth SDP.

Итак, я думаю, что я неправильно подключился к службе MAP и получил код ответа 198. Может быть, есть другой способ подключиться к службе MAP, как-то зарегистрировавшись на телефоне.

person Mihail    schedule 09.04.2016