/// function getSchemas( scriptContext, printerStream, schemaRequests, printerBidiSchemaResponses) { try { scriptContext.Log( "getSchemas called. Count=" + schemaRequests.length ); for (var i = 0; i < schemaRequests.length; i++) { var schema = schemaRequests[i]; scriptContext.Log( "QueryKey=" + schema.QueryKey ); switch (schema.QueryKey) { case "USB_FirmwareVersion": printerBidiSchemaResponses.AddStringValue( "\\Printer.DeviceInfo.FirmwareVersion", "1.0.0" ); scriptContext.Log( "Returned FirmwareVersion=1.0.0" ); break; case "USB_DeviceState": case "USB_StateReason": try { var cmd = "@PJL INFO STATUS\r\n"; scriptContext.Log( "Sending PJL status request" ); printerStream.Write( cmd, cmd.length ); var buffer = new Uint8Array(512); var bytesRead = printerStream.Read( buffer, buffer.length ); scriptContext.Log( "BytesRead=" + bytesRead ); var deviceState = "Unknown"; var stateReason = "None"; if (bytesRead > 0) { var response = ""; for (var j = 0; j < bytesRead; j++) { response += String.fromCharCode( buffer[j] ); } scriptContext.Log( "PJL Response=" + response ); var upper = response.toUpperCase(); if ( upper.indexOf("READY") >= 0 ) { deviceState = "Ready"; } else if ( upper.indexOf("PRINT") >= 0 ) { deviceState = "Printing"; } else if ( upper.indexOf("PAPER") >= 0 ) { deviceState = "Error"; stateReason = "Out Of Paper"; } else if ( upper.indexOf("JAM") >= 0 ) { deviceState = "Error"; stateReason = "Paper Jam"; } else if ( upper.indexOf("ERROR") >= 0 ) { deviceState = "Error"; stateReason = "Printer Error"; } } else { stateReason = "No Response"; } printerBidiSchemaResponses .AddStringValue( "\\Printer.Status.DeviceState", deviceState ); printerBidiSchemaResponses .AddStringValue( "\\Printer.Status.StateReason", stateReason ); scriptContext.Log( "DeviceState=" + deviceState + ", StateReason=" + stateReason ); } catch (innerEx) { scriptContext.LogError( "Status query failed: " + innerEx.message ); } break; } } return 0; } catch (e) { scriptContext.LogError( "getSchemas failed: " + e.message ); return 1; } } function setSchema( scriptContext, printerStream, printerBidiSchemaElement) { try { scriptContext.Log( "setSchema called" ); return 0; } catch (e) { scriptContext.LogError( "setSchema failed: " + e.message ); return 1; } } function getStatus( scriptContext, printerStream, printerBidiSchemaResponses) { try { scriptContext.Log( "getStatus called" ); var buffer = new Uint8Array(256); var bytesRead = printerStream.Read( buffer, buffer.length ); if (bytesRead <= 0) { return 0; } scriptContext.Log( "Status bytes received=" + bytesRead ); var deviceState = "Unknown"; var stateReason = "None"; switch (buffer[0]) { case 0x18: deviceState = "Ready"; break; case 0x01: deviceState = "Printing"; break; case 0x02: deviceState = "Error"; stateReason = "Paper Jam"; break; case 0x03: deviceState = "Error"; stateReason = "Out Of Paper"; break; default: stateReason = "Unknown Status"; break; } printerBidiSchemaResponses .AddStringValue( "\\Printer.Status.DeviceState", deviceState ); printerBidiSchemaResponses .AddStringValue( "\\Printer.Status.StateReason", stateReason ); scriptContext.Log( "Status update: " + deviceState + ", " + stateReason ); return 0; } catch (e) { scriptContext.LogError( "getStatus failed: " + e.message ); return 0; } } function requestStatus( scriptContext, printerStream, printerBidiSchemaResponses) { try { scriptContext.Log( "requestStatus called" ); return 2; } catch (e) { scriptContext.LogError( "requestStatus failed: " + e.message ); return 2; } } var PrinterBidiSchemaElementType = { PrinterBidiSchemaElementType_Null: 0, PrinterBidiSchemaElementType_Int: 1, PrinterBidiSchemaElementType_Float: 2, PrinterBidiSchemaElementType_Bool: 3, PrinterBidiSchemaElementType_String: 4, PrinterBidiSchemaElementType_Text: 5, PrinterBidiSchemaElementType_Enum: 6, PrinterBidiSchemaElementType_Blob: 7 };