|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jun 2006
Messaggi: 13
|
[c linux] inviare e ricevere dati esadecimali da seriale
sto scrivendo un programma che deve inviare e ricevere dati in esadecimale su seriale
definisco due buffer come variabili globali Codice:
//fd della seriale extern int fd; /*buffer della seriale*/ extern char buffer_ingresso[10]; /*ingresso*/ extern char buffer_uscita[10]; /*uscita*/ setto i parametri della seriale Codice:
/*apro la seriale*/
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK); //non bloccante comunicazione asincrona
if (fd==0)
{
fprintf(spy_knx_err, "problemi nell'apertura della seriale\n\r");
exit(-1);
}
//installo il signal hander che scattera' quando ci sono dati sulla seriale
saio.sa_handler = signal_handler_IO; //nome della funzione che gestira' il segnale
//saio.sa_mask = 0; //maschera degli altri segnali 0 default
sigemptyset(&saio.sa_mask);
saio.sa_flags = 0;
saio.sa_restorer = NULL;
sigaction(SIGIO,&saio,NULL);
fcntl(fd, F_SETOWN, getpid()); //registro il pid del processo che si deve occupare del segnale (questo)
fcntl(fd, F_SETFL, FASYNC); //abilito il segnale
//setto la seriale
tcgetattr(fd,&newtio); //salvo le vecchie impostazioni della seriale
//setto le nuove impostazioni
cfsetispeed(&newtio, BAUDRATE); //NUOVA FUNZIONE PER SETTARE LA VELOCITA' POSSO SCEGLIERE INGRESSO E USCITA, NON PIU' IN C_CFLAG
cfsetospeed(&newtio, BAUDRATE);
newtio.c_cflag |= (CLOCAL | CREAD);
newtio.c_cflag |= PARENB;
newtio.c_cflag &= ~PARODD;
newtio.c_cflag &= ~CSTOPB;
newtio.c_cflag &= ~CSIZE;
newtio.c_cflag |= CS8;
//newtio.c_cflag &= ~CNEW_RTSCTS;
newtio.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
newtio.c_iflag |= (INPCK | ISTRIP);
newtio.c_iflag &= ~(IXON | IXOFF | IXANY);
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio); //applico le impostazioni subito
}
Codice:
buffer_uscita[0]=(char)8; buffer_uscita[1]=(char)sc; buffer_uscita[2]=(char)0xB1; buffer_uscita[3]=(char)address.int_stat_sist_sup; buffer_uscita[4]=(char)address.int_stat_sist_inf; buffer_uscita[5]=(char)0; buffer_uscita[6]=(char)stato_polling; buffer_uscita[7]=(char)(0xA5+buffer_uscita[0]+buffer_uscita[1]+buffer_uscita[2]+buffer_uscita[3]+buffer_uscita[4]+buffer_uscita[5]+buffer_uscita[6])%256; write(fd, buffer_uscita, 8); tcdrain(fd); 80 00 02 0A 06 00 04 0A F8 in lettura ho ho lo stesso problema, leggo valori diversi, tipo invio FF e ottengo 127 dove sbaglio? grazie Ultima modifica di sandro76 : 09-11-2009 alle 11:24. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:22.


















