// handle next frame
        public void receivedNewFrame(EZFrame frame)
        {
            // sending acknowledgement
            NetDevice.sendAcknowledge(PacketSenderID);
            // copying payload bytes into the packet
            int i;
            int startindex = EZRoboNetDevice.MAX_FRAME_PAYLOAD_LENGTH * FramesReceived;

            for (i = 0; i < frame.PayloadLength; i++)
            {
                CurrentPacket[startindex + i] = frame.Payload[i];
            }
            // frame payload copied
            // increasing number of received frames
            FramesReceived++;



            // now changing state
            if (FramesReceived == TotalFrames)
            {
                state = EZRoboNetDevice.stPacketReady;
            }
            else
            {
                state = EZRoboNetDevice.stReceiving;
                // marking time for next frame arrival possible timeout
                FrameReceptionStartTime = DateTime.Now;
            }
        }
        public EZStationPacketFSM(EZRoboNetDevice device, EZFrame frame)
        {
            // registering the Net Device
            NetDevice = device;

            // capturing time of first reception
            ReceptionStartTime = DateTime.Now;
            // acknowledging
            NetDevice.sendAcknowledge(PacketSenderID);
            // retrieving sender id

            PacketSenderID = frame.SenderID;
            // calculating total packet length
            ushort packetlength = (ushort)(frame.Payload[3] + 256 * frame.Payload[4] + 5);

            CurrentPacketLength = packetlength;
            // calculating total number of frames required for full packet transmission
            TotalFrames = packetlength / EZRoboNetDevice.MAX_FRAME_PAYLOAD_LENGTH + 1;
            // allocating memory space for the packet being received
            CurrentPacket = new byte[packetlength];
            // now filling initial space in CurrentPacket
            int i;

            for (i = 0; i < frame.PayloadLength; i++)
            {
                CurrentPacket[i] = frame.Payload[i];
            }
            // done copying

            // setting number of frames received to 1
            FramesReceived = 1;
            // sending an acknowledgement frame
            NetDevice.sendAcknowledge(frame.SenderID);

            if (FramesReceived < TotalFrames)
            { // need to receive more
                state = EZRoboNetDevice.stReceiving;
                // marrking time of acknowledgement
                FrameReceptionStartTime = DateTime.Now;
            }
            else
            {
                state          = EZRoboNetDevice.stPacketReady;
                FramesReceived = 0;
                TotalFrames    = 0;
            }
        }