Direct IO 函数
在线手册:中文  英文

dio_tcsetattr

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

dio_tcsetattr Sets terminal attributes and baud rate for a serial port

说明

bool dio_tcsetattr ( resource $fd , array $options )

dio_tcsetattr() sets the terminal attributes and baud rate of the open fd.

参数

fd

The file descriptor returned by dio_open().

options

The currently available options are:

  • 'baud' - baud rate of the port - can be 38400,19200,9600,4800,2400,1800, 1200,600,300,200,150,134,110,75 or 50, default value is 9600.

  • 'bits' - data bits - can be 8,7,6 or 5. Default value is 8.

  • 'stop' - stop bits - can be 1 or 2. Default value is 1.

  • 'parity' - can be 0,1 or 2. Default value is 0.

返回值

没有返回值。

范例

Example #1 Setting the baud rate on a serial port

<?php

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

dio_fcntl($fdF_SETFLO_SYNC);

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

while (
1) {

  
$data dio_read($fd256);

  if (
$data) {
      echo 
$data;
  }


?>

注释

Note: 此函数未在 Windows 平台下实现。


Direct IO 函数
在线手册:中文  英文

用户评论:

daniel widyanto (kunilkuda at gmail dot com) (2005-06-30 18:34:31)

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($fd1);
        }
        echo 
$result;
?>

Refer to :
- Serial Programming Guide for POSIX Operating Systems, http://www.easysw.com/~mike/serial/
- stty man pages

fherrero at noticiasdenavarra dot com (2005-04-01 16:30:29)

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($fd256);

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

?>

healer at colorado dot edu (2003-07-19 15:37:49)

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...

易百教程