public USPPortDataEventArgs(USPPorts sourceID, byte[] data) { SourceID = sourceID; Data = data; }
public void Send(USPPorts targetID, byte[] data) { if (!pendingClose) { if (targetID != USPPorts.invalid) { for (int i = 0; i < data.Length; i++) { C_CH_RX_RING[(int)targetID][CM_RX_WPos[(int)targetID]] = data[i]; CM_RX_WPos[(int)targetID] = (CM_RX_WPos[(int)targetID] + 1) % CM_CH_RX_BUFFER_SIZE; CM_RX_Cnt[(int)targetID]++; CM_RX_Ticks[(int)targetID] = DateTime.Now.Second * 1000 + DateTime.Now.Millisecond; #region Combiner for (dcIdx = CH3IDX; dcIdx <= CH8IDX; dcIdx++) { if ((CM_RX_Cnt[dcIdx] == PACKET_SIZE) || ((CM_RX_Cnt[dcIdx] > 0) && (t_ticks >= CM_RX_Ticks[dcIdx] + RX_DATA_OBSOLETE_MS))) { crc = 0xFF; TR_TX_RING[TR_TX_WPos] = TR_HEADER_SIGN; TR_TX_WPos = (TR_TX_WPos + 1) % TR_CH_TX_BUFFER_SIZE; TR_TX_Cnt++; crc = CRC8Table[crc ^ TR_HEADER_SIGN]; TR_TX_RING[TR_TX_WPos] = TR_HEADER_SIGN; TR_TX_WPos = (TR_TX_WPos + 1) % TR_CH_TX_BUFFER_SIZE; TR_TX_Cnt++; crc = CRC8Table[crc ^ TR_HEADER_SIGN]; TR_TX_RING[TR_TX_WPos] = Convert.ToByte(dcIdx); TR_TX_WPos = (TR_TX_WPos + 1) % TR_CH_TX_BUFFER_SIZE; TR_TX_Cnt++; crc = CRC8Table[crc ^ dcIdx]; dataSize = CM_RX_Cnt[dcIdx] - 1; TR_TX_RING[TR_TX_WPos] = Convert.ToByte(dataSize); TR_TX_WPos = (TR_TX_WPos + 1) % TR_CH_TX_BUFFER_SIZE; TR_TX_Cnt++; crc = CRC8Table[crc ^ dataSize]; for (i = 0; i <= dataSize; i++) { inByte = C_CH_RX_RING[dcIdx][CM_RX_RPos[dcIdx]]; CM_RX_RPos[dcIdx] = (CM_RX_RPos[dcIdx] + 1) % CM_CH_RX_BUFFER_SIZE; CM_RX_Cnt[dcIdx]--; TR_TX_RING[TR_TX_WPos] = inByte; TR_TX_WPos = (TR_TX_WPos + 1) % TR_CH_TX_BUFFER_SIZE; TR_TX_Cnt++; crc = CRC8Table[crc ^ inByte]; } TR_TX_RING[TR_TX_WPos] = crc; TR_TX_WPos = (TR_TX_WPos + 1) % TR_CH_TX_BUFFER_SIZE; TR_TX_Cnt++; } } #endregion } } else { throw new ArgumentException("targetID"); } } }