paraSql=$paraSql"; $paraResult=mysqli_query($pubConn,$paraSql); $paraRows=@mysqli_fetch_array($paraResult); $setValue=$paraRows[initValue]; $readValue=$paraRows[readValue]; if($DEBUG) echo "
setValue=$setValue"; function omcStrFill($string,$defLen,$fillWay='high',$fillChar='0'){ if(strlen($string) <= $defLen){ $fillLen=$defLen - strlen($string); for($i=0;$i<$fillLen;$i++){ if($fillWay == 'low'){ $string = $string.$fillChar; }else{ $string = $fillChar.$string; } } return($string); }else{ echo "
Error in omcStrFill:the defLen < lengh of string!!"; echo "
defLen=$defLen and string=$string!!"; exit(); } } //---------------------- //选择语言版本 if($language == 'eng'){ $objNameField=name_2; $objSetField=setTemplate_2 ; //语种2 }else{ $objNameField=name_1; $objSetField=setTemplate_1 ; //语种1(默认语种) } //----------------------- //=======================Get value From submit=================== if($set == 'Set'){ //sort by offset for($i=1;$i<=$unitNum;$i++){ $tmpDef = ${'unitDef_'.$i}; $tmpValue = ${'unit_'.$i}; if($DEBUG) echo "
tmpDef = $tmpDef"; $defArr[$i] = $tmpDef; $tmpDefArr=explode('-',$tmpDef); $sortArr[$i] = $tmpDefArr[0]; $valueArr[$i] = $tmpValue; } $lastValue = ''; $k = 0; asort($sortArr); for(reset($sortArr); $key = key($sortArr); next($sortArr)){ if($DEBUG) echo "
sortArr[$key] = {$sortArr[$key]}"; if($DEBUG) echo "
unitValue = {$valueArr[$key]}"; $unitValue = $valueArr[$key]; if($DEBUG) echo "
defArr[$key] = {$defArr[$key]}"; $unitDefArr = explode('-',$defArr[$key]); //例:0.0-0.7-input -toDec-high-0 if(sizeof($unitDefArr) <= 1){ if($DEBUG) echo "
nothing,just a name"; continue; } $bgnOffset = $unitDefArr[0]; $endOffset = $unitDefArr[1]; $operType = $unitDefArr[2]; $valueType = $unitDefArr[3]; $fillWay = $unitDefArr[4]; $fillChar = $unitDefArr[5]; $bgnOffsetArr = explode('.',$bgnOffset); $bgnByte = $bgnOffsetArr[0]; $bgnBit = $bgnOffsetArr[1]; $endOffsetArr = explode('.',$endOffset); $endByte = $endOffsetArr[0]; $endBit = $endOffsetArr[1]; $byteLen = $endByte - $bgnByte + 1; $byteValue = ''; if($DEBUG) echo "
valueType = $valueType"; switch($valueType){ case 'toDec': if($bgnBit > 0 ||$endBit < 7){ $bitLen = $byteLen*8 - $bgnBit - (7 - $endBit) ; //1 BYTE = 8 bit $bitValue = DecBin($unitValue); if($DEBUG)echo "
bitValue = $bitValue "; $bitValue = omcStrFill($bitValue,$bitLen,$fillWay,$fillChar); if($DEBUG) echo "
omcStrFill($bitValue,$bitLen,$fillWay,$fillChar)"; $bitValueArr[$k] = $bitValue; if($DEBUG) echo "
bitValueArr[$k] = {$bitValueArr[$k]}"; if($endBit == 7){//发现这个单元结束,并没有跨byte,这时需要组成一个byte值 $bitValue = ''; for($bitNo=0; $bitNo<=$k; $bitNo++){ if($DEBUG) echo "
bitValueArr[$bitNo] = {$bitValueArr[$bitNo]}"; $bitValue = $bitValueArr[$bitNo].$bitValue; } $k=0; if($DEBUG) echo "
bitValue = $bitValue"; $byteLen = strlen($bitValue) / 8; if($DEBUG) echo "
byteLen = $byteLen"; $byteValue = BinDec($bitValue); $byteValue = DecHex($byteValue); $strLen = $byteLen*2; if($DEBUG) echo "
omcStrFill($byteValue,$strLen,$fillWay,$fillChar)"; $byteValue = omcStrFill($byteValue,$strLen,$fillWay,$fillChar); }else{//否则,继续组合下一个bit组 $byteValue = ''; $k++; } }else{ $byteValue = DecHex($unitValue); $strLen = $byteLen*2; $byteValue = omcStrFill($byteValue,$strLen,$fillWay,$fillChar); if($DEBUG) echo "
omcStrFill($byteValue,$strLen,$fillWay,$fillChar)"; } if($DEBUG) echo "
byteValue = $byteValue"; break; case 'keepDec': //echo "
Error:keepDec"; $byteValue = $unitValue - 0; break; case 'toHex': echo "
Error:toHex"; break; case 'keepHex': if($bgnBit > 0 || $endBit < 7){//这里的处理不够全面,没有对=7的进行收尾 $byteValue = $unitValue; $strLen = $byteLen; $byteValue = omcStrFill($byteValue,$strLen,$fillWay,$fillChar); $bitValue = DecBin(HexDec($byteValue)); $byteValue=''; $bitLen = $byteLen*8 - $bgnBit - (7 - $endBit) ; //1 BYTE = 8 bit $bitValue = omcStrFill($bitValue,$bitLen,'high','0'); if($DEBUG) echo "
bitValue = $bitValue"; $bitValueArr[$k] = $bitValue; $k++; }else{ $k=0; $byteValue = $unitValue; $strLen = $byteLen*2; $byteValue = omcStrFill($byteValue,$strLen,$fillWay,$fillChar); if($DEBUG) echo "
omcStrFill($byteValue,$strLen,$fillWay,$fillChar)"; } break; case 'toAscii': if($bgnBit > 0 ||$endBit < 7){ echo "
Error:toAscii"; exit(1); }else{ $tmpLen=strlen($unitValue); for($i=0;$i<$tmpLen;$i++){ $unitChar = substr($unitValue,$i,1); $decValue = ord($unitChar); //ascii -> dec $byteValue .= DecHex($decValue); if(strlen($byteValue) < 2){ $byteValue = '0'.$byteValue; } } $strLen = $byteLen*2; $byteValue = omcStrFill($byteValue,$strLen,$fillWay,$fillChar); } break; case 'toLatitude': //feake show 4byte if($unitValue>90) { $unitValue=90; /**************************************************/ echo "\n\n"; /***************************************************/ } if($unitValue<-90) { $unitValue=-90; /**************************************************/ echo "\n\n"; /***************************************************/ } $byteValue=$unitValue*pow(2,23)/90; $byteValue=ceil($byteValue); $byteValue=dechex($byteValue); $byteValue=omcStrFill($byteValue,8,'high','0'); break; case 'toLongitude': if($unitValue>180) { $unitValue=180; /**************************************************/ echo "\n\n"; /***************************************************/ } if($unitValue<-180) { $unitValue=-180; /**************************************************/ echo "\n\n"; /***************************************************/ } $byteValue=$unitValue*pow(2,24)/360; $byteValue=ceil($byteValue); $byteValue=dechex($byteValue); $byteValue=omcStrFill($byteValue,8,'high','0'); break; default: echo "Error:Unknown valueType"; break; } if($DEBUG) echo "
byteValue = $byteValue "; //--><-//$lastValue = $byteValue.$lastValue; $lastValue = $lastValue.$byteValue; } $lastValue=strtoupper($lastValue); if($DEBUG) echo "
lastValue = $lastValue "; $updateSql="UPDATE $paraTable SET initValue='$lastValue' WHERE $levelWhere AND instanceNo=$instanceNo"; if($DEBUG)echo "
updateSql=$updateSql"; mysqli_query($pubConn,$updateSql); if($lastValue==$readValue) { $returnColor= $settedColor; } else { $returnColor= $notSettedColor; $oidwhere=getLevelWhere(substr($oidStr,0,strlen($oidStr)-2)); $tableName=getNameByOID_handle($sysTypeNo,$oidwhere); $tableName=str_replace("Entry","",$tableName); $sysName=getSystemNameBySysTypeNo($sysTypeNo); $fieldName=getNameByOID_handle($sysTypeNo,$levelWhere); $log="Change $sysName $tableName's $fieldName, ".$readValue." -> ".$lastValue; insertLog($log); //$handle=fopen("/tmp/test.txt","a"); //fwrite($handle,$log); //fwrite($handle,"\n"); //fclose($handle); } if(!$DEBUG){ //discard the postfix E if(strstr($tmpDef,"keepHex-low")) { $oidwhere=getLevelWhere($oidStr); $sql="select setTemplate_2 from OBJ_$sysTypeNo.paramConf where $oidwhere "; $res=@mysqli_query($pubConn,$sql); $row=@mysqli_fetch_array($res); $split=explode("[unit]",$row[0]); $tmplen=sizeof($split); //only one unit //if($tmplen == 2) { $split2=explode("keepHex-low-",$row[0]); $repl=substr($split2[1],0,1); $lastValue=str_replace($repl," ",$lastValue); } } if(strlen(trim($lastValue))<=0) $lastValue="--"; echo ""; exit(); }else{ echo "
lastValue = $lastValue "; } }//end of if($set == 1) //=======================Show GUI ======================== ?>
" > "; }else{ echo ""; } for($i=1;$i"; }//end of for(..) echo "
"; //unit input name $unitName = "unit_".$i; //explode by '[u]' $tlvArr = explode('[u]',$unitArr[$i]); if(sizeof($tlvArr) <= 1 ){ echo "{$unitArr[$i]}"; continue; } //show Unit Name echo "$tlvArr[0]"; echo " "; if($DEBUG) echo "$tlvArr[1]"; //explode by '-' $offsetArr = explode('-',$tlvArr[1]); $bgnOffsetArr = explode('.',$offsetArr[0]); $bgnByte = $bgnOffsetArr[0]; $bgnBit = $bgnOffsetArr[1]; $endOffsetArr = explode('.',$offsetArr[1]); $endByte = $endOffsetArr[0]; $endBit = $endOffsetArr[1]; $byteLen = $endByte - $bgnByte + 1; $byteValue = substr($setValue,$bgnByte*2,$byteLen*2); //--><-//$byteValue = strrev($byteValue); if($DEBUG) echo "
byteValue = $byteValue"; $bitValue = ''; if($bgnBit > 0 ||$endBit < 7){ if($DEBUG) echo "
$bgnBit > 0 ||$endBit < 7"; $bitValue = HexDec($byteValue); $bitValue = DecBin($bitValue); if($DEBUG) echo "
bitValue = $bitValue"; $bitLen = $byteLen*8;//1 byte = 8 bit $bitValue = omcStrFill($bitValue,$bitLen,'high','0'); if($DEBUG) echo "
omcStrFill($bitValue,$bitLen,'high','0')"; $bitValue = strrev($bitValue); $catBitLen = $endByte*8+$endBit - ($bgnByte*8+$bgnBit) + 1; //1 byte = 8 bit if($DEBUG) echo "
bitValue = substr($bitValue,$bgnBit,$catBitLen)"; $bitValue = substr($bitValue,$bgnBit,$catBitLen); $bitValue = strrev($bitValue); if($DEBUG) echo "
bitValue = $bitValue"; } //explode by '[v]' $valueArr = explode('[v]',$tlvArr[2]); $typeAddTitleArr = explode('[t]',$valueArr[0]); $operType = chop($typeAddTitleArr[0]); $titleStr = chop($typeAddTitleArr[1]); $valueArr[1] = chop($valueArr[1]); if($DEBUG) echo "
operType = $operType"; switch($operType){ case 'input':// //explode by '-' $defArr = explode('-',$valueArr[1]); if($DEBUG) echo "
defArr = $defArr[0],$defArr[1],$defArr[2]"; switch($defArr[0]){ case 'toDec': if(strlen($bitValue) > 0){ $inputValue = BinDec($bitValue); }else{ $inputValue = HexDec($byteValue); } break; case 'keepDec': $inputValue = $byteValue; break; case 'toHex': echo "
Error:toHex"; break; case 'keepHex': $inputValue = $byteValue; break; case 'toAscii': $charValue = ""; if($bgnBit > 0 ||$endBit < 7){ echo "
Error:toAscii"; exit(1); }else{ $tmpLen=strlen($byteValue); for($charCount=0;$charCount<$tmpLen;$charCount++){ $unitByte = substr($byteValue,$charCount,2); $unitChar = chr(HexDec($unitByte)); // hex -> ascii if($DEBUG) echo "
unitChar=$unitChar"; $charValue .= $unitChar; $charCount++; } $inputValue = $charValue; $inputValue = trim($inputValue);//add by oven 2006-8-2 remvove dirty in Mozilla. } break; case 'toLatitude': //feake edit float if($byteValue[0]=='F' || $byteValue[0]=='f') { $tmp=hexdec($byteValue)-1; $orgbin=decbin($tmp); $lastbin=""; for($ii=0;$ii8) $inputValue=substr($inputValue,0,8); if($inputValue > 90 || $inputValue < -90) { /**************************************************/ echo "\n\n"; /***************************************************/ } break; case 'toLongitude': if($byteValue[0]=='F' || $byteValue[0]=='f') { $tmp=hexdec($byteValue)-1; $orgbin=decbin($tmp); $lastbin=""; for($ii=0;$ii8) $inputValue=substr($inputValue,0,8); if($inputValue > 180 || $inputValue < -180) { /**************************************************/ echo "\n\n"; /***************************************************/ } break; default: echo "
Error:valueType=$defArr[0]"; break; } if($DEBUG)echo "
inputValue = $inputValue"; switch($defArr[1]){ case 'high': switch($defArr[2]){ case '0': if($defArr[0] == 'toHex' || $defArr[0] == 'keepHex'){ //$inputValue = str_replace('0','',$inputValue); }else if($defArr[0] == 'toAscii'){ for($ii=0;$ii"; break; case 'select': if($bitValue != ''){ $selectValue = BinDec($bitValue); }else{ $selectValue = HexDec($byteValue); } if($DEBUG) echo "
bitValue = $bitValue"; if($DEBUG) echo "
selectValue = $selectValue"; echo ""; break; default: echo "
Error:operType =|$operType|"; break; }//end of switch(..) //like:unitDef_1 = 1.0-2.0-select-keepHex-high-0 -->$tlvArr[1]-$operType- if($operType == 'select'){ //select $tempDef = $tlvArr[1].'-'.$operType.'-'.'toDec-high-0'; }else{ $tempDef = $tlvArr[1].'-'.$operType.'-'.$valueArr[1]; } $tempDef = str_replace(" ", "", $tempDef); $tempDef = chop($tempDef); echo "\n "; echo "
"; $remark=nl2br($remark); echo "
Remarks:
$remark

"; $unitNum = $i-1; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; if($canwrite_flag) { echo "\n"; echo "\n"; } else { echo "\n"; echo "\n"; } echo "
"; ?>