OVH Cloud OVH Cloud

[LONG] modems: API+DCB versus souvre etc

9 réponses
Avatar
Fabrice Burghgraeve
Bonjour.
Je suis en train d'etudier comment utiliser les modems en windev.
Apparement, les fonctions TAPI de windev, c'est pas ideal :
trop peu documentees, on comprend rien...
par exemple :
<<
<Résultat> = telDémarreDétectionAppel(<Identifiant du service> [,
<Options>], <Nom de la procédure> [, <Paramètre personnalisé>])

(...)

<Identifiant du service> : Chaîne de caractères

Nom permettant d'identifier le service de détection d'appel.

>>

J'ai essaye avec "AttendAppel" comme dans l'exemple et ca marche.
OK...
Mais ca me fait franchement une belle jambe de savoir que l'identifiant du
service permet d'identifier le service...
Et a part ca, il sort d'ou ce "AttendAppel" ? je peux mettre quoi d'autre ?
mystere...
Donc je laisse tomber cette piste.
(en plus, c'est buggue : le parametre personnalise n'est pas envoye a la
procedure.)
(et puis si je demarre la detection d'appel et que mon modem est eteind, ca
marche quand meme alors la c'est puissant cette fonction)

Il reste donc deux pistes interessantes sur lesquelles j'hesite :

1) utiliser les APIs windows comme conseille par JFC1.
ca a l'air un peu compliqué, c'est de la programmation evenementielle, mais
ca a l'air tres complet.
un "hic" toutefois :
<<The DCE also needs configuration to make certain the DTE and DCE use the
same type of flow control. There is no mechanism provided by Win32 to set
the flow control of the DCE. DIP switches on the device, or commands sent to
it typically establish its configuration. >>

c'est a dire que de toute facon il faut gerer soi-meme les differents
profils de modems.
Donc ca j'y couperait pas...
Par contre, la detection d'appel, de raccrochage, la gestion du controle de
flux, des timeouts en lecture et ecriture etc etc, a priori on peut faire
ce qu'on veut avec, et tres finement...

Mais bon il faut passer par les appels aux API et en windev c'est vraiment
merdique alors je risque de mettre pas mal de temps a ecrire tout ca...(et
aussi a lire les tonnes de docs de visual C++ et MSDN qui traitent du sujet)

2) utiliser souvre, secrit, slit et compagnie. Tout ecrire directement en
windev.
Ca a l'avantage d'etre beaucoup plus simple a ecrire, au moins pour moi qui
maitrise ca ( j'ai ecrit la gestion des ports serie et les drivers de modems
de notre appli sous unix.)
J'y voies un gros inconvenient :
ces fonctions ne sont prevues que pour 4 ports COM !!!!!
Le jour ou on rajoute une carte multivoies, on est roulé dans la farine...
(bon j'lai jamais fait sous windows, mais ca viendra un jour ou l'autre)
et un modem USB, ca doit bien exister aussi...

Alors a votre avis, qu'est ce qui est mieux ?

notemment, les appels aux APIs sont-ils fiables ?
J'ai un gros gros doute la dessus, car si je debranche et rebranche mon
modem sous windows 2000, je suis oblige de rebooter pour pouvoir l'utiliser
a nouveau. (ou passer en administrateur et re-detecter le materiel), et ce
rien qu'en utilisant du "pur windows" c'est a dire l'acces reseau a
distance...

Les appels a souvre etc sont-ils fiables ?
Pourra-t-on un jour (pas trop lointain) ouvrir un port USB ou un port serie
autre que COM1 a COM4 ?
(y'a surement deja quelqu'unqui a posé la question a PCSOFT...)
N'y a-t-il pas de risque a les utiliser en multithreade ?

Quelle solution avez-vous adopté ?
Les APIs ? les "souvre" ? autre chose ?
Pourquoi ?

Merci d'avance a ceux qui prendront le temps de me repondre...

(pour l'instant, je penche plutot pour la solution "souvre" malgre ses
limitations car le code sera beaucoup plus simple a ecrire et comprendre,
mais la solution "DCB" m'a l'air d'etre plus "standard windows"...)

--
Fabrice Burghgraeve
Computer & Services
f_pas_de_spam_burghgraeve@computeretservices.com
(enlevez le _pas_de_spam_ pour me répondre en privé)

9 réponses

Avatar
Michel Moreno
Fabrice Burghgraeve wrote:
Bonjour.



Bonjour
.............
J'y voies un gros inconvenient :
ces fonctions ne sont prevues que pour 4 ports COM !!!!!


.......

Pourra-t-on un jour (pas trop lointain) ouvrir un port USB ou un port serie
autre que COM1 a COM4 ?



je n'ai pas toutes les réponses à tes questions, par contre, je peux te
confirmer que les fonctions sOuvre,sLit,.... fonctionnent jusqu'a COM9(neuf)

Cordialement

Michel
Avatar
JCF1
"Fabrice Burghgraeve" a
écrit dans le message de news:bk7cn2$c11$
Bonjour.
Je suis en train d'etudier comment utiliser les modems en windev.
Apparement, les fonctions TAPI de windev, c'est pas ideal :
trop peu documentees, on comprend rien...
par exemple :
<<
<Résultat> = telDémarreDétectionAppel(<Identifiant du service> [,
<Options>], <Nom de la procédure> [, <Paramètre personnalisé>])

(...)

<Identifiant du service> : Chaîne de caractères

Nom permettant d'identifier le service de détection d'appel.

>>

J'ai essaye avec "AttendAppel" comme dans l'exemple et ca marche.
OK...
Mais ca me fait franchement une belle jambe de savoir que l'identifiant du
service permet d'identifier le service...
Et a part ca, il sort d'ou ce "AttendAppel" ? je peux mettre quoi d'autre


?
mystere...
Donc je laisse tomber cette piste.
(en plus, c'est buggue : le parametre personnalise n'est pas envoye a la
procedure.)
(et puis si je demarre la detection d'appel et que mon modem est eteind,


ca
marche quand meme alors la c'est puissant cette fonction)

Il reste donc deux pistes interessantes sur lesquelles j'hesite :

1) utiliser les APIs windows comme conseille par JFC1.
ca a l'air un peu compliqué, c'est de la programmation evenementielle,


mais
ca a l'air tres complet.
un "hic" toutefois :
<<The DCE also needs configuration to make certain the DTE and DCE use the
same type of flow control. There is no mechanism provided by Win32 to set
the flow control of the DCE. DIP switches on the device, or commands sent


to
it typically establish its configuration. >>

c'est a dire que de toute facon il faut gerer soi-meme les differents
profils de modems.
Donc ca j'y couperait pas...
Par contre, la detection d'appel, de raccrochage, la gestion du controle


de
flux, des timeouts en lecture et ecriture etc etc, a priori on peut faire
ce qu'on veut avec, et tres finement...

Mais bon il faut passer par les appels aux API et en windev c'est vraiment
merdique alors je risque de mettre pas mal de temps a ecrire tout ca...(et
aussi a lire les tonnes de docs de visual C++ et MSDN qui traitent du


sujet)

2) utiliser souvre, secrit, slit et compagnie. Tout ecrire directement en
windev.
Ca a l'avantage d'etre beaucoup plus simple a ecrire, au moins pour moi


qui
maitrise ca ( j'ai ecrit la gestion des ports serie et les drivers de


modems
de notre appli sous unix.)
J'y voies un gros inconvenient :
ces fonctions ne sont prevues que pour 4 ports COM !!!!!
Le jour ou on rajoute une carte multivoies, on est roulé dans la farine...
(bon j'lai jamais fait sous windows, mais ca viendra un jour ou l'autre)
et un modem USB, ca doit bien exister aussi...

Alors a votre avis, qu'est ce qui est mieux ?

notemment, les appels aux APIs sont-ils fiables ?
J'ai un gros gros doute la dessus, car si je debranche et rebranche mon
modem sous windows 2000, je suis oblige de rebooter pour pouvoir


l'utiliser
a nouveau. (ou passer en administrateur et re-detecter le materiel), et ce
rien qu'en utilisant du "pur windows" c'est a dire l'acces reseau a
distance...

Les appels a souvre etc sont-ils fiables ?
Pourra-t-on un jour (pas trop lointain) ouvrir un port USB ou un port


serie
autre que COM1 a COM4 ?
(y'a surement deja quelqu'unqui a posé la question a PCSOFT...)
N'y a-t-il pas de risque a les utiliser en multithreade ?

Quelle solution avez-vous adopté ?
Les APIs ? les "souvre" ? autre chose ?
Pourquoi ?

Merci d'avance a ceux qui prendront le temps de me repondre...

(pour l'instant, je penche plutot pour la solution "souvre" malgre ses
limitations car le code sera beaucoup plus simple a ecrire et comprendre,
mais la solution "DCB" m'a l'air d'etre plus "standard windows"...)




Bonjour,

Les fonctions DCB, je l'ai ai (et encore un peu actuellement) beaucoup
utilisées en C, C++, sous WD je préfère utiliser les fonctions Windev, sauf
pour un cas très particulier ou j'ai employé les APIs DCB, mais je pense que
si j'avais eu un peu plus le temps de me pencher sur le problème ça aurait
pu marcher en WD.
J'ai également testé une programmation mixte, par exemple ouverture du port
com par sOuvre, puis les autres traitements avec des APIs DCB, ça
fonctionne.
L'interet que j'y ai trouvé est principalement d'éviter l'utilisation d'un
timer remplacé par la fonction/Api WaitCommEvent :

RetourFonction est un booléen
hFile est un entier
lpEvtMask est un entier
lpOverlapped est un entier
RetourFonction=API("KERNEL32","WaitCommEvent",hFile,lpEvtMask,lpOverlapped)

//Mettre ces déclarations dans le code d'initialisation (Fenêtre, Projet...)
//Déclaration des structures nécessaires à la fonction de l'API
<WaitCommEvent> :
OVERLAPPED est une structure
Internal est un entier
InternalHigh est un entier
Offset est un entier
OffsetHigh est un entier
hEvent est un entier
FIN
//Fin de la déclaration des structures pour <WaitCommEvent>

Pour info, DCB est une structure en C.
A l'origine le port com était ouvert par la fonction C OpenComm, qui est par
la suite devenue obsolète et a été remplacée par la fonction OpenFile, le
port com étant alors considéré comme un fichier d'un type particulier.

Si cela vous interesse, je peux vous envoyer en privé (compte tenu de la
taille) la traduction en Windev de toutes les APIs C et les structures s'y
rapportant, concernant les fonctions de communication DCB. Par contre je ne
donne pas le mode d'emploi, j'y ai passé beaucoup de temps et je
commercialise des applis avec ces fonctions, il faut bien que je vive. :-)

En ce qui concerne la gestion des diférends types de modems, je n'ai
toujours pas trouvé de solution miracle et automatique, sauf un peu sous XP
ou l'on arrive a avoir une information directe du ou des modems connectés
sur le système.

Sincères salutations
--
Jean-Claude FLAJOULOT
Sécurité, Conseil & Biométrie


PS : Sécurité, Conseil & Biométrie va devenir prochainement Sécurité,
Pointage & Biométrie

Avatar
Romain PETIT
Bonjour,

JCF1 a écrit :

Si cela vous interesse, je peux vous envoyer en privé (compte tenu de
la taille) la traduction en Windev de toutes les APIs C et les
structures s'y rapportant, concernant les fonctions de communication
DCB.



Pourquoi ne pas proposer cela en licence WD-libre sur windevasso ?

Par contre je ne donne pas le mode d'emploi, j'y ai passé
beaucoup de temps et je commercialise des applis avec ces fonctions,
il faut bien que je vive. :-)



Grave erreur que de penser que le logiciel libre empêche les gens de vivre
et les sociétés de gagner de l'argent.

A+

--
Romain PETIT
(mailto:rompetit_chez_ifrance.com)
Avatar
JCF1
"Romain PETIT" a écrit dans le message de
news:3f680888$0$20629$
Bonjour,

JCF1 a écrit :

> Si cela vous interesse, je peux vous envoyer en privé (compte tenu de
> la taille) la traduction en Windev de toutes les APIs C et les
> structures s'y rapportant, concernant les fonctions de communication
> DCB.

Pourquoi ne pas proposer cela en licence WD-libre sur windevasso ?



Pour la traduction des APIs DCB C/C++ vers WD, pourquoi pas, mais comment
fait-on ?


> Par contre je ne donne pas le mode d'emploi, j'y ai passé
> beaucoup de temps et je commercialise des applis avec ces fonctions,
> il faut bien que je vive. :-)

Grave erreur que de penser que le logiciel libre empêche les gens de vivre
et les sociétés de gagner de l'argent.



Erreur, peut être pas. Il m'arrive de donner certaines de mes sources, mais
pour d'autres, je tiens à les conserver d'autant plus que ces sources font
parties d'applis ayant fait l'objet d'un dépot (ou en cours de dépot) pour
lesquels je paie en outre des droits de dépot auprès de l'agence pour la
protection des logiciels.

Sincères salutations
--
Jean-Claude FLAJOULOT
Sécurité, Conseil & Biométrie


PS : Sécurité, Conseil & Biométrie va devenir prochainement Sécurité,
Pointage & Biométrie

Avatar
Romain PETIT
JCF1 a écrit :

Pourquoi ne pas proposer cela en licence WD-libre sur windevasso ?





Pour la traduction des APIs DCB C/C++ vers WD, pourquoi pas, mais
comment fait-on ?



Il suffit de contacter le Webmaster de Windevasso.

--
Romain PETIT
(mailto:rompetit_chez_ifrance.com)
Avatar
Fabrice Burghgraeve
Bonjour.

"JCF1" a écrit dans le message de
news:bk7usv$k03$



(...)

Bonjour,

Les fonctions DCB, je l'ai ai (et encore un peu actuellement) beaucoup
utilisées en C, C++, sous WD je préfère utiliser les fonctions Windev,


sauf
pour un cas très particulier ou j'ai employé les APIs DCB, mais je pense


que
si j'avais eu un peu plus le temps de me pencher sur le problème ça aurait
pu marcher en WD.



Merci de cette precision...
En fait, je crois que c'est ce que je vais faire....
Mais avant de me lancer a ecrire des routines qui vont surement servir tres
longtemps, je prefere me renseigner pour pas partir directement sur une
mauvaise piste.

J'ai également testé une programmation mixte, par exemple ouverture du


port
com par sOuvre, puis les autres traitements avec des APIs DCB, ça
fonctionne.
L'interet que j'y ai trouvé est principalement d'éviter l'utilisation d'un
timer remplacé par la fonction/Api WaitCommEvent :



(...)

Un timer pour quoi faire ?

Je pense plutot partir sur du multithreadé (les slit sont blocants), et
donner le time-out dans souvre...
Ca va etre (un peu) genant dans la mesure ou le time-out n'est pas le meme
quand on attend un appel que quand on attend un caractere en cours de
communication...
A mon avis, il aurait ete beaucoup plus judicieux de mettre le time-out au
niveau du slit ou secrit plutot que du souvre...
(avec quand meme un time-out pour le souvre, mais qui a une signification
bien differente...)
En tout cas, c'est comme ca que j'ai fait dans mes programmes UNIX.


Pour info, DCB est une structure en C.
A l'origine le port com était ouvert par la fonction C OpenComm, qui est


par
la suite devenue obsolète et a été remplacée par la fonction OpenFile, le
port com étant alors considéré comme un fichier d'un type particulier.



Merci de cette precision. Je le savais deja, car j'ai lu la Doc MSDN, qui
s'est installée avec Visual C++...
(grace a vous et a Romain qui m'avez mis sur la voie...)
Mais pour ceux que ca interesserait, dans "Documentation de Visual Studio
.NET",
il faut commencer par lire "Serial Communication in Win32" dans la partie
"Windows Base Services General Technical Articles"
et egalement lire "Communications Ressources" dans la partie "Platform SDK :
Hardware" (puis suivre les dizaines de liens)

Au passage, la doc de Visual C++ est bien mieux que celle de windev...
Beaucoup plus complete...



Si cela vous interesse, je peux vous envoyer en privé (compte tenu de la
taille) la traduction en Windev de toutes les APIs C et les structures s'y
rapportant, concernant les fonctions de communication DCB. Par contre je


ne
donne pas le mode d'emploi, j'y ai passé beaucoup de temps et je
commercialise des applis avec ces fonctions, il faut bien que je vive. :-)



oui je comprends :)
C'est tres gentil, mais ca ne m'interesse pas dans la mesure ou je ne vais
pas partir dans cette direction d'une part, et d'autre part, je l'aurais
fait moi-meme si il avait fallu, car rien qu'a traduire toutes les
structures et les constantes, ca aide beaucoup a la comprehension de ce que
font les fonctions...


En ce qui concerne la gestion des diférends types de modems, je n'ai
toujours pas trouvé de solution miracle et automatique, sauf un peu sous


XP
ou l'on arrive a avoir une information directe du ou des modems connectés
sur le système.



Avec le peu de recul que j'ai sur la question, j'ai bien peur qu'il n'y ait
pas de solution miracle,
et que celle consistant a ecrire soi-meme les chaines d'init est surement la
moins mauvaise car la plus maitrisee...
Sinon, vous etes surement au courant, mais on peut tenter de recuperer des
infos directement du modem en lui envoyant les commandes ATI1 à ATI4 (de
memoire, a verifier)


(...)

--
Fabrice Burghgraeve
Computer & Services

(enlevez le _pas_de_spam_ pour me répondre en privé)
Avatar
Fabrice Burghgraeve
bonjour.

"Michel Moreno" a écrit dans le message de
news:bk7dpn$pvr6s$
Fabrice Burghgraeve wrote:


(...)

je n'ai pas toutes les réponses à tes questions, par contre, je peux te
confirmer que les fonctions sOuvre,sLit,.... fonctionnent jusqu'a


COM9(neuf)

Cordialement

Michel



Merci de cette precision qui me rassure...
A partir de quelle version ?
parce que je suis en 203m, et la doc dit COM1 a COM4


--
Fabrice Burghgraeve
Computer & Services

(enlevez le _pas_de_spam_ pour me répondre en privé)
Avatar
Michel Moreno
Fabrice Burghgraeve wrote:
bonjour.

"Michel Moreno" a écrit dans le message de
news:bk7dpn$pvr6s$

Fabrice Burghgraeve wrote:



(...)


je n'ai pas toutes les réponses à tes questions, par contre, je peux te
confirmer que les fonctions sOuvre,sLit,.... fonctionnent jusqu'a



COM9(neuf)

Cordialement

Michel




Merci de cette precision qui me rassure...
A partir de quelle version ?
parce que je suis en 203m, et la doc dit COM1 a COM4




a partir de WD5.5 :D

en 7.5 j'ai pas fait l'essai

Michel
Avatar
Fabrice Burghgraeve
Bonjour.

"Michel Moreno" a écrit dans le message de
news:bkbm3u$riglf$
(...)
>>je n'ai pas toutes les réponses à tes questions, par contre, je peux te
>>confirmer que les fonctions sOuvre,sLit,.... fonctionnent jusqu'a
>
> COM9(neuf)
>
>>Cordialement
>>
>>Michel
>
>
> Merci de cette precision qui me rassure...
> A partir de quelle version ?
> parce que je suis en 203m, et la doc dit COM1 a COM4
>
>
a partir de WD5.5 :D

en 7.5 j'ai pas fait l'essai

Michel




:)

Je viens de telecharger la doc 206e.
Dedans, c'est egalement ecrit COM1 a COM4.
Mais j'ai pas essaye non plus...
A l'occasion quand j'aurais plus avance dans mes histoires de modems, je
mettrai une carte multivoies dans mon PC pour voir ce que ca fait.

En tout cas, sur rmon PC ou il n'y a quun port COM,
le code :
SI PAS sOuvre(1,2000,2000) ALORS
Erreur(ErreurInfo())
SINON
Info("COM1 ouvert");
sFerme(1)
FIN

(puis pareil pour COM4 et COM8)

me dit que COM1 est ouvert, et pour com4 et com8, le meme message d'erruer
:
<<Le mécanisme de sécurité du W-Langage a détecté une erreur sur le port.
Détail de l'erreur système :Le fichier spécifié est introuvable.>>

Donc le fait de lui demander d'ouvrir COM8 alors que c'est pas prevu (par la
doc ;-) ) ne lui pose pas plus de problemes que de lui demander d'ouvrir
COM4, ce qui est prevu. (alors que COM4 n'existe pas)

La question reste momentanement en suspend...


--
Fabrice Burghgraeve
Computer & Services

(enlevez le _pas_de_spam_ pour me répondre en privé)