cs_Gaelle
Messages postés41Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention 7 mars 2004
-
1 avril 2002 à 14:16
bryg
Messages postés9Date d'inscriptionmercredi 27 mars 2002StatutMembreDernière intervention15 mai 2002
-
19 avril 2002 à 16:31
Salut
Mon prog (sous VC++6) gère le port serie pour l'envoi et la reception d'info. J'utilise pour cela les fonctions _outp(PORT, int) et _inp(PORT)
Mon prog tourne à peu près sous 98 mais pas du tout sous NT ! Autre problème comment gérer l'envoi d'une chaine de caractère. L'envoi en format int ne pose aucun problème... Donc en castant ma chaine en int (fct atoi(...)) j'obtient toujours 0 comme resultat de reception. J'ai donc changé de méthode mais sans plus de résultat ! Si qq à une petite idée...
Voici les fonctions d'envoi et de reception:
/*Definition des constantes*/
/*-------------------------*/
#define PORT 0x03FF
#define MAX_BUFFER 100
/*-------------------------------------------------------------------------------
Fonction associee au bouton envoyer. Elle recupere la chaine de caractere
saisie dans la fenetre d'envoi et la transmet au port série.
---------------------------------------------------------------------------------*/
void CPortSerieDlg::OnButtonEnvoyer()
{
/*Initialisation des variables buffer pour recuperation et
cast en type int
----------------------------------------------------------*/
CString buff;
char buffb[MAX_BUFFER];
/*Recuperation du texte et mise à blanc de la zone de saisie*/
/*----------------------------------------------------------*/
m_edit_envoi.GetWindowText(buff);
m_edit_envoi.SetWindowText("");
/*Copie dans le second buffer pour le premier changement de type*/
/*--------------------------------------------------------------*/
strcpy(buffb, buff);
/*Envoi au port série en castant le type au format int*/
/*----------------------------------------------------*/
_outpw(PORT, int(buffb));
}
/*---------------------------------------------------------------------------------
Fonction associée au bouton receptionner. Elle se charge de recuperer les infos
qui sont dans le buffer du port serie.
-----------------------------------------------------------------------------------*/
void CPortSerieDlg::OnButtonReceptionner()
{
/*Initialisation de variable buffer pour la recuperation
des informations du port.
---------------------------------------------------------*/
int res=1;
char buff[MAX_BUFFER];
/*Recuperation de l'envoi du port. L'infos est de type int*/
/*--------------------------------------------------------*/
res = _inp(PORT);
/*Cast de l'information en chaine de caractères*/
/*---------------------------------------------*/
/*Meme en utilisant itoa(...,10) le resultat decodé est incorrect*/
strcpy(buff,(char*)(res));
/*Affichage des infos dans la fenetre reception*/
/*---------------------------------------------*/
m_edit_reception.SetWindowText (buff);
}
cs_electrix
Messages postés3Date d'inscriptionvendredi 13 octobre 2000StatutMembreDernière intervention 3 avril 2002 3 avril 2002 à 14:17
Salut Gaelle,
Helas tu utilise les inport et outport d'acces direct au hardware de la machine, hors sous NT comme pour 2000, il y a une couche intermediaire dite "d'abstraction materiel" ou couche "H.A.L" (HardWare Abstract Layer) qui interdit justement tout acces direct au matos !
Par consequent tu doit passer par des fonctions API et d'acces I/O type CreateFile en OVERLAPPED ou NON-OVERLAPPED au choix (le NON-OVERLAPPED dans ton cas).
Je te conseil plusieurs docs html et samples de chez microsoft que j'utilise pour les acces au port serie:
bryg
Messages postés9Date d'inscriptionmercredi 27 mars 2002StatutMembreDernière intervention15 mai 2002 19 avril 2002 à 16:29
-------------------------------
Réponse au message :
-------------------------------
Salut
Mon prog (sous VC++6) gère le port serie pour l'envoi et la reception d'info. J'utilise pour cela les fonctions _outp(PORT, int) et _inp(PORT)
Mon prog tourne à peu près sous 98 mais pas du tout sous NT ! Autre problème comment gérer l'envoi d'une chaine de caractère. L'envoi en format int ne pose aucun problème... Donc en castant ma chaine en int (fct atoi(...)) j'obtient toujours 0 comme resultat de reception. J'ai donc changé de méthode mais sans plus de résultat ! Si qq à une petite idée...
Voici les fonctions d'envoi et de reception:
/*Definition des constantes*/
/*-------------------------*/
#define PORT 0x03FF
#define MAX_BUFFER 100
/*-------------------------------------------------------------------------------
Fonction associee au bouton envoyer. Elle recupere la chaine de caractere
saisie dans la fenetre d'envoi et la transmet au port série.
---------------------------------------------------------------------------------*/
void CPortSerieDlg::OnButtonEnvoyer()
{
/*Initialisation des variables buffer pour recuperation et
cast en type int
----------------------------------------------------------*/
CString buff;
char buffb[MAX_BUFFER];
/*Recuperation du texte et mise à blanc de la zone de saisie*/
/*----------------------------------------------------------*/
m_edit_envoi.GetWindowText(buff);
m_edit_envoi.SetWindowText("");
/*Copie dans le second buffer pour le premier changement de type*/
/*--------------------------------------------------------------*/
strcpy(buffb, buff);
/*Envoi au port série en castant le type au format int*/
/*----------------------------------------------------*/
_outpw(PORT, int(buffb));
}
/*---------------------------------------------------------------------------------
Fonction associée au bouton receptionner. Elle se charge de recuperer les infos
qui sont dans le buffer du port serie.
-----------------------------------------------------------------------------------*/
void CPortSerieDlg::OnButtonReceptionner()
{
/*Initialisation de variable buffer pour la recuperation
des informations du port.
---------------------------------------------------------*/
int res=1;
char buff[MAX_BUFFER];
/*Recuperation de l'envoi du port. L'infos est de type int*/
/*--------------------------------------------------------*/
res = _inp(PORT);
/*Cast de l'information en chaine de caractères*/
/*---------------------------------------------*/
/*Meme en utilisant itoa(...,10) le resultat decodé est incorrect*/
strcpy(buff,(char*)(res));
/*Affichage des infos dans la fenetre reception*/
/*---------------------------------------------*/
m_edit_reception.SetWindowText (buff);
}
Merci à vous tous bisous bisous, Gaëlle
Salut Gaëlle,
Eh bien voilas,c pas pour dire, mais je suis un peu a cours d'idée, car je dois réaliser un programme un peux similaire au tien. Peux tu m'aide avec un exemple de ton source si il tourne sous NT.
Voila mon E-Mail : Nofrifr@yahoo.fr
Merci.a+
bryg
Messages postés9Date d'inscriptionmercredi 27 mars 2002StatutMembreDernière intervention15 mai 2002 19 avril 2002 à 16:31
-------------------------------
Réponse au message :
-------------------------------
Salut
Mon prog (sous VC++6) gère le port serie pour l'envoi et la reception d'info. J'utilise pour cela les fonctions _outp(PORT, int) et _inp(PORT)
Mon prog tourne à peu près sous 98 mais pas du tout sous NT ! Autre problème comment gérer l'envoi d'une chaine de caractère. L'envoi en format int ne pose aucun problème... Donc en castant ma chaine en int (fct atoi(...)) j'obtient toujours 0 comme resultat de reception. J'ai donc changé de méthode mais sans plus de résultat ! Si qq à une petite idée...
Voici les fonctions d'envoi et de reception:
/*Definition des constantes*/
/*-------------------------*/
#define PORT 0x03FF
#define MAX_BUFFER 100
/*-------------------------------------------------------------------------------
Fonction associee au bouton envoyer. Elle recupere la chaine de caractere
saisie dans la fenetre d'envoi et la transmet au port série.
---------------------------------------------------------------------------------*/
void CPortSerieDlg::OnButtonEnvoyer()
{
/*Initialisation des variables buffer pour recuperation et
cast en type int
----------------------------------------------------------*/
CString buff;
char buffb[MAX_BUFFER];
/*Recuperation du texte et mise à blanc de la zone de saisie*/
/*----------------------------------------------------------*/
m_edit_envoi.GetWindowText(buff);
m_edit_envoi.SetWindowText("");
/*Copie dans le second buffer pour le premier changement de type*/
/*--------------------------------------------------------------*/
strcpy(buffb, buff);
/*Envoi au port série en castant le type au format int*/
/*----------------------------------------------------*/
_outpw(PORT, int(buffb));
}
/*---------------------------------------------------------------------------------
Fonction associée au bouton receptionner. Elle se charge de recuperer les infos
qui sont dans le buffer du port serie.
-----------------------------------------------------------------------------------*/
void CPortSerieDlg::OnButtonReceptionner()
{
/*Initialisation de variable buffer pour la recuperation
des informations du port.
---------------------------------------------------------*/
int res=1;
char buff[MAX_BUFFER];
/*Recuperation de l'envoi du port. L'infos est de type int*/
/*--------------------------------------------------------*/
res = _inp(PORT);
/*Cast de l'information en chaine de caractères*/
/*---------------------------------------------*/
/*Meme en utilisant itoa(...,10) le resultat decodé est incorrect*/
strcpy(buff,(char*)(res));
/*Affichage des infos dans la fenetre reception*/
/*---------------------------------------------*/
m_edit_reception.SetWindowText (buff);
}
Merci à vous tous bisous bisous, Gaëlle
Salut Gaëlle,
Eh bien voilas,c pas pour dire, mais je suis un peu a cours d'idée, car je dois réaliser un programme un peux similaire au tien. Peux tu m'aide avec un exemple de ton source si il tourne sous NT.
Voila mon E-Mail : Nofrifr@yahoo.fr
Merci.a+