import { Apdu } from "../axdr/Apdu"; import { Data } from "../axdr/Data"; import { M698pdu } from "../axdr/M698pdu"; import { OADDATA } from "../axdr/OADDATA"; import { PIID } from "../axdr/PIID"; import { SetRequestNormal } from "../axdr/SetRequestNormal"; import { SetRequestNormalList, SubSeqOfAttrs } from "../axdr/SetRequestNormalList"; import { SetThenGetRequestNormalList, SubSeqOfReads } from "../axdr/SetThenGetRequestNormalList"; import { Set_Request } from "../axdr/Set_Request"; import { SROADDATA } from "../axdr/SROADDATA"; import { Unsigned8 } from "../axdr/Unsigned8"; import { DataUtils } from "../DataUtils"; import { LinkOption } from "../opt/LinkOption"; import { RequestOption } from "../opt/RequestOption"; import { SetRequestNormalListOption, SetRequestNormalOption, SetRequestOption, SetThenGetRequestNormalListOption } from "../opt/SetRequestOption"; import { buildData, buildLinkFrame, buildOAD } from "./BuildTools"; import { resultCode } from "../tools/DataTool"; export function buildSetRequest(set_opt: SetRequestOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; switch (set_opt.index) { case 1: result = buildSetRequestNormal(set_opt.set_option as SetRequestNormalOption, link_opt, req_opt); break; case 2: result = buildSetRequestNormalList(set_opt.set_option as SetRequestNormalListOption, link_opt, req_opt); break; case 3: result = buildSetThenGetRequestList(set_opt.set_option as SetThenGetRequestNormalListOption, link_opt, req_opt); break; default: throw new Error("no such index"); } return result; } export function buildSetRequestNormal(set_normal: SetRequestNormalOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; if (set_normal.piid == null || set_normal.oad == null || set_normal.data == null) { result = [resultCode.emptyError, "param piid,oad is not allow empty"]; return result; } else { if (set_normal.piid.length != 2 || set_normal.oad.length != 8) { result = [resultCode.illegalError, "param piid,oad is illegal"]; return result; } } let m698pdu = new M698pdu(); let set_request = new Set_Request(); let set_request_normal = new SetRequestNormal(); let piid = new PIID(); piid.setBitString(DataUtils.toBytes(set_normal.piid.toString())); let oad = buildOAD(set_normal.oad); let data = new Data(); data.set_dataCode(DataUtils.toBytes(buildData(set_normal.data).toString())); set_request_normal.set_all(piid, oad, data); set_request.setSetRequestNormal(set_request_normal); m698pdu.setSet_Request(set_request); let apdu = new Apdu(m698pdu); let frame = buildLinkFrame(apdu, link_opt, req_opt); result = [resultCode.success, frame]; return result; } export function buildSetRequestNormalList(set_normal_list: SetRequestNormalListOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; if (set_normal_list.piid == null || set_normal_list.seqOfOad == null || set_normal_list.seqofData == null) { result = [resultCode.emptyError, "param piid,seqofOad,seqOfData is not allow empty"]; return result; } else { if (set_normal_list.piid.length != 2 || set_normal_list.seqOfOad.length != set_normal_list.seqofData.length) { result = [resultCode.illegalError, "param piid or oad is illegal"]; return result; } } let m698pdu = new M698pdu(); let set_request = new Set_Request(); let set_request_list = new SetRequestNormalList(); let piid = new PIID(); piid.setBitString(DataUtils.toBytes(set_normal_list.piid.toString())); let subSeqOfAttrs = new SubSeqOfAttrs(); for (let i = 0; i < set_normal_list.seqOfOad.length; i++) { let oadData = new OADDATA(); let oad = buildOAD(set_normal_list.seqOfOad[i]); let data = new Data(); data.set_dataCode(DataUtils.toBytes(buildData(set_normal_list.seqofData[i]).toString())); oadData.set_all(oad, data); subSeqOfAttrs.add(oadData); } set_request_list.set_all(piid, subSeqOfAttrs); set_request.setSetRequestNormalList(set_request_list); m698pdu.setSet_Request(set_request); let apdu = new Apdu(m698pdu); let frame = buildLinkFrame(apdu, link_opt, req_opt); result = [resultCode.success, frame]; return result; } export function buildSetThenGetRequestList(set_then_get: SetThenGetRequestNormalListOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; if (set_then_get.piid == null || set_then_get.seqSetThenGetDataOption == null) { result = [resultCode.emptyError, "param piid,set_then_get_data is not allow empty"]; return; } let m698pdu = new M698pdu(); let set_request = new Set_Request(); let setThenGetRequestList = new SetThenGetRequestNormalList(); let piid = new PIID(); piid.setBitString(DataUtils.toBytes(set_then_get.piid.toString())); let subSeqOfReads = new SubSeqOfReads(); for (let i = 0; i < set_then_get.seqSetThenGetDataOption.length; i++) { let sroad = new SROADDATA(); let delayTime = new Unsigned8(); let set_then_get_reads = set_then_get.seqSetThenGetDataOption[i]; let setOad = buildOAD(set_then_get_reads.soad); let getOad = buildOAD(set_then_get_reads.road); delayTime.set_min_max_val(set_then_get_reads.delayTime); let data = new Data(); data.set_dataCode(DataUtils.toBytes(buildData(set_then_get_reads.data).toString())); sroad.set_all(setOad, data, getOad, delayTime); subSeqOfReads.add(sroad); } setThenGetRequestList.set_all(piid, subSeqOfReads); set_request.setSetThenGetRequestNormalList(setThenGetRequestList); m698pdu.setSet_Request(set_request); let apdu = new Apdu(m698pdu); let frame = buildLinkFrame(apdu, link_opt, req_opt); result = [resultCode.success, frame]; return result; }