Commit 8861af0a authored by Andrey Filippov's avatar Andrey Filippov

debugging for 10359 multiplexer

parent 1728e6c0
......@@ -9,7 +9,8 @@ CONFS= autocampars.xml
SYSCONFDIR = /etc
CONFDIR = $(SYSCONFDIR)/elphel393
PHP_SCRIPTS=camvars.php \
PHP_SCRIPTS=i2c.php \
camvars.php \
ccam.php \
diag_utils.php \
framepars.php \
......
......@@ -450,14 +450,32 @@ CAPTION;
elphel_set_P_value ( $sensor_port, ELPHEL_VIGNET_C, 0x8000, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC );
elphel_set_P_value ( $sensor_port, ELPHEL_VIGNET_SHL, 1, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC );
elphel_set_P_value ( $sensor_port, ELPHEL_SENSOR_RUN, 2, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC );
elphel_set_P_value ( $sensor_port, ELPHEL_COMPRESSOR_RUN, 2, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC ); // / run compressor
// elphel_set_P_value ( $sensor_port, ELPHEL_COMPRESSOR_RUN, 2, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC ); // / run compressor
elphel_set_P_value ( $sensor_port, ELPHEL_DCM_HOR, 1, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC ); // / run compressor
elphel_set_P_value ( $sensor_port, ELPHEL_DCM_VERT,1, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC ); // / run compressor
elphel_set_P_value ( $sensor_port, ELPHEL_BIN_HOR, 1, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC ); // / run compressor
elphel_set_P_value ( $sensor_port, ELPHEL_BIN_VERT, 1, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC ); // / run compressor
elphel_set_P_value ( $sensor_port, ELPHEL_DCM_HOR, 1, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC );
elphel_set_P_value ( $sensor_port, ELPHEL_DCM_VERT,1, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC );
elphel_set_P_value ( $sensor_port, ELPHEL_BIN_HOR, 1, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC );
elphel_set_P_value ( $sensor_port, ELPHEL_BIN_VERT, 1, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC );
// elphel_set_P_value ( $sensor_port, ELPHEL_COMPRESSOR_RUN, 2, $frame + 5, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC ); // / run compressor
// elphel_set_P_value ( $sensor_port, ELPHEL_COMPRESSOR_RUN, 2, $frame + 8, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC ); // / run compressor
elphel_set_P_value ( $sensor_port, ELPHEL_COMPRESSOR_RUN, 2, $frame + 9, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC ); // / run compressor
// elphel_set_P_value ( $sensor_port, ELPHEL_COMPRESSOR_RUN, 2, $frame + 13, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC ); // / run compressor
// Turn external trigger at 4fps
/*
elphel_set_P_value ( $sensor_port, ELPHEL_TRIG_PERIOD, 25000000, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC ); //0.25 s
elphel_set_P_value ( $sensor_port, ELPHEL_TRIG_BITLENGTH, 31, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC ); //0.32 usec
elphel_set_P_value ( $sensor_port, ELPHEL_TRIG_DELAY, 0, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC ); // no delay
elphel_set_P_value ( $sensor_port, ELPHEL_EXTERN_TIMESTAMP, 1, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC ); // use external timestamp when available
elphel_set_P_value ( $sensor_port, ELPHEL_XMIT_TIMESTAMP, 1, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC ); // transmit timestamps, not just pulse
elphel_set_P_value ( $sensor_port, ELPHEL_TRIG_OUT, 0x65555, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC ); // 0x56555 - ext connector, 0x65555 - internal connector 0x66555 - both, 0x55555 - none
/// change to "internal" (0x8000) when wired
elphel_set_P_value ( $sensor_port, ELPHEL_TRIG_CONDITION, 0, $frame + 4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC ); // 0x0 - from FPGA, 0x80000 - ext, 0x8000 - int, 0x88000 - any, 0x95555 - add ext, 0x59999 - add int
// elphel_set_P_value ( $sensor_port, ELPHEL_TRIG, 0x4, $frame + 6, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC ); // 0 - free running, 4 - extrnal ERS, 5 - external GRR
*/
$xml->addChild ( 'frame_after' . strval ( $sensor_port ), elphel_get_frame($sensor_port));
fclose ( $framepars_file );
$gamma = 57;
$black = 10;
......
......@@ -70,255 +70,365 @@
*!
*/
// In NC393: buses 0..3 - sensors(old bus=0), 4 - aux (old bus=1)
// In NC393: buses 0..3 - sensors(old bus=0), 4 - aux (old bus=1), 5 - system i2c (TODO)
set_include_path(get_include_path() . PATH_SEPARATOR . '/www/pages/include');
require 'i2c_include.php';
$width=0;
$bus=0;
$adr=-1;
$data="";
$nopars=false;
$raw=0;
$wprot=-1;
$rprot=-1;
$rslt="";
$cmd="";
$width = 0;
$bus = 0;
$adr = - 1;
$class = "";
$sa7offs = 0;
$data = "";
$nopars = false;
$raw = 0;
$wprot = - 1;
$rprot = - 1;
$rslt = "";
$cmd = "";
//
$model="";
$rev="";
$brand="Elphel";
$serial="";
$time="";
$port="";
$part="";
$baud="";
$sync="";
$slowbus0=-1; // extra microseconds for SCL low and SCL high
$EEPROM_bus0=false;
$EEPROM_chn=0; /// 0 - 10359/single 10338D, 1..3 - 10338D attached to the 10359
$application='';
$applicationMode='';
$sensor='';
$temperatureSA=0x30;
$temperarureDelay=1.0; // extra microseconds for SCL low/high (nominal 4, but works with 1)
$msg="<?xml version=\"1.0\"?>\n<i2c>\n";
if (count($_GET) == 0 ) {
$nopars=true;
} else {
$pars=array();
foreach($_GET as $key=>$value) {
switch($key) {
case "slow":
case "slowbus0":
$slowbus0=$value+0;
break;
case "cmd":
switch($value) {
case "fromCMOS":
$rslt=i2c_getCMOSClock()?"Set system time error (probably CMOS clock is not set)":("System clock is set to ".exec("date"));
break;
case "toCMOS":
$rslt=i2c_setCMOSClock();
break;
case "fromEEPROM":
case "toEEPROM":
case "fromEEPROM0":
case "toEEPROM0":
case "ctl":
$cmd=$value;
break;
}
break;
case "EEPROM_chn":
$EEPROM_chn=$value;
break;
case "app":
case "application":
$application=$value;
break;
case "mode":
case "application_mode":
$application_mode=$value;
break;
case "sensor":
$sensor=$value;
break;
case "port":
$port=$value;
break;
case "part":
$part=$value;
break;
case "baud":
$baud=$value;
break;
case "sync":
$sync=$value;
break;
case "model":
$model=$value;
break;
case "rev":
$rev=$value;
break;
case "serial":
$serial=$value;
break;
case "time": // seconds from 1970
$time=$value+0;
break;
case "raw":
$adr=($value+0) & ~0x7f;
$raw=1;
$width=8;
break;
case "width":
$width=$value+0;
break;
case "bus":
$bus=$value+0;
break;
case "adr":
$adr=$value+0;
break;
case "wp":
if ($value==0) $wprot=0;
else if ($value==1) $wprot=1;
break;
case "rp":
if ($value==0) $rprot=0;
else if ($value==1) $rprot=1;
break;
case "data":
$data=$value;
break;
case "length":
$length=$value+0;
break;
}
}
}
$model = "";
$rev = "";
$brand = "Elphel";
$serial = "";
$time = "";
$port = "";
$part = "";
$baud = "";
$sync = "";
$slowbus0 = - 1; // extra microseconds for SCL low and SCL high
$EEPROM_bus0 = - 1;
$EEPROM_chn = 0; // / 0 - 10359/single 10338D, 1..3 - 10338D attached to the 10359
$application = '';
$applicationMode = '';
$sensor = '';
$temperatureSA = 0x30;
$temperarureDelay = 1.0; // extra microseconds for SCL low/high (nominal 4, but works with 1)
$msg = "<?xml version=\"1.0\"?>\n<i2c>\n";
if (count ( $_GET ) == 0) {
$nopars = true;
} else {
$pars = array ();
foreach ( $_GET as $key => $value ) {
switch ($key) {
case "slow" :
case "slowbus0" :
$slowbus0 = $value + 0;
break;
case "cmd" :
switch ($value) {
case "fromCMOS" :
// TODO: NC393: implement
// $rslt=i2c_getCMOSClock()?"Set system time error (probably CMOS clock is not set)":("System clock is set to ".exec("date"));
break;
case "toCMOS" :
$rslt = i2c_setCMOSClock ();
break;
case "fromEEPROM" :
case "toEEPROM" :
case "fromEEPROM0" :
case "toEEPROM0" :
case "fromEEPROM1" :
case "toEEPROM1" :
case "fromEEPROM2" :
case "toEEPROM2" :
case "fromEEPROM3" :
case "toEEPROM3" :
case "ctl" :
$cmd = $value;
break;
}
break;
case "EEPROM_chn" :
$EEPROM_chn = $value;
break;
case "app" :
case "application" :
$application = $value;
break;
case "mode" :
case "application_mode" :
$application_mode = $value;
break;
case "sensor" :
$sensor = $value;
break;
case "port" :
$port = $value;
break;
case "part" :
$part = $value;
break;
case "baud" :
$baud = $value;
break;
case "sync" :
$sync = $value;
break;
case "model" :
$model = $value;
break;
case "rev" :
$rev = $value;
break;
case "serial" :
$serial = $value;
break;
case "time" : // seconds from 1970
$time = $value + 0;
break;
case "raw" :
$adr = ($value + 0) & ~ 0x7f;
$raw = 1;
$width = 8;
break;
case "width" :
$width = $value + 0;
break;
case "bus" :
$bus = $value + 0;
break;
case "adr" :
$adr = $value + 0;
break;
case "wp" :
if ($value == 0)
$wprot = 0;
else if ($value == 1)
$wprot = 1;
break;
case "rp" :
if ($value == 0)
$rprot = 0;
else if ($value == 1)
$rprot = 1;
break;
case "data" :
$data = $value;
break;
case "length" :
$length = $value + 0;
break;
case "class" :
$class = $value;
break;
case "sa7offs" :
$sa7offs = $value + 0;
break;
}
}
}
switch($cmd) {
case "fromEEPROM0":
$EEPROM_bus0=true; // and fall below
case "fromEEPROM":
$rslt=i2c_read256b(0xa0+($EEPROM_chn*($EEPROM_bus0?4:2)), $EEPROM_bus0?0:1);
$zero=strpos($rslt,chr(0));
if ($zero!==false) $rslt=substr($rslt,0, $zero);
if (substr($rslt,0,5)=="<?xml") {
$xml=simplexml_load_string($rslt);
// $temperatureSA=0x30;
// $temperarureDelay=1.0; // extra microseconds for SCL low/high (nominal 4, but works with 1)
// try reading sensor temperature (if available)
if ($EEPROM_bus0) {
$bus=0;
$sa=$temperatureSA+($EEPROM_chn*($EEPROM_bus0?4:2));
$data=i2c_receive_slow(16,$bus,$sa*128+5,0,$temperarureDelay);
if ($data>=0) { // <0 - i2c error - not implemented
$data= (($data & 0x1000)?-1:1)*($data&0xfff)/16.0;
$xml->addChild ('sensorTemperature',$data);
i2c_send_slow(8,$bus,$sa*128+8,3,0,$temperarureDelay); // set slow conversion, 1/16C resolution - for the next time
}
}
$xml_string=$xml->asXML();
header("Content-Type: text/xml");
header("Content-Length: ".strlen($xml_string)."\n");
header("Pragma: no-cache\n");
printf($xml_string);
exit (0);
}
switch ($cmd) {
case "fromEEPROM0" :
case "fromEEPROM1" :
case "fromEEPROM2" :
case "fromEEPROM3" :
$EEPROM_bus0 = intval ( substr ( $cmd, 10 ) ); // and fall below
case "fromEEPROM" :
if (($EEPROM_bus0 < 0) || ($EEPROM_bus0 > 3)) {
// Not supported in NC393 - TODO: implement with bus=5 for 10389 board serial number
break;
}
if (($EEPROM_chn < 0) || ($EEPROM_chn > 4)) {
// Not supported in NC393
break;
}
// print(i2c_read256b_sensor('sensor_eeprom',3,0));
// $rslt=i2c_read256b(0xa0+($EEPROM_chn*($EEPROM_bus0?4:2)), $EEPROM_bus0?0:1);
$rslt = i2c_read256b ( 'sensor_eeprom', $EEPROM_bus0, 2 * $EEPROM_chn );
$zero = strpos ( $rslt, chr ( 0 ) );
if ($zero !== false)
$rslt = substr ( $rslt, 0, $zero );
if (substr ( $rslt, 0, 5 ) == "<?xml") {
$xml = simplexml_load_string ( $rslt );
// $temperatureSA=0x30;
// $temperarureDelay=1.0; // extra microseconds for SCL low/high (nominal 4, but works with 1)
// try reading sensor temperature (if available)
if ($EEPROM_bus0 >= 0) {
$data = i2c_receive_sensor ( 'sensor_temp', $EEPROM_bus0, 5, 2 * $EEPROM_chn );
$bus = 0;
// $sa=$temperatureSA+($EEPROM_chn*($EEPROM_bus0?4:2));
// $data=i2c_receive_slow(16,$bus,$sa*128+5,0,$temperarureDelay);
if (($data >= 0) && ($data!=0xffff)) { // <0 - i2c error - not implemented
$data = (($data & 0x1000) ? - 1 : 1) * ($data & 0xfff) / 16.0;
$xml->addChild ( 'sensorTemperature', $data );
// i2c_send_slow(8,$bus,$sa*128+8,3,0,$temperarureDelay); // set slow conversion, 1/16C resolution - for the next time
i2c_send_sensor ( 'sensor_temp', $EEPROM_bus0, 8, 3, 2 * $EEPROM_chn );
}
}
$xml_string = $xml->asXML ();
header ( "Content-Type: text/xml" );
header ( "Content-Length: " . strlen ( $xml_string ) . "\n" );
header ( "Pragma: no-cache\n" );
printf ( $xml_string );
exit ( 0 );
}
break;
case "toEEPROM0" :
case "toEEPROM1" :
case "toEEPROM2" :
case "toEEPROM3" :
$EEPROM_bus0 = intval ( substr ( $cmd, 8 ) ); // and fall below
case "toEEPROM" :
if (($EEPROM_bus0 < 0) || ($EEPROM_bus0 > 3)) {
// Not supported in NC393 - TODO: implement with bus=5 for 10389 board serial number
break;
}
if (($EEPROM_chn < 0) || ($EEPROM_chn > 4)) {
// Not supported in NC393
break;
}
if ($wprot >= 0) {
// not implemented in NC393?
// i2c_setprot ($EEPROM_bus0?0:1,0xa0+($EEPROM_chn*($EEPROM_bus0?4:2)),1,(1-$wprot));
}
if ($data == "") {
if ($model === "") {
$rslt = "model not specified";
break;
}
if ($rev === "") {
$rslt = "rev not specified";
break;
}
if ($serial === "") {
$rslt = "serial not specified";
break;
}
if ($time === "") {
$rslt = "time not specified";
break;
}
$xml = new SimpleXMLElement ( "<?xml version='1.0' standalone='yes'?><board/>" );
if ($brand != '')
$xml->addChild ( 'brand', $brand );
if ($model != '')
$xml->addChild ( 'model', $model );
if ($rev != '')
$xml->addChild ( 'rev', $rev );
if ($serial != '')
$xml->addChild ( 'serial', $serial );
if ($time != '')
$xml->addChild ( 'time', $time );
if ($application != "")
$xml->addChild ( 'app', $application );
if ($application_mode != "")
$xml->addChild ( 'mode', $application_mode );
if ($sensor != '')
$xml->addChild ( 'sensor', $sensor );
if ($length != '')
$xml->addChild ( 'len', $length );
if ($port != '')
$xml->addChild ( 'port', $port );
if ($part != '')
$xml->addChild ( 'part', $part );
if ($baud != '')
$xml->addChild ( 'baud', $baud );
if ($sync != '')
$xml->addChild ( 'sync', $sync );
$data = $xml->asXML ();
}
if (strlen ( $data ) > 256) {
$rslt = "data too long - " . strlen ( $data ) . " bytes, only 256 are permitted";
break;
}
// $rslt="written ".i2c_write256b($data,0xa0+($EEPROM_chn*($EEPROM_bus0?4:2)),$EEPROM_bus0?0:1);
$rslt = "written " . i2c_write256b_sensor ( $data, 'sensor_eeprom', $EEPROM_bus0, 2 * $EEPROM_chn );
// i2c_setprot ($EEPROM_bus0?0:1,0xa0+($EEPROM_chn*($EEPROM_bus0?4:2)),1,0);
break;
case "ctl" :
if ($bus === "") {
$rslt = "i2c bus number is not specified";
break;
}
$rslt = i2c_ctl ( $bus, $data )->asXML ();
header ( "Content-Type: text/xml" );
header ( "Content-Length: " . strlen ( $rslt ) . "\n" );
header ( "Pragma: no-cache\n" );
printf ( $rslt );
exit ( 0 );
}
if ($rslt == "") {
if ($bus > 3) {
if (($adr >= 0) && (($width == 8) || ($width == 16))) {
$slave = ($adr >> (($width == 16) ? 8 : 7)) & 0xfe;
if ($wprot >= 0) {
// i2c_setprot ($bus,$slave,1,(1-$wprot));
}
if ($rprot >= 0) {
// i2c_setprot ($bus,$slave,0,(1-$rprot));
}
$msg .= "<width>" . $width . "</width>\n";
$msg .= "<bus>" . $bus . "</bus>\n";
$msg .= "<slave>" . (sprintf ( "0x%x", ($adr >> (($width == 8) ? 7 : 8)) & 0xfe )) . "</slave>\n";
if (! $raw) {
$msg .= "<adr>" . $adr . "</adr>\n";
$msg .= "<hex_adr>" . sprintf ( "0x%x", $adr ) . "</hex_adr>\n";
}
if ($data != "") { // ! i2c write
$data += 0;
$msg .= "<data>" . $data . "</data>\n";
$msg .= "<wdata>" . $data . "</wdata>\n";
$msg .= "<hex_data>" . sprintf ( "0x%x", $data ) . "</hex_data>\n";
$rslt = ($slowbus0 >= 0) ? i2c_send_slow ( $width, $bus, $adr, $data, $raw, $slowbus0 ) : i2c_send ( $width, $bus, $adr, $data, $raw );
;
if (! ($rslt > 0))
$msg .= "<error> \"i2c write error (" . $rslt . ")\"</error>\n";
} else { // !i2c read
$data = ($slowbus0 >= 0) ? i2c_receive_slow ( $width, $bus, $adr, $raw, $slowbus0 ) : i2c_receive ( $width, $bus, $adr, $raw );
$msg .= "<data>" . $data . "</data>\n";
$msg .= "<rdata>" . $data . "</rdata>\n";
$msg .= "<hex_data>" . sprintf ( "0x%x", $data ) . "</hex_data>\n";
if ($data == - 1)
$msg .= "<error> \"i2c read error\"</error>\n";
}
} else {
if (! $nopars)
$msg .= "<error>\"Address (adr or raw) or width are not specified or are not positive.\"</error>\n";
$msg .= "<usage>\"open URL: i2c.php?width&#061;www&amp;bus&#061;bbb&amp;adr&#061;aaa&amp;data&#061;ddd\"</usage>\n";
}
} else {
if ((strlen($class)>0) || ($adr >= 0)) {
$msg .= "<class>" . $class . "</class>\n";
$msg .= "<bus>" . $bus . "</bus>\n";
$msg .= "<sa7offs>" . sprintf ( "0x%x", $sa7offs) . "</sa7offs>\n";
$msg .= "<adr>" . $adr . "</adr>\n";
$msg .= "<hex_adr>" . sprintf ( "0x%x", $adr ) . "</hex_adr>\n";
if ($data != "") { // ! i2c write
$data += 0;
$msg .= "<data>" . $data . "</data>\n";
$msg .= "<wdata>" . $data . "</wdata>\n";
$msg .= "<hex_data>" . sprintf ( "0x%x", $data ) . "</hex_data>\n";
$rslt = i2c_send_sensor($class, $bus, $adr, $data, $sa7offs);
if (! ($rslt > 0))
$msg .= "<error> \"i2c write error (" . $rslt . ")\"</error>\n";
} else { // !i2c read
$data = i2c_receive_sensor($class, $bus, $adr, $sa7offs);
$msg .= "<data>" . $data . "</data>\n";
$msg .= "<rdata>" . $data . "</rdata>\n";
$msg .= "<hex_data>" . sprintf ( "0x%x", $data ) . "</hex_data>\n";
if ($data == - 1)
$msg .= "<error> \"i2c read error\"</error>\n";
}
} else {
if (! $nopars)
$msg .= "<error>\"Device class name and/or register address are not specified address is not positive.\"</error>\n";
$msg .= "<usage>\"open URL: i2c.php?class&#061;device_class_name&amp;bus&#061;sensor_port&amp;adr&#061;register_address&amp;data&#061;data_to_write&amp;sa7offs&#061;add_to_slave_address\"</usage>\n";
}
}
} else {
$msg .= "<result>\"" . $rslt . "\"</result>\n";
}
break;
case "toEEPROM0":
$EEPROM_bus0=true; // and fall below
case "toEEPROM":
if ($wprot>=0) {
i2c_setprot ($EEPROM_bus0?0:1,0xa0+($EEPROM_chn*($EEPROM_bus0?4:2)),1,(1-$wprot));
}
if ($data=="") {
if ($model === "") {$rslt="model not specified"; break;}
if ($rev === "") {$rslt="rev not specified"; break;}
if ($serial === "") {$rslt="serial not specified"; break;}
if ($time === "") {$rslt="time not specified"; break;}
$xml = new SimpleXMLElement("<?xml version='1.0' standalone='yes'?><board/>");
if ($brand!='') $xml->addChild ('brand',$brand);
if ($model!='') $xml->addChild ('model',$model);
if ($rev!='') $xml->addChild ('rev', $rev);
if ($serial!='') $xml->addChild ('serial',$serial);
if ($time!='') $xml->addChild ('time',$time);
if ($application!="") $xml->addChild ('app',$application);
if ($application_mode!="") $xml->addChild ('mode',$application_mode);
if ($sensor!='') $xml->addChild ('sensor',$sensor);
if ($length!='') $xml->addChild ('len',$length);
if ($port!='') $xml->addChild ('port',$port);
if ($part!='') $xml->addChild ('part',$part);
if ($baud!='') $xml->addChild ('baud',$baud);
if ($sync!='') $xml->addChild ('sync',$sync);
$data=$xml->asXML();
}
if (strlen($data)>256) {
$rslt="data too long - ".strlen($data)." bytes, only 256 are permitted";
break;
}
$rslt="written ".i2c_write256b($data,0xa0+($EEPROM_chn*($EEPROM_bus0?4:2)),$EEPROM_bus0?0:1);
i2c_setprot ($EEPROM_bus0?0:1,0xa0+($EEPROM_chn*($EEPROM_bus0?4:2)),1,0);
break;
case "ctl":
if ($bus==="") {
$rslt="i2c bus number is not specified";
break;
}
$rslt=i2c_ctl($bus,$data)->asXML();
header("Content-Type: text/xml");
header("Content-Length: ".strlen($rslt)."\n");
header("Pragma: no-cache\n");
printf($rslt);
exit (0);
}
if ($rslt=="") {
if (($adr>=0) && (($width==8) || ($width==16))) {
$slave=($adr >> (($width==16)?8:7)) & 0xfe;
if ($wprot>=0) {
i2c_setprot ($bus,$slave,1,(1-$wprot));
}
if ($rprot>=0) {
i2c_setprot ($bus,$slave,0,(1-$rprot));
}
$msg.="<width>".$width."</width>\n";
$msg.="<bus>".$bus."</bus>\n";
$msg.="<slave>".(sprintf("0x%x",($adr>>(($width==8)?7:8)) & 0xfe ))."</slave>\n";
if (!$raw) {
$msg.="<adr>".$adr."</adr>\n";
$msg.="<hex_adr>".sprintf("0x%x",$adr)."</hex_adr>\n";
}
if ($data!="") { //! i2c write
$data+=0;
$msg.="<data>".$data."</data>\n";
$msg.="<wdata>".$data."</wdata>\n";
$msg.="<hex_data>".sprintf("0x%x",$data)."</hex_data>\n";
$rslt=($slowbus0>=0)? i2c_send_slow($width,$bus,$adr,$data,$raw,$slowbus0): i2c_send($width,$bus,$adr,$data,$raw);;
if (!($rslt>0)) $msg.="<error> \"i2c write error (".$rslt.")\"</error>\n";
} else { //!i2c read
$data=($slowbus0>=0)? i2c_receive_slow($width,$bus,$adr,$raw,$slowbus0):i2c_receive($width,$bus,$adr,$raw);
$msg.="<data>".$data."</data>\n";
$msg.="<rdata>".$data."</rdata>\n";
$msg.="<hex_data>".sprintf("0x%x",$data)."</hex_data>\n";
if ($data==-1) $msg.="<error> \"i2c read error\"</error>\n";
}
} else {
if (!$nopars) $msg.="<error>\"Address (adr or raw) or width are not specified or are not positive.\"</error>\n";
$msg.="<usage>\"open URL: i2c.php?width&#061;www&amp;bus&#061;bbb&amp;adr&#061;aaa&amp;data&#061;ddd\"</usage>\n";
}
} else {
$msg.="<result>\"".$rslt."\"</result>\n";
}
$msg.="</i2c>\n";
header("Content-Type: text/xml");
header("Content-Length: ".strlen($msg)."\n");
header("Pragma: no-cache\n");
printf($msg);
$msg .= "</i2c>\n";
header ( "Content-Type: text/xml" );
header ( "Content-Length: " . strlen ( $msg ) . "\n" );
header ( "Pragma: no-cache\n" );
printf ( $msg );
?>
......@@ -247,7 +247,7 @@ function printDefaultPage() {
."&EXTERN_TIMESTAMP=1" /// Use external timestamp when available
."&BITS=8" /// 8 bit data mode
."&QUALITY=80" /// 80 percent JPEG image quality
."&COLOR=1" /// regular color mode (not mono or JP4 flavors)
."&COLOR=0" /// regular color mode (not mono or JP4 flavors)
."&COLOR_SATURATION_BLUE=200"/// 2.0 (200% blue/green color saturation (to compensate for effect of non-unity gamma)
."&COLOR_SATURATION_RED=200" /// 2.0 (200% blue/green color saturation
."&BAYER=0" /// No bayer shift
......@@ -414,8 +414,9 @@ $url_ext_trigger=$url_port."embed=0.1&title=External+trigger+controls"
/// bit 1 - enable(1) or disable(0) external trigger to stop clip
/// bit 2 - async (snapshot, ext trigger) mode, 0 - continuous NOTE: Only this bit is used now !
/// bit 3 - no overlap, single frames: program - acquire/compress same frame
/// bit 4 - Global reset release mode
."&TRIG_PERIOD=20000000"/// 0.2 sec @96MHz output sync period (32 bits, in pixel clocks)
."&TRIG_PERIOD=25000000"/// 0.25 sec @100MHz output sync period (32 bits, in pixel clocks)
/// >=256 repetitive with specified period.
/// NOTE: Currently there is no verification that period is longer than sensor/compressor can handle
."&TRIG_DELAY" /// trigger delay, 32 bits in pixel clocks (needed when multiple cameras are synchronized)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment