UNPKG

enip-ts

Version:

Typescript implementation of the Ethernet/IP™ protocol.

80 lines 3.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MessageRouter = exports.services = void 0; /** Message router services */ var services; (function (services) { services[services["GET_INSTANCE_ATTRIBUTE_LIST"] = 85] = "GET_INSTANCE_ATTRIBUTE_LIST"; services[services["GET_ATTRIBUTES"] = 3] = "GET_ATTRIBUTES"; services[services["GET_ATTRIBUTE_ALL"] = 1] = "GET_ATTRIBUTE_ALL"; services[services["GET_ATTRIBUTE_SINGLE"] = 14] = "GET_ATTRIBUTE_SINGLE"; services[services["RESET"] = 5] = "RESET"; services[services["START"] = 6] = "START"; services[services["STOP"] = 7] = "STOP"; services[services["CREATE"] = 8] = "CREATE"; services[services["DELETE"] = 9] = "DELETE"; services[services["MULTIPLE_SERVICE_PACKET"] = 10] = "MULTIPLE_SERVICE_PACKET"; services[services["APPLY_ATTRIBUTES"] = 13] = "APPLY_ATTRIBUTES"; services[services["SET_ATTRIBUTE_SINGLE"] = 16] = "SET_ATTRIBUTE_SINGLE"; services[services["FIND_NEXT"] = 17] = "FIND_NEXT"; services[services["READ_TAG"] = 76] = "READ_TAG"; services[services["WRITE_TAG"] = 77] = "WRITE_TAG"; services[services["READ_TAG_FRAGMENTED"] = 82] = "READ_TAG_FRAGMENTED"; services[services["WRITE_TAG_FRAGMENTED"] = 83] = "WRITE_TAG_FRAGMENTED"; services[services["READ_MODIFY_WRITE_TAG"] = 78] = "READ_MODIFY_WRITE_TAG"; services[services["FORWARD_OPEN"] = 84] = "FORWARD_OPEN"; services[services["FORWARD_CLOSE"] = 78] = "FORWARD_CLOSE"; })(services || (exports.services = services = {})); ; class MessageRouter { /** * Builds a Message Router Request Buffer * @param service EtherNet/IP™ Service * @param path EtherNet/IP™ Path * @param data Data to send * @returns Encapsulated MessageRouter */ static build(service, path, data) { const pathBuf = Buffer.from(path); const dataBuf = Buffer.from(data); const pathLen = Math.ceil(pathBuf.length / 2); const buf = Buffer.alloc(2 + pathLen * 2 + dataBuf.length); buf.writeUInt8(service, 0); // Write Service Code to Buffer <USINT> buf.writeUInt8(pathLen, 1); // Write Length of EPATH (16 bit word length) pathBuf.copy(buf, 2); // Write EPATH to Buffer dataBuf.copy(buf, 2 + pathLen * 2); // Write Service Data to Buffer return buf; } ; /** * Parses a Message Router Request Buffer * @param buf Encapsulated Message router packet * @returns Message router parsed */ static parse(buf) { let messageRouter = { service: buf.readUInt8(0), generalStatusCode: buf.readUInt8(2), extendedStatusLength: buf.readUInt8(3), extendedStatus: null, data: null }; // Build Extended Status Array let arr = []; for (let i = 0; i < messageRouter.extendedStatusLength; i++) { arr.push(buf.readUInt16LE(i * 2 + 4)); } messageRouter.extendedStatus = arr; // Get Starting Point of Message Router Data const dataStart = messageRouter.extendedStatusLength * 2 + 4; // Initialize Message Router Data Buffer let data = Buffer.alloc(buf.length - dataStart); // Copy Data to Message Router Data Buffer buf.copy(data, 0, dataStart); messageRouter.data = data; return messageRouter; } ; } exports.MessageRouter = MessageRouter; //# sourceMappingURL=messageRouter.js.map