flashmagic.js
Version:
NXP LPC Microprocessor Programmer
70 lines (69 loc) • 2.09 kB
JavaScript
;
var Symbol = require('es6-symbol');
var _checksumSym = Symbol();
var UUDecoder = (function () {
function UUDecoder() {
this[_checksumSym] = 0;
}
Object.defineProperty(UUDecoder.prototype, "checksum", {
get: function () {
return this[_checksumSym];
},
enumerable: true,
configurable: true
});
UUDecoder.prototype.reset = function () {
this[_checksumSym] = 0;
};
UUDecoder.prototype.decode = function (data) {
var length = decodeSingle(data.charCodeAt(0));
var out = new Buffer(length);
var sum = 0;
length -= 3;
var i = 0, j = 1;
while (i < length) {
var a = data.charCodeAt(j++);
var b = data.charCodeAt(j++);
var c = data.charCodeAt(j++);
var d = data.charCodeAt(j++);
var _a = decodeQuad(a, b, c, d), x = _a[0], y = _a[1], z = _a[2];
sum += x + y + z;
out[i++] = x;
out[i++] = y;
out[i++] = z;
}
if (i < out.length) {
var a = data.charCodeAt(j++);
var b = data.charCodeAt(j++);
var c = data.charCodeAt(j++);
var d = data.charCodeAt(j++);
var _b = decodeQuad(a, b, c, d), x = _b[0], y = _b[1], z = _b[2];
sum += x;
out[i++] = x;
if (i < out.length) {
sum += y;
out[i++] = y;
if (i < out.length) {
sum += z;
out[i++] = z;
}
}
}
this[_checksumSym] += sum;
return out;
};
return UUDecoder;
}());
exports.UUDecoder = UUDecoder;
function decodeSingle(c) {
return c === 0x60 ? 0 : (c - 32);
}
function decodeQuad(a, b, c, d) {
a = decodeSingle(a);
b = decodeSingle(b);
c = decodeSingle(c);
d = decodeSingle(d);
return [((a & 0x3F) << 2) | ((b & 0x30) >>> 4),
((b & 0x0F) << 4) | ((c & 0x3C) >>> 2),
((c & 0x03) << 6) | (d & 0x3F)];
}