mirror of
https://github.com/Doodle3D/Doodle3D-API
synced 2025-01-03 10:03:48 +01:00
moved printer logic to doodle3dapi.printer
solves https://github.com/Doodle3D/Doodle3D-API/issues/6 solves https://github.com/Doodle3D/Doodle3D-API/issues/7
This commit is contained in:
parent
f3cadff7d5
commit
3e508cb862
@ -20,6 +20,7 @@ System.config({
|
|||||||
"casperlamboo/EventDispatcher": "github:casperlamboo/EventDispatcher@master",
|
"casperlamboo/EventDispatcher": "github:casperlamboo/EventDispatcher@master",
|
||||||
"core-js": "npm:core-js@0.9.18",
|
"core-js": "npm:core-js@0.9.18",
|
||||||
"github/fetch": "github:github/fetch@0.9.0",
|
"github/fetch": "github:github/fetch@0.9.0",
|
||||||
|
"jquery": "github:components/jquery@2.1.4",
|
||||||
"traceur": "github:jmcriffey/bower-traceur@0.0.90",
|
"traceur": "github:jmcriffey/bower-traceur@0.0.90",
|
||||||
"traceur-runtime": "github:jmcriffey/bower-traceur-runtime@0.0.90",
|
"traceur-runtime": "github:jmcriffey/bower-traceur-runtime@0.0.90",
|
||||||
"github:jspm/nodelibs-process@0.1.1": {
|
"github:jspm/nodelibs-process@0.1.1": {
|
||||||
|
@ -39,10 +39,16 @@ doodle3DManager.addEventListener('boxappeared', (event) => {
|
|||||||
|
|
||||||
box.addEventListener('connect', (event) => {
|
box.addEventListener('connect', (event) => {
|
||||||
row.style.color = 'black';
|
row.style.color = 'black';
|
||||||
|
|
||||||
|
console.log('connect');
|
||||||
|
|
||||||
|
box.printer.sendGCode("G1 X100 X100");
|
||||||
});
|
});
|
||||||
|
|
||||||
box.addEventListener('disconnect', (event) => {
|
box.addEventListener('disconnect', (event) => {
|
||||||
row.style.color = 'gray';
|
row.style.color = 'gray';
|
||||||
|
|
||||||
|
console.log('disconnect');
|
||||||
});
|
});
|
||||||
|
|
||||||
box.addEventListener('update', (event) => {
|
box.addEventListener('update', (event) => {
|
||||||
@ -57,7 +63,6 @@ doodle3DManager.addEventListener('boxappeared', (event) => {
|
|||||||
hasControl.innerHTML = status.has_control;
|
hasControl.innerHTML = status.has_control;
|
||||||
hotend.innerHTML = status.hotend;
|
hotend.innerHTML = status.hotend;
|
||||||
hotendTarget.innerHTML = status.hotend_target;
|
hotendTarget.innerHTML = status.hotend_target;
|
||||||
state.innerHTML = status.state;
|
|
||||||
totalLines.innerHTML = status.total_lines;
|
totalLines.innerHTML = status.total_lines;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -68,7 +73,6 @@ doodle3DManager.addEventListener('boxappeared', (event) => {
|
|||||||
hasControl.innerHTML = '';
|
hasControl.innerHTML = '';
|
||||||
hotend.innerHTML = '';
|
hotend.innerHTML = '';
|
||||||
hotendTarget.innerHTML = '';
|
hotendTarget.innerHTML = '';
|
||||||
state.innerHTML = '';
|
|
||||||
totalLines.innerHTML = '';
|
totalLines.innerHTML = '';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
793910
example/test.gcode
793910
example/test.gcode
File diff suppressed because it is too large
Load Diff
@ -6,7 +6,8 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"casperlamboo/EventDispatcher": "github:casperlamboo/EventDispatcher@master",
|
"casperlamboo/EventDispatcher": "github:casperlamboo/EventDispatcher@master",
|
||||||
"github/fetch": "github:github/fetch@^0.9.0"
|
"github/fetch": "github:github/fetch@^0.9.0",
|
||||||
|
"jquery": "github:components/jquery@^2.1.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"babel": "npm:babel-core@^5.1.13",
|
"babel": "npm:babel-core@^5.1.13",
|
||||||
|
@ -25,19 +25,30 @@ export default class extends EventDispatcher {
|
|||||||
this.update = new UpdateAPI(this.api);
|
this.update = new UpdateAPI(this.api);
|
||||||
|
|
||||||
this.alive = false;
|
this.alive = false;
|
||||||
|
this.autoUpdate = false;
|
||||||
this.maxBatchSize = 10*1024;
|
|
||||||
this.maxBufferedLines = 1024*1024;
|
|
||||||
|
|
||||||
this.state = {};
|
this.state = {};
|
||||||
|
|
||||||
this._printBatches = [];
|
|
||||||
this._currentBatch = 0;
|
|
||||||
|
|
||||||
this.loaded = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setAutoUpdate (autoUpdate) {
|
setAutoUpdate (autoUpdate = true, updateInterval = 1000) {
|
||||||
|
|
||||||
|
this.updateInterval = updateInterval;
|
||||||
|
|
||||||
|
if (this.autoUpdate === autoUpdate) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.autoUpdate = autoUpdate;
|
||||||
|
|
||||||
|
if (autoUpdate) {
|
||||||
|
this._initLoop();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
_initLoop () {
|
||||||
|
|
||||||
this.network.alive().then(() => {
|
this.network.alive().then(() => {
|
||||||
|
|
||||||
this.alive = true;
|
this.alive = true;
|
||||||
@ -46,14 +57,12 @@ export default class extends EventDispatcher {
|
|||||||
type: 'connect'
|
type: 'connect'
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!this.loaded) {
|
this._updateStateLoop();
|
||||||
this.loaded = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._updateState();
|
|
||||||
|
|
||||||
}).catch((error) => {
|
}).catch((error) => {
|
||||||
|
|
||||||
if (this.alive) {
|
if (this.alive) {
|
||||||
|
|
||||||
this.alive = false;
|
this.alive = false;
|
||||||
|
|
||||||
this.dispatchEvent({
|
this.dispatchEvent({
|
||||||
@ -62,60 +71,14 @@ export default class extends EventDispatcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.setAutoUpdate();
|
this._initLoop();
|
||||||
}, 1000);
|
}, this.updateInterval);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
print (gcode) {
|
_updateStateLoop () {
|
||||||
this._currentBatch = 0;
|
|
||||||
|
|
||||||
var lastIndex = 0;
|
|
||||||
while (lastIndex !== (gcode.length - 1)) {
|
|
||||||
var index = gcode.lastIndexOf('\n', lastIndex + maxBatchSize);
|
|
||||||
var batch = gcode.substring(lastIndex, index);
|
|
||||||
lastIndex = index;
|
|
||||||
|
|
||||||
this.printBatches.push(batch);
|
|
||||||
}
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
stopPrint (endCode = '') {
|
|
||||||
|
|
||||||
this._printBatches = [];
|
|
||||||
this._currentBatch = 0;
|
|
||||||
|
|
||||||
this.printer.stop(endCode).then((data) => {
|
|
||||||
|
|
||||||
console.log('Printer stop command sent');
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateLoop () {
|
|
||||||
if (this._printBatches.length > 0 && (this.state['buffered_lines'] + this._printBatches[0].length) <= this.maxBufferedLines) {
|
|
||||||
//if (this._printBatches.length > 0 ) {
|
|
||||||
this._printBatch();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
setTimeout(() => {
|
|
||||||
this._updateState();
|
|
||||||
}, 1000);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateState () {
|
|
||||||
//que api calls so they don't overload the d3d box
|
|
||||||
|
|
||||||
this.info.status().then((state) => {
|
this.info.status().then((state) => {
|
||||||
|
|
||||||
this.state = state;
|
this.state = state;
|
||||||
|
|
||||||
this.dispatchEvent({
|
this.dispatchEvent({
|
||||||
@ -123,38 +86,18 @@ export default class extends EventDispatcher {
|
|||||||
state
|
state
|
||||||
});
|
});
|
||||||
|
|
||||||
this._updateLoop();
|
if (this.autoUpdate) {
|
||||||
}).catch((error) => {
|
setTimeout(() => {
|
||||||
|
this._updateStateLoop();
|
||||||
console.warn(error);
|
}, this.updateInterval);
|
||||||
this.setAutoUpdate();
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
_printBatch () {
|
|
||||||
var gcode = this._printBatches.shift();
|
|
||||||
var start = (this._currentBatch === 0) ? true : false;
|
|
||||||
var first = (this._currentBatch === 0) ? true : false;
|
|
||||||
var last = (this._printBatches.length === 0) ? true : false; //only for the node js server
|
|
||||||
|
|
||||||
this.printer.print(gcode, start, first, last).then((data) => {
|
|
||||||
console.log('batch sent: ' + this._currentBatch, data);
|
|
||||||
|
|
||||||
if (this._printBatches.length > 0) {
|
|
||||||
this._currentBatch ++;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
console.log('Finish sending gcode to printer');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this._updateState();
|
|
||||||
}).catch((error) => {
|
}).catch((error) => {
|
||||||
console.warn(error);
|
if (this.autoUpdate) {
|
||||||
|
setTimeout(() => {
|
||||||
this._printBatches.unshift(gcode);
|
this._initLoop();
|
||||||
|
}, this.updateInterval);
|
||||||
this.setAutoUpdate();
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -14,6 +14,10 @@ export default class extends EventDispatcher {
|
|||||||
if (autoUpdate) {
|
if (autoUpdate) {
|
||||||
this._checkNew();
|
this._checkNew();
|
||||||
|
|
||||||
|
if (this.interval !== undefined) {
|
||||||
|
clearInterval(this.interval);
|
||||||
|
}
|
||||||
|
|
||||||
this.interval = setInterval(() => {
|
this.interval = setInterval(() => {
|
||||||
this._checkNew();
|
this._checkNew();
|
||||||
}, rate);
|
}, rate);
|
||||||
@ -39,19 +43,15 @@ export default class extends EventDispatcher {
|
|||||||
|
|
||||||
_checkNew () {
|
_checkNew () {
|
||||||
rest.get(this.api + 'list.php').then((boxes) => {
|
rest.get(this.api + 'list.php').then((boxes) => {
|
||||||
var knownIPs = [];
|
|
||||||
for (var i = 0; i < this.boxes.length; i ++) {
|
var knownIPs = this.boxes.map((box) => box.boxData.localip);
|
||||||
var boxData = this.boxes[i].boxData;
|
|
||||||
knownIPs.push(boxData.localip);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = 0; i < boxes.length; i ++) {
|
|
||||||
var boxData = boxes[i];
|
|
||||||
|
|
||||||
|
for (var boxData of boxes) {
|
||||||
if (knownIPs.indexOf(boxData.localip) === -1) {
|
if (knownIPs.indexOf(boxData.localip) === -1) {
|
||||||
this.addBox(boxData);
|
this.addBox(boxData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -3,6 +3,12 @@ import * as rest from './restapi.js';
|
|||||||
export default class {
|
export default class {
|
||||||
constructor (api) {
|
constructor (api) {
|
||||||
this.api = api;
|
this.api = api;
|
||||||
|
|
||||||
|
this._printBatches = [];
|
||||||
|
this._currentBatch = 0;
|
||||||
|
|
||||||
|
this.maxBatchSize = 10*1024;
|
||||||
|
this.maxBufferedLines = 1024*1024; //yet to be implimented
|
||||||
}
|
}
|
||||||
|
|
||||||
temperature () {
|
temperature () {
|
||||||
@ -25,6 +31,51 @@ export default class {
|
|||||||
return rest.post(this.api + 'printer/heatup', {});
|
return rest.post(this.api + 'printer/heatup', {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sendGCode (gcode) {
|
||||||
|
if (!gcode.endsWith('\n')) {
|
||||||
|
gcode += '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
this._currentBatch = 0;
|
||||||
|
|
||||||
|
var lastIndex = 0;
|
||||||
|
while (lastIndex !== (gcode.length - 1)) {
|
||||||
|
var index = gcode.lastIndexOf('\n', lastIndex + this.maxBatchSize);
|
||||||
|
var batch = gcode.substring(lastIndex, index);
|
||||||
|
lastIndex = index;
|
||||||
|
|
||||||
|
this._printBatches.push(batch);
|
||||||
|
}
|
||||||
|
|
||||||
|
this._sendBatch();
|
||||||
|
}
|
||||||
|
|
||||||
|
_sendBatch () {
|
||||||
|
var gcode = this._printBatches.shift();
|
||||||
|
var start = (this._currentBatch === 0) ? true : false;
|
||||||
|
var first = (this._currentBatch === 0) ? true : false;
|
||||||
|
var last = (this._printBatches.length === 0) ? true : false; //only for the node js server
|
||||||
|
|
||||||
|
this.print(gcode, start, first, last).then((data) => {
|
||||||
|
|
||||||
|
console.log('batch sent: ' + this._currentBatch, data);
|
||||||
|
|
||||||
|
if (this._printBatches.length > 0) {
|
||||||
|
this._currentBatch ++;
|
||||||
|
_sendBatch();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log('Finish sending gcode to printer');
|
||||||
|
}
|
||||||
|
}).catch((error) => {
|
||||||
|
this._printBatches.unshift(gcode);
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
this._sendBatch();
|
||||||
|
}, 1000);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
print (gcode = '', first = false, start = false, last = false) {
|
print (gcode = '', first = false, start = false, last = false) {
|
||||||
var data = {gcode, first, start}
|
var data = {gcode, first, start}
|
||||||
if (last) data.last = last;
|
if (last) data.last = last;
|
||||||
@ -33,6 +84,9 @@ export default class {
|
|||||||
}
|
}
|
||||||
|
|
||||||
stop (gcode = '') {
|
stop (gcode = '') {
|
||||||
|
this._currentBatch = 0;
|
||||||
|
this._printBatches = [];
|
||||||
|
|
||||||
return rest.post(this.api + 'printer/stop', {gcode});
|
return rest.post(this.api + 'printer/stop', {gcode});
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,3 +1,52 @@
|
|||||||
|
import $ from 'jquery';
|
||||||
|
|
||||||
|
export function get (url) {
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: url,
|
||||||
|
dataType: 'json',
|
||||||
|
timeout: 5000,
|
||||||
|
success: (response) => {
|
||||||
|
|
||||||
|
if (response.status === 'success') {
|
||||||
|
resolve(response.data);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
reject(response.msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).fail(reject);
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function post (url, data) {
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: url,
|
||||||
|
type: 'POST',
|
||||||
|
data: data,
|
||||||
|
dataType: 'json',
|
||||||
|
timeout: 10000,
|
||||||
|
success: (response) => {
|
||||||
|
|
||||||
|
if (response.status === 'success') {
|
||||||
|
resolve(response.data);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
reject(response.msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}).fail(reject);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
import 'github/fetch';
|
import 'github/fetch';
|
||||||
|
|
||||||
export function get (url) {
|
export function get (url) {
|
||||||
@ -18,6 +67,7 @@ export function get (url) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}).catch(reject);
|
}).catch(reject);
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -27,9 +77,9 @@ export function post (url, data) {
|
|||||||
|
|
||||||
fetch(url, {
|
fetch(url, {
|
||||||
method: 'post',
|
method: 'post',
|
||||||
|
enctype: 'x-www-form-urlencoded',
|
||||||
headers: {
|
headers: {
|
||||||
'Accept': 'application/json',
|
'Accept': 'application/json'
|
||||||
'Content-Type': 'application/json'
|
|
||||||
},
|
},
|
||||||
body: JSON.stringify(data)
|
body: JSON.stringify(data)
|
||||||
}).then((response) => {
|
}).then((response) => {
|
||||||
@ -47,4 +97,5 @@ export function post (url, data) {
|
|||||||
|
|
||||||
}).catch(reject);
|
}).catch(reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
*/
|
Loading…
Reference in New Issue
Block a user