fix: small collection of bugfixed debugger hints and warnings (#801)

* small collection of bugfixed debugger hints / warnings

* 'toStdVector' has been explicitly marked deprecated

* fixed double zip naming in artifacts

* V4L2 WebUI Fix

* Some code fixes based on alerts from lgtm.com

* only execute dynamic v4l2 enum code, if V4L2_AVAIL

* very high critical bugfix ;)

* merge fix

* some lgtm.com fixes

* lgtm fixes

* undo localtime_r fix

Co-authored-by: Paulchen Panther <16664240+Paulchen-Panther@users.noreply.github.com>
This commit is contained in:
SJunkies 2020-05-25 21:51:11 +02:00 committed by GitHub
parent e1288a2649
commit 3ff7fe483f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 519 additions and 522 deletions

View File

@ -64,7 +64,7 @@ jobs:
- name: Upload artifacts - name: Upload artifacts
uses: actions/upload-artifact@v1 uses: actions/upload-artifact@v1
with: with:
name: ${{ matrix.dockerTag }}.zip name: ${{ matrix.dockerTag }}
path: ${{ matrix.dockerTag }} path: ${{ matrix.dockerTag }}
if: matrix.dockerTag != 'aarch64' if: matrix.dockerTag != 'aarch64'
@ -111,7 +111,7 @@ jobs:
- name: Upload artifacts - name: Upload artifacts
uses: actions/upload-artifact@v1 uses: actions/upload-artifact@v1
with: with:
name: macOS.zip name: macOS
path: macOS path: macOS
###################### ######################
@ -169,11 +169,12 @@ jobs:
run: | run: |
mkdir -p windows mkdir -p windows
mv build/*.zip windows mv build/*.zip windows
# Upload artifacts # Upload artifacts
- name: Upload artifacts - name: Upload artifacts
uses: actions/upload-artifact@v1 uses: actions/upload-artifact@v1
with: with:
name: windows.zip name: windows
path: windows path: windows
###################### ######################

View File

@ -41,7 +41,7 @@ We provide a macOS Build but we can not support this.
## Documentation ## Documentation
Covers these topics (WorkInProgress) Covers these topics (WorkInProgress)
- Installtion - Installation
- Configuration - Configuration
- Effect development - Effect development
- JSON API - JSON API

View File

@ -118,6 +118,7 @@ $(document).ready( function() {
buildSchemaPart(item, v4l2_dynamic_enum_schema, val); buildSchemaPart(item, v4l2_dynamic_enum_schema, val);
grabberV4L2.original_schema.properties[item] = window.schema.grabberV4L2.properties[item]; grabberV4L2.original_schema.properties[item] = window.schema.grabberV4L2.properties[item];
grabberV4L2.schema.properties[item] = window.schema.grabberV4L2.properties[item]; grabberV4L2.schema.properties[item] = window.schema.grabberV4L2.properties[item];
conf_editor_v4l2.validator.schema.properties.grabberV4L2.properties[item] = window.schema.grabberV4L2.properties[item];
grabberV4L2.removeObjectProperty(item); grabberV4L2.removeObjectProperty(item);
delete grabberV4L2.cached_editors[item]; delete grabberV4L2.cached_editors[item];

View File

@ -86,16 +86,9 @@ function createClassicLeds(){
var pttlv = parseInt($("#ip_cl_ptlv").val())/100; var pttlv = parseInt($("#ip_cl_ptlv").val())/100;
var pttrh = parseInt($("#ip_cl_ptrh").val())/100; var pttrh = parseInt($("#ip_cl_ptrh").val())/100;
var pttrv = parseInt($("#ip_cl_ptrv").val())/100; var pttrv = parseInt($("#ip_cl_ptrv").val())/100;
//helper //helper
var edgeHGap = edgeVGap/(16/9); var edgeHGap = edgeVGap/(16/9);
//var cornerHGap = cornerVGap/(16/9);
var Vmin = 0.0 + edgeVGap;
var Vmax = 1.0 - edgeVGap;
var Hmin = 0.0 + edgeHGap;
var Hmax = 1.0 - edgeHGap;
var Hdiff = Hmax-Hmin;
var Vdiff = Vmax-Vmin;
var ledArray = []; var ledArray = [];
function createFinalArray(array){ function createFinalArray(array){
@ -154,7 +147,7 @@ function createClassicLeds(){
function createTopLeds(){ function createTopLeds(){
var steph = (pttrh - pttlh - (2*edgeHGap))/ledstop; var steph = (pttrh - pttlh - (2*edgeHGap))/ledstop;
var stepv = (pttrv - pttlv)/ledstop; var stepv = (pttrv - pttlv)/ledstop;
for (var i = 0; i<ledstop; i++){ for (var i = 0; i<ledstop; i++){
var hmin = ovl("-",pttlh+(steph*Number([i]))+edgeHGap); var hmin = ovl("-",pttlh+(steph*Number([i]))+edgeHGap);
var hmax = ovl("+",pttlh+(steph*Number([i+1]))+edgeHGap); var hmax = ovl("+",pttlh+(steph*Number([i+1]))+edgeHGap);
@ -167,7 +160,7 @@ function createClassicLeds(){
function createRightLeds(){ function createRightLeds(){
var steph = (ptbrh - pttrh)/ledsright; var steph = (ptbrh - pttrh)/ledsright;
var stepv = (ptbrv - pttrv - (2*edgeVGap))/ledsright; var stepv = (ptbrv - pttrv - (2*edgeVGap))/ledsright;
for (var i = 0; i<ledsright; i++){ for (var i = 0; i<ledsright; i++){
var hmax = pttrh+(steph*Number([i+1])); var hmax = pttrh+(steph*Number([i+1]));
var hmin = hmax-ledsVDepth; var hmin = hmax-ledsVDepth;
@ -180,7 +173,7 @@ function createClassicLeds(){
function createBottomLeds(){ function createBottomLeds(){
var steph = (ptbrh - ptblh - (2*edgeHGap))/ledsbottom; var steph = (ptbrh - ptblh - (2*edgeHGap))/ledsbottom;
var stepv = (ptbrv - ptblv)/ledsbottom; var stepv = (ptbrv - ptblv)/ledsbottom;
for (var i = ledsbottom-1; i>-1; i--){ for (var i = ledsbottom-1; i>-1; i--){
var hmin = ovl("-",ptblh+(steph*Number([i]))+edgeHGap); var hmin = ovl("-",ptblh+(steph*Number([i]))+edgeHGap);
var hmax = ovl("+",ptblh+(steph*Number([i+1]))+edgeHGap); var hmax = ovl("+",ptblh+(steph*Number([i+1]))+edgeHGap);
@ -193,7 +186,7 @@ function createClassicLeds(){
function createLeftLeds(){ function createLeftLeds(){
var steph = (ptblh - pttlh)/ledsleft; var steph = (ptblh - pttlh)/ledsleft;
var stepv = (ptblv - pttlv - (2*edgeVGap))/ledsleft; var stepv = (ptblv - pttlv - (2*edgeVGap))/ledsleft;
for (var i = ledsleft-1; i>-1; i--){ for (var i = ledsleft-1; i>-1; i--){
var hmin = pttlh+(steph*Number([i])); var hmin = pttlh+(steph*Number([i]));
var hmax = hmin+ledsVDepth; var hmax = hmin+ledsVDepth;
@ -378,7 +371,7 @@ $(document).ready(function() {
var slConfig = window.serverConfig.ledConfig; var slConfig = window.serverConfig.ledConfig;
//Check, if structure is not aligned to expected -> migrate structure //Check, if structure is not aligned to expected -> migrate structure
var newConfig = {};
if ( isEmpty(slConfig.classic) ) if ( isEmpty(slConfig.classic) )
{ {
slConfig = migrateLedConfig( slConfig ); slConfig = migrateLedConfig( slConfig );
@ -530,7 +523,7 @@ $(document).ready(function() {
conf_editor.validate().length ? $('#btn_submit_controller').attr('disabled', true) : $('#btn_submit_controller').attr('disabled', false); conf_editor.validate().length ? $('#btn_submit_controller').attr('disabled', true) : $('#btn_submit_controller').attr('disabled', false);
// led controller sepecific wizards // led controller sepecific wizards
$('#btn_wiz_holder').html("") $('#btn_wiz_holder').html("");
$('#btn_led_device_wiz').off(); $('#btn_led_device_wiz').off();
if(ledType == "philipshue") { if(ledType == "philipshue") {

View File

@ -1,427 +1,426 @@
$(document).ready(function() { $(document).ready(function() {
performTranslation(); performTranslation();
var oldEffects = []; var oldEffects = [];
var cpcolor = '#B500FF'; var cpcolor = '#B500FF';
var mappingList = window.serverSchema.properties.color.properties.imageToLedMappingType.enum; var mappingList = window.serverSchema.properties.color.properties.imageToLedMappingType.enum;
var duration = 0; var duration = 0;
var rgb = {r:255,g:0,b:0}; var rgb = {r:255,g:0,b:0};
var lastImgData = ""; var lastImgData = "";
var lastFileName= ""; var lastFileName= "";
//create html //create html
createTable('ssthead', 'sstbody', 'sstcont'); createTable('ssthead', 'sstbody', 'sstcont');
$('.ssthead').html(createTableRow([$.i18n('remote_input_origin'), $.i18n('remote_input_owner'), $.i18n('remote_input_priority'), $.i18n('remote_input_status')], true, true)); $('.ssthead').html(createTableRow([$.i18n('remote_input_origin'), $.i18n('remote_input_owner'), $.i18n('remote_input_priority'), $.i18n('remote_input_status')], true, true));
createTable('crthead', 'crtbody', 'adjust_content', true); createTable('crthead', 'crtbody', 'adjust_content', true);
//create introduction //create introduction
if(window.showOptHelp) if(window.showOptHelp)
{ {
createHint("intro", $.i18n('remote_color_intro', $.i18n('remote_losthint')), "color_intro"); createHint("intro", $.i18n('remote_color_intro', $.i18n('remote_losthint')), "color_intro");
createHint("intro", $.i18n('remote_input_intro', $.i18n('remote_losthint')), "sstcont"); createHint("intro", $.i18n('remote_input_intro', $.i18n('remote_losthint')), "sstcont");
createHint("intro", $.i18n('remote_adjustment_intro', $.i18n('remote_losthint')), "adjust_content"); createHint("intro", $.i18n('remote_adjustment_intro', $.i18n('remote_losthint')), "adjust_content");
createHint("intro", $.i18n('remote_components_intro', $.i18n('remote_losthint')), "comp_intro"); createHint("intro", $.i18n('remote_components_intro', $.i18n('remote_losthint')), "comp_intro");
createHint("intro", $.i18n('remote_maptype_intro', $.i18n('remote_losthint')), "maptype_intro"); createHint("intro", $.i18n('remote_maptype_intro', $.i18n('remote_losthint')), "maptype_intro");
createHint("intro", $.i18n('remote_videoMode_intro', $.i18n('remote_losthint')), "videomode_intro"); createHint("intro", $.i18n('remote_videoMode_intro', $.i18n('remote_losthint')), "videomode_intro");
} }
//color adjustment //color adjustment
var sColor = sortProperties(window.serverSchema.properties.color.properties.channelAdjustment.items.properties); var sColor = sortProperties(window.serverSchema.properties.color.properties.channelAdjustment.items.properties);
var values = window.serverInfo.adjustment[0]; var values = window.serverInfo.adjustment[0];
for(var key in sColor) for(var key in sColor)
{ {
if(sColor[key].key != "id" && sColor[key].key != "leds") if(sColor[key].key != "id" && sColor[key].key != "leds")
{ {
var title = '<label for="cr_'+sColor[key].key+'">'+$.i18n(sColor[key].title)+'</label>'; var title = '<label for="cr_'+sColor[key].key+'">'+$.i18n(sColor[key].title)+'</label>';
var property; var property;
var value = values[sColor[key].key]; var value = values[sColor[key].key];
if(sColor[key].type == "array") if(sColor[key].type == "array")
{ {
property = '<div id="cr_'+sColor[key].key+'" class="input-group colorpicker-component" ><input type="text" class="form-control" /><span class="input-group-addon"><i></i></span></div>'; property = '<div id="cr_'+sColor[key].key+'" class="input-group colorpicker-component" ><input type="text" class="form-control" /><span class="input-group-addon"><i></i></span></div>';
$('.crtbody').append(createTableRow([title, property], false, true)); $('.crtbody').append(createTableRow([title, property], false, true));
createCP('cr_'+sColor[key].key, value, function(rgb,hex,e){ createCP('cr_'+sColor[key].key, value, function(rgb,hex,e){
requestAdjustment(e.target.id.substr(e.target.id.indexOf("_") + 1), '['+rgb.r+','+rgb.g+','+rgb.b+']'); requestAdjustment(e.target.id.substr(e.target.id.indexOf("_") + 1), '['+rgb.r+','+rgb.g+','+rgb.b+']');
}); });
} }
else if(sColor[key].type == "boolean") else if(sColor[key].type == "boolean")
{ {
property = '<div class="checkbox"><input id="cr_'+sColor[key].key+'" type="checkbox" value="'+value+'"/><label></label></div>'; property = '<div class="checkbox"><input id="cr_'+sColor[key].key+'" type="checkbox" value="'+value+'"/><label></label></div>';
$('.crtbody').append(createTableRow([title, property], false, true)); $('.crtbody').append(createTableRow([title, property], false, true));
$('#cr_'+sColor[key].key).off().on('change', function(e){ $('#cr_'+sColor[key].key).off().on('change', function(e){
requestAdjustment(e.target.id.substr(e.target.id.indexOf("_") + 1), e.currentTarget.checked); requestAdjustment(e.target.id.substr(e.target.id.indexOf("_") + 1), e.currentTarget.checked);
}); });
} }
else else
{ {
if(sColor[key].key == "brightness" || sColor[key].key == "brightnessCompensation" || sColor[key].key == "backlightThreshold") if(sColor[key].key == "brightness" || sColor[key].key == "brightnessCompensation" || sColor[key].key == "backlightThreshold")
property = '<div class="input-group"><input id="cr_'+sColor[key].key+'" type="number" class="form-control" min="0" max="100" step="10" value="'+value+'"/><span class="input-group-addon">'+$.i18n("edt_append_percent")+'</span></div>'; property = '<div class="input-group"><input id="cr_'+sColor[key].key+'" type="number" class="form-control" min="0" max="100" step="10" value="'+value+'"/><span class="input-group-addon">'+$.i18n("edt_append_percent")+'</span></div>';
else else
property = '<input id="cr_'+sColor[key].key+'" type="number" class="form-control" min="0.1" max="4.0" step="0.1" value="'+value+'"/>'; property = '<input id="cr_'+sColor[key].key+'" type="number" class="form-control" min="0.1" max="4.0" step="0.1" value="'+value+'"/>';
$('.crtbody').append(createTableRow([title, property], false, true)); $('.crtbody').append(createTableRow([title, property], false, true));
$('#cr_'+sColor[key].key).off().on('change', function(e){ $('#cr_'+sColor[key].key).off().on('change', function(e){
valValue(this.id,this.value,this.min,this.max); valValue(this.id,this.value,this.min,this.max);
requestAdjustment(e.target.id.substr(e.target.id.indexOf("_") + 1), e.currentTarget.value); requestAdjustment(e.target.id.substr(e.target.id.indexOf("_") + 1), e.currentTarget.value);
}); });
} }
} }
} }
function sendEffect() function sendEffect()
{ {
var efx = $("#effect_select").val(); var efx = $("#effect_select").val();
if(efx != "__none__") if(efx != "__none__")
{ {
requestPriorityClear(); requestPriorityClear();
$(window.hyperion).one("cmd-clear", function(event) { $(window.hyperion).one("cmd-clear", function(event) {
setTimeout(function() {requestPlayEffect(efx,duration)}, 100); setTimeout(function() {requestPlayEffect(efx,duration)}, 100);
}); });
} }
} }
function sendColor() function sendColor()
{ {
requestSetColor(rgb.r, rgb.g, rgb.b,duration); requestSetColor(rgb.r, rgb.g, rgb.b,duration);
} }
function updateInputSelect() function updateInputSelect()
{ {
$('.sstbody').html(""); $('.sstbody').html("");
var prios = window.serverInfo.priorities; var prios = window.serverInfo.priorities;
var clearAll = false; var clearAll = false;
for(var i = 0; i < prios.length; i++) for(var i = 0; i < prios.length; i++)
{ {
var origin = prios[i].origin ? prios[i].origin : "System"; var origin = prios[i].origin ? prios[i].origin : "System";
origin = origin.split("@"); origin = origin.split("@");
var ip = origin[1]; var ip = origin[1];
origin = origin[0]; origin = origin[0];
var owner = prios[i].owner; var owner = prios[i].owner;
var active = prios[i].active; var active = prios[i].active;
var visible = prios[i].visible; var visible = prios[i].visible;
var priority = prios[i].priority; var priority = prios[i].priority;
var compId = prios[i].componentId; var compId = prios[i].componentId;
var duration = prios[i].duration_ms/1000; var duration = prios[i].duration_ms/1000;
var value = "0,0,0"; var value = "0,0,0";
var btn_type = "default"; var btn_type = "default";
var btn_text = $.i18n('remote_input_setsource_btn'); var btn_text = $.i18n('remote_input_setsource_btn');
var btn_state = "enabled"; var btn_state = "enabled";
if (active) if (active)
btn_type = "primary"; btn_type = "primary";
if(priority > 254) if(priority > 254)
continue; continue;
if(priority < 254 && (compId == "EFFECT" || compId == "COLOR" || compId == "IMAGE") ) if(priority < 254 && (compId == "EFFECT" || compId == "COLOR" || compId == "IMAGE") )
clearAll = true; clearAll = true;
if (visible) if (visible)
{ {
btn_state = "disabled"; btn_state = "disabled";
btn_type = "success"; btn_type = "success";
btn_text = $.i18n('remote_input_sourceactiv_btn'); btn_text = $.i18n('remote_input_sourceactiv_btn');
} }
if(ip) if(ip)
origin += '<br/><span style="font-size:80%; color:grey;">'+$.i18n('remote_input_ip')+' '+ip+'</span>'; origin += '<br/><span style="font-size:80%; color:grey;">'+$.i18n('remote_input_ip')+' '+ip+'</span>';
if("value" in prios[i]) if("value" in prios[i])
value = prios[i].value.RGB; value = prios[i].value.RGB;
switch (compId) switch (compId)
{ {
case "EFFECT": case "EFFECT":
owner = $.i18n('remote_effects_label_effects')+' '+owner; owner = $.i18n('remote_effects_label_effects')+' '+owner;
break; break;
case "COLOR": case "COLOR":
owner = $.i18n('remote_color_label_color')+' '+'<div style="width:18px; height:18px; border-radius:20px; margin-bottom:-4px; border:1px grey solid; background-color: rgb('+value+'); display:inline-block" title="RGB: ('+value+')"></div>'; owner = $.i18n('remote_color_label_color')+' '+'<div style="width:18px; height:18px; border-radius:20px; margin-bottom:-4px; border:1px grey solid; background-color: rgb('+value+'); display:inline-block" title="RGB: ('+value+')"></div>';
break; break;
case "IMAGE": case "IMAGE":
owner = $.i18n('remote_effects_label_picture')+' '+owner; owner = $.i18n('remote_effects_label_picture')+' '+owner;
break; break;
case "GRABBER": case "GRABBER":
owner = $.i18n('general_comp_GRABBER')+': ('+owner+')'; owner = $.i18n('general_comp_GRABBER')+': ('+owner+')';
break; break;
case "V4L": case "V4L":
owner = $.i18n('general_comp_V4L')+': ('+owner+')'; owner = $.i18n('general_comp_V4L')+': ('+owner+')';
break; break;
case "BOBLIGHTSERVER": case "BOBLIGHTSERVER":
owner = $.i18n('general_comp_BOBLIGHTSERVER'); owner = $.i18n('general_comp_BOBLIGHTSERVER');
break; break;
case "FLATBUFSERVER": case "FLATBUFSERVER":
owner = $.i18n('general_comp_FLATBUFSERVER'); owner = $.i18n('general_comp_FLATBUFSERVER');
break; break;
case "PROTOSERVER": case "PROTOSERVER":
owner = $.i18n('general_comp_PROTOSERVER'); owner = $.i18n('general_comp_PROTOSERVER');
break; break;
} }
if(duration && compId != "GRABBER" && compId != "FLATBUFSERVER" && compId != "PROTOSERVER") if(duration && compId != "GRABBER" && compId != "FLATBUFSERVER" && compId != "PROTOSERVER")
owner += '<br/><span style="font-size:80%; color:grey;">'+$.i18n('remote_input_duration')+' '+duration.toFixed(0)+$.i18n('edt_append_s')+'</span>'; owner += '<br/><span style="font-size:80%; color:grey;">'+$.i18n('remote_input_duration')+' '+duration.toFixed(0)+$.i18n('edt_append_s')+'</span>';
var btn = '<button id="srcBtn'+i+'" type="button" '+btn_state+' class="btn btn-'+btn_type+' btn_input_selection" onclick="requestSetSource('+priority+');">'+btn_text+'</button>'; var btn = '<button id="srcBtn'+i+'" type="button" '+btn_state+' class="btn btn-'+btn_type+' btn_input_selection" onclick="requestSetSource('+priority+');">'+btn_text+'</button>';
if((compId == "EFFECT" || compId == "COLOR" || compId == "IMAGE") && priority < 254) if((compId == "EFFECT" || compId == "COLOR" || compId == "IMAGE") && priority < 254)
btn += '<button type="button" class="btn btn-sm btn-danger" style="margin-left:10px;" onclick="requestPriorityClear('+priority+');"><i class="fa fa-close"></button>'; btn += '<button type="button" class="btn btn-sm btn-danger" style="margin-left:10px;" onclick="requestPriorityClear('+priority+');"><i class="fa fa-close"></button>';
if(btn_type != 'default') if(btn_type != 'default')
$('.sstbody').append(createTableRow([origin, owner, priority, btn], false, true)); $('.sstbody').append(createTableRow([origin, owner, priority, btn], false, true));
} }
var btn_auto_color = (window.serverInfo.priorities_autoselect? "btn-success" : "btn-danger"); var btn_auto_color = (window.serverInfo.priorities_autoselect? "btn-success" : "btn-danger");
var btn_auto_state = (window.serverInfo.priorities_autoselect? "disabled" : "enabled"); var btn_auto_state = (window.serverInfo.priorities_autoselect? "disabled" : "enabled");
var btn_auto_text = (window.serverInfo.priorities_autoselect? $.i18n('general_btn_on') : $.i18n('general_btn_off')); var btn_auto_text = (window.serverInfo.priorities_autoselect? $.i18n('general_btn_on') : $.i18n('general_btn_off'));
var btn_call_state = (clearAll? "enabled" : "disabled"); var btn_call_state = (clearAll? "enabled" : "disabled");
$('#auto_btn').html('<button id="srcBtn'+i+'" type="button" '+btn_auto_state+' class="btn '+btn_auto_color+'" style="margin-right:5px;display:inline-block;" onclick="requestSetSource(\'auto\');">'+$.i18n('remote_input_label_autoselect')+' ('+btn_auto_text+')</button>'); $('#auto_btn').html('<button id="srcBtn'+i+'" type="button" '+btn_auto_state+' class="btn '+btn_auto_color+'" style="margin-right:5px;display:inline-block;" onclick="requestSetSource(\'auto\');">'+$.i18n('remote_input_label_autoselect')+' ('+btn_auto_text+')</button>');
$('#auto_btn').append('<button type="button" '+btn_call_state+' class="btn btn-danger" style="display:inline-block;" onclick="requestClearAll();">'+$.i18n('remote_input_clearall')+'</button>'); $('#auto_btn').append('<button type="button" '+btn_call_state+' class="btn btn-danger" style="display:inline-block;" onclick="requestClearAll();">'+$.i18n('remote_input_clearall')+'</button>');
var max_width=100; var max_width=100;
$('.btn_input_selection').each(function() { $('.btn_input_selection').each(function() {
if ($(this).innerWidth() > max_width) if ($(this).innerWidth() > max_width)
max_width = $(this).innerWidth(); max_width = $(this).innerWidth();
}); });
$('.btn_input_selection').css("min-width",max_width+"px"); $('.btn_input_selection').css("min-width",max_width+"px");
} }
function updateLedMapping() function updateLedMapping()
{ {
var mapping = window.serverInfo.imageToLedMappingType; var mapping = window.serverInfo.imageToLedMappingType;
$('#mappingsbutton').html(""); $('#mappingsbutton').html("");
for(var ix = 0; ix < mappingList.length; ix++) for(var ix = 0; ix < mappingList.length; ix++)
{ {
if(mapping == mappingList[ix]) if(mapping == mappingList[ix])
var btn_style = 'btn-success'; var btn_style = 'btn-success';
else else
var btn_style = 'btn-primary'; var btn_style = 'btn-primary';
$('#mappingsbutton').append('<button type="button" id="lmBtn_'+mappingList[ix]+'" class="btn '+btn_style+'" style="margin:3px;min-width:200px" onclick="requestMappingType(\''+mappingList[ix]+'\');">'+$.i18n('remote_maptype_label_'+mappingList[ix])+'</button><br/>'); $('#mappingsbutton').append('<button type="button" id="lmBtn_'+mappingList[ix]+'" class="btn '+btn_style+'" style="margin:3px;min-width:200px" onclick="requestMappingType(\''+mappingList[ix]+'\');">'+$.i18n('remote_maptype_label_'+mappingList[ix])+'</button><br/>');
} }
} }
function initComponents() function initComponents()
{ {
var components = window.comps; var components = window.comps;
var hyperionEnabled = true; var hyperionEnabled = true;
components.forEach( function(obj) { components.forEach( function(obj) {
if (obj.name == "ALL") if (obj.name == "ALL")
{ {
hyperionEnabled = obj.enabled hyperionEnabled = obj.enabled;
} }
}); });
for (const comp of components) for (const comp of components)
{ {
if(comp.name === "ALL") if(comp.name === "ALL")
continue; continue;
const enable_style = (comp.enabled? "checked" : ""); const enable_style = (comp.enabled? "checked" : "");
const comp_btn_id = "comp_btn_"+comp.name; const comp_btn_id = "comp_btn_"+comp.name;
if ($("#"+comp_btn_id).length === 0) if ($("#"+comp_btn_id).length === 0)
{ {
var d='<span style="display:block;margin:3px">' var d='<span style="display:block;margin:3px">'
+'<input id="'+comp_btn_id+'"'+enable_style+' type="checkbox"' +'<input id="'+comp_btn_id+'"'+enable_style+' type="checkbox"'
+'data-toggle="toggle" data-onstyle="success" data-on="'+$.i18n('general_btn_on')+'" data-off="'+$.i18n('general_btn_off')+'">' +'data-toggle="toggle" data-onstyle="success" data-on="'+$.i18n('general_btn_on')+'" data-off="'+$.i18n('general_btn_off')+'">'
+'&nbsp;&nbsp;&nbsp;<label>'+$.i18n('general_comp_'+comp.name)+'</label>' +'&nbsp;&nbsp;&nbsp;<label>'+$.i18n('general_comp_'+comp.name)+'</label>'
+'</span>'; +'</span>';
$('#componentsbutton').append(d); $('#componentsbutton').append(d);
$(`#${comp_btn_id}`).bootstrapToggle(); $(`#${comp_btn_id}`).bootstrapToggle();
$(`#${comp_btn_id}`).bootstrapToggle(hyperionEnabled ? "enable" : "disable") $(`#${comp_btn_id}`).bootstrapToggle((hyperionEnabled ? "enable" : "disable"));
$(`#${comp_btn_id}`).change(e => { $(`#${comp_btn_id}`).change(e => {
requestSetComponentState(e.currentTarget.id.split('_').pop(), e.currentTarget.checked) requestSetComponentState(e.currentTarget.id.split('_').pop(), e.currentTarget.checked);
//console.log(e.currentTarget.checked) //console.log(e.currentTarget.checked)
}); });
} }
} }
} }
function updateComponent( component ) function updateComponent( component )
{ {
if (component.name == "ALL") if (component.name == "ALL")
{ {
var components = window.comps; var components = window.comps;
var hyperionEnabled = component.enabled;
for (const comp of components)
{
hyperionEnabled = component.enabled if(comp.name === "ALL")
for (const comp of components) continue;
{
if(comp.name === "ALL") const comp_btn_id = "comp_btn_"+comp.name;
continue;
const comp_btn_id = "comp_btn_"+comp.name; if ( !hyperionEnabled )
{
$(`#${comp_btn_id}`).bootstrapToggle('off');
$(`#${comp_btn_id}`).bootstrapToggle("disable");
}
else
{
$(`#${comp_btn_id}`).bootstrapToggle("enable");
if ( comp.enabled !== $(`#${comp_btn_id}`).prop("checked") )
{
$(`#${comp_btn_id}`).bootstrapToggle().prop('checked', comp.enabled).change();
}
}
}
}
else
{
const comp_btn_id = "comp_btn_"+component.name;
if ( !hyperionEnabled ) //console.log ("updateComponent: ", component.name, "Current Checked: ", $(`#${comp_btn_id}`).prop("checked"), "New Checked: ", component.enabled, );
{
$(`#${comp_btn_id}`).bootstrapToggle('off');
$(`#${comp_btn_id}`).bootstrapToggle("disable");
}
else
{
$(`#${comp_btn_id}`).bootstrapToggle("enable");
if ( comp.enabled !== $(`#${comp_btn_id}`).prop("checked") )
{
$(`#${comp_btn_id}`).bootstrapToggle().prop('checked', comp.enabled).change();
}
}
}
}
else
{
const comp_btn_id = "comp_btn_"+component.name;
//console.log ("updateComponent: ", component.name, "Current Checked: ", $(`#${comp_btn_id}`).prop("checked"), "New Checked: ", component.enabled, ); // In case Buttons were disabled before, status may be different to component status
if ( component.enabled != $(`#${comp_btn_id}`).prop("checked") )
// In case Buttons were disabled before, status may be different to component status {
if ( component.enabled != $(`#${comp_btn_id}`).prop("checked") ) // console.log ("Update status to Checked = ", component.enabled);
{ if ( component.enabled )
// console.log ("Update status to Checked = ", component.enabled); $(`#${comp_btn_id}`).bootstrapToggle("on");
if ( component.enabled ) else
$(`#${comp_btn_id}`).bootstrapToggle("on"); $(`#${comp_btn_id}`).bootstrapToggle("off");
else }
$(`#${comp_btn_id}`).bootstrapToggle("off"); }
} }
}
}
function updateEffectlist() function updateEffectlist()
{ {
var newEffects = window.serverInfo.effects; var newEffects = window.serverInfo.effects;
if (newEffects.length != oldEffects.length) if (newEffects.length != oldEffects.length)
{ {
$('#effect_select').html('<option value="__none__"></option>'); $('#effect_select').html('<option value="__none__"></option>');
var usrEffArr = []; var usrEffArr = [];
var sysEffArr = []; var sysEffArr = [];
for(var i = 0; i < newEffects.length; i++) { for(var i = 0; i < newEffects.length; i++) {
var effectName = newEffects[i].name; var effectName = newEffects[i].name;
if(!/^\:/.test(newEffects[i].file)){ if(!/^\:/.test(newEffects[i].file)){
usrEffArr.push(effectName); usrEffArr.push(effectName);
} }
else{ else{
sysEffArr.push(effectName); sysEffArr.push(effectName);
} }
} }
$('#effect_select').append(createSel(usrEffArr, $.i18n('remote_optgroup_usreffets'))); $('#effect_select').append(createSel(usrEffArr, $.i18n('remote_optgroup_usreffets')));
$('#effect_select').append(createSel(sysEffArr, $.i18n('remote_optgroup_syseffets'))); $('#effect_select').append(createSel(sysEffArr, $.i18n('remote_optgroup_syseffets')));
oldEffects = newEffects; oldEffects = newEffects;
} }
} }
function updateVideoMode() function updateVideoMode()
{ {
var videoModes = ["2D","3DSBS","3DTAB"]; var videoModes = ["2D","3DSBS","3DTAB"];
var currVideoMode = window.serverInfo.videomode; var currVideoMode = window.serverInfo.videomode;
$('#videomodebtns').html(""); $('#videomodebtns').html("");
for(var ix = 0; ix < videoModes.length; ix++) for(var ix = 0; ix < videoModes.length; ix++)
{ {
if(currVideoMode == videoModes[ix]) if(currVideoMode == videoModes[ix])
var btn_style = 'btn-success'; var btn_style = 'btn-success';
else else
var btn_style = 'btn-primary'; var btn_style = 'btn-primary';
$('#videomodebtns').append('<button type="button" id="vModeBtn_'+videoModes[ix]+'" class="btn '+btn_style+'" style="margin:3px;min-width:200px" onclick="requestVideoMode(\''+videoModes[ix]+'\');">'+$.i18n('remote_videoMode_'+videoModes[ix])+'</button><br/>'); $('#videomodebtns').append('<button type="button" id="vModeBtn_'+videoModes[ix]+'" class="btn '+btn_style+'" style="margin:3px;min-width:200px" onclick="requestVideoMode(\''+videoModes[ix]+'\');">'+$.i18n('remote_videoMode_'+videoModes[ix])+'</button><br/>');
} }
} }
// colorpicker and effect // colorpicker and effect
if (getStorage('rmcpcolor') != null) if (getStorage('rmcpcolor') != null)
{ {
cpcolor = getStorage('rmcpcolor'); cpcolor = getStorage('rmcpcolor');
rgb = hexToRgb(cpcolor); rgb = hexToRgb(cpcolor);
} }
if (getStorage('rmduration') != null) if (getStorage('rmduration') != null)
{ {
$("#remote_duration").val(getStorage('rmduration')); $("#remote_duration").val(getStorage('rmduration'));
duration = getStorage('rmduration'); duration = getStorage('rmduration');
} }
createCP('cp2', cpcolor, function(rgbT,hex){ createCP('cp2', cpcolor, function(rgbT,hex){
rgb = rgbT; rgb = rgbT;
sendColor(); sendColor();
setStorage('rmcpcolor', hex); setStorage('rmcpcolor', hex);
updateInputSelect(); updateInputSelect();
}); });
$("#reset_color").off().on("click", function(){ $("#reset_color").off().on("click", function(){
requestPriorityClear(); requestPriorityClear();
lastImgData = ""; lastImgData = "";
$("#effect_select").val("__none__"); $("#effect_select").val("__none__");
$("#remote_input_img").val(""); $("#remote_input_img").val("");
}); });
$("#remote_duration").off().on("change", function(){ $("#remote_duration").off().on("change", function(){
duration = valValue(this.id,this.value,this.min,this.max); duration = valValue(this.id,this.value,this.min,this.max);
setStorage('rmduration', duration); setStorage('rmduration', duration);
}); });
$("#effect_select").off().on("change", function(event) { $("#effect_select").off().on("change", function(event) {
sendEffect(); sendEffect();
}); });
$("#remote_input_reseff, #remote_input_rescol").off().on("click", function(){ $("#remote_input_reseff, #remote_input_rescol").off().on("click", function(){
if(this.id == "remote_input_rescol") if(this.id == "remote_input_rescol")
sendColor(); sendColor();
else else
sendEffect(); sendEffect();
}); });
$("#remote_input_repimg").off().on("click", function(){ $("#remote_input_repimg").off().on("click", function(){
if(lastImgData != "") if(lastImgData != "")
requestSetImage(lastImgData, duration, lastFileName); requestSetImage(lastImgData, duration, lastFileName);
}); });
$("#remote_input_img").change(function(){ $("#remote_input_img").change(function(){
readImg(this, function(src,fileName){ readImg(this, function(src,fileName){
lastFileName = fileName; lastFileName = fileName;
if(src.includes(",")) if(src.includes(","))
lastImgData = src.split(",")[1]; lastImgData = src.split(",")[1];
else else
lastImgData = src; lastImgData = src;
requestSetImage(lastImgData, duration, lastFileName); requestSetImage(lastImgData, duration, lastFileName);
}); });
}); });
//force first update //force first update
initComponents(); initComponents();
updateInputSelect(); updateInputSelect();
updateLedMapping(); updateLedMapping();
updateVideoMode(); updateVideoMode();
updateEffectlist(); updateEffectlist();
// interval updates // interval updates
$(window.hyperion).on('components-updated', function(e, comp){ $(window.hyperion).on('components-updated', function(e, comp){
//console.log ("components-updated", e, comp); //console.log ("components-updated", e, comp);
updateComponent (comp); updateComponent (comp);
}); });
$(window.hyperion).on("cmd-priorities-update", function(event){ $(window.hyperion).on("cmd-priorities-update", function(event){
window.serverInfo.priorities = event.response.data.priorities; window.serverInfo.priorities = event.response.data.priorities;
window.serverInfo.priorities_autoselect = event.response.data.priorities_autoselect; window.serverInfo.priorities_autoselect = event.response.data.priorities_autoselect;
updateInputSelect(); updateInputSelect();
}); });
$(window.hyperion).on("cmd-imageToLedMapping-update", function(event){ $(window.hyperion).on("cmd-imageToLedMapping-update", function(event){
window.serverInfo.imageToLedMappingType = event.response.data.imageToLedMappingType; window.serverInfo.imageToLedMappingType = event.response.data.imageToLedMappingType;
updateLedMapping(); updateLedMapping();
}); });
$(window.hyperion).on("cmd-videomode-update", function(event){ $(window.hyperion).on("cmd-videomode-update", function(event){
window.serverInfo.videomode = event.response.data.videomode; window.serverInfo.videomode = event.response.data.videomode;
updateVideoMode(); updateVideoMode();
}); });
$(window.hyperion).on("cmd-effects-update", function(event){ $(window.hyperion).on("cmd-effects-update", function(event){
window.serverInfo.effects = event.response.data.effects; window.serverInfo.effects = event.response.data.effects;
updateEffectlist(); updateEffectlist();
}); });
removeOverlay(); removeOverlay();
}); });

View File

@ -45,7 +45,7 @@ function connectionLostDetection(type)
{ {
if ( window.watchdog > 2 ) if ( window.watchdog > 2 )
{ {
var interval_id = window.setInterval("", 9999); // Get a reference to the last var interval_id = window.setInterval(function(){clearInterval(interval_id);}, 9999); // Get a reference to the last
for (var i = 1; i < interval_id; i++) for (var i = 1; i < interval_id; i++)
window.clearInterval(i); window.clearInterval(i);
if(type == 'restart') if(type == 'restart')

View File

@ -1,6 +1,6 @@
# Two projectiles are sent from random positions and collide with each other # Two projectiles are sent from random positions and collide with each other
# Template from https://github.com/nickpesce/lit/blob/master/lit/effects/collision.py # Template from https://github.com/nickpesce/lit/blob/master/lit/effects/collision.py
import hyperion, time, colorsys, random, math import hyperion, time, colorsys, random
# Get parameters # Get parameters
sleepTime = max(0.02, float(hyperion.args.get('speed', 100))/1000.0) sleepTime = max(0.02, float(hyperion.args.get('speed', 100))/1000.0)

View File

@ -24,7 +24,7 @@ public slots:
void stop(); void stop();
void setSignalThreshold(double redSignalThreshold, double greenSignalThreshold, double blueSignalThreshold); void setSignalThreshold(double redSignalThreshold, double greenSignalThreshold, double blueSignalThreshold);
void setCropping(int cropLeft, int cropRight, int cropTop, int cropBottom); void setCropping(unsigned cropLeft, unsigned cropRight, unsigned cropTop, unsigned cropBottom);
void setSignalDetectionOffset(double verticalMin, double horizontalMin, double verticalMax, double horizontalMax); void setSignalDetectionOffset(double verticalMin, double horizontalMin, double verticalMax, double horizontalMax);
void setSignalDetectionEnable(bool enable); void setSignalDetectionEnable(bool enable);
void setDeviceVideoStandard(QString device, VideoStandard videoStandard); void setDeviceVideoStandard(QString device, VideoStandard videoStandard);

View File

@ -52,7 +52,7 @@ private slots:
/// ///
/// @brief Handle COMP_ALL changes from Hyperion->compStateChangeRequest /// @brief Handle COMP_ALL changes from Hyperion->compStateChangeRequest
/// ///
void handleCompStateChangeRequest(const hyperion::Components comp, const bool activated); void handleCompStateChangeRequest(const hyperion::Components comps, const bool activated);
private: private:
/// Hyperion instance /// Hyperion instance

View File

@ -86,4 +86,4 @@ inline Components stringToComponent(QString component)
return COMP_INVALID; return COMP_INVALID;
} }
}; // end of namespace } // end of namespace

View File

@ -61,4 +61,4 @@ QString getDirName( QString sourceFile);
/// @param[in] log The logger of the caller /// @param[in] log The logger of the caller
/// ///
void resolveFileError(const QFile& file, Logger* log); void resolveFileError(const QFile& file, Logger* log);
}; }

View File

@ -203,7 +203,7 @@ public:
assert(other._width == _width); assert(other._width == _width);
assert(other._height == _height); assert(other._height == _height);
memcpy(_pixels, other._pixels, _width*_height*sizeof(Pixel_T)); memcpy(_pixels, other._pixels, _width * _height * sizeof(Pixel_T));
} }
/// ///
@ -258,7 +258,7 @@ public:
_height = 1; _height = 1;
_pixels = new Pixel_T[2]; _pixels = new Pixel_T[2];
_endOfPixels = _pixels + 1; _endOfPixels = _pixels + 1;
memset(_pixels, 0, _width * _height * sizeof(Pixel_T)); memset(_pixels, 0, (unsigned long) _width * _height * sizeof(Pixel_T));
} }
private: private:

View File

@ -92,4 +92,4 @@ namespace JsonUtils{
/// @return true on success else false /// @return true on success else false
/// ///
bool resolveRefs(const QJsonObject& schema, QJsonObject& obj, Logger* log); bool resolveRefs(const QJsonObject& schema, QJsonObject& obj, Logger* log);
}; }

View File

@ -103,4 +103,4 @@ protected:
const int _loggerMaxMsgBufferSize; const int _loggerMaxMsgBufferSize;
}; };
Q_DECLARE_METATYPE(Logger::T_LOG_MESSAGE); Q_DECLARE_METATYPE(Logger::T_LOG_MESSAGE)

View File

@ -4,8 +4,8 @@
#include <QString> #include <QString>
namespace Process { namespace Process {
void restartHyperion(bool asNewProcess=false); void restartHyperion(bool asNewProcess=false);
QByteArray command_exec(QString cmd, QByteArray data=""); QByteArray command_exec(QString cmd, QByteArray data="");
}; }

View File

@ -13,8 +13,8 @@ namespace RGBW {
SUB_MIN_COOL_ADJUST, SUB_MIN_COOL_ADJUST,
WHITE_OFF WHITE_OFF
}; };
WhiteAlgorithm stringToWhiteAlgorithm(QString str); WhiteAlgorithm stringToWhiteAlgorithm(QString str);
void Rgb_to_Rgbw(ColorRgb input, ColorRgbw * output, const WhiteAlgorithm algorithm); void Rgb_to_Rgbw(ColorRgb input, ColorRgbw * output, const WhiteAlgorithm algorithm);
}; }

View File

@ -6,94 +6,94 @@
/// @brief Provide util methods to work with SettingsManager class /// @brief Provide util methods to work with SettingsManager class
/// ///
namespace settings { namespace settings {
// all available settings sections // all available settings sections
enum type { enum type {
BGEFFECT, BGEFFECT,
FGEFFECT, FGEFFECT,
BLACKBORDER, BLACKBORDER,
BOBLSERVER, BOBLSERVER,
COLOR, COLOR,
DEVICE, DEVICE,
EFFECTS, EFFECTS,
NETFORWARD, NETFORWARD,
SYSTEMCAPTURE, SYSTEMCAPTURE,
GENERAL, GENERAL,
V4L2, V4L2,
JSONSERVER, JSONSERVER,
LEDCONFIG, LEDCONFIG,
LEDS, LEDS,
LOGGER, LOGGER,
SMOOTHING, SMOOTHING,
WEBSERVER, WEBSERVER,
INSTCAPTURE, INSTCAPTURE,
NETWORK, NETWORK,
FLATBUFSERVER, FLATBUFSERVER,
PROTOSERVER, PROTOSERVER,
INVALID INVALID
}; };
/// ///
/// @brief Convert settings::type to string representation /// @brief Convert settings::type to string representation
/// @param type The settings::type from enum /// @param type The settings::type from enum
/// @return The settings type as string /// @return The settings type as string
/// ///
inline QString typeToString(const type& type) inline QString typeToString(const type& type)
{
switch (type)
{ {
case BGEFFECT: return "backgroundEffect"; switch (type)
case FGEFFECT: return "foregroundEffect"; {
case BLACKBORDER: return "blackborderdetector"; case BGEFFECT: return "backgroundEffect";
case BOBLSERVER: return "boblightServer"; case FGEFFECT: return "foregroundEffect";
case COLOR: return "color"; case BLACKBORDER: return "blackborderdetector";
case DEVICE: return "device"; case BOBLSERVER: return "boblightServer";
case EFFECTS: return "effects"; case COLOR: return "color";
case NETFORWARD: return "forwarder"; case DEVICE: return "device";
case SYSTEMCAPTURE: return "framegrabber"; case EFFECTS: return "effects";
case GENERAL: return "general"; case NETFORWARD: return "forwarder";
case V4L2: return "grabberV4L2"; case SYSTEMCAPTURE: return "framegrabber";
case JSONSERVER: return "jsonServer"; case GENERAL: return "general";
case LEDCONFIG: return "ledConfig"; case V4L2: return "grabberV4L2";
case LEDS: return "leds"; case JSONSERVER: return "jsonServer";
case LOGGER: return "logger"; case LEDCONFIG: return "ledConfig";
case SMOOTHING: return "smoothing"; case LEDS: return "leds";
case WEBSERVER: return "webConfig"; case LOGGER: return "logger";
case INSTCAPTURE: return "instCapture"; case SMOOTHING: return "smoothing";
case NETWORK: return "network"; case WEBSERVER: return "webConfig";
case FLATBUFSERVER: return "flatbufServer"; case INSTCAPTURE: return "instCapture";
case PROTOSERVER: return "protoServer"; case NETWORK: return "network";
default: return "invalid"; case FLATBUFSERVER: return "flatbufServer";
case PROTOSERVER: return "protoServer";
default: return "invalid";
}
}
///
/// @brief Convert string to settings::type representation
/// @param type The string to convert
/// @return The settings type from enum
///
inline type stringToType(const QString& type)
{
if (type == "backgroundEffect") return BGEFFECT;
else if (type == "foregroundEffect") return FGEFFECT;
else if (type == "blackborderdetector") return BLACKBORDER;
else if (type == "boblightServer") return BOBLSERVER;
else if (type == "color") return COLOR;
else if (type == "device") return DEVICE;
else if (type == "effects") return EFFECTS;
else if (type == "forwarder") return NETFORWARD;
else if (type == "framegrabber") return SYSTEMCAPTURE;
else if (type == "general") return GENERAL;
else if (type == "grabberV4L2") return V4L2;
else if (type == "jsonServer") return JSONSERVER;
else if (type == "ledConfig") return LEDCONFIG;
else if (type == "leds") return LEDS;
else if (type == "logger") return LOGGER;
else if (type == "smoothing") return SMOOTHING;
else if (type == "webConfig") return WEBSERVER;
else if (type == "instCapture") return INSTCAPTURE;
else if (type == "network") return NETWORK;
else if (type == "flatbufServer") return FLATBUFSERVER;
else if (type == "protoServer") return PROTOSERVER;
else return INVALID;
} }
} }
///
/// @brief Convert string to settings::type representation
/// @param type The string to convert
/// @return The settings type from enum
///
inline type stringToType(const QString& type)
{
if (type == "backgroundEffect") return BGEFFECT;
else if (type == "foregroundEffect") return FGEFFECT;
else if (type == "blackborderdetector") return BLACKBORDER;
else if (type == "boblightServer") return BOBLSERVER;
else if (type == "color") return COLOR;
else if (type == "device") return DEVICE;
else if (type == "effects") return EFFECTS;
else if (type == "forwarder") return NETFORWARD;
else if (type == "framegrabber") return SYSTEMCAPTURE;
else if (type == "general") return GENERAL;
else if (type == "grabberV4L2") return V4L2;
else if (type == "jsonServer") return JSONSERVER;
else if (type == "ledConfig") return LEDCONFIG;
else if (type == "leds") return LEDS;
else if (type == "logger") return LOGGER;
else if (type == "smoothing") return SMOOTHING;
else if (type == "webConfig") return WEBSERVER;
else if (type == "instCapture") return INSTCAPTURE;
else if (type == "network") return NETWORK;
else if (type == "flatbufServer") return FLATBUFSERVER;
else if (type == "protoServer") return PROTOSERVER;
else return INVALID;
}
};

View File

@ -143,7 +143,8 @@ PyObject* EffectModule::wrapSetColor(PyObject *self, PyObject *args)
if (PyArg_ParseTuple(args, "bbb", &color.red, &color.green, &color.blue)) if (PyArg_ParseTuple(args, "bbb", &color.red, &color.green, &color.blue))
{ {
getEffect()->_colors.fill(color); getEffect()->_colors.fill(color);
getEffect()->setInput(getEffect()->_priority, getEffect()->_colors.toStdVector(), timeout, false); QVector<ColorRgb> _cQV = getEffect()->_colors;
getEffect()->setInput(getEffect()->_priority, std::vector<ColorRgb>( _cQV.begin(), _cQV.end() ), timeout, false);
Py_RETURN_NONE; Py_RETURN_NONE;
} }
return nullptr; return nullptr;
@ -161,7 +162,8 @@ PyObject* EffectModule::wrapSetColor(PyObject *self, PyObject *args)
{ {
char * data = PyByteArray_AS_STRING(bytearray); char * data = PyByteArray_AS_STRING(bytearray);
memcpy(getEffect()->_colors.data(), data, length); memcpy(getEffect()->_colors.data(), data, length);
getEffect()->setInput(getEffect()->_priority, getEffect()->_colors.toStdVector(), timeout, false); QVector<ColorRgb> _cQV = getEffect()->_colors;
getEffect()->setInput(getEffect()->_priority, std::vector<ColorRgb>( _cQV.begin(), _cQV.end() ), timeout, false);
Py_RETURN_NONE; Py_RETURN_NONE;
} }
else else
@ -602,7 +604,7 @@ PyObject* EffectModule::wrapImageDrawPolygon(PyObject *self, PyObject *args)
{ {
// check if we have aborted already // check if we have aborted already
if (getEffect()->isInterruptionRequested()) Py_RETURN_NONE; if (getEffect()->isInterruptionRequested()) Py_RETURN_NONE;
PyObject * bytearray = nullptr; PyObject * bytearray = nullptr;
int argCount = PyTuple_Size(args); int argCount = PyTuple_Size(args);
@ -663,7 +665,7 @@ PyObject* EffectModule::wrapImageDrawPie(PyObject *self, PyObject *args)
{ {
// check if we have aborted already // check if we have aborted already
if (getEffect()->isInterruptionRequested()) Py_RETURN_NONE; if (getEffect()->isInterruptionRequested()) Py_RETURN_NONE;
PyObject * bytearray = nullptr; PyObject * bytearray = nullptr;
QString brush; QString brush;

View File

@ -47,7 +47,7 @@ void V4L2Wrapper::setSignalThreshold(double redSignalThreshold, double greenSign
_grabber.setSignalThreshold( redSignalThreshold, greenSignalThreshold, blueSignalThreshold, 50); _grabber.setSignalThreshold( redSignalThreshold, greenSignalThreshold, blueSignalThreshold, 50);
} }
void V4L2Wrapper::setCropping(int cropLeft, int cropRight, int cropTop, int cropBottom) void V4L2Wrapper::setCropping(unsigned cropLeft, unsigned cropRight, unsigned cropTop, unsigned cropBottom)
{ {
_grabber.setCropping(cropLeft, cropRight, cropTop, cropBottom); _grabber.setCropping(cropLeft, cropRight, cropTop, cropBottom);
} }

View File

@ -40,9 +40,9 @@ void ComponentRegister::setNewComponentState(const hyperion::Components comp, co
} }
} }
void ComponentRegister::handleCompStateChangeRequest(const hyperion::Components comp, const bool activated) void ComponentRegister::handleCompStateChangeRequest(const hyperion::Components comps, const bool activated)
{ {
if(comp == COMP_ALL && !_inProgress) if(comps == COMP_ALL && !_inProgress)
{ {
_inProgress = true; _inProgress = true;
if(!activated && _prevComponentStates.empty()) if(!activated && _prevComponentStates.empty())

View File

@ -87,7 +87,7 @@ private:
/// ///
/// @return Zero on success else negative /// @return Zero on success else negative
/// ///
virtual int write(const std::vector<ColorRgb>& ledValues); virtual int write(const std::vector<ColorRgb>& ledValues) override;
/// ///
/// Test if the device is a (or the) lightpack we are looking for /// Test if the device is a (or the) lightpack we are looking for
@ -131,7 +131,7 @@ private:
/// the number of bits per channel /// the number of bits per channel
int _bitsPerChannel; int _bitsPerChannel;
/// count of real hardware leds /// count of real hardware leds
int _hwLedCount; int _hwLedCount;
}; };

View File

@ -87,8 +87,7 @@ int LedDeviceFile::write(const std::vector<ColorRgb> & ledValues)
// get a precise timestamp as a string // get a precise timestamp as a string
const auto now = std::chrono::system_clock::now(); const auto now = std::chrono::system_clock::now();
const auto nowAsTimeT = std::chrono::system_clock::to_time_t(now); const auto nowAsTimeT = std::chrono::system_clock::to_time_t(now);
const auto nowMs = std::chrono::duration_cast<std::chrono::milliseconds>( const auto nowMs = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()) % 1000;
now.time_since_epoch()) % 1000;
const auto elapsedTimeMs = std::chrono::duration_cast<std::chrono::milliseconds>(now - lastWriteTime); const auto elapsedTimeMs = std::chrono::duration_cast<std::chrono::milliseconds>(now - lastWriteTime);

View File

@ -32,10 +32,13 @@ LedDevicePiBlaster::LedDevicePiBlaster(const QJsonObject &deviceConfig)
LedDevicePiBlaster::~LedDevicePiBlaster() LedDevicePiBlaster::~LedDevicePiBlaster()
{ {
if (_fid != nullptr)
{
fclose(_fid);
_fid = nullptr;
}
} }
bool LedDevicePiBlaster::init(const QJsonObject &deviceConfig) bool LedDevicePiBlaster::init(const QJsonObject &deviceConfig)
{ {
bool isInitOK = LedDevice::init(deviceConfig); bool isInitOK = LedDevice::init(deviceConfig);
@ -95,7 +98,6 @@ int LedDevicePiBlaster::open()
if (!QFile::exists(_deviceName)) if (!QFile::exists(_deviceName))
{ {
errortext = QString ("The device (%1) does not yet exist.").arg(_deviceName); errortext = QString ("The device (%1) does not yet exist.").arg(_deviceName);
} }
else else
{ {
@ -116,7 +118,6 @@ int LedDevicePiBlaster::open()
if ( retval < 0 ) if ( retval < 0 )
{ {
this->setInError( errortext ); this->setInError( errortext );
} }
} }
return retval; return retval;
@ -132,8 +133,8 @@ void LedDevicePiBlaster::close()
{ {
fclose(_fid); fclose(_fid);
_fid = nullptr; _fid = nullptr;
}} }
}
int LedDevicePiBlaster::write(const std::vector<ColorRgb> & ledValues) int LedDevicePiBlaster::write(const std::vector<ColorRgb> & ledValues)
{ {
@ -149,31 +150,31 @@ int LedDevicePiBlaster::write(const std::vector<ColorRgb> & ledValues)
if ( (valueIdx >= 0) && (valueIdx < static_cast<int>( _ledCount)) ) if ( (valueIdx >= 0) && (valueIdx < static_cast<int>( _ledCount)) )
{ {
double pwmDutyCycle = 0.0; double pwmDutyCycle = 0.0;
switch (_gpio_to_color[ i ]) switch (_gpio_to_color[ i ])
{ {
case 'r': case 'r':
pwmDutyCycle = ledValues[valueIdx].red / 255.0; pwmDutyCycle = ledValues[valueIdx].red / 255.0;
break; break;
case 'g': case 'g':
pwmDutyCycle = ledValues[valueIdx].green / 255.0; pwmDutyCycle = ledValues[valueIdx].green / 255.0;
break; break;
case 'b': case 'b':
pwmDutyCycle = ledValues[valueIdx].blue / 255.0; pwmDutyCycle = ledValues[valueIdx].blue / 255.0;
break; break;
case 'w': case 'w':
pwmDutyCycle = ledValues[valueIdx].red; pwmDutyCycle = ledValues[valueIdx].red;
pwmDutyCycle += ledValues[valueIdx].green; pwmDutyCycle += ledValues[valueIdx].green;
pwmDutyCycle += ledValues[valueIdx].blue; pwmDutyCycle += ledValues[valueIdx].blue;
pwmDutyCycle /= (3.0*255.0); pwmDutyCycle /= (3.0*255.0);
break; break;
default: default:
continue; continue;
} }
// fprintf(_fid, "%i=%f\n", iPins[iPin], pwmDutyCycle); // fprintf(_fid, "%i=%f\n", iPins[iPin], pwmDutyCycle);
if ( (fprintf(_fid, "%i=%f\n", i, pwmDutyCycle) < 0) if ( (fprintf(_fid, "%i=%f\n", i, pwmDutyCycle) < 0) || (fflush(_fid) < 0))
|| (fflush(_fid) < 0)) { {
if (_fid != nullptr) if (_fid != nullptr)
{ {
fclose(_fid); fclose(_fid);

View File

@ -208,7 +208,8 @@ int main(int argc, char * argv[])
if (parser.isSet(argColor)) if (parser.isSet(argColor))
{ {
// TODO: make sure setColor accepts a QList<QColor> // TODO: make sure setColor accepts a QList<QColor>
connection.setColor(argColor.getColors(parser).toVector().toStdVector(), argPriority.getInt(parser), argDuration.getInt(parser)); QVector<QColor> _cQV = argColor.getColors(parser).toVector();
connection.setColor(std::vector<QColor>( _cQV.begin(), _cQV.end() ), argPriority.getInt(parser), argDuration.getInt(parser));
} }
else if (parser.isSet(argImage)) else if (parser.isSet(argImage))
{ {