virtualabs / btlejack

Bluetooth Low Energy Swiss-army knife
MIT License
1.9k stars 196 forks source link

Make the MICROBIT volume detection more robust #41

Open nviennot opened 5 years ago

nviennot commented 5 years ago

On MacOS, the volume names can have spaces (e.g., "MICROBIT 1")

virtualabs commented 5 years ago

Cette modification provoque une régression sur ma machine (Linux Debian), mon Micro:Bit n'est plus détecté. Cela est dû à une mauvaise expression régulière, AMHA.

Il faudrait utiliser

re.match(r'^\S+ on (.*MICROBIT\s?([0-9]+)?)', line)

à la place de

re.match(r'^[^ ]+ on (.*MICROBIT+( [0-9]+)?)', line)

nviennot commented 5 years ago

ici r'^\S+ on (.*MICROBIT( [0-9]+)?)' fonctionne, mais pas celle que tu as proposé.

Essaie de faire un mv /mnt/MICROBIT "/mnt/MICROBIT 1" pour tester

virtualabs commented 5 years ago

Bizarre ...

>>> re.match(r'^\S+ on (.*MICROBIT\s?([0-9]+)?)', '/dev/sdb1 on /mnt/MICROBIT 1').group(1)
'/mnt/MICROBIT 1'

Quelle est la ligne correspondant au Microbit dans la sortie de l'appel à mount ?

nviennot commented 5 years ago
>>> import re
>>> line = "/dev/disk2 on /Volumes/MICROBIT 1 (msdos, local, nodev, nosuid, noowners)"
>>> re.match(r'^\S+ on (.*MICROBIT\s?([0-9]+)?)', line).group(1)
'/Volumes/MICROBIT 1'
>>> line = "/dev/disk2 on /Volumes/MICROBIT (msdos, local, nodev, nosuid, noowners)"
>>> re.match(r'^\S+ on (.*MICROBIT\s?([0-9]+)?)', line).group(1)
'/Volumes/MICROBIT '
>>>

Sur le 2eme example, l'espace en trop est un problème.

virtualabs commented 5 years ago

Je vois, donc la regexp suivante devrait résoudre le problème:

re.match(r'^\S+ on (.*MICROBIT(\s?[0-9]+)?)', line).group(1)
nviennot commented 5 years ago

C'est beau