Files
awtrix-light/lib/webserver/setup-ui/data/build/stringConverter.js
Stephan Mühl adb5102869 release
2023-03-22 12:15:18 +01:00

49 lines
1.6 KiB
JavaScript

var stringConverter = {
convertByte: function (oneByte, bytesPerPixel) {
var stringByte = '0x' + oneByte.toString(16).padStart(bytesPerPixel * 2, '0');
return stringByte;
},
convert: function (dataLength, bytesPerPixel, multiLine, colNumber, data) {
var resultString = '';
for (var i = 0; i < dataLength; i++) {
var stringByte = '';
// need to use bigint, so we can use 32bit integers (4byte per pixel)
let combinedByte = BigInt("0b00000000000000000000000000000000");
for (let j = 0; j < bytesPerPixel; j++) {
let pixelByte = BigInt(data[(i * bytesPerPixel) + j]);
if (j != 0) {
combinedByte = combinedByte << BigInt(8);
}
combinedByte = combinedByte | pixelByte;
}
stringByte = this.convertByte(combinedByte, bytesPerPixel) + ', ';
if (multiLine && ((i + 1) % colNumber == 0)) {
stringByte += '\n ';
}
resultString += stringByte;
}
resultString = resultString.substr(0, resultString.lastIndexOf(',')).trim();
// add the array definition
return resultString;
}
};
module.exports = {
toString : function(data, colNum) {
console.log('Converting data to string');
var dataLength = data.byteLength;
console.log('actualDataLength: ' + dataLength);
var resultString = '#define SETUP_HTML_SIZE ';
resultString += dataLength + '\n'
resultString += 'const char SETUP_HTML[] PROGMEM = {\n ';
resultString += stringConverter.convert(dataLength, 1, true, 16, data);
resultString += '\n};';
return resultString;
}
}