diff --git a/lib/chip/source/state.php b/lib/chip/source/state.php new file mode 100755 index 0000000..a94556a --- /dev/null +++ b/lib/chip/source/state.php @@ -0,0 +1,101 @@ +#!/usr/bin/php + +eof() ){ + + // {1} Try to parse current line // + $parsed = json_decode($f_chips->fgets(), true); + + // {2} If cannot parse, go to next // + if( is_null($parsed) ) + continue; + + // {3} Check if choosen pin // + if( $parsed[0] == $p_id_chip ){ + + // store pin list + $g_pins = $parsed[1]; + + /* (3) Check if choosen state */ + foreach($parsed[2] as $state=>$pinValues){ + + if( "$state" === "$p_state" ){ + + // store state values + $g_state = $pinValues; + break; + } + + } + + break; + } + } + + /* (3) If chip not found -> abort */ + if( is_null($g_pins) || is_null($g_state) ) + return 127; + + + + /* [2] Set chip to choosen state + =========================================================*/ + /* (1) Activate pin + set OUT mode */ + foreach($g_pins as $pinNumber) + // if failed -> propagate error + if( syscall(SOURCE_DIR."/gpio/out {$pinNumber}") == false ) + return 127; + + /* (2) For each pin, set the associated value */ + foreach($g_state as $pinIndex=>$pinValue){ + + // {1} set value to LOW if 0 // + if( $pinValue == 0 ) + if( syscall(SOURCE_DIR."/gpio/low ".$g_pins[$pinIndex]) == false ) + return 127; + + // {2} set value to HIGH if not 0 // + else + if( syscall(SOURCE_DIR."/gpio/high ".$g_pins[$pinIndex]) == false ) + return 127; + + } + + + return 0; + + } + + + /* [1] Check argument (chip position, chip state) + =========================================================*/ + if( $argc < 3 || !preg_match('@^\d+$@', $argv[1]) || !preg_match('@^[A-Za-z0-9]{1}$@', $argv[2]) ){ + echo 127; + die(127); + } + + /* [2] Launch main script + =========================================================*/ + $exec = chip_state($argv[1], $argv[2]); + + echo $exec; + die($exec); +?> + diff --git a/lib/chip/state b/lib/chip/state new file mode 100755 index 0000000..7457f40 --- /dev/null +++ b/lib/chip/state @@ -0,0 +1,3 @@ +#!/bin/sh + +/usr/bin/env php $(realpath $(dirname $0))/source/state.php $*;