console.log('rx_stop')
rx_cont = false
while (rx_active)
- await sleep(100)
+ await sleep(10)
console.log('rx_stop done')
}
-let tx_immediate = async (device, text) => {
- console.log('tx_immediate', text)
+let tx_text = async (device, text) => {
+ console.log('tx_text', text)
data = new Uint8Array(text.length);
for (var i = 0; i < text.length; ++i)
data[i] = text.charCodeAt(i);
await device.transferOut(2, data.buffer)
}
+let tx_wait = async (device, text, timeout) => {
+ await tx_text(device, text)
+ for (let i = 0; i < timeout; ++i) {
+ if (rx_buf.slice(0, 1) === '>') {
+ rx_buf = rx_buf.slice(1)
+ return true
+ }
+ await sleep(1)
+ }
+ return false
+}
+let tx_active = false
+let tx_cont = false
+let tx_queue = []
+let tx_task = async device => {
+ console.log('tx_task')
+ tx_active = true
+ try {
+ while (tx_cont) {
+ if (tx_queue.length)
+ tx_wait(device, tx_queue.shift(), 60000)
+ await sleep(1);
+ }
+ }
+ catch (err) {
+ console.log('tx_task err', err.message)
+ }
+ console.log('tx_task done')
+ tx_active = false
+}
+let tx_stop = async () => {
+ console.log('tx_stop')
+ tx_cont = false
+ while (tx_active)
+ await sleep(10)
+ console.log('tx_stop done')
+}
+
+let device, device_busy = false
+let axes = [
+ {
+ min_degrees: -90,
+ min_position: 14578,
+ max_degrees: 90,
+ max_position: 35733
+ },
+ {
+ min_degrees: -50,
+ min_position: 31031.88888888889,
+ max_degrees: 75,
+ max_position: 16340.91666666667
+ },
+ {
+ min_degrees: 0,
+ min_position: 25155.5,
+ max_degrees: 90,
+ max_position: 14578
+ },
+ {
+ min_degrees: -45,
+ min_position: 30444.25,
+ max_degrees: 45,
+ max_position: 19866.75
+ },
+ {
+ min_degrees: -45,
+ min_position: 30444.25,
+ max_degrees: 45,
+ max_position: 19866.75
+ },
+ {
+ min_degrees: 0,
+ min_position: 25155.5,
+ max_degrees: 60,
+ max_position: 18103.833333333333
+ }
+]
+let move_to = (axis, speed, value) => {
+ if (value < axes[axis].min_degrees)
+ value = axes[axis].min_degrees
+ else if (value > axes[axis].max_degrees)
+ value = axes[axis].max_degrees
+ if (axes[axis].value !== undefined)
+ axes[axis].value.innerHTML = value
+ if (device !== undefined) {
+ axes[axis].position =
+ Math.round(axes[axis].min_position +
+ (value - axes[axis].min_degrees) *
+ (axes[axis].max_position - axes[axis].min_position) /
+ (axes[axis].max_degrees - axes[axis].min_degrees))
+ tx_queue.push(
+ `${String.fromCharCode(97 + axis)}${speed} ${String.fromCharCode(65 + axis)}${axes[axis].position}\n`
+ )
+ }
+}
document.addEventListener(
'DOMContentLoaded',
() => {
- let device, device_busy = false
- let axes = [
- {
- slider: document.getElementById("slider-a"),
- value: document.getElementById("value-a"),
- min_degrees: -90,
- min_position: 14578,
- max_degrees: 90,
- max_position: 35733
- },
- {
- slider: document.getElementById("slider-b"),
- value: document.getElementById("value-b"),
- min_degrees: -50,
- min_position: 31031.88888888889,
- max_degrees: 75,
- max_position: 16340.91666666667
- },
- {
- slider: document.getElementById("slider-c"),
- value: document.getElementById("value-c"),
- min_degrees: 0,
- min_position: 25155.5,
- max_degrees: 90,
- max_position: 14578
- },
- {
- slider: document.getElementById("slider-d"),
- value: document.getElementById("value-d"),
- min_degrees: -45,
- min_position: 30444.25,
- max_degrees: 45,
- max_position: 19866.75
- },
- {
- slider: document.getElementById("slider-e"),
- value: document.getElementById("value-e"),
- min_degrees: -45,
- min_position: 30444.25,
- max_degrees: 45,
- max_position: 19866.75
- },
- {
- slider: document.getElementById("slider-f"),
- value: document.getElementById("value-f"),
- min_degrees: 0,
- min_position: 25155.5,
- max_degrees: 60,
- max_position: 18103.833333333333
- }
- ]
+ axes[0].slider = document.getElementById("slider-a")
+ axes[0].value = document.getElementById("value-a")
+ axes[1].slider = document.getElementById("slider-b")
+ axes[1].value = document.getElementById("value-b")
+ axes[2].slider = document.getElementById("slider-c")
+ axes[2].value = document.getElementById("value-c")
+ axes[3].slider = document.getElementById("slider-d")
+ axes[3].value = document.getElementById("value-d")
+ axes[4].slider = document.getElementById("slider-e")
+ axes[4].value = document.getElementById("value-e")
+ axes[5].slider = document.getElementById("slider-f")
+ axes[5].value = document.getElementById("value-f")
+
for (let i = 0; i < axes.length; ++i) {
- axes[i].value.innerHTML = axes[i].slider.value
+ let value = axes[i].slider.value
+ axes[i].value.innerHTML = value
+ axes[i].position =
+ Math.round(axes[i].min_position +
+ (value - axes[i].min_degrees) *
+ (axes[i].max_position - axes[i].min_position) /
+ (axes[i].max_degrees - axes[i].min_degrees))
let axis = i
axes[i].slider.oninput = function() {
- axes[axis].value.innerHTML = this.value
- if (device && !device_busy) {
- axes[axis].position =
- Math.round(axes[axis].min_position +
- (this.value - axes[axis].min_degrees) *
- (axes[axis].max_position - axes[axis].min_position) /
- (axes[axis].max_degrees - axes[axis].min_degrees))
- tx_immediate(
- device,
- `${String.fromCharCode(97 + axis)}32000 ${String.fromCharCode(65 + axis)}${axes[axis].position}\n`
- )
- }
+ move_to(axis, 32000, this.value)
}
}
console.assert(!rx_active, '!rx_active')
rx_cont = true
+ rx_buf = ''
rx_task(device)
+ console.assert(!tx_active, '!tx_active')
+ tx_cont = true
+ tx_queue = []
+ tx_task(device)
+
await sleep(100)
rx_buf = ''
- tx_immediate(device, '\n')
- await sleep(100)
- if (rx_buf.slice(0, 1) === '>') {
+ if (tx_wait(device, '\n', 100)) {
console.log('prompt detected')
- rx_buf = rx_buf.slice(1)
document.getElementById('connection-status').innerHTML = 'Connected'
document.getElementById('connect-disconnect').innerHTML = 'Disconnect'
+
}
else {
console.log('no prompt detected')
device.close()
await rx_stop()
+ await tx_stop()
device = undefined
}
}
console.log('exception', err.message)
device.close()
await rx_stop()
+ await tx_stop()
device = undefined
}
}
// disconnect request
device.close()
await rx_stop()
+ await tx_stop()
device = undefined
document.getElementById('connection-status').innerHTML = 'Disconnected'
document.getElementById('connect-disconnect').innerHTML = 'Connect'