Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    2

    malfunzionamento codice c lettura da seriale

    Salve a tutti,ho scritto un programmi in linguaggio c, per comunicare con un dispositivo collegato tramite seriale, il problema è che non capisco perchè, ma la funzione fcntl(fd,F_SETFL,O_NDELAY) , non mi restituisce mai niente, anche se sulla seriale c'è attaccato un dispositivo che invia dati alla porta e di questo ne sono sicuro.
    Non è che forse la funzione fcntl(fd,F_SETFL,O_NDELAY) non è adatta a leggere?
    Comunque il S.O. è Xubuntu.

    Qui vi posto il codice che ho scritto:

    codice:
    #include<stdio.h>
    #include<string.h>
    #include<unistd.h>
    #include<fcntl.h>
    #include<errno.h>
    #include<termios.h>
    #include<iostream>
    using namespace std;
    int main(){
        int fd, scelta,num,result;
        fd=open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
        
        cout<<"fd "<<fd<<"\n";
        if(fd==-1){
            perror("open_port:Unable to open /devttySO -");
        }
    
        //setto la seriale:
        struct termios options;
        
        tcgetattr(fd , &options);
        cfsetispeed(&options , B19200);
        cfsetospeed(&options , B19200);
        options.c_cflag |= (CLOCAL| CREAD);
        
        
        //SETTO 8N1
        options.c_cflag &= ~PARENB;
        options.c_cflag &= ~CSTOPB;
        options.c_cflag &= ~CSIZE;
        options.c_cflag |= CS8;
        
        //setto il modo di far vedere l'input
        options.c_lflag |= (ICANON | ECHO | ECHOE );
        //setting input parity options
        options.c_iflag |=(INPCK|ISTRIP);
        //setto il modo XON-XOFF
        options.c_iflag |=(IXON| IXOFF|IXANY);
        
        tcsetattr(fd,TCSANOW,&options);
        
        do{
            num=0;
            do{
                result=fcntl(fd,F_SETFL,O_NDELAY);
                if(result!=0){
                    cout<<result;
                }
                num++;
            }while(num!=40000000);
            cout<<"\nDammi la scelta!:";
            cin>>scelta;
        }while(scelta!=0);
        
        close (fd);
        return 0;
    }
    Grazie a tutti!!!

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    2
    Grazie mille!!! Proverò da subito a studiarlo per bene.....
    Poi vorrei porre un'altra domanda dato che ci sono.....
    siccome questo programma, voglio che venga eseguito durante la fase di login dell'utente e l'esito del programma pregiudica l'accesso dell'utente nel sistema operativo, sai mica dove posso trovare informazioni su come far eseguire questo programma durante il login e come poter pregiudicare l'accesso in funzione dei dati inseriti dall'utente e dall'esito del programma?

    Veramente Grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.