// rgData: input, raw digital data array // rgValue: output, decoded data array // rgFlag: output, decoded flag array var c = rgData.length var pDAV = 1 for(var i = 0; i < c; i++){ // for each sample var s = rgData[i]; // capture pins var ATN = 1&(s>>15); // ATN on pin 15 var DAV = 1&(s>>10); // DAV on pin 10 if (DAV == 0 && pDAV == 1){ // If new data valid var data = 255 - rgData[i] & 0xFF; // capture data byte var flag = ATN + 1; // capture ATN level } else{ // otherwise rgValue[i] = data; // display captured data rgFlag[i] = flag; // or command } pDAV = DAV; } // the else statement is required in case of repeated bytes