reception de donnee par COM
Bonjour,
alors voila, je communique avec un appareil branche sur le port serie de mon ordi. J'arrive a lui envoyer des instructions, mais je n'arrive pas a recevoir ce qu'il m'envoie ( enfin je les recois, mais c totalement incomprehensible).
Il doit m'envoyer des donne sous forme de BYTE. J'ai defini un buffer en BYTE * buf2 . Meme avec ca, je recois n'importe quoi quand j'envoie les donne dans un fichier texte.
Il faudrait sans doute que je fasse une conversion quelque part, mais je sais pas comment faire. Avez vous une idee, car je seche, desole.
Voici mon programme :
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <windef.h>
#include <stdlib.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main()
{
HANDLE handle,hStdout,handle_FILE_TEXT;
DCB dcb;
COMMTIMEOUTS timeouts={0};
BOOL fSuccess;
int ExitRemoteMode=255;
int EnterRemoteModeNow=70;
BOOL bResult,PortReady;
BYTE*buf2[2000]={0};
DWORD nblu,nbecrit;
int tosend2,tosend1;
/*--------------------------------------------------------------------*/
/* Ouverture du port de communication pour l'ANALYSEUR DE SPECTRE */
/*--------------------------------------------------------------------*/
hStdout=GetStdHandle(STD_OUTPUT_HANDLE);
handle_FILE_TEXT = CreateFile(
"c:\\\\TEST.txt",
GENERIC_WRITE | GENERIC_READ,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_SYSTEM,
NULL
) ;
if(handle_FILE_TEXT == INVALID_HANDLE_VALUE)
{
printf("Impossible to open the port (error %d)\n", GetLastError());
return 0;
getchar();
}
handle = CreateFile(
"COM1",
GENERIC_READ | GENERIC_WRITE ,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
) ;
/*-----------------------------------------------------------*/
/* Verifier si handle ouvert correctement */
/*-----------------------------------------------------------*/
if(handle == INVALID_HANDLE_VALUE)
{
printf("Impossible to open the port (error %d)\n", GetLastError());
return 0;
}
/*-----------------------------------------------------------*/
/* Ajustement des parametres */
/*-----------------------------------------------------------*/
PortReady=SetupComm(handle,5000,5000);
fSuccess = GetCommState(handle, &dcb);
if (!fSuccess)
{
printf("problem 1");
getchar();
}
dcb.BaudRate = CBR_9600 ; /* speed */
dcb.ByteSize =8 ;
dcb.Parity=NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fNull=FALSE;
dcb.fRtsControl=RTS_CONTROL_DISABLE;
dcb.fInX=FALSE;
dcb.fOutX=FALSE;
dcb.fDtrControl=DTR_CONTROL_DISABLE;
PortReady=SetCommState(handle,&dcb);
if(!SetCommState(handle,&dcb))
{
printf("problem 2");
getchar();
}
/*-----------------------------------------------------------*/
/* Les timeouts */
/*-----------------------------------------------------------*/
timeouts.ReadIntervalTimeout=500;
timeouts.ReadTotalTimeoutMultiplier=550;
timeouts.ReadTotalTimeoutConstant=550;
timeouts.WriteTotalTimeoutMultiplier=550;
timeouts.WriteTotalTimeoutConstant=550;
SetCommTimeouts(handle,&timeouts);
if(!SetCommTimeouts(handle,&timeouts))
{
printf("Problem for timeouts (erreur %d)\n", GetLastError());
return 0;
}
/*-----------------------------------------------------------*/
/* reception de donnees */
/*-----------------------------------------------------------*/
tosend1=17;
tosend2=0;
/* je dois lui envoyer une serie de byte pour lui dire de m'envoyer les !)% BYTE qui m'enteressent */
WriteFile(handle,&EnterRemoteModeNow,1,&nbecrit,NULL);
WriteFile(handle,&tosend1,1,&nbecrit,NULL);
WriteFile(handle,&tosend2,1,&nbecrit,NULL);
/*Receive Data from the spectrum analyser*/
ReadFile(handle,&buf2,1998,&nblu,NULL);
/*Write to the screen*/
WriteFile(hStdout,buf2,1998,&nbecrit,NULL);
/* save in TEXT.txt what the spectrum analyser has sent*/
WriteFile(handle_FILE_TEXT,buf2,1998,&nbecrit,NULL);
WriteFile(handle,&ExitRemoteMode,1,&nbecrit,NULL);
CloseHandle(handle_FILE_TEXT);
CloseHandle(handle);
CloseHandle(hStdout);
getchar();
return(fSuccess);
}
//---------------------------------------------------------------------------
et voila ce que je recois:
оノテ ・ ォ?
ヤ '・・・・・ ー #( ー#x~ ー#x~ ーGG・ ーGG・ ーk ーk ー朱 ー朱 ーイミ^ ー #( ー#x~ ー#x~ ーGG・ ーGG・ ーk ーk ー朱 ー朱 ーイミ^ ー u0 ・ c 2ネNone ー ゥ* 0 鰆 ・ ・ 赳 茴 鵈 諤 ・ ロフ 綛 豢 ・ 璧 牴 纔 絮 褸 ・ ・ ヨ, ・ ル ラャ ユ@ ・ 赶 罟 弴 籤 ン ゚タ 磑 ルク 籵 笨 ヤワ ゙P マワ 謖 跖 ユ| ・ ヨ レ ・ ロ リt ・ ユ 雕 ゚ ミ ヨx ヘ0 ・ ホシ ゙ ゙ 犇 レエ ・ レ< ハエ モ4 ラャ ミ` ゙4 リ ホX ワミ ワミ 濾 ・ ユ@ ワL ゙ー ラミ ・ ミp ヘ レネ ロ< ン モ、 ン レト ユ` ゚ ユー ン, ン ラ ヨ< ユ ミ8 レt ラ, メ ン ヘタ ヒ リャ ミ ロ ヨh ルp 菎 ン メ$ 犇 レ ン` レ、 ノト ンp 饅 リt ワ ユエ ユL モ モ ワ ラX ハ ムl ユ ロ( ルX モ 罧 ユ@ ゚( ゙ ヨp レ, ヨャ マ ロL マ< ロp レL ワ` レ ホD 猜 ラ ヒク ミヤ ルヤ ゙ヤ ゙ ヨ$ タ 网 ヨ ホ( ン ヤd ワ\ ロ ゚ ル ミフ ナ モ@ ミ マ| レd ロ< ロ ユタ 猜 フp レ ンネ ミ ホ ム ヌ リ ・ ムx モ ヘャ ゙ リ ナト ヨ レp ユ マ@ マl サp ハ ヤリ レP ム ロタ ラ@ ヨH ヒ ヤ` ヤL ム` ラ レ` ヘ8 ゚ マ< ラ ヨ\ ワ4 ・ フt ラx メィ ハ ル| ム ムャ モ ワ ヤP ニシ フエ ロ ラ, ロ$ ヤク フ ラP リ ヒ トー レ8 レ リt ンリ リ ハ リ ハ4 レ ゚ ヨl ワ\ ホ ・ ハ ユク ラ マ< ラ、 レシ ミ ヤ タh ノ ヘx ミL メ ・ モl ヌt リク ヒx ミ ルh リヤ ムィ ミp 瀾 螟 ム ヨ マP ム0 ラ リィ モH ンT ラ ヤH ムャ ル ユ\ ネ ン\ リ ヤ 罧 レ、 メp リク ユミ リ` ・ フワ メ ミリ メh ラ0 ユシ 蚪 マL メ ミ ・ レ ム ・ ヤ ユ レH マ< マ ヨ( ム ミ、 ツ 皃 ヤd 篶 ネ、 ホX ゚ ンワ マX ヤ ゙ク 畊 ヨト ルl ハd リ ゚D フh ミx リ ムエ ミ ムィ ム ヨク ルX ゙8 ノL ム レ レ レ マ ヨL ホp ラ8 ユt ヤ リフ ル ラィ モ ゙ ヨ ン\ ミ ミフ ナ ゚ ン ロ ヨ ワx ロト モト リ ユ ヒフ 酳 ムエ ミ ム0 ナh ヒ ムエ ヒ、 ユ@ トT ヨ< ムX ラ ルエ ン< メ レ モ0