First commit buildtool
This commit is contained in:
544
assets/readdevice.js
Normal file
544
assets/readdevice.js
Normal file
@@ -0,0 +1,544 @@
|
||||
var port, textEncoder, writableStreamClosed, writer, historyIndex = -1;
|
||||
const lineHistory = [];
|
||||
maintenanceRun = 0;
|
||||
|
||||
// To read and clean device data
|
||||
const VCP = []; //for VCP values
|
||||
const VPP1 = []; //for VPP1 values
|
||||
const VPP2 = []; //for VPP2 values
|
||||
const VBAT = []; //for VBAT values
|
||||
const PWM = []; //for PWM values
|
||||
const xChart = []; //x-axis chart values
|
||||
|
||||
|
||||
function progressBar(percentage, message, color){
|
||||
var readbar = document.getElementById("readBar");
|
||||
readBar.style.background = color;
|
||||
readBar.style.width = percentage +"%";
|
||||
readBar.innerHTML = message;
|
||||
}
|
||||
|
||||
async function connectSerial() {
|
||||
try {
|
||||
// Prompt user to select any serial port.
|
||||
const filters = [{ usbVendorId: 1027, usbProductId: 24597 }];
|
||||
port = await navigator.serial.requestPort({ filters });
|
||||
await port.open({ baudRate: 56700 });
|
||||
|
||||
listenToPort();
|
||||
|
||||
textEncoder = new TextEncoderStream();
|
||||
writableStreamClosed = textEncoder.readable.pipeTo(port.writable);
|
||||
|
||||
writer = textEncoder.writable.getWriter();
|
||||
} catch {
|
||||
alert("Serial Connection Failed");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function sendSerialLine() {
|
||||
dataToSend = document.getElementById("lineToSend").value;
|
||||
lineHistory.unshift(dataToSend);
|
||||
historyIndex = -1; // No history entry selected
|
||||
dataToSend = dataToSend + "\r"; //enter
|
||||
dataToSend = dataToSend + "\n"; //new line
|
||||
appendToTerminal("> " + dataToSend); //send echo
|
||||
await writer.write(dataToSend);
|
||||
document.getElementById("lineToSend").value = "";
|
||||
//await writer.releaseLock();
|
||||
}
|
||||
|
||||
async function startMaintenance(){
|
||||
//Get Select Product
|
||||
var product = document.getElementById("productlist");
|
||||
var productSelected = product.options[product.selectedIndex].value; // get selected value
|
||||
var getProductNumber = productSelected.split("|"); //Selected product contains productcode + product category
|
||||
value = getProductNumber[0]; //get productcode
|
||||
value_pt = getProductNumber[1]; // get PT code
|
||||
|
||||
|
||||
if (value != 0){
|
||||
connectSerial();
|
||||
maintenanceRun = 1;
|
||||
progressBar("10", "Connecting", "#04AA6D");
|
||||
}
|
||||
else{
|
||||
progressBar("100", "Not ready - Please select product from dropdown", "#D96F58");
|
||||
}
|
||||
}
|
||||
|
||||
function maintenanceTest() {
|
||||
|
||||
switch (maintenanceRun) {
|
||||
case 2: // SET PN
|
||||
progressBar("60", "Writing device, do not disconnect" , "#ff6666");
|
||||
var command = "setpn ";
|
||||
var createPN = value.padStart(12, "0");
|
||||
var payload = createPN.substring(0,4)+" "+createPN.substring(4,8)+" "+createPN.substring(8,12) ;
|
||||
pn = createPN.substring(0,4)+"-"+createPN.substring(4,8)+"-"+createPN.substring(8,12);
|
||||
writeToStream(command, payload);
|
||||
break;
|
||||
|
||||
case 3: // SET PD
|
||||
progressBar("65", "Writing device, do not disconnect" , "#ff6666");
|
||||
var command3 = "setpd ";
|
||||
var payload3 = new Date().toLocaleDateString('sv').replaceAll('-', '');
|
||||
setTimeout(function() {writeToStream(command3, payload3);}, 3000);
|
||||
break;
|
||||
|
||||
case 4: // SET PT
|
||||
progressBar("68", "Writing device, do not disconnect" , "#ff6666");
|
||||
var command3a = "setpt ";
|
||||
var payload3a = value_pt.padStart(2,"0");
|
||||
setTimeout(function() {writeToStream(command3a, payload3a);}, 3000);
|
||||
break;
|
||||
|
||||
case 5: // RESET
|
||||
progressBar("70", "Reseting device, do not disconnect" , "#ff6666");
|
||||
serialResultsDiv.innerHTML ="";
|
||||
var command4 = "reset";
|
||||
var payload4 = "";
|
||||
setTimeout(function() {writeToStream(command4, payload4);}, 3000);
|
||||
break;
|
||||
|
||||
case 6: //Clear cache after reset
|
||||
progressBar("75", "Reading, do not disconnect" , "#ff6666");
|
||||
maintenanceRun++;
|
||||
console.log(maintenanceRun);
|
||||
setTimeout(maintenanceTest,8000);
|
||||
break;
|
||||
|
||||
case 7: // Check PN correct
|
||||
progressBar("80", "Checking device after reset" , "#FBB404");
|
||||
data_after_reset = serialResultsDiv.innerHTML;
|
||||
console.log(data_after_reset);
|
||||
x1a = Array.from(new Set(data_after_reset.split(";"))).toString();
|
||||
var search_new_device_PN = "PN="+pn;
|
||||
|
||||
if (x1a.indexOf(search_new_device_PN) > 0){
|
||||
console.log("PN correct");
|
||||
maintenanceRun++;
|
||||
maintenanceTest();
|
||||
}
|
||||
else
|
||||
{
|
||||
progressBar("100", "Error: product not correctly written" , "#ff6666");
|
||||
console.log("PN not correct");
|
||||
maintenanceRun = 999;
|
||||
closePort();
|
||||
}
|
||||
break;
|
||||
|
||||
case 8: // Check PRD correct
|
||||
progressBar("82", "Checking device after reset" , "#FBB404");
|
||||
var search_new_device_PRD = "PRDDATE="+new Date().toLocaleDateString('sv');
|
||||
if (x1a.indexOf(search_new_device_PRD) > 0){
|
||||
console.log("PRD correct");
|
||||
maintenanceRun++;
|
||||
maintenanceTest();
|
||||
}
|
||||
else
|
||||
{
|
||||
progressBar("100", "Error: production date not correctly written" , "#ff6666");
|
||||
console.log("PRDDATE not correct");
|
||||
maintenanceRun = 999;
|
||||
closePort();
|
||||
}
|
||||
break;
|
||||
|
||||
case 9: // Check PT correct
|
||||
progressBar("83", "Checking device after reset" , "#FBB404");
|
||||
var plugtype = value_pt.padStart(2,"0");
|
||||
var search_new_device_PT= "PLUGTYPE="+plugtype;
|
||||
if (x1a.indexOf(search_new_device_PT) > 0){
|
||||
console.log("PT correct");
|
||||
maintenanceRun++;
|
||||
maintenanceTest();
|
||||
}
|
||||
else
|
||||
{
|
||||
progressBar("100", "Error: production date not correctly written" , "#ff6666");
|
||||
console.log("PlugTYPE not correct");
|
||||
maintenanceRun = 999;
|
||||
closePort();
|
||||
}
|
||||
break;
|
||||
|
||||
case 10: //Update equipmenthistory
|
||||
progressBar("90", "Updating equipment history" , "#FBB404");
|
||||
updateHistory();
|
||||
maintenanceRun++;
|
||||
break;
|
||||
|
||||
case 11: //Printlabel
|
||||
progressBar("92", "Printing Label" , "#FBB404");
|
||||
printLabel();
|
||||
maintenanceRun++;
|
||||
setTimeout(maintenanceTest,3000);
|
||||
|
||||
break;
|
||||
|
||||
case 12: // ClosePort
|
||||
//last element to write completed then closePort and reset maintenanceRun.
|
||||
|
||||
if (x1a.indexOf("STATE=SLEEP") > 0 )// change Maintenance to SLEEP
|
||||
{
|
||||
progressBar("95", "Finalizing - do not disconnect", "#FBB404")
|
||||
maintenanceRun = 0;
|
||||
setTimeout(closePort,3000);
|
||||
}
|
||||
else{
|
||||
progressBar("100", "Error: device not in sleep mode" , "#ff6666");
|
||||
maintenanceRun = 999;
|
||||
closePort();
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function writeToStream(command, payload){
|
||||
limiter = "\r\n";
|
||||
dataToSend = command + payload + limiter;
|
||||
console.log(dataToSend);
|
||||
writer.write(dataToSend);
|
||||
maintenanceRun++;
|
||||
console.log(maintenanceRun);
|
||||
maintenanceTest();
|
||||
}
|
||||
|
||||
async function listenToPort() {
|
||||
const textDecoder = new TextDecoderStream();
|
||||
readableStreamClosed = port.readable.pipeTo(textDecoder.writable);
|
||||
reader = textDecoder.readable.getReader();
|
||||
progressBar("35", "Reading device", "#04AA6D")
|
||||
while (true) {
|
||||
const { value, done } = await reader.read();
|
||||
if (done) {
|
||||
break;
|
||||
}
|
||||
appendToTerminal(value);
|
||||
|
||||
var item = serialResultsDiv.innerHTML;
|
||||
x = Array.from(new Set(item.split(";"))).toString();
|
||||
|
||||
if (maintenanceRun != 0){
|
||||
if (x.indexOf("STATE=MAINTENANCE") > 0 && maintenanceRun == 1)
|
||||
{
|
||||
progressBar("50", "Initializing program" , "#ff6666")
|
||||
setTimeout(maintenanceTest,3000);
|
||||
maintenanceRun = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const serialResultsDiv = document.getElementById("serialResults");
|
||||
|
||||
async function appendToTerminal(newStuff) {
|
||||
serialResultsDiv.innerHTML += newStuff;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
function renderChart(){
|
||||
var test = serialResultsDiv.innerHTML.split(";");
|
||||
console.log(test)
|
||||
test.forEach(getData);
|
||||
const xValues = xChart;
|
||||
new Chart("chart_VCP", {
|
||||
type: "line",
|
||||
data: {
|
||||
labels: xValues,
|
||||
datasets: [{
|
||||
label: "VCP",
|
||||
data: VCP,
|
||||
borderColor: "red",
|
||||
fill: false
|
||||
},
|
||||
{
|
||||
label: "VBAT",
|
||||
data: VBAT,
|
||||
borderColor: "black",
|
||||
fill: false
|
||||
}
|
||||
]
|
||||
},
|
||||
options: {
|
||||
legend: {display: true}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
new Chart("chart_VPP", {
|
||||
type: "line",
|
||||
data: {
|
||||
labels: xValues,
|
||||
datasets: [{
|
||||
label: "VPP1",
|
||||
data: VPP1,
|
||||
borderColor: "green",
|
||||
fill: false
|
||||
}, {
|
||||
label: "VPP2",
|
||||
data: VPP2,
|
||||
borderColor: "blue",
|
||||
fill: false
|
||||
},
|
||||
]
|
||||
},
|
||||
options: {
|
||||
legend: {display: true}
|
||||
}
|
||||
});
|
||||
|
||||
new Chart("chart_PWM", {
|
||||
type: "bar",
|
||||
data: {
|
||||
labels: xValues,
|
||||
datasets: [{
|
||||
label: "PWM",
|
||||
data: PWM,
|
||||
backgroundColor: "yellow",
|
||||
fill: false
|
||||
}
|
||||
]
|
||||
},
|
||||
options: {
|
||||
legend: {display: true}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
//Get the RAW data and turn into object
|
||||
function getData(item) {
|
||||
let item_array = item.split("=");
|
||||
let xaxis = xChart.length + 1;
|
||||
|
||||
if (item_array[0] == "VCP"){
|
||||
VCP.push(item_array[1])
|
||||
xChart.push(xaxis);
|
||||
}
|
||||
if (item_array[0] == "VPP1"){
|
||||
VPP1.push(item_array[1])
|
||||
}
|
||||
if (item_array[0] == "VPP2"){
|
||||
VPP2.push(item_array[1])
|
||||
}
|
||||
if (item_array[0] == "VBAT"){
|
||||
VBAT.push(item_array[1])
|
||||
}
|
||||
if (item_array[0] == "PWM")
|
||||
{
|
||||
var check_return = item_array[1].match(/[^\r\n]+/g);
|
||||
console.log(check_return, check_return[0])
|
||||
if (check_return.length == 2){
|
||||
PWM.push(check_return[0])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function closePort(){
|
||||
|
||||
reader.cancel();
|
||||
await readableStreamClosed.catch(() => { /* Ignore the error */ });
|
||||
writer.close();
|
||||
await writableStreamClosed
|
||||
console.log(maintenanceRun);
|
||||
await port.close();
|
||||
|
||||
//Check for errors maintenanceRun = 999
|
||||
if (maintenanceRun != 999){
|
||||
serialResultsDiv.innerHTML = '';
|
||||
|
||||
if (maintenanceRun !=0){
|
||||
if (value != 33){//Include the correct ROWID of the Productrecord
|
||||
progressBar("100", "Ready", "#04AA6D");
|
||||
}
|
||||
else{
|
||||
progressBar("100", "Ready => Warning: Product requires TESLA adapter", "#ff6666");
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
progressBar("100", "Ready", "#04AA6D");
|
||||
}
|
||||
}
|
||||
|
||||
maintenanceRun = 0; // reset maintenanceRun
|
||||
}
|
||||
|
||||
async function updateHistory(){
|
||||
|
||||
var data = document.getElementById("servicetoken").innerHTML; //get ServiceID
|
||||
var item1 = serialResultsDiv.innerHTML;
|
||||
x1 = Array.from(new Set(item1.split(";"))).toString();
|
||||
|
||||
if (x1.indexOf("PN=") > 0){
|
||||
var a = x1.indexOf("PN=");
|
||||
var b = a + 3;
|
||||
var c = b + 14;
|
||||
pn = x1.substring(b,c);
|
||||
}
|
||||
|
||||
if (x1.indexOf("SN=") > 0){
|
||||
var a = x1.indexOf("SN=");
|
||||
var b = a + 3;
|
||||
var c = b + 8;
|
||||
serial = x1.substring(b,c);
|
||||
}
|
||||
|
||||
if (x1.indexOf("HW=") > 0){
|
||||
var a = x1.indexOf("HW=");
|
||||
var b = a + 3;
|
||||
var c = b + 8;
|
||||
hw = x1.substring(b,c);
|
||||
}
|
||||
|
||||
if (x1.indexOf("FW=") > 0){
|
||||
var a = x1.indexOf("FW=");
|
||||
var b = a + 3;
|
||||
var c = b + 8;
|
||||
fw = x1.substring(b,c);
|
||||
}
|
||||
|
||||
if (x1.indexOf("PRDDATE=") > 0){
|
||||
var a = x1.indexOf("PRDDATE=");
|
||||
var b = a + 8;
|
||||
var c = b + 10;
|
||||
prddate = x1.substring(b,c);
|
||||
}
|
||||
|
||||
if (x1.indexOf("FWDATE=") > 0){
|
||||
var a = x1.indexOf("FWDATE=");
|
||||
var b = a + 7;
|
||||
var c = b + 10;
|
||||
fwdate = x1.substring(b,c);
|
||||
}
|
||||
|
||||
var logDetails = {
|
||||
"ESM": 000,
|
||||
"SN": serial,
|
||||
"PN": pn,
|
||||
"HW": hw,
|
||||
"FW": fw,
|
||||
"HEX_BL": "",
|
||||
"PRD_BL_DATE": "",
|
||||
"HEX_FW": "",
|
||||
"PRD_FW_DATE": "",
|
||||
"PRDDATE": prddate,
|
||||
"FWDATE": fwdate,
|
||||
"PRD_DEVID_DATE": "",
|
||||
"PRD_PCBA_TEST_DATE": "",
|
||||
"PRD_ASSY_TEST_DATE": ""
|
||||
};
|
||||
|
||||
var mainObject = {
|
||||
"sn": serial,
|
||||
"type": "7",
|
||||
"testdetails":
|
||||
{
|
||||
"historycreated" : new Date(),
|
||||
"external_device_sn": "Portal" ,
|
||||
"logdetails": logDetails,
|
||||
"historytype":7,
|
||||
"historylocation":2,
|
||||
"doubletestvalues":[] ,
|
||||
"stringtestvalues": [] ,
|
||||
"booleantestvalues": [],
|
||||
}
|
||||
};
|
||||
|
||||
var testdetails = JSON.stringify(mainObject);
|
||||
|
||||
var serialnumber = serial;
|
||||
var action = 'createHistory';
|
||||
var url = link+action;
|
||||
|
||||
var bearer = 'Bearer ' + data;
|
||||
|
||||
const response = await fetch(url, {
|
||||
method: 'POST',
|
||||
withCredentials: true,
|
||||
credentials: 'include',
|
||||
headers: {
|
||||
'Authorization': bearer,
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: testdetails
|
||||
});
|
||||
|
||||
const historyresult = await response.json;
|
||||
|
||||
setTimeout(maintenanceTest,5000);
|
||||
|
||||
}
|
||||
|
||||
function printLabel(){
|
||||
var BestandTePrinten = "ep2.label";
|
||||
var labelXml;
|
||||
|
||||
try
|
||||
{
|
||||
// open label
|
||||
$.get(BestandTePrinten, function(labelXml){
|
||||
|
||||
var label = dymo.label.framework.openLabelXml(labelXml);
|
||||
|
||||
//Get Select Product
|
||||
var product = document.getElementById("productlist");
|
||||
var productSelected = product.options[product.selectedIndex].innerHTML; // get selected value
|
||||
var getProductNumber = productSelected.split(" - "); //Selected product contains productcode + product category
|
||||
|
||||
//Get Serial Number
|
||||
if (x1.indexOf("SN=") > 0){
|
||||
var a = x1.indexOf("SN=");
|
||||
var b = a + 3;
|
||||
var c = b + 8;
|
||||
serial = x1.substring(b,c);
|
||||
}
|
||||
|
||||
var serialnumber = serial;
|
||||
var productcode = getProductNumber[0];
|
||||
|
||||
console.log(serialnumber);
|
||||
console.log(productcode);
|
||||
|
||||
label.setObjectText("STREEPJESCODE", serialnumber);
|
||||
label.setObjectText("ProductCode", productcode);
|
||||
|
||||
// select printer to print on
|
||||
// for simplicity sake just use the first LabelWriter printer
|
||||
var printers = dymo.label.framework.getPrinters();
|
||||
if (printers.length == 0)
|
||||
throw "No DYMO printers are installed. Install DYMO printers.";
|
||||
|
||||
var printerName = "";
|
||||
for (var i = 0; i < printers.length; ++i)
|
||||
{
|
||||
var printer = printers[i];
|
||||
if (printer.printerType == "LabelWriterPrinter")
|
||||
{
|
||||
printerName = printer.name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (printerName == "")
|
||||
throw "No LabelWriter printers found. Install LabelWriter printer";
|
||||
|
||||
// finally print the label
|
||||
label.print(printerName);
|
||||
|
||||
// and print label again
|
||||
label.print(printerName);
|
||||
});
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
alert(e.message || e);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user