Ejemplo n.º 1
0
 public USPPortDataEventArgs(USPPorts sourceID, byte[] data)
 {
     SourceID = sourceID;
     Data     = data;
 }
Ejemplo n.º 2
0
        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");
                }
            }
        }