Created
August 26, 2013 19:17
-
-
Save nraynaud/6345431 to your computer and use it in GitHub Desktop.
first test for a Huanyang VFD google chrome extension.
broken without reason, the read just says it retrieved one byte.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<title>modbus ?</title> | |
</head> | |
<body> | |
modbus ?<br> | |
<script src="serial.js"></script> | |
<label> | |
DCD: | |
<span id="dcd_status">---</span> | |
</label> | |
<label> | |
CTS: | |
<span id="cts_status">---</span> | |
</label> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
var onGetPorts = function (ports) { | |
for (var i = 0; i < ports.length; i++) { | |
console.log(ports[i]); | |
} | |
}; | |
var CRC_HI_LOOKUP = [ | |
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, | |
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, | |
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, | |
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, | |
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, | |
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, | |
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, | |
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, | |
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, | |
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, | |
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, | |
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, | |
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, | |
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, | |
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, | |
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, | |
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, | |
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, | |
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, | |
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, | |
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, | |
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, | |
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, | |
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, | |
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, | |
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40]; | |
var CRC_LO_LOOKUP = [ | |
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, | |
0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, | |
0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, | |
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, | |
0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, | |
0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, | |
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, | |
0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, | |
0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, | |
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, | |
0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, | |
0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, | |
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, | |
0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, | |
0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, | |
0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, | |
0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, | |
0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, | |
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, | |
0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, | |
0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, | |
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, | |
0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, | |
0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, | |
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, | |
0x43, 0x83, 0x41, 0x81, 0x80, 0x40]; | |
function computeCRC(data) { | |
var lo = 0xFF; | |
var hi = 0xFF; | |
for (var i = 0; i < data.length - 2; i++) { | |
var index = hi ^ data[i]; | |
hi = lo ^ CRC_HI_LOOKUP[index]; | |
lo = CRC_LO_LOOKUP[index]; | |
} | |
return hi << 8 | lo; | |
} | |
console.log(computeCRC([10]).toString(16)); | |
function ab2str(buf) { | |
return String.fromCharCode.apply(null, new Uint16Array(buf)); | |
} | |
function str2ab(str) { | |
var buf = new ArrayBuffer(str.length * 2); // 2 bytes for each char | |
var bufView = new Uint16Array(buf); | |
for (var i = 0, strLen = str.length; i < strLen; i++) { | |
bufView[i] = str.charCodeAt(i); | |
} | |
return buf; | |
} | |
function frequencyMessage(addr, freq) { | |
var buff = new ArrayBuffer(8); | |
var view = new DataView(buff); | |
view.setUint8(0, addr); | |
view.setUint8(1, 2);//func | |
view.setUint8(2, 3);//len | |
var newFreq = freq * 100; | |
view.setUint8(3, newFreq >> 16 & 0xFF); | |
view.setUint8(4, newFreq >> 8 & 0xFF); | |
view.setUint8(5, newFreq >> 0 & 0xFF); | |
var crc = computeCRC(new Uint8Array(buff)); | |
view.setUint8(6, crc >> 8 & 0xFF); | |
view.setUint8(7, crc >> 0 & 0xFF); | |
return buff; | |
} | |
chrome.serial.getPorts(onGetPorts); | |
chrome.serial.open('/dev/tty.usbserial-A6022Q3Y', {bitrate: 9600}, function (e) { | |
var e_dcd = document.getElementById('dcd_status'); | |
var e_cts = document.getElementById('cts_status'); | |
console.log('opened', e); | |
function readSignals() { | |
chrome.serial.getControlSignals(e.connectionId, function onGetControlSignals(options) { | |
e_dcd.innerText = !!options.dcd; | |
e_cts.innerText = !!options.cts; | |
}); | |
} | |
setInterval(readSignals, 1000); | |
console.log(new Uint8Array(frequencyMessage(1, 30))); | |
setTimeout(function () { | |
chrome.serial.setControlSignals(e.connectionId, {rts: true}, function () { | |
chrome.serial.write(e.connectionId, frequencyMessage(1, 30), function (writeInfo) { | |
chrome.serial.flush(e.connectionId, function () { | |
chrome.serial.setControlSignals(e.connectionId, {rts: false}, function () { | |
console.log('written', writeInfo); | |
setTimeout(function () { | |
chrome.serial.read(e.connectionId, 7, function (readInfo) { | |
if (!readInfo.bytesRead) | |
chrome.serial.read(e.connectionId, 7, function (readInfo) { | |
console.log('read', readInfo); | |
}); | |
else { | |
console.log('read', readInfo); | |
console.log(new DataView(readInfo.data).getInt8(0)); | |
} | |
}); | |
}, 70); | |
}); | |
}); | |
}); | |
}); | |
}, 70); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment