Exemple #1
0
        public bool SendFrames(ActionHandlerResult frameData)
        {
            bool ret = false;

            ret = FrameBufferBlock.Send(frameData);
            return(ret);
        }
Exemple #2
0
 public void Dispose()
 {
     FrameBufferBlock.Dispose();
     lock (_locker)
     {
         if (_isDisposed)
         {
             return;
         }
         _isDisposed = true;
     }
 }
Exemple #3
0
 public BasicFrameClient(Action <DataFrame> transmitCallback)
 {
     _transmitCallback = transmitCallback;
     FrameBufferBlock  = new FrameBufferBlock(WriteDataSafe, CreateBuffer);
     FrameBufferBlock.Start();
 }
Exemple #4
0
        private byte[] ParseRawData(byte buffer, bool isOutcome, DateTime timeStamp, bool isFromFile)
        {
            byte[] ret = null;
            AddToReceivingDataFrameBuffer(buffer);
            lock (_locker)
            {
                switch (_parserState)
                {
                case FrameReceiveStates.FRS_SOF_HUNT:
                    _isTestInterface = false;
                    if (HeaderTypes.StartOfFrame == (HeaderTypes)buffer)
                    {
                        ResetReceivingDataFrameBuffer();
                        AddToReceivingDataFrameBuffer(buffer);
                        ReceivingDataFrame = new DataFrame(SessionId, DataFrameTypes.Data, isFromFile, isOutcome, timeStamp);
                        _parserState       = FrameReceiveStates.FRS_LENGTH;
                    }
                    // Acknowledge received from peer.
                    else if (HeaderTypes.Acknowledge == (HeaderTypes)buffer)
                    {
                        FrameBufferBlock.Acknowledge(true);
                        ReceivingDataFrame = new DataFrame(SessionId, DataFrameTypes.Ack, isFromFile, isOutcome, timeStamp);
                        ReceivingDataFrame.SetBuffer(ACK, 0, 1);
                        OnFrameReceived();
                    }
                    // Not Acknowledge received from peer.
                    else if (HeaderTypes.NotAcknowledged == (HeaderTypes)buffer)
                    {
                        ReceivingDataFrame = new DataFrame(SessionId, DataFrameTypes.NAck, isFromFile, isOutcome, timeStamp);
                        ReceivingDataFrame.SetBuffer(NAK, 0, 1);
                        OnFrameReceived();
                    }
                    // CAN frame received - peer dropped a data frame transmitted by us.
                    else if (HeaderTypes.Can == (HeaderTypes)buffer)
                    {
                        FrameBufferBlock.Acknowledge(false);
                        ReceivingDataFrame = new DataFrame(SessionId, DataFrameTypes.CAN, isFromFile, isOutcome, timeStamp);
                        ReceivingDataFrame.SetBuffer(CAN, 0, 1);
                        OnFrameReceived();
                    }
                    break;

                case FrameReceiveStates.FRS_LENGTH:
                    if (buffer == 0)
                    {
                        _parserState     = FrameReceiveStates.FRS_LENGHT2;
                        _isTestInterface = true;
                    }
                    else if (buffer < MIN_FRAME_SIZE || buffer > MAX_FRAME_SIZE)
                    {
                        _parserState = FrameReceiveStates.FRS_SOF_HUNT;
                    }
                    else
                    {
                        ReceivingDataFrameLength = (byte)(buffer + 1);     // Payload size is excluding len field.
                        _parserState             = FrameReceiveStates.FRS_TYPE;
                    }
                    break;

                case FrameReceiveStates.FRS_LENGHT2:
                    if (buffer < MIN_FRAME_SIZE || buffer > MAX_FRAME_SIZE)
                    {
                        _parserState = FrameReceiveStates.FRS_SOF_HUNT;
                    }
                    else
                    {
                        ReceivingDataFrameLength = (byte)(buffer + 1);     // Payload size is excluding len field.
                        _parserState             = FrameReceiveStates.FRS_COMMAND;
                    }
                    break;

                case FrameReceiveStates.FRS_TYPE:
                    if (buffer == (byte)FrameTypes.Request || buffer == (byte)FrameTypes.Response)
                    {
                        _parserState = FrameReceiveStates.FRS_COMMAND;
                    }
                    else
                    {
                        _parserState = FrameReceiveStates.FRS_SOF_HUNT;
                    }
                    break;

                case FrameReceiveStates.FRS_COMMAND:
                    if (_receivingDataFrameLengthCounter == ReceivingDataFrameLength)
                    {
                        _parserState = FrameReceiveStates.FRS_CHECKSUM;
                    }
                    else
                    {
                        _parserState = FrameReceiveStates.FRS_DATA;
                    }
                    break;

                case FrameReceiveStates.FRS_DATA:
                    if (_receivingDataFrameLengthCounter > ReceivingDataFrameLength)
                    {
                        _parserState = FrameReceiveStates.FRS_SOF_HUNT;
                    }
                    else if (_receivingDataFrameLengthCounter == ReceivingDataFrameLength)
                    {
                        _parserState = FrameReceiveStates.FRS_CHECKSUM;
                    }
                    break;

                case FrameReceiveStates.FRS_CHECKSUM:
                    // Frame received successfully -> Send acknowledge (ACK).
                    ReceivingDataFrame.SetBuffer(_receivingDataFrameBuffer, 0, _receivingDataFrameLengthCounter);
                    if (_isTestInterface)
                    {
                        if (!isFromFile)
                        {
                            WriteData(ACK);
                        }
                    }
                    else
                    {
                        if (!isFromFile && ReceivingDataFrame.IsChecksumValid(buffer))
                        {
                            WriteData(ACK);
                        }
                        // Frame receive failed -> Send NAK.
                        else if (!isFromFile)
                        {
                            WriteData(NAK);
                        }
                    }
                    OnFrameReceived();
                    _parserState = FrameReceiveStates.FRS_SOF_HUNT;
                    break;

                case FrameReceiveStates.FRS_RX_TIMEOUT:
                default:
                    _parserState = FrameReceiveStates.FRS_SOF_HUNT;
                    break;
                }
            }
            return(ret);
        }
Exemple #5
0
 public XModemFrameClient()
 {
     FrameBufferBlock = new FrameBufferBlock(WriteData, cmdMsg => new XModemDataFrame(_packetNo++, cmdMsg.Data));
 }