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? } }
public CSPBus(string name) { this.name = name; current_packet = null; packet_queue = new Queue <CSPPacket>(); connected_modules = new List <Module>(); }
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); } }
public void EnqueuePacket(CSPPacket pkt) { packet_queue.Enqueue(pkt); }
public void ReceiveCSPPacket(CSPPacket packet) { //Log received packet Console.WriteLine("Module " + name + " received packet: " + packet.ToString()); //Processing? }