Introduction

Dans le cadre d’utilisation du VR-N76, les applications smartphone proposent déjà une belle panoplie de fonctionnalités via la connexion bluetooth, centrale dans toute l’utilisation de cette radio.


VR-N76

Mais disposer d’une socket TCP de commande peut s’avérer utile, notamment pour les différents logiciels présents sur PC… qu’en est-il sur Linux ? Regardons cela avec un PC Ubuntu 22.04.

[ VR-N76 ] --> [ Bluetooth as serial device ] --> [ bridging to TCP ]

Voyons comment rendre disponible le VR-N76, doté du mode KISS TNC, via une connexion TCP.

Connexion bluetooth

Tout d’abord, l’appairage de l’appareil est nécessaire. Démarrons une écoute des périphériques bluetooth environnants.

$ bluetoothctl
scan on

Puis appairons le VR-N76 à notre PC.

$ bluetoothctl pair 38:D2:00:AA:EE:FF
Attempting to pair with 38:D2:00:AA:EE:FF
[CHG] Device 38:D2:00:AA:EE:FF Connected: yes
[NEW] Primary Service (Handle 0x0000)
[...]
[CHG] Device 38:D2:00:AA:EE:FF UUIDs: 00000001-ba2a-46c9-ae49-01b0961f68bb
[CHG] Device 38:D2:00:AA:EE:FF UUIDs: 00001100-d102-11e1-9b23-00025b00a5a5
[CHG] Device 38:D2:00:AA:EE:FF UUIDs: 00001101-0000-1000-8000-00805f9b34fb
[CHG] Device 38:D2:00:AA:EE:FF UUIDs: 0000111f-0000-1000-8000-00805f9b34fb
[CHG] Device 38:D2:00:AA:EE:FF UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Device 38:D2:00:AA:EE:FF UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Device 38:D2:00:AA:EE:FF UUIDs: 39144315-32fa-40db-85ed-fbfeba2d86e6
[CHG] Device 38:D2:00:AA:EE:FF ServicesResolved: yes
Pairing successful

L’apparaige du VR-N76 propose deux types de conenxions : comme périphérique audio et comme port série. C’est ce deuxième type de périphérique qui va nous intéresser.

VR-N76

Si le périphérique série n’apparait pas, il peut être intéressant de préciser les profiles bluetooth dans la configuration globale :

$ sudo vim /etc/bluetooth/main.conf
Enable=Source,Sink,Media,Socket,Network,Input,Serial

On portera attention à la globalité de cette configuration, qui concerne la machine dans son entièreté et donc tous les périphériques qui s’y connectent. Le profil souhaité ici est Serial. Les autres sont présents pour garder la compatibilité.


La vérification des fonctionnalités proposées par le VR-N76 sont consultables en affichant les données envoyées par bluetooth.
$ bluetoothctl info 38:D2:00:AA:BB:FF
Device 38:D2:00:AA:EE:FF (public)
        Name: VR-N76
        Alias: VR-N76
        Class: 0x00200404
        Icon: audio-headset
        Paired: yes
        Trusted: no
        Blocked: no
        Connected: yes
        LegacyPairing: no
        UUID: Vendor specific           (00000001-ba2a-46c9-ae49-01b0961f68bb)
        UUID: Vendor specific           (00001100-d102-11e1-9b23-00025b00a5a5)
        UUID: Serial Port               (00001101-0000-1000-8000-00805f9b34fb)
        UUID: Handsfree Audio Gateway   (0000111f-0000-1000-8000-00805f9b34fb)
        UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
        UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
        UUID: Vendor specific           (39144315-32fa-40db-85ed-fbfeba2d86e6)

On note bien Serial Port.

Après connexion au profil série du périphérique, un nouveau device Linux devrait apparaitre lors de la connection au VR-N76 en tant que port série.

$ ls /dev/rfcom*
/dev/rfcomm0

Il peut être nécessaire de changer le Baudrate via la commande suivante :

$ stty -F /dev/rfcomm0 115200

Conversion vers TCP

Après analyse du protocole KISS TNC1, l’encapsulation en TCP ne relève pas d’une complexité importante. Il s’agit de transférer les paquets réseau TCP vers le port série et inversement. C’est un protocole asynchrone, évitant notamment la gestion du temps entre les échanges.
Il n’y a pas de vérification de protocole (notamment des délimiteurs de trames FEND, l’envoi en série 8-bits, 1 bit de stop sans parité); les deux systèmes communiquants doivent se comprendre. On peut dans ce cas lancer la commande socat pour répondre à ce besoin simple de transfert de données bidirectionnel.

$ socat -dddd  TCP-LISTEN:8001,fork,reuseaddr /dev/rfcomm0,raw,echo=0,crnl

Commande qui lancera une écoute TCP sur le port 8001, pour plusieurs clients à la fois, transférant les données telles quelles, vers et du port série rfcomm0, avec une attention particulière au traitement des fin de lignes.

Conlusion

Une fois l’appairage et la connexion bluetooth réussis et après analyse du protocole KISS TNC, ce pont KISS TNS vers TCP reste somme toute assez rapide et direct à mettre en place. C’est très pratique pour les applications réseaux nécessitant un serveur TCP pour commander un appareil TNC, tel qu’il est le cas pour certains outils du réseau reticulum.