// 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; } }