import { Apdu } from "../axdr/Apdu"; import { GetRecord } from "../axdr/GetRecord"; import { GetRequestNext } from "../axdr/GetRequestNext"; import { GetRequestNormal } from "../axdr/GetRequestNormal"; import { GetRequestNormalList, SubSeqOfOads } from "../axdr/GetRequestNormalList"; import { GetRequestRecord } from "../axdr/GetRequestRecord"; import { GetRequestRecordList, SubSeqOfGetRecords } from "../axdr/GetRequestRecordList"; import { Get_Request } from "../axdr/Get_Request"; import { M698pdu } from "../axdr/M698pdu"; import { OAD } from "../axdr/OAD"; import { OBI } from "../axdr/OBI"; import { PIID } from "../axdr/PIID"; import { Unsigned16 } from "../axdr/Unsigned16"; import { Unsigned8 } from "../axdr/Unsigned8"; import { DataUtils } from "../DataUtils"; import { GetRequestNextOption, GetRequestNormalListOption, GetRequestNormalOption, GetRequestOption, GetRequestRecordOption, GetRequestRecordOptionList } from "../opt/GetRequestOption"; import { LinkOption } from "../opt/LinkOption"; import { RequestOption } from "../opt/RequestOption"; import { buildLinkFrame, buildOAD, buildRcsd, buildRsd } from "./BuildTools"; import { resultCode } from "../tools/DataTool"; export function buildGetRequest(get_opt: GetRequestOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; switch (get_opt.index) { case 1: result = buildGetRequestNormal(get_opt.get_option as GetRequestNormalOption, link_opt, req_opt); break; case 2: result = buildGetRequestNormalList(get_opt.get_option as GetRequestNormalListOption, link_opt, req_opt); break; case 3: result = buildGetRequestRecord(get_opt.get_option as GetRequestRecordOption, link_opt, req_opt); break; case 4: result = buildGetRequestRecordList(get_opt.get_option as GetRequestRecordOptionList, link_opt, req_opt); break; case 5: result = buildGetRequestNext(get_opt.get_option as GetRequestNextOption, link_opt, req_opt); break; default: result = [resultCode.modeNotMatch, "param index no such index"]; break; } return result; } export function buildGetRequestNormal(get_req_normal: GetRequestNormalOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; if (get_req_normal.piid == null || get_req_normal.oad == null) { result = [resultCode.emptyError, "get_option param piid,oad is not allow empty"]; return result; } else { if (get_req_normal.piid.length != 2 || get_req_normal.oad.length != 8) { result = [resultCode.illegalError, "get_option param piid or oad length is Illegal"]; return result; } } let m698pdu = new M698pdu(); let getRequest = new Get_Request(); let getRequestNormal = new GetRequestNormal() let piid = new PIID(); piid.setBitString(DataUtils.toBytes(get_req_normal.piid.toString())); let oad = buildOAD(get_req_normal.oad); getRequestNormal.setOAD(oad); getRequestNormal.setPIID(piid); getRequest.setGetRequestNormal(getRequestNormal); m698pdu.setGet_Request(getRequest); let apdu = new Apdu(m698pdu); let frame = buildLinkFrame(apdu, link_opt, req_opt); result = [resultCode.success, frame] return result; } export function buildGetRequestNormalList(get_req_list: GetRequestNormalListOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; if (get_req_list.piid == null || get_req_list.seqOfOad == null) { result = [resultCode.emptyError, "get_option param piid,seqOfOad is not allow empty"]; return result; } else { let isIllegal = false; for (let oad of get_req_list.seqOfOad) { if (oad.length != 8) { isIllegal = true; break; } } if (get_req_list.piid.length != 2) { isIllegal = true; } if (isIllegal) { result = [resultCode.illegalError, "get_option param length is Illegal"]; return result; } } let m698pdu = new M698pdu(); let getRequest = new Get_Request(); let getRequestNormalList = new GetRequestNormalList() let piid = new PIID(); piid.setBitString(DataUtils.toBytes(get_req_list.piid.toString())); let oads = new SubSeqOfOads(); for (let data of get_req_list.seqOfOad) { let oad = buildOAD(data); oads.add(oad); } getRequestNormalList.setOADS(oads); getRequestNormalList.setPIID(piid); getRequest.setGetRequestNormalList(getRequestNormalList); m698pdu.setGet_Request(getRequest); let apdu = new Apdu(m698pdu); let frame = buildLinkFrame(apdu, link_opt, req_opt); result = [resultCode.success, frame] return result; } export function buildGetRequestRecordList(get_record_list: GetRequestRecordOptionList, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; if (get_record_list.piid == null || get_record_list.seqOfGetRecord == null || get_record_list.piid.length != 2) { result = [resultCode.emptyError, "param piid,seqOfOad is not allow empty"]; return result; } else { let isIllegal = false; for (let record of get_record_list.seqOfGetRecord) { if (record.oad == null || record.rcsd == null || record.rsd == null) { isIllegal = true } } if (isIllegal) { result = [resultCode.illegalError, "param length is Illegal"]; return result; } } let m698pdu = new M698pdu(); let getRequest = new Get_Request(); let getRequestRecordList = new GetRequestRecordList(); let subSeqOfGetRecords = new SubSeqOfGetRecords(); let getRecord = new GetRecord(); let piid = new PIID(); piid.setBitString(DataUtils.toBytes(get_record_list.piid.toString())); for (let data of get_record_list.seqOfGetRecord) { let oad = buildOAD(data.oad) let rsd = buildRsd(data.rsd); let rcsd = buildRcsd(data.rcsd); getRecord.set_all(oad, rsd, rcsd); subSeqOfGetRecords.add(getRecord); } getRequestRecordList.set_all(piid, subSeqOfGetRecords); getRequest.setGetRequestRecordList(getRequestRecordList); m698pdu.setGet_Request(getRequest); let apdu = new Apdu(m698pdu); let frame = buildLinkFrame(apdu, link_opt, req_opt); result = [resultCode.success, frame]; return result; } export function buildGetRequestRecord(get_record: GetRequestRecordOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; if (get_record.piid == null || get_record.get_record == null) { result = [resultCode.emptyError, "param piid,get_record is not allow empty"]; return result; } else { if (get_record.get_record.oad == null || get_record.get_record.rsd == null || get_record.get_record.rcsd == null) { result = [resultCode.emptyError, "param get_record[oad,rsd,rcsd] is not allow empty"]; return result; } if (get_record.piid.length != 2) { result = [resultCode.illegalError, "param length is Illegal"]; return result; } } let m698pdu = new M698pdu(); let getRequest = new Get_Request(); let getRequestRecord = new GetRequestRecord() let piid = new PIID(); piid.setBitString(DataUtils.toBytes(get_record.piid.toString())); let getRecord = new GetRecord(); let oad = new OAD(); let oi = new Unsigned16(); oi.set_dataCode(DataUtils.toBytes(get_record.get_record.oad.substring(0, 4))); let obi = new OBI(); obi.setBitString(DataUtils.toBytes(get_record.get_record.oad.substring(4, 6))) let index = new Unsigned8(); index.set_dataCode(DataUtils.toBytes(get_record.get_record.oad.substring(6, 8))); oad.set_oad(oi, obi, index); let rsd = buildRsd(get_record.get_record.rsd); let rcsd = buildRcsd(get_record.get_record.rcsd); if (rsd == null || rcsd == null) { result = [resultCode.emptyError, "rsd,rcsd is null"]; return result; } getRecord.set_all(oad, rsd, rcsd); getRequestRecord.set_all(piid, getRecord); getRequest.setGetRequestRecord(getRequestRecord); m698pdu.setGet_Request(getRequest); let apdu = new Apdu(m698pdu); let frame = buildLinkFrame(apdu, link_opt, req_opt); result = [resultCode.success, frame]; return result; } export function buildGetRequestNext(get_next: GetRequestNextOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; if (get_next.piid == null || get_next.recentBlock == null) { result = [resultCode.emptyError, "param piid,data_index is not allow empty"]; return result; } let m698pdu = new M698pdu(); let get_request = new Get_Request(); let next = new GetRequestNext(); let piid = new PIID(); piid.setBitString(DataUtils.toBytes(get_next.piid.toString())); next.set_piid(piid); let recentBlock = new Unsigned16(); recentBlock.set_min_max_val(get_next.recentBlock); next.set_dataIndex(recentBlock); get_request.setGetRequestNext(next); m698pdu.setGet_Request(get_request); let apdu = new Apdu(m698pdu); let frame = buildLinkFrame(apdu, link_opt, req_opt); result = [resultCode.success, frame]; return result; }