File source

<?php
/** Windows serial port wrapper 
* open() - opens port
* write() - writes string to port
* read($len) - reads $len-long string from port
* flush() - flushes buffer
* close() - closes port
* setTimeout($t) - sets timeout to $t miliseconds
**/
class Port{
  protected $port;
  protected $fd = false;
  function __construct($port){
    $this->port = $port;
  }

  function open(){
    exec("mode ".$this->port." baud=57600 stop=1 parity=n xon=off idsr=on data=8");
    $this->close();
    $this->fd = fopen($this->port, "r+b");
  }

  function write($str, $flush=true){
    $w = fwrite($this->fd,$str);
    if(!$w){
      throw new Exception("Error writing to port", 1);
    }
    if($flush){
      $this->flush();
    }
    return $w;
  }

  function read($len){
    if(feof($this->fd)){
      throw new Exception("Error reading from port (EOF)", 1);
    }
    $r = fread($this->fd, $len);
    return $r;
  }

  function flush(){
    fflush($this->fd);
  }

  function close(){
    if($this->fd){
      fclose($this->fd);
    }
    $this->fd = false;
  }

  function __destruct(){
    $this->close();
  }

  function setTimeout($t){
    $sec = floor($t/1000);
    $usec = ($t - $sec*1000)*1000;
  //  socket_set_timeout($this->fd,$sec,$usec);
  }
}