Comment envoyer un 0x00 ou caractere NULL sur port com

CodeSteph Messages postés 4 Date d'inscription mardi 11 octobre 2011 Statut Membre Dernière intervention 25 octobre 2011 - 25 oct. 2011 à 00:00
CodeSteph Messages postés 4 Date d'inscription mardi 11 octobre 2011 Statut Membre Dernière intervention 25 octobre 2011 - 25 oct. 2011 à 09:55
Tout d'abord, merci à toi/vous de te pencher sur mon pb ou deja d'en prendre connaissance.
Je souhaite piloter un equipement electronique via port com. Pour cela j'utilise QT (souci d'apli multi plateforme et s'est aussi l'occasion de s'y mettre) j'ai tester differentes librairy dont qextserialport et qserialdevice Mon probleme : le protocole de communication est du modbus, cela implique que je dois envoyer different octet dont....0x00 et la ca se corse car toute ces lib utilisent le write ou writedata de Qiodevice qui envoy une chaine de char jusqu'a ce qu'il tombe sur le caractere de fin de chaine /o soit mon 0x00.
Apres plusieur recherche sur l'ami google et consor je m'en remet à vous car aussi bizard que cela puisse paraitre, je ne trouve aucune reponse à ma question: Comment lui faire comprendre que 0x00 n'est pas le caratere de fin de chaine, mais qu'il fait parti des data à transmettre???

4 réponses

cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
25 oct. 2011 à 00:31
Déjà, au moins une des libs que tu cites est opensource (c'est un mot magique ça) donc absolument rien (sauf l'ignorance du C) ne peut t'empêcher de faire un fork de la fonction qui ignorera les 0x0 et se basera sur un argument "size".
Sendto(chararray);//originale
Sendto(chararray, size);//fork
//attention ! risque de buffer overflow !

Pour revenir aux libs, je crois que libserial est beaucoup plus bas niveau et possède des options très précises.
Les libs que tu utilisent ont l'air assez génériques et ça va très bien quand on fait la même chose que les autre...
0
CodeSteph Messages postés 4 Date d'inscription mardi 11 octobre 2011 Statut Membre Dernière intervention 25 octobre 2011
25 oct. 2011 à 01:03
Oui tout a fait il est possible de la modifier, cependant ces lib semblent tellement incontournable sur QT pour attaquer un port com que je pensai que l'erreur c'etais moi lol car difficile pour moi (electronicien) de penser que ces lib puissent se refuser de balancer le char ou meme plutot le unsigned char que l'on veut. Je vais tester libserial, sinon je ferai mon propre clone.
Je posterai la solution car je pense ne pas etre le seule à vouloir piloter des cartes electroniques.
0
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
25 oct. 2011 à 09:37
Oki mais je penses à autre chose en relisant le thread : Si tu veux envoyer 0x0, ne peux-tu pas tout simplement réinitialiser le port ? Car 0x0 équivaut bien à un port inerte (éteint) non?
0
CodeSteph Messages postés 4 Date d'inscription mardi 11 octobre 2011 Statut Membre Dernière intervention 25 octobre 2011
25 oct. 2011 à 09:55
Je ne suis pas certain que le 0x00 soit garanti lors de l'initialisation ou la phase d'init. On s'en aperçoit d'ailleurs lors du retournement de bus, si une phase de stabilisation n'est pas observé coté réception, un caractère aléatoire peut être reçu. D'ailleurs c'est souvent un 0xFF mais cela dépend le plus souvent des drivers (hard). Mais je suis plus alaise sur mes hards fait maison que sur un PC? Mais ça viendra.
Concernant libserial, j'y ai jeté un petit coup d'oeil mais elle est destinée à linux hors petite précision qui a son importance, je travaille sous Qt/win 7.
0
Rejoignez-nous