bonjour tout le monde,
j aurai besoin d aide pour le projet que je suis entrain de programmer.
je souhaite ouvrir un port serie sous visual studio C++, je me suis inspirer des codes presents sur d autre parties du site mais ca ne marche pas... en fait les dialogues box indique que tout fonctionne correctement mais en fait ca serai plus comme si rien n 'etait envoyer sur le port... Quelqu'un a une idee?
merci d avance
void CVersusDlg::OnInitPort()
{
// TODO: Add your control notification handler code here
BOOL fSuccess;
//DWORD nb;
int virgule = 0, cpt = 0;
/* Ouverture du fichier du port de communication */
hCom = CreateFile ( "COM1",
GENERIC_READ | GENERIC_WRITE,
0, // comm devices must be opened w/exclusive-access
NULL, // no security attributes
OPEN_EXISTING, // comm devices must use OPEN_EXISTING
0, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
/* Erreur si problèmes d'ouverture du com */
if ( hCom == INVALID_HANDLE_VALUE )
{
MessageBox("Error While Openning","Erreur",MB_OK);
}
/* Taille des buffers */
fSuccess = SetupComm ( hCom, INPUT_BUFFER, OUTPUT_BUFFER );
if ( !fSuccess )
{
MessageBox("Error While init of buffers","Erreur",MB_OK);
}
/* Allocation de mémoire pour le dcb et initialisation à 0 */
FillMemory ( &dcb, sizeof ( dcb), 0 );
dcb.DCBlength = sizeof ( dcb );
/* Test de l'état du port com */
fSuccess = GetCommState ( hCom, &dcb );
if ( !fSuccess )
{
MessageBox("Unabble to receive informaions of the port","Erreur",MB_OK);
}
/* Paramètres de configuration du port de communication */
dcb.BaudRate = CBR_4800; // Vitesse de transmission
dcb.ByteSize = 7; // Taille des données reçues et transmises
dcb.Parity = EVENPARITY; // Bit de parité
dcb.StopBits = TWOSTOPBITS; // Bit de stop
/* Configuration du port de communication */
fSuccess = SetCommState( hCom, &dcb );
if ( !fSuccess )
{
MessageBox("Unabble to Init the serial port","Erreur",MB_OK);
}
/* Configuration des temps de réponse du port com */
m_commtimeouts.ReadIntervalTimeout = 100;
m_commtimeouts.ReadTotalTimeoutMultiplier = 100;
m_commtimeouts.ReadTotalTimeoutConstant = 3000;
m_commtimeouts.WriteTotalTimeoutMultiplier = 100;
m_commtimeouts.WriteTotalTimeoutConstant = 500;
/* Mise en sevice des temps */
SetCommTimeouts ( hCom, &m_commtimeouts );
MessageBox("connexion",MB_OK);
}
CVersusDlg::~CVersusDlg()
{
CloseHandle ( hCom );
}
void CVersusDlg::OnInitClock()
{
// TODO: Add your control notification handler code here
DWORD nb;
int i=0;
trame = "<SET?>";
nb = trame.GetLength ();
char * bufferclock = (char *) malloc(sizeof(char)*(nb+2));
bufferclock[nb] = 0x0A;
bufferclock[nb+1] = 0x0d;
for(i=0;i<(long)nb;i++)
{
bufferclock[i]=trame[i];
}
WriteFile ( hCom, bufferclock, nb+2, &nb, NULL );
Sleep(1000);
trame = "<ID?>";
nb = trame.GetLength ();
bufferclock = (char *) malloc(sizeof(char)*(nb+2));
bufferclock[nb] = 0x0A;
bufferclock[nb+1] = 0x0d;
for(i=0;i<(long)nb;i++)
{
bufferclock[i]=trame[i];
}
WriteFile ( hCom, bufferclock, nb+2, &nb, NULL );
Sleep(1000);
/nb = 42;
ReadFile ( hCom, bufferclock, nb, &nb, NULL );
for(i=0;i<(int)nb;i++)
{
m_edit_clock += bufferclock[i];
}
UpdateData(TRUE);
//UpdateData(FALSE);
free(bufferclock);
MessageBox("clock set",MB_OK);
}