void SimpleSwitch::transmit_thread() { while (1) { std::unique_ptr<Packet> packet; output_buffer.pop_back(&packet); ELOGGER->packet_out(*packet); BMLOG_DEBUG_PKT(*packet, "Transmitting packet of size {} out of port {}", packet->get_data_size(), packet->get_egress_port()); transmit_fn(packet->get_egress_port(), packet->data(), packet->get_data_size()); } }
int main() { init_platform(); initialize(); /* microblaze_enable_interrupts(); XIntc_RegisterHandler(XPAR_INTC_SINGLE_BASEADDR, XPAR_INTC_0_DEVICE_ID,(XInterruptHandler)status_read, XPAR_INTC_SINGLE_BASEADDR); XIntc_MasterEnable(XPAR_INTC_SINGLE_BASEADDR); XIntc_EnableIntr(XPAR_INTC_SINGLE_BASEADDR, XPAR_FIT_TIMER_0_INTERRUPT_MASK); print("Wait for Interrupts.... \n\r");*/ while (1){ rx_reg = SC_UART_INTERFACE_MODIFIED_mReadReg(XPAR_SC_UART_INTERFACE_MODIFIED_0_BASEADDR, SC_UART_INTERFACE_MODIFIED_SLV_REG1_OFFSET); if(rx_reg & uart_reset_mask){ initialize(); print("Reset active ...\n"); print("Waiting for reset to go low ...\n"); while(SC_UART_INTERFACE_MODIFIED_mReadReg(XPAR_SC_UART_INTERFACE_MODIFIED_0_BASEADDR, SC_UART_INTERFACE_MODIFIED_SLV_REG1_OFFSET)&uart_reset_mask); print("Reset deactivated ...\n"); state=transmit_ATR; } else { switch(state){ case transmit_ATR: transmit_ATR_fn(); //print("Current state : Transmit ATR\n"); // state=recieve_mode; break; case recieve_mode: recieve_fn(); // state=transmit_mode; break; case transmit_mode: transmit_fn(); // state=recieve_mode; break; } } } return 0; }