Skip to content

Commit

Permalink
Implement PWM and AIO on inspector
Browse files Browse the repository at this point in the history
  • Loading branch information
wakhub committed Sep 30, 2016
1 parent 8d33652 commit f5906c9
Show file tree
Hide file tree
Showing 6 changed files with 139 additions and 18 deletions.
52 changes: 46 additions & 6 deletions inspector/js/analog_in.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,54 @@
(function(app) {

app.c.AnalogIn = {

view: function(ctrl) {
return m('.mdl-grid', [
m('.mdl-cell.mdl-cell--4-col', 'Analog'),
m('.mdl-cell.mdl-cell--4-col', 'BBB'),
m('.mdl-cell.mdl-cell--4-col', 'CCC')
return m('.mdl-layout', [
m('table.mdl-data-table.mdl-js-data-table.mdl-shadow--2dp', [
m('thead', [
m('tr', [
m('th', 'PIN'),
m('th', 'Indicator'),
m('th', 'Voltage(mV)')
])
]),
m('tbody', ctrl.vm.analogPins().map(pin => {
return m('tr', [
m('td', pin.number()),
m('td', [m('div.mdl-progress.mdl-js-progress.analog-pin-indicator.analog-pin-indicator-' + pin.number())]),
m('td', pin.input())
]);
}))
])
]);

},

controller: function() {
controller: function(args) {
var vm = args.vm;
var chain = null;

setInterval(() => {
var chain = null;
vm.analogPins().forEach(pin => {
var done = (value) => {
var elem = document.querySelector('.analog-pin-indicator-' + pin.number());
if (!elem) {
return;
}
pin.input(value);
var progress = value / 1300 * 100;
elem.MaterialProgress.setProgress(progress);
};
if (chain == null) {
chain = pin.read().then(done);
} else {
chain = chain.then(() => pin.read().then(done));
}
});
m.redraw();
}, 100);
return {vm: vm};
}
};

})(app);
32 changes: 32 additions & 0 deletions inspector/js/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,20 @@ var PioPin = function(pin) {
return output;
});
}
this.pwmDuty = m.prop(0);
this.setPwmMode = (mode) => {
if (!app.vm.konashi().connected()) {
return;
}
return app.vm.konashi().device().pwmMode(this.number(), mode);
};
this.pwmLedDrive = (ratio) => {
if (!app.vm.konashi().connected()) {
return;
}
return app.vm.konashi().device().pwmLedDrive(this.number(), ratio)
.then(() => this.pwmDuty(ratio));
};
this.read = () => {
if (!app.vm.konashi().connected()) {
return;
Expand All @@ -91,6 +105,18 @@ var PioPin = function(pin) {
};
};

var AnalogPin = function(pin) {
this.number = m.prop(pin);
this.input = m.prop(0);
this.read= () => {
if (!app.vm.konashi().connected()) {
return;
}
return app.vm.konashi().device().analogRead(this.number());
};
};


app.Page = function(title, component) {
this.title = m.prop(title);
this.component = m.prop(component);
Expand All @@ -109,6 +135,12 @@ app.vm = {
new PioPin(2),
new PioPin(3),
new PioPin(4)]);
app.vm.pwmPins = m.prop([app.vm.pioPins()[0],
app.vm.pioPins()[1],
app.vm.pioPins()[2]]);
app.vm.analogPins = m.prop([new AnalogPin(0),
new AnalogPin(1),
new AnalogPin(2)]);

app.vm.messages = m.prop([]);
app.vm.pushMessage = function(message) {
Expand Down
6 changes: 3 additions & 3 deletions inspector/js/main.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
document.addEventListener('DOMContentLoaded', function() {
document.addEventListener('DOMContentLoaded', () => {
app.pages.push(new app.Page('System Info', app.c.SystemInfo));
app.pages.push(new app.Page('Digital I/O', app.c.Pio));
//app.pages.push(new app.Page('PWM', app.c.Pwm));
//app.pages.push(new app.Page('Anlog IN', app.c.AnalogIn));
app.pages.push(new app.Page('PWM', app.c.Pwm));
app.pages.push(new app.Page('Anlog IN', app.c.AnalogIn));
//app.pages.push(new app.Page('UART', app.c.Uart));
m.mount(document.body, app);
});
49 changes: 43 additions & 6 deletions inspector/js/pwm.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,50 @@
((app) => {

app.c.Pwm = {

view: function(ctrl) {
return m('.mdl-grid', [
m('.mdl-cell.mdl-cell--4-col', 'AAA'),
m('.mdl-cell.mdl-cell--4-col', 'BBB'),
m('.mdl-cell.mdl-cell--4-col', 'CCC')
view: (ctrl) => {
return m('.mdl-layout', [
m('table.mdl-data-table.mdl-js-data-table.mdl-shadow--2dp', [
m('thead', [
m('tr', [
m('th', 'PIN'),
m('th', 'PWM'),
m('th', 'Duty')
])
]),
m('tbody', ctrl.vm.pwmPins().map(pin => {
return m('tr', [
m('td', pin.number()),
m('td', [
m('label.mdl-switch.mdl-js-switch.mdl-js-ripple-effect', [
m('input[type=checkbox].mdl-switch__input#pwm-pin-' + pin.number(), {onchange: (ev) => { ctrl.onCheckSwitch(pin, ev.target.checked); }}),
m('span.mdl-switch__label')
])
]),
m('td', [m('input.mdl-slider.mdl-js-slider',
{onchange: (ev) => { ctrl.onChangeDuty(pin, ev.target.value); },
type: 'range',
min: 0,
max: 100,
value: pin.pwmDuty()})])
]);
}))
])
]);
},

controller: function() {
controller: (args) => {
var vm = args.vm;
return {
vm: vm,
onChangeDuty: (pin, value) => {
pin.pwmLedDrive(value).then(() => m.redraw());
},
onCheckSwitch: (pin, checked) => {
pin.setPwmMode(checked ? Konashi.KONASHI_PWM_ENABLE_LED_MODE : Konashi.KONASHI_PWM_DISABLE);
}
};
}
};

})(app);
5 changes: 5 additions & 0 deletions inspector/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@
min-width: 7rem;
}

.konashi-content .analog-pin-indicator {
width: 150px;
margin: 0 auto;
}


@media (max-width: 479px) {

Expand Down
13 changes: 10 additions & 3 deletions js/konashi.js
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,7 @@ class Konashi {
*
* @param {Number} pin Konashi.PIO[0-7]
* @param {Number} mode Konashi.(KONASHI_PWM_ENABL|KONASHI_PWM_ENABLE_LED_MODE)
* @returns {Promise<Void>}
*/
pwmMode(pin, mode) {
console.log('pwmMode: ' + pin + ' ' + mode);
Expand All @@ -389,9 +390,9 @@ class Konashi {
var that = this,
data = new Uint8Array([this._state.pwmModes]);
if (mode == Konashi.KONASHI_PWM_ENABLE_LED_MODE) {
return this.pwmPeriod(pin, Konashi.KONASHI_PWM_LED_PERIOD)
.then(() => that.pwmDuty(pin, 0))
.then(() => that._c12c.pwmConfig.writeValue(data));
return this._c12c.pwmConfig.writeValue(data)
.then(() => that.pwmPeriod(pin, Konashi.KONASHI_PWM_LED_PERIOD))
.then(() => that.pwmDuty(pin, 0));
}
return this._c12c.pwmConfig.writeValue(data);
}
Expand Down Expand Up @@ -430,6 +431,12 @@ class Konashi {
return this._c12c.pwmDuty.writeValue(data);
}

pwmLedDrive(pin, ratio) {
ratio = Math.min(100.0, Math.max(0.0, ratio));
var duty = Konashi.KONASHI_PWM_LED_PERIOD * ratio / 100;
return this.pwmDuty(pin, duty);
}

/**
* Write PWM ratio
*
Expand Down

0 comments on commit f5906c9

Please sign in to comment.