import { ActionRequest } from "../axdr/ActionRequest"; import { ActionRequestList, ASubSeqOfAttrs } from "../axdr/ActionRequestList"; import { ActionThenGetRequestNormalList, ASubSeqOfReads } from "../axdr/ActionThenGetRequestNormalList"; import { Action_Request } from "../axdr/Action_Request"; import { Apdu } from "../axdr/Apdu"; import { Data } from "../axdr/Data"; import { M698pdu } from "../axdr/M698pdu"; import { OMDDATA } from "../axdr/OMDDATA"; import { PIID } from "../axdr/PIID"; import { READOMDDATA } from "../axdr/READOMDDATA"; import { Unsigned8 } from "../axdr/Unsigned8"; import { DataUtils } from "../DataUtils"; import { ActionRequestListOption, ActionRequestOption, ActionRequest_Option, ActionThenGetRequestNormalListOption } from "../opt/ActionRequestOption"; import { LinkOption } from "../opt/LinkOption"; import { RequestOption } from "../opt/RequestOption"; import { buildData, buildLinkFrame, buildOAD, buildOMD } from "./BuildTools"; import { resultCode } from "../tools/DataTool"; export function buildActionRequest(action_opt: ActionRequestOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; switch (action_opt.index) { case 1: result = buildActionRequestNormal(action_opt.action_option as ActionRequest_Option, link_opt, req_opt); break; case 2: result = buildActionRequestNormalList(action_opt.action_option as ActionRequestListOption, link_opt, req_opt); break; case 3: result = buildActionThenGetRequestList(action_opt.action_option as ActionThenGetRequestNormalListOption, link_opt, req_opt); break; default: throw new Error("no such index"); } return result; } export function buildActionRequestNormal(action_normal: ActionRequest_Option, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; if (action_normal.piid == null || action_normal.omd == null || action_normal.data == null) { result = [resultCode.emptyError, "param piid,omd,data is not allow empty"]; return result; } else { if (action_normal.piid.length != 2 || action_normal.omd.length != 8) { result = [resultCode.illegalError, "param piid,oad is illegal"]; return result; } } let m698pdu = new M698pdu(); let action_request = new Action_Request(); let action_request_normal = new ActionRequest(); let piid = new PIID(); piid.setBitString(DataUtils.toBytes(action_normal.piid.toString())); let omd = buildOMD(action_normal.omd); let data = new Data(); data.set_dataCode(DataUtils.toBytes(buildData(action_normal.data).toString())); action_request_normal.set_all(piid, omd, data); action_request.setActionRequest(action_request_normal); m698pdu.setAction_Request(action_request); let apdu = new Apdu(m698pdu); let frame = buildLinkFrame(apdu, link_opt, req_opt); result = [resultCode.success, frame]; return result; } export function buildActionRequestNormalList(action_normal_list: ActionRequestListOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; if (action_normal_list.piid == null || action_normal_list.seqOfOmd == null || action_normal_list.seqOfData == null) { result = [resultCode.emptyError, "param piid,seqOfOmd,seqOfData is not allow empty"]; return result; } else { if (action_normal_list.piid.length != 2 || action_normal_list.seqOfOmd.length != action_normal_list.seqOfData.length) { result = [resultCode.illegalError, "param piid or oad is illegal"]; return result; } } let m698pdu = new M698pdu(); let action_request = new Action_Request(); let action_request_list = new ActionRequestList(); let piid = new PIID(); piid.setBitString(DataUtils.toBytes(action_normal_list.piid.toString())); let subSeqOfAttrs = new ASubSeqOfAttrs(); for (let i = 0; i < action_normal_list.seqOfOmd.length; i++) { let omdData = new OMDDATA(); let omd = buildOMD(action_normal_list.seqOfOmd[i]); let data = new Data(); data.set_dataCode(DataUtils.toBytes(buildData(action_normal_list.seqOfData[i]).toString())); omdData.set_all(omd, data); subSeqOfAttrs.add(omdData); } action_request_list.set_all(piid, subSeqOfAttrs); action_request.setActionRequestList(action_request_list); m698pdu.setAction_Request(action_request); let apdu = new Apdu(m698pdu); let frame = buildLinkFrame(apdu, link_opt, req_opt); result = [resultCode.success, frame]; return result; } export function buildActionThenGetRequestList(action_then_get: ActionThenGetRequestNormalListOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; if (action_then_get.piid == null || action_then_get.seqOfActionThenGetDataOption == null) { result = [resultCode.emptyError, "param piid,seqOfActionThenGetDataOption is not allow empty"]; return result; } let m698pdu = new M698pdu(); let action_request = new Action_Request(); let actionThenGetRequestList = new ActionThenGetRequestNormalList(); let piid = new PIID(); piid.setBitString(DataUtils.toBytes(action_then_get.piid.toString())); let subSeqOfReads = new ASubSeqOfReads(); for (let i = 0; i < action_then_get.seqOfActionThenGetDataOption.length; i++) { let romData = new READOMDDATA(); let delayTime = new Unsigned8(); let oad = buildOAD(action_then_get.seqOfActionThenGetDataOption[i].oad); let omd = buildOMD(action_then_get.seqOfActionThenGetDataOption[i].omd); delayTime.set_min_max_val(action_then_get.seqOfActionThenGetDataOption[i].delayTime); let data = new Data(); data.set_dataCode(DataUtils.toBytes(buildData(action_then_get.seqOfActionThenGetDataOption[i].data).toString())); romData.set_all(omd, data, oad, delayTime); subSeqOfReads.add(romData); } actionThenGetRequestList.set_all(piid, subSeqOfReads); action_request.setActionThenGetRequestNormalList(actionThenGetRequestList); m698pdu.setAction_Request(action_request); let apdu = new Apdu(m698pdu); let frame = buildLinkFrame(apdu, link_opt, req_opt); result = [resultCode.success, frame]; return result; }