Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. <HTML> <style type="text/css"> * { font-family:Tahoma, Arial, Helvetica, sans-serif; font-size:0.98em } textarea { border:1px solid #999999; width:95%; height: 200px; margin:5px 0; padding:3px; } div.label { float: left; width: 8em } fieldset { border:solid .09em #ccc; padding: 0.725em; margin: 5; } fieldset legend { color:#30519c; font-weight:bold; margin-left:-.362em; padding:0 .272em; } h2 { margin:0 0 .906em 0; background:#ccc; padding:.181em .725em; border-style:solid; border-color:#ddd #999 #999 #ddd; border-width:.09em; color:#000; letter-spacing:.09em; } body.gui { text-align:center; background:#111; margin:0;} #content { background:#eee; } #wrapper { position:relative; text-align:left; margin:0 auto; } #main { background-color: #111; clear: both; padding: 5px 5px 5px 5px; } </style><script language="javascript" type="text/javascript" src="jquery.min.js"></script> <script language="javascript" type="text/javascript" src="jquery.flot.min.js"></script> <script language="javascript" type="text/javascript" src="jquery.flot.navigate.min.js"></script> <script language="javascript" type="text/javascript"> // Its structured like this: // 11248us of LOW // 1072us of HIGH // 352us of LOW // etc.. pulse_train = [-11248,384,-1072,1120,-352,384,-1072,384,-1072,384,-1088,384,-1072,384,-1072,384,-1072,384,-1088,368,-1088,384,-1072,1120,-352,384,-1072,384,-1072,384,-1088,368,-1088,368,-1088,384,-1072,384,-1088,1104,-368,368,-1088,1104,-368,368,-1088,1104,-368,352,-10016]; function URFtoPulseTrain(text) { var decArray =[]; // Convert hex string to a Decimal Array for(var i=0; i<text.length; i+=2) { decArray.push(parseInt(text.substr(i,2),16)); } // [0] is always 01 for the urf version. var idx=1; var bitsPerFrame = decArray[idx++]; var enc = 1<<bitsPerFrame; var framesPerByte = 8 / bitsPerFrame; var bitMask=[], bitShift=[]; bitMask[0] = enc-1; // 1bit=1, 2bit=3, 4bit=15 bitShift[0] = 0; for(i=1; i<framesPerByte; i++) { bitMask[i] = bitMask[i-1] << bitsPerFrame; bitShift[i] = bitShift[i-1] + bitsPerFrame; } // Populate lookup table of pulse timings var hi=[],lo=[]; for (var i=0; i< enc; i++) { hi[i] = decArray[idx++]<<8 | decArray[idx++]; lo[i] = decArray[idx++]<<8 | decArray[idx++]; } var burstsToSend = decArray[idx++]; var interburstRepeat = decArray[idx++]; var interburstDelay = decArray[idx++]<<8 | decArray[idx++]; var frames = decArray[idx++]; var b = frames / framesPerByte; if (frames % framesPerByte > 0) // Round up a byte for a partial frame usage b++; var bitStream=[]; for (var i=0; i<b; i++) { bitStream[i] = decArray[idx++]; } function xmitBurst() { var j; var i=frames, k=0; while(i>0) { for(j=framesPerByte; j>=0 && i>0; j--, i--) { // Compute Frame index lookup for pulse dimensions idx = (bitStream[k] & bitMask[j]) >> bitShift[j]; pulseTrain.push(hi[idx]); pulseTrain.push(-lo[idx]); } k++; // Transmitted all frames for byte, next bitstream byte } } var pulseTrain=[]; framesPerByte--; // Adjust for zero indexing. pulseTrain.push(-interburstDelay*interburstRepeat); xmitBurst(); pulseTrain.push(-interburstDelay*interburstRepeat); return pulseTrain; } function scale(x) { return x < 0 ? 0 : 1; } function sign(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; } $('input#textbtn').click(function() { var text = $('textarea#mytextarea').val(); pulse_train = text.split(',').map(function(x){return parseInt(x)}); GraphIT(); }); $('input#urfbtn').click(function() { var text = $('input#urf').val(); pulse_train = URFtoPulseTrain(text); $('textarea#mytextarea').val(pulse_train); GraphIT(); }); // Start up with a default $('textarea#mytextarea').val(pulse_train); GraphIT(); function GraphIT() { function showTooltip(x, y, contents) { $("<div id='tooltip'>" + contents + "</div>").css({ position: "absolute", display: "none", top: y + 5, left: x + 5, border: "1px solid #fdd", padding: "2px", "background-color": "#fee", opacity: 0.80 }).appendTo("body").fadeIn(200); } var previousPoint = null; $("#scope_div").bind("plothover", function (event, pos, item) { if (item) { if (previousPoint != item.dataIndex) { previousPoint = item.dataIndex; $("#tooltip").remove(); var pulse = item.datapoint[0] - item.series.data[item.dataIndex-1][0]; if(pulse) { showTooltip(item.pageX, item.pageY, "Length "+pulse+" uS"); } } } else { $("#tooltip").remove(); previousPoint = null; } }); var norm_pulse=[]; var j=0; for(var i in pulse_train) { if (j > 1 && sign(norm_pulse[j-1]) == sign(pulse_train[i])) { j--; norm_pulse[j] += pulse_train[i]; } else { norm_pulse.push(pulse_train[i]); } j++; } pulse_train = norm_pulse; var scope_data = [[0, scale(sign(pulse_train[0]))]]; var x = 0; var value; for(var i in pulse_train) { value = pulse_train[i]; x += Math.abs(value); scope_data.push([x, scale(sign(value))]); scope_data.push([x, scale(-sign(value))]); } var scope_options = { series: { lines: { show: true, lineWidth: 1} }, grid: { color: "#444", borderWidth: 1, backgroundColor: "#FFF", axisMargin: 50, hoverable: true }, yaxis: { max: 2, min: -2}, xaxis: { min: 0, max: x+1000 }, legend: { show: false }, zoom: { interactive: true}, pan: { interactive: true} }; $.plot($("#scope_div"), [{data: scope_data}], scope_options); } </script> <div id="wrapper"> <div id="main"> <div id="content"> <h2>Pulse definition plotter</h2> <div id='scope_div' style='width:95%;height:35%;'></div> <fieldset> <legend>Pulse sequence as HI/LO durations</legend> <p>Negative values are LOW, Postive a HIGH, all values are in uS.<br/> <textarea id="mytextarea"></textarea><br/> <input id="textbtn" type="submit" value="Plot it"><br/> </fieldset> <fieldset> <legend>Plot Packed URF</legend> <div class="setting"> <div class="label">URF definition</div> <input value="" id="urf" size="80" type="input"> (hex) </div> <input id="urfbtn" type="submit" value="Plot it"> </fieldset> <br/> </div></div></div> </HTML> livebox/universalrf/rfplot.txt Last modified: 2013/06/06 10:14by brett