Comment envoyer un 0x00 ou caractere NULL sur port com
CodeSteph
Messages postés4Date d'inscriptionmardi 11 octobre 2011StatutMembreDernière intervention25 octobre 2011
-
25 oct. 2011 à 00:00
CodeSteph
Messages postés4Date d'inscriptionmardi 11 octobre 2011StatutMembreDernière intervention25 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???
cs_LA_Tupac
Messages postés305Date d'inscriptionjeudi 29 avril 2004StatutMembreDernière intervention18 janvier 20121 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...
CodeSteph
Messages postés4Date d'inscriptionmardi 11 octobre 2011StatutMembreDernière intervention25 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.
cs_LA_Tupac
Messages postés305Date d'inscriptionjeudi 29 avril 2004StatutMembreDernière intervention18 janvier 20121 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?
CodeSteph
Messages postés4Date d'inscriptionmardi 11 octobre 2011StatutMembreDernière intervention25 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.