123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669 |
- <?php // php pages made with phpMyBuilder <http://kyber.dk/phpMyBuilder> ?>
- <?php
- // (C) Copyright 2001
- // Murray Jensen <Murray.Jensen@cmst.csiro.au>
- // CSIRO Manufacturing Science and Technology, Preston Lab
- // contains mysql user id and password - keep secret
- require("config.php");
- if (isset($logout)) {
- Header("status: 401 Unauthorized");
- Header("HTTP/1.0 401 Unauthorized");
- Header("WWW-authenticate: basic realm=\"$bddb_label\"");
- echo "<html><head><title>" .
- "Access to '$bddb_label' Denied" .
- "</title></head>\n";
- echo "<body bgcolor=#ffffff><br></br><br></br><center><h1>" .
- "You must be an Authorised User " .
- "to access the '$bddb_label'" .
- "</h1>\n</center></body></html>\n";
- exit;
- }
- // contents of the various enumerated types - if first item is
- // empty ('') then the enum is allowed to be null (ie "not null"
- // is not set on the column)
- // all column names in the database table
- $columns = array(
- 'serno','ethaddr','date','batch',
- 'type','rev','location','comments',
- 'sdram0','sdram1','sdram2','sdram3',
- 'flash0','flash1','flash2','flash3',
- 'zbt0','zbt1','zbt2','zbt3','zbt4','zbt5','zbt6','zbt7',
- 'zbt8','zbt9','zbta','zbtb','zbtc','zbtd','zbte','zbtf',
- 'xlxtyp0','xlxtyp1','xlxtyp2','xlxtyp3',
- 'xlxspd0','xlxspd1','xlxspd2','xlxspd3',
- 'xlxtmp0','xlxtmp1','xlxtmp2','xlxtmp3',
- 'xlxgrd0','xlxgrd1','xlxgrd2','xlxgrd3',
- 'cputyp','cpuspd','cpmspd','busspd',
- 'hstype','hschin','hschout'
- );
- // board type
- $type_vals = array('IO','CLP','DSP','INPUT','ALT-INPUT','DISPLAY');
- // sdram sizes (nbits array is for write into eeprom config file)
- $sdram_vals = array('','32M','64M','128M','256M');
- $sdram_nbits = array(0,25,26,27,28);
- // flash sizes (nbits array is for write into eeprom config file)
- $flash_vals = array('','4M','8M','16M','32M','64M');
- $flash_nbits = array(0,22,23,24,25,26);
- // zbt ram sizes (nbits array is for write into eeprom config file)
- $zbt_vals = array('','512K','1M','2M','4M');
- $zbt_nbits = array(0,19,20,21,22);
- // Xilinx attributes
- $xlxtyp_vals = array('','XCV300E','XCV400E','XCV600E','XC2V2000','XC2V3000','XC2V4000','XC2V6000');
- $xlxspd_vals = array('','6','7','8','4','5');
- $xlxtmp_vals = array('','COM','IND');
- $xlxgrd_vals = array('','NORMAL','ENGSAMP');
- // processor attributes
- $cputyp_vals = array('','MPC8260');
- $clk_vals = array('','33MHZ','66MHZ','100MHZ','133MHZ','166MHZ','200MHZ');
- // high-speed serial attributes
- $hstype_vals = array('','AMCC-S2064A');
- $hschin_vals = array('0','1','2','3','4');
- $hschout_vals = array('0','1','2','3','4');
- // value filters - used when outputting html
- function rev_filter($num) {
- if ($num == 0)
- return "001";
- else
- return sprintf("%03d", $num);
- }
- function text_filter($str) {
- return urldecode($str);
- }
- mt_srand(time() | getmypid());
- // set up MySQL connection
- mysql_connect("", $mysql_user, $mysql_pw) || die("cannot connect");
- mysql_select_db($mysql_db) || die("cannot select db");
- // page header
- function pg_head($title)
- {
- echo "<html>\n<head>\n";
- echo "<link rel=stylesheet href=\"bddb.css\" type=\"text/css\" title=\"style sheet\"></link>\n";
- echo "<title>$title</title>\n";
- echo "</head>\n";
- echo "<body>\n";
- echo "<center><h1>$title</h1></center>\n";
- echo "<hr></hr>\n";
- }
- // page footer
- function pg_foot()
- {
- echo "<hr></hr>\n";
- echo "<table width=\"100%\"><tr><td align=left>\n<address>" .
- "If you have any problems, email " .
- "<a href=\"mailto:Murray.Jensen@cmst.csiro.au\">" .
- "Murray Jensen" .
- "</a></address>\n" .
- "</td><td align=right>\n" .
- "<a href=\"index.php?logout=true\">logout</a>\n" .
- "</td></tr></table>\n";
- echo "<p><small><i>Made with " .
- "<a href=\"http://kyber.dk/phpMyBuilder/\">" .
- "Kyber phpMyBuilder</a></i></small></p>\n";
- echo "</body>\n";
- echo "</html>\n";
- }
- // some support functions
- if (!function_exists('array_search')) {
- function array_search($needle, $haystack, $strict = false) {
- if (is_array($haystack) && count($haystack)) {
- $ntype = gettype($needle);
- foreach ($haystack as $key => $value) {
- if ($value == $needle && (!$strict ||
- gettype($value) == $ntype))
- return $key;
- }
- }
- return false;
- }
- }
- if (!function_exists('in_array')) {
- function in_array($needle, $haystack, $strict = false) {
- if (is_array($haystack) && count($haystack)) {
- $ntype = gettype($needle);
- foreach ($haystack as $key => $value) {
- if ($value == $needle && (!$strict ||
- gettype($value) == $ntype))
- return true;
- }
- }
- return false;
- }
- }
- function key_in_array($key, $array) {
- return in_array($key, array_keys($array), true);
- }
- function enum_to_index($name, $vals) {
- $index = array_search($GLOBALS[$name], $vals);
- if ($vals[0] != '')
- $index++;
- return $index;
- }
- // fetch a value from an array - return empty string is not present
- function get_key_value($key, $array) {
- if (key_in_array($key, $array))
- return $array[$key];
- else
- return '';
- }
- function fprintf() {
- $n = func_num_args();
- if ($n < 2)
- return FALSE;
- $a = func_get_args();
- $fp = array_shift($a);
- $x = "\$s = sprintf";
- $sep = '(';
- foreach ($a as $z) {
- $x .= "$sep'$z'";
- $sep = ',';
- }
- $x .= ');';
- eval($x);
- $l = strlen($s);
- $r = fwrite($fp, $s, $l);
- if ($r != $l)
- return FALSE;
- else
- return TRUE;
- }
- // functions to display (print) a database table and its columns
- function begin_table($ncols) {
- global $table_ncols;
- $table_ncols = $ncols;
- echo "<table align=center width=\"100%\""
- . " border=1 cellpadding=4 cols=$table_ncols>\n";
- }
- function begin_field($name, $span = 0) {
- global $table_ncols;
- echo "<tr valign=top>\n";
- echo "\t<th align=center>$name</th>\n";
- if ($span <= 0)
- $span = $table_ncols - 1;
- if ($span > 1)
- echo "\t<td colspan=$span>\n";
- else
- echo "\t<td>\n";
- }
- function cont_field($span = 1) {
- echo "\t</td>\n";
- if ($span > 1)
- echo "\t<td colspan=$span>\n";
- else
- echo "\t<td>\n";
- }
- function end_field() {
- echo "\t</td>\n";
- echo "</tr>\n";
- }
- function end_table() {
- echo "</table>\n";
- }
- function print_field($name, $array, $size = 0, $filt='') {
- begin_field($name);
- if (key_in_array($name, $array))
- $value = $array[$name];
- else
- $value = '';
- if ($filt != '')
- $value = $filt($value);
- echo "\t\t<input name=$name value=\"$value\"";
- if ($size > 0)
- echo " size=$size maxlength=$size";
- echo "></input>\n";
- end_field();
- }
- function print_field_multiline($name, $array, $cols, $rows, $filt='') {
- begin_field($name);
- if (key_in_array($name, $array))
- $value = $array[$name];
- else
- $value = '';
- if ($filt != '')
- $value = $filt($value);
- echo "\t\t<textarea name=$name " .
- "cols=$cols rows=$rows wrap=off>\n";
- echo "$value";
- echo "</textarea>\n";
- end_field();
- }
- // print a mysql ENUM as an html RADIO INPUT
- function print_enum($name, $array, $vals, $def = -1) {
- begin_field($name);
- if (key_in_array($name, $array))
- $chk = array_search($array[$name], $vals, FALSE);
- else
- $chk = $def;
- $nval = count($vals);
- for ($i = 0; $i < $nval; $i++) {
- $val = $vals[$i];
- if ($val == '')
- $pval = "none";
- else
- $pval = "$val";
- printf("\t\t<input type=radio name=$name"
- . " value=\"$val\"%s>$pval</input>\n",
- $i == $chk ? " checked" : "");
- }
- end_field();
- }
- // print a group of mysql ENUMs (e.g. name0,name1,...) as an html SELECT
- function print_enum_multi($base, $array, $vals, $cnt, $defs, $grp = 0) {
- global $table_ncols;
- if ($grp <= 0)
- $grp = $cnt;
- $ncell = $cnt / $grp;
- $span = ($table_ncols - 1) / $ncell;
- begin_field($base, $span);
- $nval = count($vals);
- for ($i = 0; $i < $cnt; $i++) {
- if ($i > 0 && ($i % $grp) == 0)
- cont_field($span);
- $name = sprintf("%s%x", $base, $i);
- echo "\t\t<select name=$name>\n";
- if (key_in_array($name, $array))
- $ai = array_search($array[$name], $vals, FALSE);
- else {
- if (key_in_array($i, $defs))
- $ai = $defs[$i];
- else
- $ai = 0;
- }
- for ($j = 0; $j < $nval; $j++) {
- $val = $vals[$j];
- if ($val == '')
- $pval = " ";
- else
- $pval = "$val";
- printf("\t\t\t<option " .
- "value=\"%s\"%s>%s</option>\n",
- $val,
- $j == $ai ? " selected" : "",
- $pval);
- }
- echo "\t\t</select>\n";
- }
- end_field();
- }
- // functions to handle the form input
- // fetch all the parts of an "enum_multi" into a string suitable
- // for a MySQL query
- function gather_enum_multi_query($base, $cnt) {
- $retval = '';
- for ($i = 0; $i < $cnt; $i++) {
- $name = sprintf("%s%x", $base, $i);
- if (isset($GLOBALS[$name])) {
- $retval .= sprintf(", %s='%s'",
- $name, $GLOBALS[$name]);
- }
- }
- return $retval;
- }
- // fetch all the parts of an "enum_multi" into a string suitable
- // for a display e.g. in an html table cell
- function gather_enum_multi_print($base, $cnt, $array) {
- $retval = '';
- for ($i = 0; $i < $cnt; $i++) {
- $name = sprintf("%s%x", $base, $i);
- if ($array[$name] != '') {
- if ($retval != '')
- $retval .= ',';
- $retval .= $array[$name];
- }
- }
- return $retval;
- }
- // fetch all the parts of an "enum_multi" into a string suitable
- // for writing to the eeprom data file
- function gather_enum_multi_write($base, $cnt, $vals, $xfrm = array()) {
- $retval = '';
- for ($i = 0; $i < $cnt; $i++) {
- $name = sprintf("%s%x", $base, $i);
- if ($GLOBALS[$name] != '') {
- if ($retval != '')
- $retval .= ',';
- $index = enum_to_index($name, $vals);
- if ($xfrm != array())
- $retval .= $xfrm[$index];
- else
- $retval .= $index;
- }
- }
- return $retval;
- }
- // count how many parts of an "enum_multi" are actually set
- function count_enum_multi($base, $cnt) {
- $retval = 0;
- for ($i = 0; $i < $cnt; $i++) {
- $name = sprintf("%s%x", $base, $i);
- if (isset($GLOBALS[$name]))
- $retval++;
- }
- return $retval;
- }
- // ethernet address functions
- // generate a (possibly not unique) random vendor ethernet address
- // (setting bit 6 in the ethernet address - motorola wise i.e. bit 0
- // is the most significant bit - means it is not an assigned ethernet
- // address - it is a "locally administered" address). Also, make sure
- // it is NOT a multicast ethernet address (by setting bit 7 to 0).
- // e.g. the first byte of all ethernet addresses generated here will
- // have 2 in the bottom two bits (incidentally, these are the first
- // two bits transmitted on the wire, since the octets in ethernet
- // addresses are transmitted LSB first).
- function gen_eth_addr($serno) {
- $ethaddr_high = (mt_rand(0, 65535) & 0xfeff) | 0x0200;
- $ethaddr_low = mt_rand(0, 4294967295);
- return sprintf("%02lx:%02lx:%02lx:%02lx:%02lx:%02lx",
- $ethaddr_high >> 8, $ethaddr_high & 0xff,
- $ethaddr_low >> 24, ($ethaddr_low >> 16) & 0xff,
- ($ethaddr_low >> 8) & 0xff, $ethaddr_low & 0xff);
- }
- // check that an ethernet address is valid
- function eth_addr_is_valid($ethaddr) {
- $ethbytes = split(':', $ethaddr);
- if (count($ethbytes) != 6)
- return FALSE;
- for ($i = 0; $i < 6; $i++) {
- $ethbyte = $ethbytes[$i];
- if (!ereg('^[0-9a-f][0-9a-f]$', $ethbyte))
- return FALSE;
- }
- return TRUE;
- }
- // write a simple eeprom configuration file
- function write_eeprom_cfg_file() {
- global $sernos, $nsernos, $bddb_cfgdir, $numerrs, $cfgerrs;
- global $date, $batch, $type_vals, $rev;
- global $sdram_vals, $sdram_nbits;
- global $flash_vals, $flash_nbits;
- global $zbt_vals, $zbt_nbits;
- global $xlxtyp_vals, $xlxspd_vals, $xlxtmp_vals, $xlxgrd_vals;
- global $cputyp, $cputyp_vals, $clk_vals;
- global $hstype, $hstype_vals, $hschin, $hschout;
- $numerrs = 0;
- $cfgerrs = array();
- for ($i = 0; $i < $nsernos; $i++) {
- $serno = sprintf("%010d", $sernos[$i]);
- $wfp = @fopen($bddb_cfgdir . "/$serno.cfg", "w");
- if (!$wfp) {
- $cfgerrs[$i] = 'file create fail';
- $numerrs++;
- continue;
- }
- set_file_buffer($wfp, 0);
- if (!fprintf($wfp, "serno=%d\n", $sernos[$i])) {
- $cfgerrs[$i] = 'cfg wr fail (serno)';
- fclose($wfp);
- $numerrs++;
- continue;
- }
- if (!fprintf($wfp, "date=%s\n", $date)) {
- $cfgerrs[$i] = 'cfg wr fail (date)';
- fclose($wfp);
- $numerrs++;
- continue;
- }
- if ($batch != '') {
- if (!fprintf($wfp, "batch=%s\n", $batch)) {
- $cfgerrs[$i] = 'cfg wr fail (batch)';
- fclose($wfp);
- $numerrs++;
- continue;
- }
- }
- $typei = enum_to_index("type", $type_vals);
- if (!fprintf($wfp, "type=%d\n", $typei)) {
- $cfgerrs[$i] = 'cfg wr fail (type)';
- fclose($wfp);
- $numerrs++;
- continue;
- }
- if (!fprintf($wfp, "rev=%d\n", $rev)) {
- $cfgerrs[$i] = 'cfg wr fail (rev)';
- fclose($wfp);
- $numerrs++;
- continue;
- }
- $s = gather_enum_multi_write("sdram", 4,
- $sdram_vals, $sdram_nbits);
- if ($s != '') {
- $b = fprintf($wfp, "sdram=%s\n", $s);
- if (!$b) {
- $cfgerrs[$i] = 'cfg wr fail (sdram)';
- fclose($wfp);
- $numerrs++;
- continue;
- }
- }
- $s = gather_enum_multi_write("flash", 4,
- $flash_vals, $flash_nbits);
- if ($s != '') {
- $b = fprintf($wfp, "flash=%s\n", $s);
- if (!$b) {
- $cfgerrs[$i] = 'cfg wr fail (flash)';
- fclose($wfp);
- $numerrs++;
- continue;
- }
- }
- $s = gather_enum_multi_write("zbt", 16,
- $zbt_vals, $zbt_nbits);
- if ($s != '') {
- $b = fprintf($wfp, "zbt=%s\n", $s);
- if (!$b) {
- $cfgerrs[$i] = 'cfg wr fail (zbt)';
- fclose($wfp);
- $numerrs++;
- continue;
- }
- }
- $s = gather_enum_multi_write("xlxtyp", 4, $xlxtyp_vals);
- if ($s != '') {
- $b = fprintf($wfp, "xlxtyp=%s\n", $s);
- if (!$b) {
- $cfgerrs[$i] = 'cfg wr fail (xlxtyp)';
- fclose($wfp);
- $numerrs++;
- continue;
- }
- }
- $s = gather_enum_multi_write("xlxspd", 4, $xlxspd_vals);
- if ($s != '') {
- $b = fprintf($wfp, "xlxspd=%s\n", $s);
- if (!$b) {
- $cfgerrs[$i] = 'cfg wr fail (xlxspd)';
- fclose($wfp);
- $numerrs++;
- continue;
- }
- }
- $s = gather_enum_multi_write("xlxtmp", 4, $xlxtmp_vals);
- if ($s != '') {
- $b = fprintf($wfp, "xlxtmp=%s\n", $s);
- if (!$b) {
- $cfgerrs[$i] = 'cfg wr fail (xlxtmp)';
- fclose($wfp);
- $numerrs++;
- continue;
- }
- }
- $s = gather_enum_multi_write("xlxgrd", 4, $xlxgrd_vals);
- if ($s != '') {
- $b = fprintf($wfp, "xlxgrd=%s\n", $s);
- if (!$b) {
- $cfgerrs[$i] = 'cfg wr fail (xlxgrd)';
- fclose($wfp);
- $numerrs++;
- continue;
- }
- }
- if ($cputyp != '') {
- $cputypi = enum_to_index("cputyp",$cputyp_vals);
- $cpuspdi = enum_to_index("cpuspd", $clk_vals);
- $busspdi = enum_to_index("busspd", $clk_vals);
- $cpmspdi = enum_to_index("cpmspd", $clk_vals);
- $b = fprintf($wfp, "cputyp=%d\ncpuspd=%d\n" .
- "busspd=%d\ncpmspd=%d\n",
- $cputypi, $cpuspdi, $busspdi, $cpmspdi);
- if (!$b) {
- $cfgerrs[$i] = 'cfg wr fail (cputyp)';
- fclose($wfp);
- $numerrs++;
- continue;
- }
- }
- if ($hstype != '') {
- $hstypei = enum_to_index("hstype",$hstype_vals);
- $b = fprintf($wfp, "hstype=%d\n" .
- "hschin=%s\nhschout=%s\n",
- $hstypei, $hschin, $hschout);
- if (!$b) {
- $cfgerrs[$i] = 'cfg wr fail (hstype)';
- fclose($wfp);
- $numerrs++;
- continue;
- }
- }
- if (!fclose($wfp)) {
- $cfgerrs[$i] = 'file cls fail';
- $numerrs++;
- }
- }
- return $numerrs;
- }
- ?>
|