@navbar-default-link-hover-color: #333; //#000; // Nick #333;
@navbar-default-link-hover-bg: #ccc; // Nick transparent;
@navbar-default-link-active-color: #fff; // Nick #555;
-@navbar-default-link-active-bg: #ccc; //darken(@navbar-default-bg, 6.5%);
+@navbar-default-link-active-bg: #888; //darken(@navbar-default-bg, 6.5%);
@navbar-default-link-disabled-color: #ccc;
@navbar-default-link-disabled-bg: transparent;
--- /dev/null
+let sleep = ms => {
+ return new Promise(resolve => setTimeout(resolve, ms));
+}
+
+let rx_active = false
+let rx_cont = false
+let rx_buf = ''
+let rx_task = async device => {
+ console.log('rx_task')
+ rx_active = true
+ try {
+ while (rx_cont) {
+ transfer_result = await device.transferIn(2, 1)
+ //console.log('transfer_result', transfer_result)
+ if (transfer_result.status === 'ok')
+ for (let i = 0; i < transfer_result.data.byteLength; ++i) {
+ if (rx_buf.length >= 1024) {
+ console.log('rx_task overrun')
+ break
+ }
+ rx_buf += String.fromCharCode(
+ transfer_result.data.getUint8(0)
+ )
+ }
+ }
+ }
+ catch (err) {
+ console.log('rx_task err', err.message)
+ }
+ console.log('rx_task done')
+ rx_active = false
+}
+let rx_stop = async () => {
+ console.log('rx_stop')
+ rx_cont = false
+ while (rx_active)
+ await sleep(100)
+ console.log('rx_stop done')
+}
+
+let tx_immediate = async (device, text) => {
+ console.log('tx_immediate', 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)
+}
+
+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
+ }
+ ]
+ for (let i = 0; i < axes.length; ++i) {
+ axes[i].value.innerHTML = axes[i].slider.value
+
+ 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`
+ )
+ }
+ }
+ }
+
+ document.getElementById('connect-disconnect').addEventListener(
+ 'click',
+ () => {
+ ;(
+ async () => {
+ if (!device_busy) {
+ device_busy = true
+ if (device === undefined) {
+ // connect request
+ try {
+ device = await navigator.usb.requestDevice(
+ {filters: [{vendorId: 0x1a86, productId: 0x7523}]}
+ )
+ await device.open()
+ try {
+ await device.selectConfiguration(1)
+ await device.claimInterface(0)
+
+ console.assert(!rx_active, '!rx_active')
+ rx_cont = true
+ rx_task(device)
+
+ await sleep(100)
+ rx_buf = ''
+
+ tx_immediate(device, '\n')
+ await sleep(100)
+ if (rx_buf.slice(0, 1) === '>') {
+ 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()
+ device = undefined
+ }
+ }
+ catch (err) {
+ console.log('exception', err.message)
+ device.close()
+ await rx_stop()
+ device = undefined
+ }
+ }
+ catch (err) {
+ console.log('exception', err.message)
+ device = undefined
+ }
+ }
+ else {
+ // disconnect request
+ device.close()
+ await rx_stop()
+ device = undefined
+ document.getElementById('connection-status').innerHTML = 'Disconnected'
+ document.getElementById('connect-disconnect').innerHTML = 'Connect'
+ }
+ device_busy = false
+ }
+ }
+ )()
+ }
+ )
+ }
+)
},
// scripts
async _out => {
- script {
- let sleep = ms => {
- return new Promise(resolve => setTimeout(resolve, ms));
- }
-
- let rx_active = false
- let rx_cont = false
- let rx_buf = ''
- let rx_task = async device => {
- console.log('rx_task')
- rx_active = true
- try {
- while (rx_cont) {
- transfer_result = await device.transferIn(2, 1)
- //console.log('transfer_result', transfer_result)
- if (transfer_result.status === 'ok')
- for (let i = 0; i < transfer_result.data.byteLength; ++i) {
- if (rx_buf.length >= 1024) {
- console.log('rx_task overrun')
- break
- }
- rx_buf += String.fromCharCode(
- transfer_result.data.getUint8(0)
- )
- }
- }
- }
- catch (err) {
- console.log('rx_task err', err.message)
- }
- console.log('rx_task done')
- rx_active = false
- }
- let rx_stop = async () => {
- console.log('rx_stop')
- rx_cont = false
- while (rx_active)
- await sleep(100)
- console.log('rx_stop done')
- }
-
- let tx_immediate = async (device, text) => {
- console.log('tx_immediate', 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)
- }
-
- 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
- }
- ]
- for (let i = 0; i < axes.length; ++i) {
- axes[i].value.innerHTML = axes[i].slider.value
-
- 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`
- )
- }
- }
- }
-
- document.getElementById('connect-disconnect').addEventListener(
- 'click',
- () => {
- ;(
- async () => {
- if (!device_busy) {
- device_busy = true
- if (device === undefined) {
- // connect request
- try {
- device = await navigator.usb.requestDevice(
- {filters: [{vendorId: 0x1a86, productId: 0x7523}]}
- )
- await device.open()
- try {
- await device.selectConfiguration(1)
- await device.claimInterface(0)
-
- console.assert(!rx_active, '!rx_active')
- rx_cont = true
- rx_task(device)
-
- await sleep(100)
- rx_buf = ''
-
- tx_immediate(device, '\n')
- await sleep(100)
- if (rx_buf.slice(0, 1) === '>') {
- 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()
- device = undefined
- }
- }
- catch (err) {
- console.log('exception', err.message)
- device.close()
- await rx_stop()
- device = undefined
- }
- }
- catch (err) {
- console.log('exception', err.message)
- device = undefined
- }
- }
- else {
- // disconnect request
- device.close()
- await rx_stop()
- device = undefined
- document.getElementById('connection-status').innerHTML = 'Disconnected'
- document.getElementById('connect-disconnect').innerHTML = 'Connect'
- }
- device_busy = false
- }
- }
- )()
- }
- )
- }
- )
- }
+ script(src="/js/mirobot.js") {}
scripts(_out)
}