PHP 5.4.31 Released

dio_tcsetattr

(PHP 4 >= 4.3.0, PHP 5 <= 5.0.5)

dio_tcsetattr Modifie les attributs du terminal et le taux de baud du port série

Description

bool dio_tcsetattr ( resource $fd , array $options )

dio_tcsetattr() modifie les attributs du terminal et le taux de baud du port série de ressource.

Liste de paramètres

fd

La ressource de fichier retournée par dio_open().

options

Les options actuellement disponibles sont :

  • 'baud' : taux de baud du port : peut être 38400,19200,9600,4800, 2400,1800,1200,600,300,200,150,134,110,75 ou 50. Par défaut, c'est 9600.

  • 'bits' : bits de données : peut être 8,7,6 ou 5. Par défaut, c'est 8.

  • 'stop' : bits de stop : peut être 1 ou 2. Par défaut, c'est 1.

  • 'parity' : peut être 0, 1 ou 2. Par défaut, c'est 0.

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Définition du débit des bauds sur un port série

<?php

$fd 
dio_open('/dev/ttyS0'O_RDWR O_NOCTTY O_NONBLOCK);

dio_fcntl($fd,F_SETFLO_SYNC );

dio_tcsetattr($fd, array(
  
'baud' => 9600,
  
'bits' => 8,
  
'stop'  =>1,
  
'parity' => 0
));

while (
1) {

  
$data dio_read($fd,256);

  if (
$data) {
      echo 
$data;
  }
}

?>

Notes

Note: Cette fonction n'est pas implémentée sous Windows.

add a note add a note

User Contributed Notes 3 notes

up
1
fherrero at noticiasdenavarra dot com
9 years ago
For Windows the Example 1 looks same this one:

<?php

exec
('mode com1: baud=9600 data=8 stop=1 parity=n xon=on');
// execute 'help mode' in command line of Windows for help

$fd = dio_open('com1:', O_RDWR);

while (
1) {

 
$data = dio_read($fd, 256);

  if (
$data) {
     echo
$data;
  }
}

?>
up
0
daniel widyanto (kunilkuda at gmail dot com)
9 years ago
I'm using PHP to interface my AVR microcontroller in /dev/ttyS0. I bet someone else does the same.

Here's some hint :
- dio_tcsetattr -> is set to enable :
            - RTS / CTS hardware control
            - ICANON mode
              (means that dio_read will wait until 0x0A/LF or other control character is entered in /dev/ttyS0 before it returns reading result, when you use dio_write it will also send 0x0A/LF automatically in the end of the message to your device).

For those who dont need RTS/CTS and/or ICANON, you can use linux command : stty.

Here's mine :

<?php
        exec
('stty -F /dev/ttyS0 4800 raw');

       
$fd=dio_open('/dev/ttyS0',O_RDWR | O_NOCTTY | O_NDELAY);
       
dio_fcntl($fd,F_SETFL,0);

       
dio_write($fd,"\x41",1);  // write 0x41 or 'A' to /dev/ttyS0
       
        // Replace result_length with your expected command result length
       
for ($i=0;$i < result_length;$i++) {
              
$result .=dio_read($fd, 1);
        }
        echo
$result;
?>

Refer to :
- Serial Programming Guide for POSIX Operating Systems, http://www.easysw.com/~mike/serial/
- stty man pages
up
0
healer at colorado dot edu
11 years ago
It was frustrating at first because I was trying to get my Linux box to talk to an external serial device (a PIC18F452 programmable chip) and the example provided here refers to fcntl() and open() parameters that aren't in the PHP documentation.

I finally found out what does what through the man pages:

man open
man fcntl

still haven't gotten it to work, or how to reset the ttySx, but thought it may help someone...
To Top