bool tl_isValidAckBitmap(TlMsgOutCtl tlMsgOutCtl, byte[] bitmask) { short var5 = 0; for (int index = 0; index < bitmask.Length; index++) { byte var7 = 1; byte var8 = 0; for (short var6 = 0; var6 < 8; var7 = var8) { var8 = var7; if ((bitmask[index] & var7) == var7) { if (tlMsgOutCtl.vTxBackLogCtr[var5] == 0) { return(false); } var8 = (byte)(var7 << 1); } ++var5; if (var5 == tlMsgOutCtl.nTxFrameCnt) { return(true); } ++var6; } } return(true); }
private short HandleControlFrame(TlMsgOutCtl tlMsgOutCtl, FlowControlFrame frame) { if (frame.ErrorCode != 0 || tlMsgOutCtl.nTxState != 0) { // Error return(0); } Array.Copy(frame.AckdFrameBitmask, 0, tlMsgOutCtl.vTxAckdFrameBitmask, 0, 8); frameValidator.MarkTransactionOkPackets(tlMsgOutCtl); short highestOkFrameCount = GetHighestOkFrameCnt(tlMsgOutCtl.nTxFrameCnt, tlMsgOutCtl.vTxBackLogCtr); Debug.WriteLine(String.Format("Highest OK Frame Count {0}", highestOkFrameCount)); if (highestOkFrameCount == tlMsgOutCtl.nTxFrameCnt) { tlMsgOutCtl.nTxFrameCnt = 0; tlMsgOutCtl.nTxState = 0; Debug.WriteLine(">>--------TX MSG SUCCESS----------<<"); return(1); } else { tlMsgOutCtl.nTxLatencyMs = (short)Math.Max(frame.TransactionLatency, 10); tlMsgOutCtl.nTxUnackdFrameLimit = frame.UnackdFrameLimit; tlMsgOutCtl.nTxState = 2; Debug.WriteLine(String.Format("Waiting for {0} of {1}", highestOkFrameCount, tlMsgOutCtl.nTxFrameCnt)); return(0); } }
public void MarkTransactionOkPackets(TlMsgOutCtl tlMsgOutCtl) { short var4 = -1; byte var2 = 1; for (short i = 0; i < tlMsgOutCtl.nTxFrameCnt; ++i) { if (i % 8 == 0) { var2 = 1; ++var4; } else { var2 = (byte)(var2 << 1); } if ((tlMsgOutCtl.vTxAckdFrameBitmask[var4] & var2) == var2) { tlMsgOutCtl.vTxBackLogCtr[i] = 255; } } }