Aller au contenu
Cardane

un petit coup de main pour escape sequence ???

Recommended Posts

Bonjour à tous, 

 

Je suis en train de travailler sur le VD pour le KLF200, j'arrive déjà à me connecter dessus, ca progresse :D

par contre, comme ce foutu API utilise le protocole SLIP, j'ai un problème avec ces escape sequence.

 

en clair, je dois modifier mon frame de commande afin de pouvoir faire 3 choses :

 

1. si il contient  un caractère ESC (0xDB), le remplacer par les deux caractères suivants ESC + ESC_ESC (0xDB 0xDD)

2. si il contient un caractère END (0xC0), le remplacer par les deux caractères suivants : ESC + ESC_END (0xC0 0xDC)

3. enfin, ajouter en première et dernière position du frame le caractère END (0xC0)

 

ca fait deux jours que je teste avec toutes les fonctions possibles de manipulation de string, mais je n'arrive pas à un résultat correct. Soit il ajoute la valeur numérique du caractère (192. 219, etc), soit la valeurr hex en toutes lettres....  bref le bordel...

 

alors je fais appel à tous les nombreux développeurs ici, je me dit qu'il y en a bien un qui est capable de faire ca :2: @Lazer, @Steven @ADN182 ou @MAM78 ???  ou le grand maître @Krikroff ??? 

 

merci à tous

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu as un foutu problème de slip, tu veux manipuler un string, et c'est le bordel ?

Bah dis doc, tu t'es trompé de site je crois :P

 

Blague à part, tu as un début de lignes de code qui ne fonctionne pas ?

 

EDIT : dans mon VD Eaton il y a beaucoup d'exemples de manipulation de caractères hexadécimaux, pour encoder/décoder les trames SNMP.

  • Haha 1

Partager ce message


Lien à poster
Partager sur d’autres sites

non non, ne t'inquiètes pas, je n'ai pas de problème avec mon slip :D

 

juste que je ne vois pas comment, en lua, je peux faire pour construire ce frame de commande à passer au KLF

 

je vais aller voir ce que tu as fais dans ton VD Eaton si je trouve de l'inspiration et demain je mettrai ici la ligne de code qui ne marche pas, là j'en ai marre, depuis le matin je suis dessus :15:

 

Partager ce message


Lien à poster
Partager sur d’autres sites

@Lazer  euhh, il est où ce VD Eaton, je ne trouve rien dans la recherche (ok, suis très fatigué ce soir ...)

 

EDIT : c'est bon, j'ai trouvé, pffff, dois vraiment aller me coucher moi :(

ok, je regarde ce que tu as fait

Modifié par Cardane

Partager ce message


Lien à poster
Partager sur d’autres sites

Exemple :

 

local machaine = string.char(0xDB) .. string.char(0xDD)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

salut @Lazer, oui, ca j'avais utilisé pour insérer les END en début et fin de frame. mais ce que je n'arrive vraiment pas à faire c'est l'équivalent du string.gsub mais avec ces caractères spéciaux. 

En fait je dois chercher dans le frame si il y a la présence d'un caractère ESC ou END, et le remplacer, mais la fonction sub ne marche pas. 

 

EDIT : ok, j'utilisais mal la fonction sub, je crois que ca marche maintenant, je vais faire des tests en live avec le KLF pour voir si il reçoit bien le frame (et surtout si il le comprend)

 

Dernière question...  maintenant que j'ai bien construit le frame avec les différents Escape Character, puis le texte, puis encore des escape char, il me faut juste rajouter un cri à la fin. le calcul du cri, ok, je peux faire, mais le résultat sera un entier sur 2 bytes. Comment est-ce que j'ajoute ca en bout de frame ????

Modifié par Cardane

Partager ce message


Lien à poster
Partager sur d’autres sites

Il y a plein d'exemples dans mon VP Eaton, alors ça donne par exemple :

-- Test le premier caractère de la chaine
if string.sub(data, 1, 1) ~= string.char(0xDB) then
	-- action à effectuer
end

 

Je ne sais pas trop à quoi ressemble ton CRC, mais pour l'ajouter à la fin de ta chaine, je t'invite à t'inspirer du code de ma fonction encode().

Si c'est un nombre, tu peux notamment regarder la section "elseif t == "number" then" ...

 

Partager ce message


Lien à poster
Partager sur d’autres sites

×