Bonjour, je cherche un moyen efficace de convertir du texte en format USB HID pour mon projet de clavier USB via un Raspberry Pi.
Actuellement j’utilise ce code que je me suis fait.
NULL_CHAR = chr(0)
CHARS_TEXT={
"a":4,"b":5,"c":6,"d":7,"e":8,"f":9,"g":10,"h":11,"i":12,"j":13,"k":14,"l":15,"m":16,"n":17,"o":18,"p":19,"q":20,"r":21,"s":22,"t":23,"u":24,"v":25,"w":26,"x":27,"y":28,"z":29,
"0":39,"1":30,"2":31,"3":32,"4":33,"5":34,"6":35,"7":36,"8":37,"9":38
}
CHARS_CMD={"t":43,"e":40,"s":44,"f":225}
CHARS_MEDIA={"mute":127,"volup":128,"voldown":129}
def write_report(report):
try:
with open('/dev/hidg0', 'rb+') as fd:
fd.write(report.encode())
except:
print("Fail to send the key to HID")
def text2hid(txt):
for a in txt:
if(a.lower()==a):
#is lower
print("Press "+a+" for CHR: "+str(CHARS_TEXT[a.lower()]))
write_report(NULL_CHAR*2+chr(int(CHARS_TEXT[a.lower()]))+NULL_CHAR*5)
else:
#is upper
print("Press "+a+" for CHR (with shift): "+str(CHARS_TEXT[a.lower()]))
write_report(chr(32)+NULL_CHAR+chr(int(CHARS_TEXT[a.lower()]))+NULL_CHAR*5)
write_report(NULL_CHAR*8)
def cmd2hid(cmd):
for c in cmd:
print("Press code "+c+" for CHR: "+str(CHARS_CMD[c.lower()]))
write_report(NULL_CHAR*2+chr(int(CHARS_CMD[c.lower()]))+NULL_CHAR*5)
write_report(NULL_CHAR*8)
def media2hid(cmd):
print("Press code "+str(cmd)+" for CHR: "+str(CHARS_MEDIA[cmd.lower()]))
write_report(NULL_CHAR*2+chr(int(CHARS_MEDIA[cmd.lower()]))+NULL_CHAR*5)
write_report(NULL_CHAR*8)
Ça marche, mais entrer 220 entrées en plus de certains avec SHIFT, je vois mal comment bien exploiter la mise en place.
il faudrait alors j’ajoute un filtre sur le résultat de mon Array pour détecter la prise en charge du shift, par exemple « a » est 4, le « A » est aussi 4 mais avec Shift, dans mon Array, je devrais alors créer la réponse « s4 » au lieu du « 4 », le s m’indiquerais d’inclure SHIFT.
Pour les lettres en fait, j’ai pas ce problème si ont regarde mon code. cependant, avec les chiffres et les symboles, c’est las que le problème arrive. Par exemple le « 2 » est aussi le « @ », alors pour le @ je dois définir « s31 » pour faire le SHIFT+2. J’ai pas encore codé cette partie, car je veux pas y perdre de temps si il y a moyen de faire mieux.
Je ne sais pas si il existerais un moyen de connaitre le code USB HID conséquent. Mes recherches Google donne pas de bons résultats, car le terme « USB HID » est plus utilisé pour des connexions de claviers au Raspberry, bref je trouve pas vraiment d’aide pour de quoi proche de mon projet.
Alors, il y a t-il un moyen de faire cette conversion de manière plus pratique ?
Pour connaitre les codes que j’ai besoin, c’est la colonne « DEC » (la première) de la liste présent en page 53 de ce PDF: https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf
De plus, je cherche a émuler les touches multimédias, si vous savez comment…
Pour comprendre le Array CHARS_CMD, chaque lettre est une touche; t pour TAB, s pour ESPACE, e pour ENTER, f pour SHIFT, …