Right now - my old legacy way of doing that has stuck inside lw for too long, has been to send individual websocket events for position, queuecnt, etc - very inefficient. in the frontend we have to listen for various named ws events...
I propose we convert to a single object that gets sent over as a single websocket event. Data binding to a single object and then just updating UI when a key changes is more efficient and easier to debug:
var statusjson = {
machine: {
overrides: {
feedOverride: 0,
spindleOverride: 0
},
position: {
work: {
xWpos: 0,
yWpos: 0,
zWpos: 0,
aWpos: 0,
eWpos: 0,
},
machine: {
xMpos: 0,
yMpos: 0,
zMpos: 0,
aMpos: 0,
eMpos: 0
}
},
temperature: {
t1temp: 0,
t2temp: 0,
bedtemp: 0,
},
firmware: {
type: "",
version: "",
date: ""
},
configuration: {
x_steps_per_mm: 0,
y_steps_per_mm: 0,
z_steps_per_mm: 0,
x_acceleration: 0,
y_acceleration: 0,
z_acceleration: 0,
x_max_rate: 0,
y_max_rate: 0,
z_max_rate: 0,
x_axis_length: 0, // Max lenght of axes: Used for soft limits in grbl and smoothie - also maybe useful to autodraw grid size
y_axis_length: 0, // Max lenght of axes: Used for soft limits in grbl and smoothie - also maybe useful to autodraw grid size
z_axis_length: 0, // Max lenght of axes: Used for soft limits in grbl and smoothie - also maybe useful to autodraw grid size
x_homing: 0, // 0 = none, 1 = min, 2 = max
y_homing: 0, // 0 = none, 1 = min, 2 = max
z_homing: 0, // 0 = none, 1 = min, 2 = max
x_home_invert: 0, // 0 = none, 1 = inverted
y_home_invert: 0, // 0 = none, 1 = inverted
z_home_invert: 0, // 0 = none, 1 = min, 2 = max
x_dir: 0, // 0 = normal, 1 = inverted
y_dir: 0, // 0 = normal, 1 = inverted
z_dir: 0, // 0 = normal, 1 = inverted
x_current: 0, // grbl-lpc and smoothie
y_current: 0, // grbl-lpc and smoothie
z_current: 0, // grbl-lpc and smoothie
tools: {
bed: true, // not really scoped to configure from here... but rather used in frontend to configure showing options related
e0: true, // not really scoped to configure from here... but rather used in frontend to configure showing options related
e1: false, // not really scoped to configure from here... but rather used in frontend to configure showing options related
laser: false, // not really scoped to configure from here... but rather used in frontend to configure showing options related
spindle: false // not really scoped to configure from here... but rather used in frontend to configure showing options related
},
}
},
comms: {
connectionStatus: 0, //0 = not connected, 1 = connected, 2 = playing, 3 = paused, etc?
runStatus: 0,// 0 = init, 1 = idle, 2 = alarm, 3 = stop, 4 = run, etc?
queue: 0,
controllerBuffer: 0, // Seems like you are tracking available buffer? Maybe nice to have in frontend?
interfaces: {
supportedInterfaces: ['USB', 'ESP8266', 'Telnet'],
ports: portsList,
activeInterface: "",
activePort: "" // or activeIP in the case of wifi/telnet?
},
},
logEntry: "String" // In electron we lose the cmd log - can we also emit the log lines here?
};