2009-08-14 5 views
1

J'essaie de programmer une communication série à l'aide de la liaison matérielle dans Linux en utilisant C/C++. Les signaux qui implémentent le handshake sont CTS (Clear to send) et RTS (Request to send). À l'heure actuelle ma fonction de réglage du signal CTS se présente comme suit:Programmation série (établissement de liaison matérielle)

int setCTS(int fd, int value) { 
    int status; 
    ioctl(fd, TIOCMGET, &status); // get the current port status 
    if (value) 
     status |= TIOCM_CTS; // rise the CTS bit 
    else 
     status &= ~TIOCM_CTS; // drop the CTS bit 
    ioctl(fd, TIOCMSET, $status); // set the modified status 
    return 0; 
} 

fd est le descripteur de fichier pour le port et valeur est la valeur à régler pour le signal. Pour coder cette fonction, je me base sur http://www.easysw.com/~mike/serial/serial.html#5_1.

Le problème est que gcc ne reconnaît aucune des constantes utilisées dans l'exemple. Aucune suggestion?

- Mise à jour -

J'ai trouvé une réponse. En regardant un autre exemple, sys/ioctl.h déclare les constantes.

+0

Je trouve grep utile pour répondre à ce genre de questions - il suffit de rechercher tous les fichiers dans le chemin d'inclusion. –

Répondre

3

Ceci peut ne pas être applicable à votre application particulière, mais j'ai pensé que je l'afficherais ici au cas où cela vous aiderait ou aiderait quelqu'un d'autre.

Sur la plupart des systèmes avec termios, vous pouvez définir le drapeau CRTSCTS dans le membre ->c_cflags de la structure termios que vous passez à tcsetattr, et ont le noyau ou le matériel ne le RTS/CTS contrôle de flux pour vous.

(Ce n'est pas POSIX, mais c'est sur les systèmes dérivés de BSD et de SystemV donc c'est presque partout - y compris Linux).

+0

Je seconde ceci. Vous voulez vraiment laisser la ligne-discipline gérer la limitation de CTS/RTS de haut en bas pour votre application. – codeDr