Порты Bluetooth - от linux до linux, как мне создать двусторонний поток данных? - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь создать двунаправленный беспроводной поток данных по Bluetooth между двумя устройствами, Raspberry Pi (без головы) и рабочей станцией Linux.

Я добился успеха, выполнив следующие шаги:

1) На стороне Pi я создал и активировал службу с именем rfcomm0.service:

[Unit]
Description=RFCOMM0 service
After=bluetooth.service
Requires=bluetooth.service

[Service]
ExecStart=/usr/bin/rfcomm watch hci0 22 setsid getty rfcomm0 115200 vt100 -a pi

[Install]
WantedBy=multi-user.target

2) На настольном компьютере Linux (клиент) я подключаюсь с помощью команд rfcomm в терминале:

sudo rfcomm -i hci0 bind /dev/rfcomm0 PI:AD:DR:ES:S1:11 22
sudo rfcomm connect /dev/rfcomm0 PI:AD:DR:ES:S1:11 22

, что приведет меня на страницу входа getty, где я могу войти Пи. Это была хорошая отправная точка, но я тогда хотел

  • Устранить необходимость входа
  • Чтение и запись напрямую из последовательного порта

Для этого для этого я просто удалил команду getty со стороны моего сервера (поэтому rfcomm должен наблюдать за соединениями, но ему нечего выполнять, когда он их находит) и вместо этого использовал stty на стороне клиента для настройки порта:

 stty -F /dev/rfcomm0 raw 115200

Теперь я могу все еще успешно подключиться, но только за несколько секунд до того, как сторона сервера прервет соединение, вот последний бит моего btmon вывода (сторона сервера):

> HCI Event: Number of Completed Packets (0x13) plen 5       [hci0] 2391.844059
        Num handles: 1
        Handle: 12
        Count: 1
> HCI Event: Disconnect Complete (0x05) plen 4               [hci0] 2391.845053
        Status: Success (0x00)
        Handle: 12
        Reason: Remote User Terminated Connection (0x13)
* Unknown packet (code 17 len 14)                            [hci0] 2391.845118
        02 00 00 00 0c 00 f8 ee 04 eb 27 b8 00 03        ..........'...  
* Unknown packet (code 17 len 14)                            [hci0] 2391.845118
        01 00 00 00 0c 00 f8 ee 04 eb 27 b8 00 03        ..........'...  
@ Device Disconnected: B8:27:EB:04:EE:F8 (0) reason 3

Есть ли какой-то этап инициализации, который getty и аналогичные программы (мне также удалось использовать minicom и screen) выполняют, что мне не хватает? Нужно ли как-то немедленно получить доступ к последовательному соединению, чтобы оно не закрывалось, как это? Если да, то какую команду можно использовать для немедленного открытия порта и перенаправления ввода в ExecStart, который не позволит завершить процесс?

Любая помощь приветствуется, спасибо заранее!


...