Problème gestion port serie

chfauve59 Messages postés 1 Date d'inscription dimanche 8 février 2004 Statut Membre Dernière intervention 24 juin 2004 - 24 juin 2004 à 14:29
momo le bricoleur Messages postés 3 Date d'inscription samedi 11 mars 2006 Statut Membre Dernière intervention 9 avril 2006 - 11 mars 2006 à 12:56
Bonjour, j'aimerai savoir comment faire pour géré le port série sous windows NT avec Builder ou VC++ sans avoir a utiliser les commandes API de windows car je veux traité la réception d'un octet dès qu'il est reçu sur le port sans attendre la suite des octets qui arrivent, je ne veu surtout pas utiliser de Buffer pour lire les octets. Mon but est de faire la transmission des caractères recus sur le port série sur réseau ethernet(100 MBits) pour le retransmettre sur le port série d'un poste distant et vice versa donc il faut que je commence a traité les infos recu sur le port série. Est-t-il possible de traité a bas niveau le port série sous Windows NT? J'ai déjà fais un programme utilisant les méthode CreateFile(), SetComm.... avec gestion de thread mais j'ai des problèmes de timing, la liaison est de type 9600 bauds 8 bits avec parité, le problème est que windows s'occupe de mettre plusieurs octet dans un buffer interne ce qui me bloque. Quelqu'un connait t il une solution pour avoir un évenement de reception que d'un seul octet ou de pouvoir réduire le buffer interne de l'API de reception a un seul octet? Merci beaucoup d'avance.

seb (chfauve59)

9 réponses

cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
24 juin 2004 à 17:46
salut,

et ça, ça marche pas ?

BOOL SetupComm(
HANDLE hFile, // handle of communications device
DWORD dwInQueue, // size of input buffer
DWORD dwOutQueue // size of output buffer
);

@++
0
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
3 juil. 2004 à 21:54
Bonjour,
Je vois la meme question depuis bientot un mois.
Si le probleme est vraiment si pointu,il faut en passer par la gestion du port série par interruptions.Sous windows seul un vxd est capable de faire ça.Un programme normal se heurte au niveau de privilege requis pour installer une interruption.
Il faut télécharger le DDK,nécessaire a faire des drivers.
Le ddk utilise ml (masm32) comme langage.
Un exemple tout fait existe sur internet ,je l'ai vu mais je ne me rappelle plus trop ou.
Sur mon site ,a la page de lien , se rendre sur le site des auteurs de msdn,un des auteurs est spécialisé la dedans.
Avec un peu de chance ,un de ses articles fournira le source et des explications.
C'est le vxd type peu difficile à réaliser.
Une fois le vxd installé,c'est lui qui a la priorité .

ToutEnMasm
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
5 juil. 2004 à 10:16
salut,

ToutEnMasm, je crois que tu n'as pas bien lu la question:
Bonjour, j'aimerai savoir comment faire pour géré le port série sous windows NT avec Builder ou VC++

kidi NT dit pas de vxd, les drivers c bien mais c pas le + portable. ( de +, j'ai fournis un exemple pour hooker le port COM par driver vxd sur ce site, le hook est une bonne solution car cela permet de charger le driver en dynamique )

@++
0
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
5 juil. 2004 à 11:30
Salut,
j'ai bien lu la question.je cite

"Quelqu'un connait t il une solution pour avoir un évenement de reception que d'un seul octet ou de pouvoir réduire le buffer interne de l'API de reception a un seul octet? "

Et la réponse c'est le vxd qui la fournit avec une éventuelle création de message windows.
Le vxd permet de créer une interruption par pic pour chaque octet reçus et de les mettre dans un tampon dimensionnable a volonté.
Le vxd remplace l'API.
A mon avis , tu ne vois pas trop comment gérer un port série.
Se renseigner sur l'uart , l'usb.
ToutEnMasm
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
5 juil. 2004 à 13:00
re,

je ne rentrerais pas dans ton débat car il ne m'interesse pas étant donné que nous ne parlons pas de la meme phrase.

alors demande a d'autres ...
pas de vxd dans un noyau NT, je confirme...

@++
0
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
5 juil. 2004 à 17:39
Salut,
Pour avoir des réponses dans un groupe de discussion il faut savoir poser les bonnes questions.
Je ne demande rien du tout.
Tout cela m'a l'air fort confus.
a+
ToutEnMasm
0
mitah86 Messages postés 1 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 31 janvier 2005
31 janv. 2005 à 19:54
moi auussi j'ai le même probleme et j'(aimes bien une reponse le plus vite possibles
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
1 févr. 2005 à 10:54
re,

le problème dans la gestion du port serie est la désynchronisation des évènements entre le driver et l'application.

les messages sont attendus par les fonctions Wait???.

il y a 2 mode de programmation:
le mode bloquant et le mode overlapped.
en mode bloquant, il est possible d'augmenter la priorité du thread qui répond aux evenements.
en mode overlap, la gestion est plus simple et non bloquante mais moins portable avec d'autres systemes d'exploitation.

dans le cas d'une gestion octet par octet, je pense qu'il faut faire une gestion bloquante en augmentant la priorité du thread ( coté applicatif ) qui gère les entrées COM.

si tu utilise le mode overlap, il faut creer une boucle de lecture octet / octet. ( en cas de reception de plusieurs octets )
sur le site de msdn, il y a un article interressant sur le port serie qui explique tout ça, j'ai plus la page en tete.

@++
0
momo le bricoleur Messages postés 3 Date d'inscription samedi 11 mars 2006 Statut Membre Dernière intervention 9 avril 2006
11 mars 2006 à 12:56
peut être pourrai tu utiliser le port com a bas niveau, je sait pas vraiment comment tu peut le faire sur le PC, mais pour la calculatrice graphique TI89 en langage C,j'utilisais peekIO(0x60000E) pour lire l'état du port et pokeIO(60000E,...) pour ecrire.
ce n'est pas sur que ce soit la meme fonction pour un PC

donc je serai aussi intéréssé de savoir comment untiliser le port com a bas niveau (fair directement varier les état logiques sur les broches)...
0
Rejoignez-nous