File source

<?php
include "Port.php";
include 
"NetPort.php";
include 
"Img.php";
include 
"Screen.php";
include 
"ScreenManager.php";
include 
"Weather.php";
include 
"HomeScreen.php";
include 
"WeatherMetar.php";
include 
'TestScreen.php';
include 
'WeatherSource.php';
include 
'Shmu.php';
include 
"CalendarSource.php";
include 
"GarageSource.php";
include 
"Garage.php";
include 
"db.php";

//$com = new NetPort("10.0.0.2", 1234);
$com = new NetPort("192.168.88.1"1234);
$com->open();

declare(
ticks 1);
function 
sig_handler($signo)
{
  global 
$com;
  switch (
$signo) {
    case 
SIGTERM:
      
// handle shutdown tasks
      
$com->close();
      exit;
    break;
    case 
SIGHUP:
      
// handle 
    
break;
    default:
      
// handle all other signals
  
}
}

// setup signal handlers
if(function_exists("pcntl_signal")){
  
pcntl_signal(SIGTERM"sig_handler");
  
pcntl_signal(SIGHUP,  "sig_handler");
}else{
  echo 
"Signal handlers not registered! \n";
}

/* init screens */
$weather = new Shmu("TN");
$calendar = new CalendarSource();
$gs = new GarageSource();

$w = new WeatherScreen($weather);
$t = new TestScreen();
$home =  new HomeScreen($weather$calendar$gs);
$garage = new GarageScreen($gs);

/* init screen manager, register screens */
$sm = new ScreenManager($com);
$sm->register($w);
$sm->register($t);
$sm->register($home);
$sm->register($garage);
$sm->activate("home");

/* Sisyphus loop */
while(true){
  
$sm->work();
}

$com->close();


/** reads from file/stream, non-blocking
 * returns false on error
 */
function non_block_read($fd, &$data) {
    
$read = array($fd);
    
$write = array();
    
$except = array();
    
$result stream_select($read$write$except0);
    if(
$result === false) throw new Exception('stream_select failed');
    if(
$result === 0) return false;
    
$data stream_get_line($fd1);
    return 
true;
}