je rencontre quelques problèmes lors de l'envoi de données sur un port série.

1er problème: voici le bout de code de ma fonction qui écrit sur le port série et renvoie le nombre d'octets effectivement écrits
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
if ( !WriteFile(hcom, data, lg, &result, 0) )
    return -1;
else
    return (int)result;
ouverture du port:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
hcom=CreateFileA((LPCSTR)buf, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING , 0, 0);
if (hcom==0 || hcom==INVALID_HANDLE_VALUE)
    return false;
hcom est le handler de fichier, data pointe sur un tableau contenant les données à envoyer, lg est le nombre de données à envoyer et result est mis à jour par writeFile avec le nombre de données effectivement envoyées.
Mon soucis est que dès que je n'arrive pas à envoyer plus de 64 octets quelle que soit la valeur de lg. Cette valeur de 64 correspond sûrement à la taille d'un buffer système ou de la FIFO de l'uart de mon PC, n'empêche que je ne vois pas pourquoi je ne peux en envoyer plus. Si lg est plus grand que 64, je sors systématiquement de writeFile avec result égal à 64.

2ème problème:
Ma communication est de type half duplex (MODBUS): j'envoie une trame à un destinataire qui la traite et me renvoie une autre trame. Il faudrait que je sois sur que tous les octets de ma trame ont été envoyés avant de lire la trame renvoyée. Existe-t-il une solution pour connaitre la fin réelle de la transmission?

Un peu de littérature ici:
http://msdn.microsoft.com/en-us/libr...#serial_topic4
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

Merci pour vos propositions