import { AxdrEnum } from "../asn1.axdr/AxdrEnum"; import { AxdrOctetString } from "../asn1.axdr/AxdrOctetString"; import { Apdu } from "../axdr/Apdu"; import { COMDCB } from "../axdr/COMDCB"; import { Data } from "../axdr/Data"; import { SubSeqOfOads } from "../axdr/GetRequestNormalList"; import { M698pdu } from "../axdr/M698pdu"; import { OADDATA } from "../axdr/OADDATA"; import { PIID } from "../axdr/PIID"; import { ProxyAction } from "../axdr/ProxyAction"; import { ProxyActionRequest, SubSeqOfProxyOmdReads } from "../axdr/ProxyActionRequest"; import { ProxyActionRequestList, SubSeqOfProxyActionReads } from "../axdr/ProxyActionRequestList"; import { ProxyActionThenGet } from "../axdr/ProxyActionThenGet"; import { ProxyActionThenGetRequest, SubSeqOfProxyActionThenGetReads } from "../axdr/ProxyActionThenGetRequest"; import { ProxyActionThenGetRequestList, SubSeqProxyActionThenGetOfReads } from "../axdr/ProxyActionThenGetRequestList"; import { ProxyGetContent, ProxyGetRequestList } from "../axdr/ProxyGetRequestList"; import { ProxyGetRequestRecord } from "../axdr/ProxyGetRequestRecord"; import { ProxyReadOads } from "../axdr/ProxyReadOads"; import { ProxyReqOADDATA, ProxySetOfReads } from "../axdr/ProxyReqOADDATA"; import { ProxySetGetOAD } from "../axdr/ProxySetGetOAD"; import { ProxySetRequestList, SubSeqOfSets } from "../axdr/ProxySetRequestList"; import { ProxySetThenGetOAD, SubSeqOfProxyReads } from "../axdr/ProxySetThenGetOAD"; import { ProxySetThenGetRequestList, SubSeqOfSetThenGets } from "../axdr/ProxySetThenGetRequestList"; import { ProxyTransCommandRequest } from "../axdr/ProxyTransCommandRequest"; import { Proxy_Request } from "../axdr/Proxy_Request"; import { TSA } from "../axdr/TSA"; import { Unsigned16 } from "../axdr/Unsigned16"; import { Unsigned8 } from "../axdr/Unsigned8"; import { DataUtils } from "../DataUtils"; import { LinkOption } from "../opt/LinkOption"; import { ProxyActionRequestListOption, ProxyActionThenGetRequestListOption, ProxyGetRequestListOption, ProxyGetRequestRecordOption, ProxyRequestOption, ProxySetRequestListOption, ProxySetThenGetRequestListOption, ProxyTransCommandRequestOption } from "../opt/ProxyRequestOption"; import { RequestOption } from "../opt/RequestOption"; import { buildData, buildLinkFrame, buildOAD, buildOMD, buildRcsd, buildRsd } from "./BuildTools"; import { resultCode } from "../tools/DataTool"; export function buildProxyRequest(proxy_opt: ProxyRequestOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; switch (proxy_opt.index) { case 1: result = buildProxyGetRequestListFrame(proxy_opt.proxy_option as ProxyGetRequestListOption, link_opt, req_opt) return result; case 2: result = buildProxyGetRequestRecord(proxy_opt.proxy_option as ProxyGetRequestRecordOption, link_opt, req_opt) return result; case 3: result = buildProxySetReuqestList(proxy_opt.proxy_option as ProxySetRequestListOption, link_opt, req_opt) return result; case 4: result = buildProxySetThenGetReqeustList(proxy_opt.proxy_option as ProxySetThenGetRequestListOption, link_opt, req_opt) return result; case 5: result = buildProxyActionRequestList(proxy_opt.proxy_option as ProxyActionRequestListOption, link_opt, req_opt) return result; case 6: result = buildProxyActionThenGetRequestList(proxy_opt.proxy_option as ProxyActionThenGetRequestListOption, link_opt, req_opt) return result; case 7: result = buildProxyTransCommandRequest(proxy_opt.proxy_option as ProxyTransCommandRequestOption, link_opt, req_opt) return result; default: throw new Error("no such index"); } } export function buildProxyGetRequestListFrame(proxy_opt: ProxyGetRequestListOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; if (proxy_opt.piid == null || proxy_opt.proxyGet == null || proxy_opt.timeout_req == null) { result = [resultCode.emptyError, "param piid,reads,timeout is not allow empty"]; return result; } else { let illegal = false; for (let data of proxy_opt.proxyGet) { if (data.tsa == null || data.timeout_srv == null || data.seqOfOad == null) { illegal = true; } } if (illegal) { result = [resultCode.illegalError, "param is illegal"]; return result; } } let m698pdu = new M698pdu(); let proxyRequest = new Proxy_Request(); let proxy_get_Request_list = new ProxyGetRequestList(); let piid = new PIID(); piid.setBitString(DataUtils.toBytes(proxy_opt.piid.toString())); let subSeqofReads = new ProxyGetContent(); for (let proxyGet of proxy_opt.proxyGet) { let tsa = new TSA(); tsa.set_dataCode(DataUtils.toBytes(proxyGet.tsa.oct.toString())); let timeOut = new Unsigned16(); timeOut.set_min_max_val(proxyGet.timeout_srv); let oads = new SubSeqOfOads; for (let i = 0; i < proxyGet.seqOfOad.length; i++) { let oad = buildOAD(proxyGet.seqOfOad[i]); oads.add(oad); } let proxyGetData = new ProxyReadOads(); proxyGetData.set_all(tsa, timeOut, oads); subSeqofReads.add(proxyGetData); } let waitTime = new Unsigned16(); waitTime.set_min_max_val(proxy_opt.timeout_req); proxy_get_Request_list.set_all(piid, waitTime, subSeqofReads); proxyRequest.setProxyGetRequestList(proxy_get_Request_list); m698pdu.setProxy_Request(proxyRequest); let apdu = new Apdu(m698pdu); let frame = buildLinkFrame(apdu, link_opt, req_opt); result = [resultCode.success, frame]; return result; } export function buildProxyGetRequestRecord(proxy_opt: ProxyGetRequestRecordOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; if (proxy_opt.piid == null || proxy_opt.oad == null || proxy_opt.rsd == null || proxy_opt.rcsd == null || proxy_opt.timeout_req == null || proxy_opt.tsa == null) { result = [resultCode.emptyError, "param piid,oad,rsd,rcsd,timeOut,waitTime,is not allow empty"]; return result; } else { if (proxy_opt.piid.length != 2 || proxy_opt.oad.length != 8) { result = [resultCode.illegalError, "param is illegal"]; } } let m698pdu = new M698pdu; let proxyRequest = new Proxy_Request(); let proxy_get_record = new ProxyGetRequestRecord(); let piid = new PIID(); piid.setBitString(DataUtils.toBytes(proxy_opt.piid.toString())); let timeOut = new Unsigned16(); timeOut.set_min_max_val(proxy_opt.timeout_req); let tsa = new TSA(); tsa.set_dataCode(DataUtils.toBytes(proxy_opt.tsa.oct.toString())); let oad = buildOAD(proxy_opt.oad); let rsd = buildRsd(proxy_opt.rsd); let rcsd = buildRcsd(proxy_opt.rcsd); proxy_get_record.set_all(piid, timeOut, tsa, oad, rsd, rcsd); proxyRequest.setProxyGetRequestRecord(proxy_get_record); m698pdu.setProxy_Request(proxyRequest); let apdu = new Apdu(m698pdu); let frame = buildLinkFrame(apdu, link_opt, req_opt); result = [resultCode.success, frame]; return result; } export function buildProxySetReuqestList(proxy_opt: ProxySetRequestListOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; if (proxy_opt.piid == null || proxy_opt.proxySet == null || proxy_opt.timeout_req == null) { result = [resultCode.emptyError, "param piid,proxySet,timeOut is not allow empty"]; return result; } else { let illegal: boolean = false; for (let data of proxy_opt.proxySet) { if (data.tsa.oct == null || data.seqOfProxyData == null) { illegal = true; } } if (illegal) { result = [resultCode.illegalError, "param is illegal"]; return result; } } let m698pdu = new M698pdu(); let proxyRequest = new Proxy_Request(); let proxy_set_list = new ProxySetRequestList(); let piid = new PIID(); piid.setBitString(DataUtils.toBytes(proxy_opt.piid.toString())); let waitTime = new Unsigned16(); waitTime.set_min_max_val(proxy_opt.timeout_req); let subSeqOfSets = new SubSeqOfSets(); for (let set of proxy_opt.proxySet) { let tsa = new TSA(); tsa.set_dataCode(DataUtils.toBytes(set.tsa.oct.toString())); let timeOut = new Unsigned16(); timeOut.set_min_max_val(set.timeout_srv); let proxySetData = new ProxyReqOADDATA(); let proxySetOfReads = new ProxySetOfReads(); for (let i = 0; i < set.seqOfProxyData.length; i++) { let oad = buildOAD(set.seqOfProxyData[i].oad); let data = new Data(); data.set_dataCode(DataUtils.toBytes(buildData(set.seqOfProxyData[i].data).toString())); let oaddata = new OADDATA(); oaddata.set_all(oad, data); proxySetOfReads.add(oaddata); } proxySetData.set_all(tsa, timeOut, proxySetOfReads); subSeqOfSets.add(proxySetData); } proxy_set_list.set_all(piid, waitTime, subSeqOfSets); proxyRequest.setProxySetRequestList(proxy_set_list); m698pdu.setProxy_Request(proxyRequest); let apdu = new Apdu(m698pdu); let frame = buildLinkFrame(apdu, link_opt, req_opt); result = [resultCode.success, frame]; return result; } export function buildProxySetThenGetReqeustList(proxy_opt: ProxySetThenGetRequestListOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; if (proxy_opt.piid == null || proxy_opt.timeout_req == null || proxy_opt.seqOfProxySetThenGet == null) { result = [resultCode.emptyError, "param piid,timeout,seqOFSetThenGet is not allow empty"]; return result; } else { let illegal = false; for (let data of proxy_opt.seqOfProxySetThenGet) { if (data.tsa.oct == null || data.seqOfProxySetThenGetData == null || data.timeout_srv == null) { illegal = true; } } if (illegal) { result = [resultCode.illegalError, "param is illegal"]; return result; } } let m698pdu = new M698pdu(); let proxyRequest = new Proxy_Request(); let proxy_set_then_get = new ProxySetThenGetRequestList(); let piid = new PIID(); piid.setBitString(DataUtils.toBytes(proxy_opt.piid.toString())); let waitTime = new Unsigned16(); waitTime.set_min_max_val(proxy_opt.timeout_req); let subOfReads = new SubSeqOfSetThenGets(); for (let data of proxy_opt.seqOfProxySetThenGet) { let set = new SubSeqOfProxyReads(); let tsa = new TSA(); tsa.set_dataCode(DataUtils.toBytes(data.tsa.oct.toString())); let timeOut = new Unsigned16(); timeOut.set_min_max_val(data.timeout_srv); let proxySetGet = new ProxySetThenGetOAD(); for (let i = 0; i < data.seqOfProxySetThenGetData.length; i++) { let proxySetGetData = new ProxySetGetOAD(); let soad = buildOAD(data.seqOfProxySetThenGetData[i].soad); let road = buildOAD(data.seqOfProxySetThenGetData[i].road); let sData = new Data(); sData.set_dataCode(DataUtils.toBytes(buildData(data.seqOfProxySetThenGetData[i].data).toString())); let delayTime = new Unsigned8(); delayTime.set_min_max_val(data.seqOfProxySetThenGetData[i].delayTime); proxySetGetData.set_all(soad, sData, road, delayTime); set.add(proxySetGetData); } proxySetGet.set_all(tsa, timeOut, set); subOfReads.add(proxySetGet); } proxy_set_then_get.set_all(piid, waitTime, subOfReads); proxyRequest.setProxySetThenGetRequestList(proxy_set_then_get); m698pdu.setProxy_Request(proxyRequest); let apdu = new Apdu(m698pdu); let frame = buildLinkFrame(apdu, link_opt, req_opt); result = [resultCode.success, frame]; return result; } export function buildProxyActionRequestList(proxy_opt: ProxyActionRequestListOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; if (proxy_opt.piid == null || proxy_opt.seqOfProxyAction == null || proxy_opt.timeout_req == null) { result = [resultCode.emptyError, "param piid,seqOfProxyAction,timeout is not allow empty"]; return result; } else { let illegal: boolean = false; for (let data of proxy_opt.seqOfProxyAction) { if (data.tsa.oct == null || data.timeout_srv == null || data.seqOfProxyActionDataOption == null) { illegal = true; } } if (illegal) { result = [resultCode.illegalError, "param is illegal"]; return result; } } let m698pdu = new M698pdu(); let proxyRequest = new Proxy_Request(); let proxy_action_list = new ProxyActionRequestList(); let piid = new PIID(); piid.setBitString(DataUtils.toBytes(proxy_opt.piid.toString())); let waitTime = new Unsigned16(); waitTime.set_min_max_val(proxy_opt.timeout_req); let subSeqOfProxyActionReads = new SubSeqOfProxyActionReads(); for (let data of proxy_opt.seqOfProxyAction) { let tsa = new TSA(); tsa.set_dataCode(DataUtils.toBytes(data.tsa.oct.toString())); let timeOut = new Unsigned16(); timeOut.set_min_max_val(data.timeout_srv); let proxyActionRequest = new ProxyActionRequest(); let proxyActionOmdReads = new SubSeqOfProxyOmdReads(); for (let i = 0; i < data.seqOfProxyActionDataOption.length; i++) { let proxyAction = new ProxyAction(); let omd = buildOMD(data.seqOfProxyActionDataOption[i].omd); let sData = new Data(); sData.set_dataCode(DataUtils.toBytes(buildData(data.seqOfProxyActionDataOption[i].data).toString())); proxyAction.set_all(omd, sData); proxyActionOmdReads.add(proxyAction); } proxyActionRequest.set_all(tsa, timeOut, proxyActionOmdReads); subSeqOfProxyActionReads.add(proxyActionRequest); } proxy_action_list.set_all(piid, waitTime, subSeqOfProxyActionReads); proxyRequest.setProxyActionRequestList(proxy_action_list); m698pdu.setProxy_Request(proxyRequest); let apdu = new Apdu(m698pdu); let frame = buildLinkFrame(apdu, link_opt, req_opt); result = [resultCode.success, frame]; return result; } export function buildProxyActionThenGetRequestList(proxy_opt: ProxyActionThenGetRequestListOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; if (proxy_opt.piid == null || proxy_opt.timeout_req == null || proxy_opt.seqOfProxyActionThenGet == null) { result = [resultCode.emptyError, "param piid,timeOut,seqOfProxyActionThenGet is not allow empty"]; return result; } else { let illegal: boolean = false; for (let data of proxy_opt.seqOfProxyActionThenGet) { if (data.tsa.oct == null || data.timeout_srv == null || data.seqOfProxyActionThenGetDataOption == null) { illegal = true; } } if (illegal) { result = [resultCode.illegalError, "param is illegal"]; return result; } } let m698pdu = new M698pdu(); let proxyRequest = new Proxy_Request(); let proxy_action_then_get = new ProxyActionThenGetRequestList(); let piid = new PIID(); piid.setBitString(DataUtils.toBytes(proxy_opt.piid.toString())); let waitTime = new Unsigned16(); waitTime.set_min_max_val(proxy_opt.timeout_req); let subSeqProxyActionThenGetOfReads = new SubSeqProxyActionThenGetOfReads(); for (let data of proxy_opt.seqOfProxyActionThenGet) { let tsa = new TSA(); tsa.set_dataCode(DataUtils.toBytes(data.tsa.oct.toString())); let timeOut = new Unsigned16(); timeOut.set_min_max_val(data.timeout_srv); let proxyActionThenGet = new ProxyActionThenGetRequest(); let subSeqOfProxyActionThenGetReads = new SubSeqOfProxyActionThenGetReads(); for (let i = 0; i < data.seqOfProxyActionThenGetDataOption.length; i++) { let proxyActionThenGetData = new ProxyActionThenGet(); let omd = buildOMD(data.seqOfProxyActionThenGetDataOption[i].omd); let oad = buildOAD(data.seqOfProxyActionThenGetDataOption[i].oad); let sData = new Data(); sData.set_dataCode(DataUtils.toBytes(buildData(data.seqOfProxyActionThenGetDataOption[i].data).toString())); let delayTime = new Unsigned8(); delayTime.set_min_max_val(data.seqOfProxyActionThenGetDataOption[i].delayTime); proxyActionThenGetData.set_dataCode(omd, sData, oad, delayTime); subSeqOfProxyActionThenGetReads.add(proxyActionThenGetData); } proxyActionThenGet.set_all(tsa, timeOut, subSeqOfProxyActionThenGetReads); subSeqProxyActionThenGetOfReads.add(proxyActionThenGet); } proxy_action_then_get.set_all(piid, waitTime, subSeqProxyActionThenGetOfReads); proxyRequest.setProxyActionThenGetRequestList(proxy_action_then_get); m698pdu.setProxy_Request(proxyRequest); let apdu = new Apdu(m698pdu); let frame = buildLinkFrame(apdu, link_opt, req_opt); result = [resultCode.success, frame]; return result; } export function buildProxyTransCommandRequest(proxy_trans: ProxyTransCommandRequestOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; if (proxy_trans.piid == null || proxy_trans.oad == null || proxy_trans.comdcb == null || proxy_trans.forwardData == null || proxy_trans.revBytesTimeout == null || proxy_trans.revFrameTimeout == null) { result = [resultCode.emptyError, "params not allow empty"]; return result; } else { if (proxy_trans.oad.length != 8 || proxy_trans.piid.length != 2 || proxy_trans.revFrameTimeout < 0 || proxy_trans.revBytesTimeout > 65535 || proxy_trans.revBytesTimeout < 0 || proxy_trans.revBytesTimeout > 65535) { result = [resultCode.illegalError, "params length is illegal"]; return result; } } let m698pdu = new M698pdu(); let proxyRequest = new Proxy_Request(); let proxyTransCommandRequest = new ProxyTransCommandRequest(); let piid = new PIID(); piid.setBitString(DataUtils.toBytes(proxy_trans.piid.toString())); let oad = buildOAD(proxy_trans.oad); let comdcb = new COMDCB(); let baut = new AxdrEnum(); baut.set_dataCode(DataUtils.toBytes(proxy_trans.comdcb.bondRate.toString())); let parity = new AxdrEnum(); parity.set_dataCode(DataUtils.toBytes(proxy_trans.comdcb.checkBits.toString())); let datab = new AxdrEnum(); datab.set_dataCode(DataUtils.toBytes(proxy_trans.comdcb.dataBits.toString())); let stopb = new AxdrEnum(); stopb.set_dataCode(DataUtils.toBytes(proxy_trans.comdcb.stopBits.toString())); let flow = new AxdrEnum(); flow.set_dataCode(DataUtils.toBytes(proxy_trans.comdcb.flowControl.toString())); comdcb.set_all(baut, parity, datab, stopb, flow); let frameTimeOut = new Unsigned16(); frameTimeOut.set_min_max_val(proxy_trans.revFrameTimeout); let byteTimeout = new Unsigned16(); byteTimeout.set_min_max_val(proxy_trans.revBytesTimeout); let data = new AxdrOctetString(); data.set_dataCode(DataUtils.toBytes(proxy_trans.forwardData.toString())); proxyTransCommandRequest.set_all(piid, oad, comdcb, frameTimeOut, byteTimeout, data); proxyRequest.setProxyTransCommandRequest(proxyTransCommandRequest); m698pdu.setProxy_Request(proxyRequest); let apdu = new Apdu(m698pdu); let frame = buildLinkFrame(apdu, link_opt, req_opt); result = [resultCode.success, frame]; return result; }