Widget / TinyG

This widget shows the TinyG planner buffer so other widgets can limit their flow of sending commands and other specific TinyG features.

HTML

<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
<script src="http://www.chilipeppr.com/js/require.js"></script>
<div id="com-chilipeppr-widget-tinyg" class="panel panel-default">
    <div class="panel-heading">
        <div class="btn-toolbar pull-right" role="toolbar" >
            <div class="btn-group">
                <button type="button" class="btn btn-xs btn-default btn-danger tinyg-feedhold" data-delay="1000" data-animation="true" data-placement="auto" data-container="body" data-trigger="hover" data-title="Feedhold" data-content="Stop movement immediately. Maintains positional accuracy. Sends ! command to TinyG which jumps past the planner buffer so you get immediate stop. Movement can be resumed with ~ command. If you want to jog you should flush queue with %." ><!-- <span class="glyphicon glyphicon-pause"></span> --><span style="font-size:10px;">Feedhold</span> !</button>
                <button type="button" class="btn btn-xs btn-default tinyg-cyclestart"  data-delay="1000" data-animation="true" data-placement="auto" data-container="body" data-trigger="hover" data-title="Cycle Start" data-content="Resume movement from stopping point"><span class="">~</span></button>
                <button type="button" class="btn btn-xs btn-default tinyg-queueflush"  data-delay="1000" data-animation="true" data-placement="auto" data-container="body" data-trigger="hover" data-title="Queue Flush" data-content="Empty planner buffer. Used for jogging and other cycles"><span class="">%</span></button>
            </div>
            <div class="btn-group">
                <button type="button" class="btn btn-xs btn-default tinyg-ctrlx" data-delay="1000" data-animation="true" data-placement="auto" data-container="body" data-trigger="hover" data-title="Reset TinyG" data-content="Sends a Ctrl-X to TinyG to reset it. You should see the LED's blink that TinyG is resetting."><span style="font-size:7px;">Reset</span></button>
   ...

CSS

#com-chilipeppr-widget-tinyg-body {
    /* padding:0; */
}
.com-chilipeppr-interface-cnccontroller-stat .col {
    padding:0 10px 0 0;
}
.com-chilipeppr-interface-cnccontroller-stat .col:last-child {
    padding:0;
}
.com-chilipeppr-interface-cnccontroller-stat .progress {
    margin-bottom:0;
}
.com-chilipeppr-interface-cnccontroller-stat .stat-row {
    padding-top:2px;
}
.com-chilipeppr-interface-cnccontroller-stat div.col.lblpad {
    padding-left:10px;
}
.com-chilipeppr-interface-cnccontroller-stat  .stat-unit {
    font-size:9px;
    display:none;
}
.com-chilipeppr-interface-cnccontroller-stat  div.col.well {
    margin-bottom:0px;
    padding-left:5px;
}
.com-chilipeppr-interface-cnccontroller-stat  .stat-sm {
    font-size:10px;
}

JavaScript

// Test this element. This code is auto-removed by the chilipeppr.load()
cprequire_test(["inline:com-chilipeppr-widget-tinyg"], function (tinyg) {
    console.log("test running of " + tinyg.id);
    tinyg.init();

    // create a typical test of planner buffer
    // you never want planner buffer with more than 12 items queued, 4 are reserved for pulling
    // from serial buffer, so you want qr to be no less than 12
    var buf = [27, 26, 25, 18, 14, 15, 16, 18, 17, 16, 12, 11, 10, 14, 17, 16, 15, 10, 22, 28];
    var delay = 1000;
    var delayPlus = 500;
    chilipeppr.currentCtr = -1;
    /*
    for (var ctr = 0; ctr < buf.length; ctr++) {
        
        setTimeout(function () {
            chilipeppr.currentCtr++;
            //console.log("chilipeppr.currentCtr:", chilipeppr.currentCtr);
            var cmd = '{"qr":' + buf[chilipeppr.currentCtr] + '}';
            chilipeppr.publish("/com-chilipeppr-widget-serialport/recvline", {dataline: cmd});
            //chilipeppr.currentCtr = chilipeppr.currentCtr + 1;
        }, delay);
        delay = delay + delayPlus;
    }    
    */
    
    // manual test of coordinates and how we publish them to the generic interface
    var testRecvline = function() {
        // {"r":{"qr":28},"f":[1,0,10,8758]}
        // {"r":{"fb":435.10},"f":[1,0,10,2670]}
        setTimeout(function () {
            chilipeppr.publish("/com-chilipeppr-widget-serialport/recvline", 
                               {dataline:'{"r":{"qr":28},"f":[1,0,10,8758]}'});
        }, 900);
        setTimeout(function () {
            chilipeppr.publish("/com-chilipeppr-widget-serialport/recvline", 
                               {dataline:'{"r":{"fb":380.08},"f":[1,0,10,2670]}'});
        }, 1500);
        setTimeout(function () {
            chilipeppr.publish("/com-chilipeppr-widget-serialport/recvline", 
                               {dataline:'{"r":{"qr":23},"f":[1,0,10,8758]}'});
        }, 2900);
        setTimeout(function () {
           ...