integrato ;)
Libreria di comunicazione per la porta seriale
SerialCOM.c/SerialCOM.h

 
Dettagli:
 
Quattro funzioni molto comode per lo scambio di informazioni con dispositivi collegati attraverso la porta seriale. Apertura, chiusura invio e ricezione di dati utilizzando le api di sistema (Win32) CreateFile(),ReadFile(), WriteFile() e CloseHandle(). Le impostazioni sulla comunicazione come il baudrate, i bit di stop, la parità i contorlli di handshaking e gli altri parametri specifici devono essere modificati a seconda del proprio protocollo di comunicazione modificando i campi della strauttura DCB.
La documentazione completa di questa struttura è reperibile all'indirizzo:

 
Codice:
 
Inizializzazione porta:
  1. HANDLE initSerialPort (const char* COMx,unsigned int msTimeout)
  2. {
  3. // Gestore della connessione seriale
  4. HANDLE serialPort;
  5.  
  6. // Gestore dei Timeout
  7. COMMTIMEOUTS cto;
  8.  
  9. // Settaggi per la comunicazione seriale
  10. DCB dcb;
  11. memset(&dcb,0,sizeof(dcb));
  12.  
  13. // Imposto i valori per i Timeout
  14. cto.ReadIntervalTimeout = msTimeout;
  15. cto.ReadTotalTimeoutMultiplier = msTimeout;
  16. cto.ReadTotalTimeoutConstant = msTimeout;
  17. cto.WriteTotalTimeoutMultiplier = msTimeout;
  18. cto.WriteTotalTimeoutConstant = msTimeout;
  19.  
  20. // Inizializzo la porta seriale
  21. serialPort = CreateFile (COMx,
  22. GENERIC_READ | GENERIC_WRITE,
  23. 0,
  24. 0,
  25. OPEN_EXISTING,
  26. 0,
  27. 0);
  28.  
  29. // Imposto le proprietà della connessione
  30. if (serialPort == INVALID_HANDLE_VALUE)
  31. return INVALID_HANDLE_VALUE;
  32.  
  33. // Imposto il Timeout
  34. SetCommTimeouts(serialPort, &cto);
  35.  
  36. // Imposto i parametri per la comunicazione
  37. dcb.DCBlength = sizeof(dcb);
  38. dcb.BaudRate = CBR_19200;
  39. dcb.Parity = NOPARITY;
  40. dcb.ByteSize = 8;
  41. dcb.StopBits = ONESTOPBIT;
  42. dcb.fBinary = 1;
  43. dcb.fDtrControl = DTR_CONTROL_ENABLE;
  44. dcb.fRtsControl = RTS_CONTROL_ENABLE;
  45. dcb.fAbortOnError = TRUE;
  46. dcb.fOutX = FALSE;
  47. dcb.fInX = FALSE;
  48. dcb.fOutxCtsFlow = TRUE;
  49. dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
  50. dcb.fOutxDsrFlow = FALSE;
  51. dcb.fDtrControl = DTR_CONTROL_ENABLE;
  52.  
  53. if (!SetCommState (serialPort, &dcb))
  54. serialPort = INVALID_HANDLE_VALUE;
  55.  
  56. return serialPort;
  57. }
Scrittura e lettura:
  1. BOOL writeToSerialPort(HANDLE serialPort,BYTE *toWrite,DWORD byteLength)
  2. {
  3. DWORD written;
  4. if (!WriteFile(serialPort,toWrite,byteLength,&written,NULL))
  5. return FALSE;
  6.  
  7. if (byteLength != written)
  8. return FALSE; // Non sono stati scritti tutti i bytes
  9.  
  10. return TRUE;
  11. }
  12.  
  13. BOOL readFromSerialPort(HANDLE serialPort,BYTE *toRead,DWORD byteLength)
  14. {
  15. DWORD readed;
  16. if (!ReadFile(serialPort,toRead,byteLength,&readed,NULL))
  17. return FALSE;
  18.  
  19. if (byteLength != readed)
  20. return FALSE; // Non sono stati letti tutti i bytes
  21.  
  22. return TRUE;
  23. }
Attenzione, nella funzione di lettura non viene fatto nessun controllo sulla dimensione massima del buffer in ricezione prima di scriverci sopra!
Chiusura porta:
  1. void closeSerialPort(HANDLE serialPort)
  2. {
  3. CloseHandle(serialPort);
  4. }

 
Esempio di utilizzo:
 
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. #include "serialCOM.h" // Libreria serialCOM
  5.  
  6. int main()
  7. {
  8. HANDLE port;
  9. BYTE buffer[2];
  10. DWORD lng;
  11.  
  12. // Apro la connessione sulla COM1 con timeout mezzo secondo
  13. port = initSerialPort ("COM1",500);
  14.  
  15. if (port == INVALID_HANDLE_VALUE)
  16. {
  17. printf("Errore apertura connessione\n");
  18. return 1;
  19. }
  20.  
  21. // Riempo il buffer da scrivere:
  22. buffer[0] = 'A';
  23. buffer[1] = 'B';
  24. lng = 2;
  25.  
  26. if (!writeToSerialPort(port,buffer,lng))
  27. printf("Errore scrittura\n");
  28.  
  29. // Imposto la dimensione del buffer dei dati da leggere
  30. lng = 3;
  31. if (!readFromSerialPort(port,buffer,lng))
  32. printf("Errore lettura\n");
  33. else
  34. printf("Dati: %d %d %d\n",buffer[0],buffer[1],buffer[2]);
  35.  
  36. // Chiudo la connessione
  37. closeSerialPort(port);
  38. return 0;
  39. }

 
Download:
 
Downloads: 305
Downloads: 283
Downloads: 222

Script Execution Time: 0.111946 seconds - Visite: 643473
Copyright © 2007-2017 Suondmao v0.1.5-1