internal byte[] ReadDataBlock(Gurux.DLMS.GXDLMSClient cosem, Gurux.Common.IGXMedia media, byte[] data, int wt, int scaler) { byte[] reply = ReadDLMSPacket(cosem, media, data, wt); byte[] allData = null; RequestTypes moredata = cosem.GetDataFromPacket(reply, ref allData); int max = cosem.GetMaxProgressStatus(allData); int current = 0; while (moredata != 0) { while ((moredata & RequestTypes.Frame) != 0) { data = cosem.ReceiverReady(RequestTypes.Frame); reply = ReadDLMSPacket(cosem, media, data, wt); if ((cosem.GetDataFromPacket(reply, ref allData) & RequestTypes.Frame) == 0) { current = cosem.GetCurrentProgressStatus(allData); if (max != 0 && scaler != 0) { double tmp = current; tmp /= max; tmp *= max; tmp += scaler * max; Progress((int)tmp, 5 * max); } moredata &= ~RequestTypes.Frame; break; } current = cosem.GetCurrentProgressStatus(allData); if (max != 0 && scaler != 0) { double tmp = current; tmp /= max; tmp *= max; tmp += scaler * max; Progress((int)tmp, 5 * max); } } if ((moredata & RequestTypes.DataBlock) != 0) { //Send Receiver Ready. data = cosem.ReceiverReady(RequestTypes.DataBlock); reply = ReadDLMSPacket(cosem, media, data, wt); moredata = cosem.GetDataFromPacket(reply, ref allData); current = cosem.GetCurrentProgressStatus(allData); if (max != 0 && scaler != 0) { double tmp = current; tmp /= max; tmp *= max; tmp += scaler * max; Progress((int)tmp, 5 * max); } } } return allData; }