/cvi/RedPitaya/sockserv/etc/systemd/system/redpitaya_tcpsocket.service |
---|
0,0 → 1,21 |
[Unit] |
Description=TCP socket server for binary transfers of waveforms on Red Pitaya |
After=network.target |
[Service] |
Type=simple |
Restart=always |
#PIDFile=/var/run/redpitaya_scpi.pid |
# TODO: it should be possible to use EnvironmentFile, but it is not working properly |
# complains about failing library path, or something else |
#EnvironmentFile=/etc/sysconfig/redpitaya |
Environment=PATH_REDPITAYA=/opt/redpitaya |
Environment=LD_LIBRARY_PATH=/opt/redpitaya/lib PATH=/sbin:/usr/sbin:/bin:/usr/bin:/opt/redpitaya/sbin:/opt/redpitaya/bin |
ExecStartPre=/bin/sh -c "cat /opt/redpitaya/fpga/fpga_0.94.bit > /dev/xdevcfg" |
#ExecStart =/opt/redpitaya/bin/socket-server |
ExecStart =/root/sockserv/sockserv |
#ExecReload= |
ExecStop =/bin/kill -15 $MAINPID |
[Install] |
WantedBy=multi-user.target |
/cvi/RedPitaya/sockserv/www/apps/assets/desktop.js |
---|
0,0 → 1,260 |
//------------------------------------------------- |
// Redpitaya desktop |
// Created by Alexey Kaygorodov |
//------------------------------------------------- |
; |
(function(Desktop, $) { |
var applications = []; |
var groups = [{ |
name: "System", |
description: "System tools for configuring your Red Pitaya", |
image: "../assets/images/system.png", |
applications: ["updater", "wifi", "licmngr"] |
}, { |
name: "Development", |
description: "Documentation, tutorials and a lot of interesting stuff", |
image: "../assets/images/development.png", |
applications: ["visualprogramming", "scpi", "tcpsocket", "tutorials", "fpga", "apis", "capps", "cmd", "hardwaredoc", "instructions", "github","activelearning"] |
}]; |
var currentGroup = undefined; |
Desktop.init = function() { |
// Here's should be loading from custom user groups from Cookies |
} |
Desktop.save = function() { |
// Here's should be saveing from custom user groups from Cookies |
} |
Desktop.getCurrentGroup = function() { |
return currentGroup; |
} |
Desktop.setApplications = function(listOfapplications) { |
applications = []; |
$.extend(true, applications, listOfapplications); |
var url_arr = window.location.href.split("/"); |
var url = url_arr[0] + '//' + url_arr[2] + '/'; |
for (var i = 0; i < default_applications.length; i++) { |
if (default_applications[i].id == "marketplace") |
default_applications[i].url = url + 'bazaar' |
if (default_applications[i].url[0] == "/") |
default_applications[i].url = window.location.origin + default_applications[i].url; |
applications.push(default_applications[i]); |
} |
for (var i = 0; i < applications.length; i++) { |
applications[i].group = checkApplicationInGroup(applications[i].id); |
applications[i].is_group = false; |
} |
for (var i = 0; i < groups.length; i++) { |
var gr = { |
id: "", |
name: groups[i].name, |
description: groups[i].description, |
url: "#", |
image: groups[i].image, |
check_online: false, |
licensable: false, |
callback: openGroup, |
type: 'run', |
group: "", |
is_group: true |
}; |
applications.push(gr); |
} |
applications.unshift(backButton); |
Desktop.selectGroup(); |
} |
var checkApplicationInGroup = function(app_id) { |
for (var i = 0; i < groups.length; i++) |
if (groups[i].applications.indexOf(app_id) != -1) |
return groups[i].name; |
return ""; |
} |
var openGroup = function(key) { |
Desktop.selectGroup(applications[+key].name); |
} |
var onBackButton = function() { |
Desktop.selectGroup(); |
} |
var placeElements = function() { |
var elemWidth = $('.app-item').outerWidth(true); |
var containerWidth = $('#list-container').width(); |
var elemsInRow = Math.floor(containerWidth / elemWidth); |
elemsInRow = (elemsInRow == 0) ? 1 : elemsInRow; |
var elemHeight = $('.app-item').outerHeight(true); |
var containerHeight = $('#main-container').height(); |
var elemsInCol = Math.floor(containerHeight / elemHeight); |
elemsInCol = (elemsInCol == 0) ? 1 : elemsInCol; |
$("ul.paging").quickPager({ |
pageSize: elemsInRow * elemsInCol |
}); |
} |
var refillList = function() { |
$('.app-item').unbind('click'); |
$('.app-item').unbind('mouseenter'); |
$('.app-item').unbind('mouseleave'); |
$('#main-container').empty(); |
$('#main-container').append('<ul class="paging" id="list-container"></ul>'); |
$('#list-container').empty(); |
for (var i = 0; i < applications.length; i++) { |
if ((currentGroup === undefined && (applications[i].group == "" || applications[i].group === undefined)) || applications[i].group == currentGroup || i==0) { |
var txt = '<li class="app-item" key="' + i + '" group="' + applications[i].group + '" style="display: none;">'; |
txt += '<a href="#" class="app-link"><div class="img-container"><img class="app-icon" src="' + applications[i]['image'] + '"></div><span class="app-name">' + applications[i]['name'] + '</span></a>'; |
txt += '</li>'; |
$('#list-container').append(txt); |
} |
} |
$('.app-item').click(clickApp); |
$('.app-item').mouseenter(overApp); |
$('.app-item').mouseleave(leaveApp); |
} |
Desktop.selectGroup = function(group) { |
currentGroup = group; |
refillList(); |
placeElements(); |
if (currentGroup === undefined) |
$('.app-item[key=0]').hide(); |
else |
$('.app-item[key=0]').show(); |
} |
var clickApp = function(e) { |
var key = parseInt($(this).attr('key')) * 1; |
e.preventDefault(); |
if (applications[key].check_online) { |
OnlineChecker.checkAsync(function() { |
if (!OnlineChecker.isOnline()) { |
if (applications[key].licensable) { |
$('#ignore_link').text('Ignore'); |
$('#ignore_link').attr('href', applications[key].url); |
$('#lic_failed').show(); |
} else { |
$('#ignore_link').text('Close'); |
$('#ignore_link').attr('href', "#"); |
$('#lic_failed').hide(); |
} |
$('#ic_missing').modal('show'); |
return; |
} |
if (applications[key].url != "") |
window.location = applications[key].url; |
if (applications[key].callback !== undefined) |
applications[key].callback(key); |
}); |
} else { |
if (applications[key].url != "") |
window.location = applications[key].url; |
if (applications[key].callback !== undefined) |
applications[key].callback(key); |
} |
} |
var showFeedBack = function() { |
mail = "support@redpitaya.com"; |
subject = "Feedback Red Pitaya OS " + RedPitayaOS.getVersion(); |
var body = "%0D%0A%0D%0A------------------------------------%0D%0A" + "DEBUG INFO, DO NOT EDIT!%0D%0A" + "------------------------------------%0D%0A%0D%0A"; |
body += "Browser:" + "%0D%0A" + JSON.stringify({ parameters: $.browser }) + "%0D%0A"; |
document.location.href = "mailto:" + mail + "?subject=" + subject + "&body=" + body; |
} |
var overApp = function(e) { |
var key = parseInt($(this).attr('key')) * 1; |
$('#description').html(applications[key].description); |
} |
var leaveApp = function(e) { |
$('#description').html(""); |
} |
var onSwipe = function(ev) { |
if ($('.simplePagerNav').length == 0) |
return; |
var rel = 1; |
if (ev.direction == Hammer.DIRECTION_LEFT) |
rel = parseInt($('.active-dot').parent().attr('rel')) * 1 + 1; |
else if (ev.direction == Hammer.DIRECTION_RIGHT) { |
var crel = parseInt($('.active-dot').parent().attr('rel')) * 1; |
if (crel == 1) return; |
rel = crel - 1; |
} |
var obj = $('.simplePageNav' + rel).find('a'); |
if (obj.length == 0) |
return; |
else obj.click(); |
} |
var default_applications = [ |
{ id: "github", name: "Sources", description: "Access to open source code and programming instructions", url: "https://github.com/redpitaya", image: "../assets/images/github.png", check_online: false, licensable: false, callback: undefined, type: 'run' }, |
{ id: "applicationstore", name: "Red Pitaya Store", description: "Access to Red Pitaya official store", url: "http://store.redpitaya.com/", image: "../assets/images/shop.png", check_online: false, licensable: false, callback: undefined, type: 'run' }, |
{ id: "marketplace", name: "Application marketplace", description: "Access to open source and contributed applications", url: "http://bazaar.redpitaya.com/", image: "images/download_icon.png", check_online: true, licensable: false, callback: undefined, type: 'run' }, |
{ id: "feedback", name: "Feedback", description: "Tell us what you like or dislike and what you would like to see improved", url: "", image: "../assets/images/feedback.png", check_online: true, licensable: false, callback: showFeedBack, type: 'run' }, |
{ id: "instructions", name: "Instructions", description: "Quick start instructions, user manuals, specifications, examples & more.", url: "http://redpitaya.readthedocs.io/en/latest/index.html", image: "../assets/images/instr.png", check_online: false, licensable: false, callback: undefined, type: 'run' }, |
{ id: "tutorials", name: "Create own WEB application", description: "RedPitaya tutorials.", url: "http://redpitaya.readthedocs.io/en/latest/doc/developerGuide/software/webApps.html?highlight=own%20web%20application", image: "../assets/images/tutors.png", check_online: false, licensable: false, callback: undefined, type: 'run' }, |
{ id: "wifi", name: "Network manager", description: "Simple way to establish wireless connection with the Red Pitaya", url: "/network_manager/", image: "../network_manager/info/icon.png", check_online: false, licensable: false, callback: undefined, type: 'run' }, |
{ id: "scpi", name: "SCPI server", description: "Remote access to all Red Pitaya inputs/outputs from MATLAB/LabVIEW/Scilab/Python", url: "/scpi_manager/", image: "../scpi_manager/info/icon.png", check_online: false, licensable: false, callback: undefined, type: 'run' }, |
{ id: "tcpsocket", name: "TCP socket server", description: "Remote access to all Red Pitaya inputs/outputs through binary multievent socket", url: "/tcpsocket_manager/", image: "../tcpsocket_manager/info/icon.png", check_online: false, licensable: false, callback: undefined, type: 'run' }, |
{ id: "updater", name: "Red Pitaya OS Update", description: "Red Pitaya ecosystem updater", url: "/updater/", image: "../assets/images/updater.png", check_online: false, licensable: false, callback: undefined, type: 'run' }, |
{ id: "activelearning", name: "Active Learning", description: "Active Learning with Red Pitaya", url: "http://red-pitaya-active-learning.readthedocs.io/en/latest/", image: "../assets/images/active-learning.png", check_online: false, licensable: false, callback: undefined, type: 'run' }, |
{ id: "jupyter", name: "Jupyter server", description: "Jupyter notebook server for running Python applications in a browser tab", url: "/jupyter/", image: "../jupyter_manager/info/icon.png", check_online: false, licensable: false, callback: undefined, type: 'run' }, |
]; |
var backButton = { |
id: "back", |
name: "Back", |
description: "Return to the desktop", |
url: "#", |
image: "../assets/images/back_button.png", |
check_online: false, |
licensable: false, |
callback: onBackButton, |
type: 'run', |
group: "", |
is_group: false |
}; |
$(window).resize(function($) { |
refillList(); |
placeElements(); |
Desktop.selectGroup(); |
}); |
$(document).load(function($) { |
Desktop.init(); |
}); |
$(document).ready(function($) { |
var myElement = document.getElementById('main-container'); |
var mc = new Hammer(myElement); |
mc.on('swipe', onSwipe); |
$("#reboot").click(function(event) { |
$('#reboot_dialog').modal("show"); |
}); |
$("#reboot_confirm").click(function(event) { |
$.get('/reboot'); |
setTimeout(function(){ window.close(); }, 1000); |
}); |
}); |
})(window.Desktop = window.Desktop || {}, jQuery); |
Property changes: |
Added: svn:executable |
## -0,0 +1 ## |
+* |
\ No newline at end of property |
Index: www/apps/tcpsocket_manager/css/style.css |
=================================================================== |
--- www/apps/tcpsocket_manager/css/style.css (nonexistent) |
+++ www/apps/tcpsocket_manager/css/style.css (revision 244) |
@@ -0,0 +1,278 @@ |
+html, body { |
+ width: 100%; |
+ height: 100%; |
+} |
+ |
+body { |
+ color: #cdcccc; |
+ overflow: auto; |
+ padding-right: 0 !important; |
+} |
+ |
+* { |
+ -webkit-touch-callout: none; |
+ -webkit-user-select: none; |
+ -khtml-user-select: none; |
+ -moz-user-select: none; |
+ -ms-user-select: none; |
+ user-select: none; |
+} |
+ |
+.clear:before, .clear:after { |
+ content: ""; |
+ display: table; |
+} |
+ |
+.clear:after { |
+ clear: both; |
+} |
+ |
+.modal { |
+ |
+} |
+ |
+.left-content-tcpsocket > p { |
+ color: #48b3d2; |
+} |
+ |
+.left-content-tcpsocket > ul > li { |
+ list-style-type: none; |
+ color: #cccccc; |
+ } |
+ |
+ |
+.left-content-tcpsocket > ul > li:before |
+{ |
+ content: "- "; |
+} |
+ |
+input, #info div, #info span, .selectable { |
+ -webkit-touch-callout: text; |
+ -webkit-user-select: text; |
+ -khtml-user-select: text; |
+ -moz-user-select: text; |
+ -ms-user-select: text; |
+ user-select: text; |
+} |
+ |
+input { |
+ -webkit-user-modify: read-write-plaintext-only; |
+ -webkit-tap-highlight-color: transparent; |
+} |
+ |
+button:focus, button:active, select:focus, input:focus, option:focus { |
+ outline: 0 !important; |
+ -webkit-appearance: none !important; |
+} |
+ |
+area:hover { |
+ cursor: pointer; |
+} |
+ |
+.full-content { |
+ /*min-width: 1024px;*/ |
+ margin: 0 auto; |
+ position: relative; |
+} |
+ |
+.container-fluid { |
+ margin-top: 20px; |
+} |
+ |
+.container { |
+ width: 100%; |
+ padding-left: 0px; |
+ padding-right: 0px; |
+} |
+ |
+.navbar-collapse { |
+ padding-left: 0px; |
+ padding-right: 0px; |
+} |
+ |
+.navbar-collapse { |
+ float: right; |
+} |
+ |
+.navbar-nav li { |
+ width: 131px; |
+ text-align: center; |
+} |
+ |
+.nav > li > a { |
+ position: relative; |
+ display: block; |
+ padding: 10px 30px; |
+ border-left: 1px solid #999; |
+ |
+} |
+ |
+.navbar-inverse .navbar-nav > li > a { |
+ color: #cdcccc; |
+ outline: none; |
+} |
+ |
+.nav > li > a:hover { |
+ background-color: #444 !important; |
+ color: #E5D5D5; |
+} |
+ |
+.navbar { |
+ border-radius: 0px; |
+ background-color: #343433; |
+ background-image: linear-gradient(to bottom, #343433 0, #343433 100%); |
+ border: 1px solid #999; |
+ min-height: 42px; |
+ border-left: 1px solid #999; |
+} |
+ |
+.back-btn { |
+ height: 22px; |
+ float: left; |
+ margin: -6px 0px 0px 11px; |
+} |
+ |
+.logo { |
+ margin: 5px 0px 0px 15px; |
+ float: left; |
+} |
+ |
+.navbar-collapse collapse in { |
+ width: 100%; |
+ overflow: hidden; |
+} |
+ |
+.navbar-brand { |
+ height: 40px; |
+} |
+ |
+.close { |
+ color: #CAB7B7; |
+ opacity: 1; |
+ text-shadow: 0 0 0 !important; |
+} |
+ |
+.modal-content { |
+ background-color: #343433; |
+ border: 1px solid #999; |
+ border-radius: 0px; |
+ outline: 0; |
+} |
+ |
+#main { |
+ margin-right: 188px; |
+} |
+ |
+.dialog { |
+ margin-right: 0px; |
+ display: none; |
+} |
+ |
+.close:hover, .close:focus { |
+ color: #fff !important; |
+ text-decoration: none; |
+ cursor: pointer; |
+ opacity: 1; |
+} |
+ |
+.btn { |
+ background-image: none; |
+ border: 0 solid transparent; |
+ white-space: nowrap; |
+ padding: 6px 12px; |
+ line-height: 1.42857143; |
+ border-radius: 0; |
+ width: 100%; |
+ background-color: transparent; |
+ text-shadow: 0px 0px; |
+ /* box-shadow: 0 0 0 1px #777; */ |
+ color:#cdcccc !important; |
+} |
+ |
+.btn:hover, btn:active { |
+ color: #fff !important; |
+ background-image: none; |
+} |
+ |
+.btn.focus { |
+ color: #777; |
+ border: 0px solid transparent; |
+} |
+ |
+.btn:active, .btn.active { |
+ background-image: none; |
+ background-color: #999; |
+ color: #111 !important; |
+} |
+ |
+.left-tcpsocket { |
+ float:left; |
+ width:100%; |
+} |
+ |
+.left-content-tcpsocket { |
+ margin-right:120px; |
+} |
+ |
+.right-tcpsocket { |
+ float:right; |
+ width: 120px; |
+ margin-left: -120px; |
+} |
+ |
+#header { |
+ background-color: black; |
+ color: #CCC; |
+ text-align: center; |
+ padding: 6px; |
+ overflow: hidden; |
+ height: 30px; |
+ width: 100%; |
+ white-space: nowrap; |
+} |
+ |
+.example_button |
+{ |
+ margin-top: 20px; |
+ width: 131px; |
+ text-align: center; |
+ list-style: none; |
+ height: 40px; |
+ padding-top:10px; |
+ border: 1px solid; |
+} |
+ |
+.example_button:hover |
+{ |
+ background: gray; |
+ cursor: pointer; |
+} |
+ |
+.example_button span { |
+ color: #337ab7; |
+} |
+ |
+.run_buttons { |
+ display: inline-block; |
+ text-align: center; |
+ border: 1px solid; |
+ border-color: #cccccc;; |
+ background-color: #47b2d1; |
+ color: #000000; |
+ margin: 0 auto; |
+ margin-top: 15px; |
+ margin-bottom: 15px; |
+ font-size: 16pt; |
+ padding: 6px 20px 6px 20px; |
+ width: 120px; |
+} |
+ |
+.run_buttons:hover { |
+ background-color: #69d4d1; |
+ cursor: pointer; |
+} |
+ |
+.run_buttons a { |
+ color: #000000; |
+ text-decoration: none; |
+} |
/www/apps/tcpsocket_manager/css/style.css |
---|
Property changes: |
Added: svn:executable |
## -0,0 +1 ## |
+* |
\ No newline at end of property |
Index: www/apps/tcpsocket_manager/fpga.conf |
=================================================================== |
--- www/apps/tcpsocket_manager/fpga.conf (nonexistent) |
+++ www/apps/tcpsocket_manager/fpga.conf (revision 244) |
@@ -0,0 +1 @@ |
+/opt/redpitaya/fpga/fpga_0.94.bit |
/www/apps/tcpsocket_manager/fpga.conf |
---|
Property changes: |
Added: svn:executable |
## -0,0 +1 ## |
+* |
\ No newline at end of property |
Index: www/apps/tcpsocket_manager/img/apps.png |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/www/apps/tcpsocket_manager/img/apps.png |
---|
Property changes: |
Added: svn:executable |
## -0,0 +1 ## |
+* |
\ No newline at end of property |
Added: svn:mime-type |
## -0,0 +1 ## |
+application/octet-stream |
\ No newline at end of property |
Index: www/apps/tcpsocket_manager/img/dummy.png |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/www/apps/tcpsocket_manager/img/dummy.png |
---|
Property changes: |
Added: svn:executable |
## -0,0 +1 ## |
+* |
\ No newline at end of property |
Added: svn:mime-type |
## -0,0 +1 ## |
+application/octet-stream |
\ No newline at end of property |
Index: www/apps/tcpsocket_manager/index.html |
=================================================================== |
--- www/apps/tcpsocket_manager/index.html (nonexistent) |
+++ www/apps/tcpsocket_manager/index.html (revision 244) |
@@ -0,0 +1,168 @@ |
+<!-- $Id$ |
+ * |
+ * Red Pitaya TCPSOCKET service manager |
+ * |
+ * Author: Dakus <info@eskala.eu> |
+ * |
+ * (c) Red Pitaya http://www.redpitaya.com |
+ * |
+--> |
+<!DOCTYPE html> |
+<html lang="en"> |
+ |
+<head> |
+ <meta http-equiv="content-type" content="text/html; charset=utf-8"></meta> |
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> |
+ <title>Red Pitaya</title> |
+ <link rel="stylesheet" href="../assets/bootstrap/css/bootstrap.min.css"> |
+ <link rel="stylesheet" href="../assets/popupstack.css" type="text/css" /> |
+ <link rel="stylesheet" href="../assets/help-system/help-system.css" type="text/css" /> |
+ <link rel="stylesheet" href="css/style.css?2"> |
+ <script src="../assets/jquery/jquery-2.1.3.min.js"></script> |
+ <script src="../assets/jquery/jquery-ui.min.js"></script> |
+ <script src="../assets/jquery/jquery.ui.touch-punch.min.js"></script> |
+ <script src="../assets/jquery/jquery.cookie.js?3"></script> |
+ <script src="../assets/jquery/jquery.browser.js"></script> |
+ <script src="../assets/bootstrap/js/bootstrap.min.js"></script> |
+ <script src="../assets/browsercheck.js?1"></script> |
+ <script src="../assets/analytics-core.js"></script> |
+ <script src="../assets/popupstack.js?1"></script> |
+ <script src="../assets/help-system/help-system.js"></script> |
+ <script src="js/help-tcpsocket.js"></script> |
+ <script src="js/manager.js?3"></script> |
+ <script src="js/analytics-main.js?1"></script> |
+ |
+</head> |
+ |
+<body> |
+ <div id="loader-wrapper"> |
+ <div id="loader"></div> |
+ </div> |
+ <div id="header"> |
+ <div id="description"> </div> |
+ </div> |
+ <div class="full-content"> |
+ <div class="container-fluid"> |
+ <div class="navbar navbar-inverse" role="navigation"> |
+ <div class="container"> |
+ <div class="navbar-header"> |
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> |
+ <span class="sr-only">T</span> |
+ <span class="icon-bar"></span> |
+ <span class="icon-bar"></span> |
+ <span class="icon-bar"></span> |
+ </button> |
+ <a class="navbar-brand" href="/"> |
+ <img class="back-btn" src="../assets/images/navigation_arrow_left.png"> |
+ </a> |
+ <img class="logo" width=110 src="../assets/images/navigation_logo.png"> |
+ </div> |
+ <div class="collapse navbar-collapse"> |
+ <ul class="nav navbar-nav"> |
+ </ul> |
+ </div> |
+ </div> |
+ </div> |
+ <div id="global_container" style="position: relative;"> |
+ <div id="main"> |
+ <div class="left-tcpsocket"> |
+ <div class="left-content-tcpsocket" style="font-size: 18pt; color: gray;"> |
+ <p>TCPSOCKET server application</p> |
+ <ul> |
+ <li>Enables remote control of Red Pitaya using multievent binary buffer</li> |
+ <li>Provides access to Red Pitaya waveform sampler (fast ADC).</li> |
+ <li>Supports WIFI or LAN remote interface</li> |
+ </ul> |
+ </div> |
+ </div> |
+ <div class="right-tcpsocket"> |
+ <br> |
+ <br> |
+ <br> |
+ <img src="img/apps.png" width="200%"> |
+ </div> |
+ <div> |
+ <div id="label-is-runnung" align=center style="font-size: 16pt; color: red;"> |
+ TCPSOCKET server is not running, press RUN button to start it |
+ </div> |
+ <div id="label-is-not-runnung" align=center style="font-size: 16pt; color: green; display: none;"> |
+ TCPSOCKET server is running... (IP="<span id="ip-addr">127.0.0.1</span>", port="9930") |
+ </div> |
+ <div align="center"> |
+ <ul class=""> |
+ <li class="run_buttons" id="TCPSOCKET_RUN"> |
+ <a href="#" id="a_run" style="">RUN</a> |
+ </li> |
+ <li class="run_buttons" id="TCPSOCKET_STOP" style="display:none;"> |
+ <a href="#" id="a_stop">STOP</a> |
+ </li> |
+ </ul> |
+ </div> |
+ <div align=center> |
+ Example about how to Control your Red Pitaya using MATLAB/Python/LabVIEW/Scilab. |
+ Are available on link below |
+ <div align="center"> |
+ <ul class=""> |
+ <li class="example_button" id="TCPSOCKET_EXAMPLES"> |
+ <span>Examples</span> |
+ </li> |
+ </ul> |
+ </div> |
+ </div> |
+ </div> |
+ </div> |
+ </div> |
+ </div> |
+ </div> |
+ <div> |
+ <div id="sys_info_view" style="display:none; position:fixed; bottom:0; left: 0; background-color: rgba(0, 0, 0, 0.2); text-align:left; padding: 5px; font-size:12px; color:white; "> |
+ FPS:<span id="fps_view">0</span> Throughput:<span id="throughput_view">0</span> CPU Load:<span id="cpu_load">0</span> |
+ <br/> Memory total:<span id="totalmem_view">0</span> Free:<span id="freemem_view">0</span> Usage:<span id="usagemem_view">0</span> |
+ </div> |
+ </div> |
+ <div class="modal fade" id="feedback_error" tabindex="-1" role="dialog" aria-labelledby="bazaar_naLabel" aria-hidden="true"> |
+ <div class="modal-dialog"> |
+ <div class="modal-content"> |
+ <div class="modal-header"> |
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> |
+ <h4 class="modal-title" id="oops_label">Oops, something went wrong</h4> |
+ </div> |
+ <div class="modal-body" style="text-align: center; font-size: 18px;"> |
+ <p>Please send us the report and help us to fix this issue</p> |
+ <p>Thank you!</p> |
+ </div> |
+ <div class="modal-footer"> |
+ <div class="bazaar-link" style="float: left; width: 50%;"> |
+ <a href="#" style="border: 1px solid; width: 100%" id="send_report_btn" data-dismiss="modal" class="list-group-item btn">Send report</a> |
+ </div> |
+ <div class="bazaar-link" style="float: left; width: 50%;"> |
+ <a href="#" style="border: 1px solid; width: 100%" id="restart_app_btn" data-dismiss="modal" class="list-group-item btn">Restart Application</a> |
+ </div> |
+ </div> |
+ </div> |
+ </div> |
+ </div> |
+ <div class="modal fade" id="analytics_dialog" tabindex="-1" role="dialog" aria-labelledby="bazaar_naLabel" aria-hidden="true"> |
+ <div class="modal-dialog"> |
+ <div class="modal-content"> |
+ <div class="modal-header"> |
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> |
+ <h4 class="modal-title" id="bazaar_naLabel">Diagnostic & Usage</h4> |
+ </div> |
+ <div class="modal-body"> |
+ <p>Would you like to help Red Pitaya team to improve its product and services by occasionally providing anonymous diagnostic and usage information?</p> |
+ </div> |
+ <div class="modal-footer"> |
+ <div class="bazaar-link" style="float: left; width: 50%;"> |
+ <a href="#" data-dismiss="modal" id="enable_analytics" class="list-group-item btn">Yes</a> |
+ </div> |
+ <div class="bazaar-link" style="float: left; width: 50%;"> |
+ <a href="#" data-dismiss="modal" id="disable_analytics" class="list-group-item btn">No</a> |
+ </div> |
+ </div> |
+ </div> |
+ </div> |
+ </div> |
+</body> |
+ |
+</html> |
/www/apps/tcpsocket_manager/index.html |
---|
Property changes: |
Added: svn:executable |
## -0,0 +1 ## |
+* |
\ No newline at end of property |
Index: www/apps/tcpsocket_manager/info/icon.png |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/www/apps/tcpsocket_manager/info/icon.png |
---|
Property changes: |
Added: svn:executable |
## -0,0 +1 ## |
+* |
\ No newline at end of property |
Added: svn:mime-type |
## -0,0 +1 ## |
+application/octet-stream |
\ No newline at end of property |
Index: www/apps/tcpsocket_manager/info/info.json |
=================================================================== |
--- www/apps/tcpsocket_manager/info/info.json (nonexistent) |
+++ www/apps/tcpsocket_manager/info/info.json (revision 244) |
@@ -0,0 +1,6 @@ |
+{ |
+ "name": "TcpSocket", |
+ "version": "0.96-336", |
+ "revision": "4506f6e", |
+ "description": "Remote access and binary multievent transfer of waveforms" |
+} |
/www/apps/tcpsocket_manager/info/info.json |
---|
Property changes: |
Added: svn:executable |
## -0,0 +1 ## |
+* |
\ No newline at end of property |
Index: www/apps/tcpsocket_manager/js/analytics-main.js |
=================================================================== |
--- www/apps/tcpsocket_manager/js/analytics-main.js (nonexistent) |
+++ www/apps/tcpsocket_manager/js/analytics-main.js (revision 244) |
@@ -0,0 +1,21 @@ |
+//------------------------------------------------- |
+// Redpitaya analytics system |
+// Created by Alexey Kaygorodov |
+//------------------------------------------------- |
+ |
+(function($) { |
+ var startUsing = 0; |
+ $(document).ready(function($) { |
+ AnalyticsCore.init(function(){ |
+ AnalyticsCore.sendExecTime('/tcpsocket_manager', 'tcpsocket_manager'); |
+ AnalyticsCore.sendScreenView('/tcpsocket_manager', 'Redpitaya', 'Remote control'); |
+ AnalyticsCore.sendSysInfo('/tcpsocket_manager'); |
+ startUsing = performance.now(); |
+ }); |
+ }); |
+ |
+ $(window).on('beforeunload', function(){ |
+ $.cookie('tcpsocket_manager-run', performance.now() - startUsing); |
+ }); |
+ |
+})(jQuery); |
/www/apps/tcpsocket_manager/js/analytics-main.js |
---|
Property changes: |
Added: svn:executable |
## -0,0 +1 ## |
+* |
\ No newline at end of property |
Index: www/apps/tcpsocket_manager/js/help-tcpsocket.js |
=================================================================== |
--- www/apps/tcpsocket_manager/js/help-tcpsocket.js (nonexistent) |
+++ www/apps/tcpsocket_manager/js/help-tcpsocket.js (revision 244) |
@@ -0,0 +1,27 @@ |
+var helpListTCPSOCKET = |
+{ |
+ idle: [ |
+ { |
+ Text: "How to control your Red Pitaya remotely?", |
+ URL: "http://redpitaya.com/control/", |
+ Img: "pool" |
+ }, |
+ { |
+ Text: "Red Pitaya's Forum", |
+ URL: "http://forum.redpitaya.com/", |
+ Img: "star" |
+ } |
+ ], |
+ loaded: [ |
+ { |
+ Text: "Description3", |
+ URL: "http://redpitaya.com", |
+ Img: "star" |
+ }, |
+ { |
+ Text: "Description4", |
+ URL: "http://redpitaya.com", |
+ Img: "pool" |
+ } |
+ ] |
+}; |
/www/apps/tcpsocket_manager/js/help-tcpsocket.js |
---|
Property changes: |
Added: svn:executable |
## -0,0 +1 ## |
+* |
\ No newline at end of property |
Index: www/apps/tcpsocket_manager/js/manager.js |
=================================================================== |
--- www/apps/tcpsocket_manager/js/manager.js (nonexistent) |
+++ www/apps/tcpsocket_manager/js/manager.js (revision 244) |
@@ -0,0 +1,120 @@ |
+/* |
+ * Red Pitaya TCPSOCKET service manager |
+ * |
+ * Author: Artem Kokos <a.kokos@integrasources.eu> |
+ * |
+ * (c) Red Pitaya http://www.redpitaya.com |
+ * |
+ */ |
+ |
+(function(TCPSOCKET, $, undefined) { |
+ TCPSOCKET.CheckServerStatus = function() { |
+ $.ajax({ |
+ url: '/get_tcpsocket_status', |
+ type: 'GET', |
+ timeout: 1500 |
+ }) |
+ .fail(function(msg) { |
+ if (msg.responseText.split('\n')[0] == "active") { |
+ $('#TCPSOCKET_RUN').hide(); |
+ $('#TCPSOCKET_STOP').css('display', 'block'); |
+ $('#label-is-runnung').hide(); |
+ $('#label-is-not-runnung').show(); |
+ } else { |
+ $('#TCPSOCKET_STOP').hide(); |
+ $('#TCPSOCKET_RUN').css('display', 'block'); |
+ $('#label-is-not-runnung').hide(); |
+ $('#label-is-runnung').show(); |
+ } |
+ }) |
+ } |
+ |
+ TCPSOCKET.StartServer = function() { |
+ $.ajax({ |
+ url: '/start_tcpsocket_manager', |
+ type: 'GET', |
+ timeout: 1500 |
+ }) |
+ .fail(function(msg) { |
+ if (msg.responseText) {} else {} |
+ }) |
+ } |
+ |
+ TCPSOCKET.StopServer = function() { |
+ $.ajax({ |
+ url: '/stop_tcpsocket_manager', |
+ type: 'GET', |
+ timeout: 1500 |
+ }) |
+ .fail(function(msg) { |
+ if (msg.responseText) {} else {} |
+ }) |
+ } |
+ |
+ TCPSOCKET.GetIP = function() { |
+ $.ajax({ |
+ url: '/get_rpip', |
+ type: 'GET', |
+ }).fail(function(msg) { |
+ |
+ var res = msg.responseText.split(";"); |
+ |
+ var ethIP = res[0].match(/inet\s+\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/2[0-90]\b/); |
+ var wlanIP = res[1].match(/inet\s+\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/2[0-90]\b/); |
+ |
+ if (ethIP != null){ |
+ ethIP = ethIP[0].split(" ")[1].split("/")[0]; |
+ $('#ip-addr').text(ethIP); |
+ } |
+ else if (wlanIP != null){ |
+ wlanIP = wlanIP[0].split(" ")[1].split("/")[0]; |
+ $('#ip-addr').text(wlanIP); |
+ } |
+ else $('#ip-addr').text("None"); |
+ |
+ |
+ |
+ }).done(function(msg) { |
+ |
+ var res = msg.responseText.split(";"); |
+ |
+ var ethIP = res[0].match(/inet\s+\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/2[0-90]\b/); |
+ var wlanIP = res[1].match(/inet\s+\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/2[0-90]\b/); |
+ |
+ if (ethIP != null){ |
+ ethIP = ethIP[0].split(" ")[1].split("/")[0]; |
+ $('#ip-addr').text(ethIP); |
+ } |
+ else if (wlanIP != null){ |
+ wlanIP = wlanIP[0].split(" ")[1].split("/")[0]; |
+ $('#ip-addr').text(wlanIP); |
+ } |
+ else $('#ip-addr').text("None"); |
+ |
+ }); |
+ } |
+ |
+}(window.TCPSOCKET = window.TCPSOCKET || {}, jQuery)); |
+ |
+ |
+ |
+ |
+// Page onload event handler |
+$(function() { |
+ |
+ // Init help |
+ Help.init(helpListTCPSOCKET); |
+ Help.setState("idle"); |
+ |
+ TCPSOCKET.CheckServerStatus(); |
+ setInterval(TCPSOCKET.GetIP, 1000); |
+ setInterval(TCPSOCKET.CheckServerStatus, 3000); |
+ |
+ $('#TCPSOCKET_RUN').click(TCPSOCKET.StartServer); |
+ |
+ $('#TCPSOCKET_STOP').click(TCPSOCKET.StopServer); |
+ |
+ $('#TCPSOCKET_EXAMPLES').click(function(){ |
+ window.open('http://redpitaya.com/examples-new/','_blank'); |
+ }); |
+}); |
/www/apps/tcpsocket_manager/js/manager.js |
---|
Property changes: |
Added: svn:executable |
## -0,0 +1 ## |
+* |
\ No newline at end of property |
Index: www/apps/tcpsocket_manager/nginx.conf |
=================================================================== |
--- www/apps/tcpsocket_manager/nginx.conf (nonexistent) |
+++ www/apps/tcpsocket_manager/nginx.conf (revision 244) |
@@ -0,0 +1,68 @@ |
+ location /get_tcpsocket_status { |
+ add_header 'Access-Control-Allow-Origin' '*'; |
+ add_header 'Access-Control-Allow-Credentials' 'true'; |
+ add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; |
+ add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; |
+ |
+ default_type application/json; |
+ |
+ content_by_lua ' |
+ local f = io.popen("systemctl is-active redpitaya_tcpsocket.service") |
+ local content = f:read("*all") |
+ f:close() |
+ ngx.say(content) |
+ '; |
+ } |
+ |
+ location /start_tcpsocket_manager { |
+ add_header 'Access-Control-Allow-Origin' '*'; |
+ add_header 'Access-Control-Allow-Credentials' 'true'; |
+ add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; |
+ add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; |
+ |
+ default_type application/json; |
+ |
+ content_by_lua ' |
+ local f = io.popen("systemctl start redpitaya_tcpsocket.service") |
+ f:close() |
+ ngx.say("OK") |
+ '; |
+ } |
+ |
+ location /stop_tcpsocket_manager { |
+ add_header 'Access-Control-Allow-Origin' '*'; |
+ add_header 'Access-Control-Allow-Credentials' 'true'; |
+ add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; |
+ add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; |
+ |
+ default_type application/json; |
+ |
+ content_by_lua ' |
+ local f = io.popen("systemctl stop redpitaya_tcpsocket.service") |
+ f:close() |
+ ngx.say("OK") |
+ '; |
+ } |
+ |
+ |
+ |
+ |
+ |
+ location /get_rpip { |
+ add_header 'Access-Control-Allow-Origin' '*'; |
+ add_header 'Access-Control-Allow-Credentials' 'true'; |
+ add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; |
+ add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; |
+ |
+ default_type application/json; |
+ |
+ content_by_lua ' |
+ local eth = io.popen("ip -4 addr list eth0") |
+ local wlan = io.popen("ip addr list wlan0wext") |
+ local eth_content = eth:read("*all") |
+ local wlan_content = wlan:read("*all") |
+ eth:close() |
+ wlan:close() |
+ ngx.say(eth_content..";"..wlan_content) |
+ '; |
+ } |
/www/apps/tcpsocket_manager/nginx.conf |
---|
Property changes: |
Added: svn:executable |
## -0,0 +1 ## |
+* |
\ No newline at end of property |