예제 #1
0
        public override void Process(int step)
        {
            //Transmit next packet if possible
            if (current_packet == null && packet_queue.Count > 0)
            {
                current_packet = packet_queue.Dequeue();
                //Log new packet on bus
                Console.WriteLine("New packet transmitting on bus " + name + ": " + current_packet.ToString());
            }

            if (current_packet != null)
            {
                bool packet_received = false;
                foreach (Module module in connected_modules)
                {
                    if (module.address == current_packet.Header[CSPPacket.dest])
                    {
                        module.ReceiveCSPPacket(current_packet);
                        packet_received = true;
                    }
                }

                if (!packet_received)
                {
                    //log packet going nowhere
                    Console.WriteLine("Packet was dropped because it has no valid destination: " + current_packet.ToString());
                }

                //Remove packet after transmission
                current_packet = null;
                //Log packet off the bus?
            }
        }
예제 #2
0
 public CSPBus(string name)
 {
     this.name         = name;
     current_packet    = null;
     packet_queue      = new Queue <CSPPacket>();
     connected_modules = new List <Module>();
 }
예제 #3
0
        public void SendCSPPacket(CSPBus bus, byte destination_addr, byte destination_port, byte source_port, byte priority)
        {
            CSPPacket packet = new CSPPacket(0x00000000);

            packet.Header[CSPPacket.src]       = address;
            packet.Header[CSPPacket.dest]      = destination_addr;
            packet.Header[CSPPacket.src_port]  = source_port;
            packet.Header[CSPPacket.dest_port] = destination_port;
            packet.Header[CSPPacket.priority]  = priority;

            if (BusConnections.Contains(bus))
            {
                bus.EnqueuePacket(packet);
                //Log sending packet
                Console.WriteLine("Module " + name + " sends packet " + packet.ToString() + " to bus " + bus.name);
            }
            else
            {
                //Log failed send
                Console.WriteLine("Module " + name + " failed to send packet " + packet.ToString() + " because it is not connected to bus " + bus.name);
            }
        }
예제 #4
0
 public void EnqueuePacket(CSPPacket pkt)
 {
     packet_queue.Enqueue(pkt);
 }
예제 #5
0
 public void ReceiveCSPPacket(CSPPacket packet)
 {
     //Log received packet
     Console.WriteLine("Module " + name + " received packet: " + packet.ToString());
     //Processing?
 }