intermediate: cibuild for nodemcu
This commit is contained in:
parent
10058cfeec
commit
82c98eec15
|
@ -80,11 +80,33 @@ types:
|
||||||
- label: 'Serial'
|
- label: 'Serial'
|
||||||
children:
|
children:
|
||||||
- *m5grooveserial
|
- *m5grooveserial
|
||||||
|
- &gpiopin
|
||||||
|
type: dropdown
|
||||||
|
resource: "gpio:"
|
||||||
|
values:
|
||||||
|
- {label: unset,value:}
|
||||||
|
- 0
|
||||||
|
- 1
|
||||||
|
- 2
|
||||||
|
|
||||||
|
- &serial1
|
||||||
|
type: frame
|
||||||
|
label: 'Serial 1'
|
||||||
|
key: serial1
|
||||||
|
children:
|
||||||
|
- <<: *gpiopin
|
||||||
|
label: RX
|
||||||
|
target: "define:GWSERIAL_RX"
|
||||||
|
- <<: *gpiopin
|
||||||
|
label: TX
|
||||||
|
target: "define:GWSERIAL_TX"
|
||||||
|
|
||||||
resources:
|
resources:
|
||||||
default: &esp32default
|
default: &esp32default
|
||||||
serial: 2
|
serial: 2
|
||||||
can: 1
|
can: 1
|
||||||
i2c: 1
|
i2c: 1
|
||||||
|
gpio: 1
|
||||||
|
|
||||||
config:
|
config:
|
||||||
children:
|
children:
|
||||||
|
@ -108,4 +130,10 @@ config:
|
||||||
resource: *esp32default
|
resource: *esp32default
|
||||||
children:
|
children:
|
||||||
- *m5base
|
- *m5base
|
||||||
- *m5groove
|
- *m5groove
|
||||||
|
- value: nodemcu-generic
|
||||||
|
label: nodemcu
|
||||||
|
description: "Node mcu"
|
||||||
|
resource: *esp32default
|
||||||
|
children:
|
||||||
|
- *serial1
|
|
@ -129,6 +129,23 @@
|
||||||
.configui .selector.level4 {
|
.configui .selector.level4 {
|
||||||
margin-left: 1.5em;
|
margin-left: 1.5em;
|
||||||
}
|
}
|
||||||
|
.configui .selector.tframe {
|
||||||
|
padding-bottom: 0;
|
||||||
|
border-bottom: unset;
|
||||||
|
}
|
||||||
|
.configui .selector.tdropdown {
|
||||||
|
padding-bottom: unset;
|
||||||
|
border-bottom: unset;
|
||||||
|
}
|
||||||
|
.configui .selector.tdropdown {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.configui .title.tdropdown {
|
||||||
|
width: 10em;
|
||||||
|
font-weight: normal !important;
|
||||||
|
}
|
||||||
.configui form#upload {
|
.configui form#upload {
|
||||||
width: 0;
|
width: 0;
|
||||||
height: 0;
|
height: 0;
|
||||||
|
|
|
@ -76,7 +76,7 @@ class PipelineInfo{
|
||||||
setVisible('error',currentPipeline.error!==undefined,true);
|
setVisible('error',currentPipeline.error!==undefined,true);
|
||||||
let values={};
|
let values={};
|
||||||
fillValues(values,['configError','environment']);
|
fillValues(values,['configError','environment']);
|
||||||
if (values.textContent) {
|
if (values.configError) {
|
||||||
enableEl('start',false);
|
enableEl('start',false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -265,9 +265,12 @@ class PipelineInfo{
|
||||||
const buildSelector=(parent,config,name,current,callback)=>{
|
const buildSelector=(parent,config,name,current,callback)=>{
|
||||||
let rep=new RegExp("[^"+SEPARATOR+"]*","g");
|
let rep=new RegExp("[^"+SEPARATOR+"]*","g");
|
||||||
let level=name.replace(rep,'');
|
let level=name.replace(rep,'');
|
||||||
let frame=addEl('div','selector level'+level.length,parent);
|
let frame=addEl('div','selector level'+level.length+' t'+config.type,parent);
|
||||||
frame.setAttribute(PATH_ATTR,name);
|
frame.setAttribute(PATH_ATTR,name);
|
||||||
let title=addEl('div','title',frame,config.label);
|
let title=addEl('div','title t'+config.type,frame,config.label);
|
||||||
|
if (config.type === 'frame'){
|
||||||
|
callback(config.children,true,true,undefined,true);
|
||||||
|
}
|
||||||
if (config.type === 'select') {
|
if (config.type === 'select') {
|
||||||
if (!config.values) return;
|
if (!config.values) return;
|
||||||
config.values.forEach((v) => {
|
config.values.forEach((v) => {
|
||||||
|
@ -280,10 +283,15 @@ class PipelineInfo{
|
||||||
re.setAttribute('type', 'radio');
|
re.setAttribute('type', 'radio');
|
||||||
re.setAttribute('name', name);
|
re.setAttribute('name', name);
|
||||||
re.addEventListener('change', (ev) => callback(v.children,key,val,v.resource,false));
|
re.addEventListener('change', (ev) => callback(v.children,key,val,v.resource,false));
|
||||||
if (v.description && v.url) {
|
if (v.description){
|
||||||
let lnk = addEl('a', 'radioDescription', ef, v.description);
|
if(v.url) {
|
||||||
lnk.setAttribute('href', v.url);
|
let lnk = addEl('a', 'radioDescription', ef, v.description);
|
||||||
lnk.setAttribute('target', '_');
|
lnk.setAttribute('href', v.url);
|
||||||
|
lnk.setAttribute('target', '_');
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
let de=addEl('span','radioDescription',ef,v.description);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (key == current) {
|
if (key == current) {
|
||||||
re.setAttribute('checked','checked');
|
re.setAttribute('checked','checked');
|
||||||
|
@ -291,6 +299,46 @@ class PipelineInfo{
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (config.type === 'dropdown'){
|
||||||
|
if (!config.values) return;
|
||||||
|
const valForIdx=(idx)=>{
|
||||||
|
let v=config.values[idx];
|
||||||
|
if (typeof(v) !== 'object'){
|
||||||
|
v={label:v,value:v};
|
||||||
|
}
|
||||||
|
if (v.value === null) v.value=undefined;
|
||||||
|
if (v.key === null) v.key=undefined;
|
||||||
|
return v;
|
||||||
|
};
|
||||||
|
const resourceForVal=(v)=>{
|
||||||
|
if (v === undefined) return undefined;
|
||||||
|
let key=getVal(v,KEY_NAMES);
|
||||||
|
if (key === undefined) return key;
|
||||||
|
let resource=v.resource;
|
||||||
|
if (! resource && config.resource && config.resource.match(/:$/)){
|
||||||
|
resource=config.resource+key;
|
||||||
|
}
|
||||||
|
return resource;
|
||||||
|
};
|
||||||
|
let sel=addEl('select','t'+config.type,frame);
|
||||||
|
for (let idx=0;idx<config.values.length;idx++){
|
||||||
|
let v=valForIdx(idx);
|
||||||
|
let opt=addEl('option','',sel,v.label);
|
||||||
|
let key=getVal(v,KEY_NAMES);
|
||||||
|
if (key === null) key=undefined;
|
||||||
|
opt.setAttribute('value',idx);
|
||||||
|
if (key == current){
|
||||||
|
opt.setAttribute('selected',true);
|
||||||
|
callback(undefined,key,key,resourceForVal(v),true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
sel.addEventListener('change',(ev)=>{
|
||||||
|
let resource;
|
||||||
|
let v=valForIdx(ev.target.value);
|
||||||
|
if (! v) return;
|
||||||
|
callback(undefined,getVal(v,KEY_NAMES), v.value,resourceForVal(v),false);
|
||||||
|
});
|
||||||
|
}
|
||||||
return frame;
|
return frame;
|
||||||
}
|
}
|
||||||
const removeSelectors=(prefix,removeValues)=>{
|
const removeSelectors=(prefix,removeValues)=>{
|
||||||
|
@ -323,7 +371,8 @@ class PipelineInfo{
|
||||||
let frame=addEl('div','selectorFrame',parent);
|
let frame=addEl('div','selectorFrame',parent);
|
||||||
frame.setAttribute(PATH_ATTR,prefix);
|
frame.setAttribute(PATH_ATTR,prefix);
|
||||||
configList.forEach((cfg)=>{
|
configList.forEach((cfg)=>{
|
||||||
let name=prefix?(prefix+SEPARATOR+cfg.key):cfg.key;
|
let key=getVal(cfg,KEY_NAMES);
|
||||||
|
let name=prefix?(prefix+SEPARATOR+key):key;
|
||||||
let current=config[name];
|
let current=config[name];
|
||||||
buildSelector(frame,cfg,name,current,(children,key,value,resource,initial)=>{
|
buildSelector(frame,cfg,name,current,(children,key,value,resource,initial)=>{
|
||||||
buildSelectors(name,children,initial);
|
buildSelectors(name,children,initial);
|
||||||
|
@ -383,10 +432,11 @@ class PipelineInfo{
|
||||||
setValues({environment:environment,buildflags:flags});
|
setValues({environment:environment,buildflags:flags});
|
||||||
//check resources
|
//check resources
|
||||||
for (let k in currentResources){
|
for (let k in currentResources){
|
||||||
|
let ak=k.replace(/:.*/,'');
|
||||||
let resList=currentResources[k];
|
let resList=currentResources[k];
|
||||||
if (allowedResources[k] !== undefined){
|
if (allowedResources[ak] !== undefined){
|
||||||
if (resList.length > allowedResources[k]){
|
if (resList.length > allowedResources[ak]){
|
||||||
errors+=" more than "+allowedResources[k]+" "+k+" device(s) used";
|
errors+=" more than "+allowedResources[ak]+" "+k+" device(s) used";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ const addEl = (type, clazz, parent, text) => {
|
||||||
el.classList.add(ce);
|
el.classList.add(ce);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (text) el.textContent = text;
|
if (text !== undefined) el.textContent = text;
|
||||||
if (parent) parent.appendChild(el);
|
if (parent) parent.appendChild(el);
|
||||||
return el;
|
return el;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue