Ejemplo n.º 1
0
Archivo: mngr.c Proyecto: jiangli/lacp
static int
unlink_port (int argc, char **argv)
{
    long pid1;
    int indx1;
    BRIDGE_T *br;
    BRIDGE_T *br1;
    BRIDGE_T *br2;
    PORT_T *port1;
    PORT_T *port2;

    if (argc < 3) {
        printf ("for this command must be 2 argumenta :(\n");
        return 0;
    }

    pid1 = scan_br_name (argv[1]);
    indx1 = strtoul (argv[2], 0, 10);


    for (br = br_lst; br; br = br->next) {
        //printf ("check B%ld\n", br->pid);
        if (br->pid == pid1)
            br1 = br;
    }

    if (!br1) {
        printf ("Sorry, the bridge B%ldis absent :(\n", pid1);
        return 0;
    }

    if (indx1 > br1->number_of_ports || indx1 < 0) {
        printf ("Sorry, port p%02d invalid\n", indx1);
        return 0;
    }

    port1 = br1->ports + indx1;

    if (!port1->bridge_partner) {
        printf ("port p%02d is disconnected\n", indx1);
        return 0;
    }

    br2 = port1->bridge_partner;
    port2 = br2->ports + port1->port_partner;
    disconnect_port (port1, 1);
    disconnect_port (port2, 1);

    return 0;
}
Ejemplo n.º 2
0
//  SLOTS
void JVlibForm::on_System_OpenMidi_button_clicked()
{
    disconnect_port();
//    close_seq();
    System_PlayMidi_button->setChecked(false);
    System_PlayMidi_button->setEnabled(false);
    System_PauseMidi_button->setEnabled(false);
    SysFilePlaying->clear();
    System_MIDI_Transpose->setValue(0);
    System_MIDI_KeySig->clear();
    MIDI_length_display->setText("00:00");
    QString fn = QFileDialog::getOpenFileName(this,"Open MIDI File",MIDI_dir,"Midi files (*.mid, *.MID);;Any (*.*)");
    if (fn.isEmpty())
        return;
    strcpy(playfile, fn.toAscii().data());
    SysFilePlaying->setText(fn);
    init_seq();
    if (!queue) queue = snd_seq_alloc_named_queue(seq, "midi_play");
    check_snd("create queue", queue);
    connect_port();
    all_events.clear();
    if (!parseFile(playfile)) {
        QMessageBox::critical(this, "MIDI Player", QString("Error parsing input file"));
        return;
    }   // parseFile
    System_MIDI_progressBar->setRange(0,all_events.back().tick);
    System_MIDI_progressBar->setTickInterval(song_length_seconds<240? all_events.back().tick/song_length_seconds*10 : all_events.back().tick/song_length_seconds*30);
    System_MIDI_progressBar->setTickPosition(QSlider::TicksAbove);
    MIDI_length_display->setText(QString::number(static_cast<int>(song_length_seconds/60)).rightJustified(2,'0') + ":" + QString::number(static_cast<int>(song_length_seconds)%60).rightJustified(2,'0'));
    System_PlayMidi_button->setEnabled(true);
    System_MIDI_Transpose->setEnabled(true);
}   // end on_System_OpenMidi_button_clicked
Ejemplo n.º 3
0
void JVlibForm::on_System_PauseMidi_button_toggled(bool checked)
{
  unsigned int current_tick;
  if (checked) {
      stopPlayer();
      if (seqTimer->isActive()) {
            disconnect(JVlibForm::seqTimer, SIGNAL(timeout()), this, SLOT(tickDisplay()));
            seqTimer->stop();
      }
        snd_seq_get_queue_status(seq, queue, status);
	current_tick = snd_seq_queue_status_get_tick_time(status);
        snd_seq_stop_queue(seq,queue,NULL);
        snd_seq_drain_output(seq);
	stop_sound();
	disconnect_port();
        System_PauseMidi_button->setText("Resume");
  }
  else {
	connect_port();
        snd_seq_continue_queue(seq, queue, NULL);
        snd_seq_drain_output(seq);
        snd_seq_get_queue_status(seq, queue, status);
	current_tick = snd_seq_queue_status_get_tick_time(status);
        System_PauseMidi_button->setText("Pause");
        connect(JVlibForm::seqTimer, SIGNAL(timeout()), this, SLOT(tickDisplay()));
	startPlayer(current_tick);
        seqTimer->start(100);
  }
}   // end on_System_PauseMidi_button_toggled
Ejemplo n.º 4
0
Archivo: mngr.c Proyecto: jiangli/lacp
static int
link_each (int argc, char **argv)
{
    BRIDGE_T *br1;
    BRIDGE_T *br2;
    PORT_T *port1;
    PORT_T *port2;
    register int indx;

    /* unlink all */
    for (br1 = br_lst; br1; br1 = br1->next) {
        /* disconnect all its connceted ports */
        for (indx = 0; indx < br1->number_of_ports; indx++) {
            port1 = br1->ports + indx;
            if (port1->bridge_partner) {
                printf ("disconnect B%ld ", br1->pid);
                printf ("port p%02d (with B%ld-p%02d)\n",
                        indx + 1, port1->bridge_partner->pid, port1->port_partner);
                br2 = port1->bridge_partner;
                port2 = br2->ports + port1->port_partner;
                disconnect_port (port1, 1);
                disconnect_port (port2, 1);
            }
        }
    }

    /* buid ring */
    for (br1 = br_lst; br1; br1 = br1->next) {
        br2 = br1->next;
        if (!br2)
            br2 = br_lst;
        _link_two_ports (br1, br1->ports + 1, 2, br2, br2->ports + 0, 1);
    }

    return 0;
}
Ejemplo n.º 5
0
	int 				main									(void)					{
	 state = init;
	 SetupHardware();
 	 LED(~GREEN);
	 //HMACInit(jig_key,20);
	 //switch_port(0);
	 
 	 for (;;) {
  	  USB_USBTask(); // why not in ISR ?
	
      if (expire ==0){    	
 	   switch (state) {
		case start: 		
		      connect_port(5); 
			  state = p5_wait_reset;
			  break;
			  
		case JIG_wait_reset:
 		      switch_port(5);
		      state = p5_wait_enumerate;
              break;

		case JIG_do_answer: 
		      JIG_Task(); 
			  break;

 	    case JIG_responded:
 		     disconnect_port(5);
		     state = p5_wait_disconnect;
			 break; 

		case JIG_wait_disconnect:
		     if (last_port_conn_clear == 5) {
		      state = p5_disconnected;
		      expire = 20;
			 } 
			 break;
		case JIG_disconnected:	 
     		 LED(GREEN);
			 break;
			 
		default:
		  break;
	   } 
	  }		
	 }
	}
Ejemplo n.º 6
0
void JVlibForm::on_System_PlayMidi_button_toggled(bool checked) {
    if (checked) {
	seqTimer = new QTimer(this);
        System_PauseMidi_button->setEnabled(true);
        System_OpenMidi_button->setEnabled(false);
        System_PlayMidi_button->setText("Stop");
	System_MIDI_progressBar->setEnabled(true);
        connect_port();
        // queue won't actually start until it is drained
        int err = snd_seq_start_queue(seq, queue, NULL);
        check_snd("start queue", err);
	System_PlayMidi_status->on();
        connect(JVlibForm::seqTimer, SIGNAL(timeout()), this, SLOT(tickDisplay()));
        seqTimer->start(100);
	startPlayer(0);
    }
    else {
        if (seqTimer->isActive()) {
            disconnect(JVlibForm::seqTimer, SIGNAL(timeout()), this, SLOT(tickDisplay()));
            seqTimer->stop();
	    delete seqTimer;
        }
        snd_seq_stop_queue(seq,queue,NULL);
        snd_seq_drain_output(seq);
	stopPlayer();
	stop_sound();
        disconnect_port();
	System_PlayMidi_status->off();
	System_MIDI_progressBar->blockSignals(true);
        System_MIDI_progressBar->setValue(0);
	System_MIDI_progressBar->blockSignals(false);
        MIDI_time_display->setText("00:00");
        if (System_PauseMidi_button->isChecked()) {
            System_PauseMidi_button->blockSignals(true);
            System_PauseMidi_button->setChecked(false);
            System_PauseMidi_button->blockSignals(false);
            System_PauseMidi_button->setText("Pause");
        }
        System_PauseMidi_button->setEnabled(false);
        System_PlayMidi_button->setText("Play");
        System_OpenMidi_button->setEnabled(true);
	System_MIDI_Transpose->setEnabled(true);
	System_MIDI_progressBar->setEnabled(false);
	event_num=0;
    }
}   // end on_System_PlayMidi_button_toggled
Ejemplo n.º 7
0
Archivo: mngr.c Proyecto: jiangli/lacp
int
unregister_bridge (BR_IPC_MSG_T * msg)
{
    register BRIDGE_T *oldbr;
    register BRIDGE_T *prev = NULL;
    register PORT_T *port;
    register int indx;

    /* check if such bridge has just been registered */
    for (oldbr = br_lst; oldbr; oldbr = oldbr->next)
        if (oldbr->pid == msg->header.sender_pid) {
            break;
        } else
            prev = oldbr;

    if (!oldbr) {
        printf ("Sorry, this bridge has not yet been registered ? :(\n");
        return 0;
    }

    /* disconnect all its connceted ports */
    for (indx = 0; indx < oldbr->number_of_ports; indx++) {
        port = oldbr->ports + indx;
        if (port->bridge_partner) {
            disconnect_port (port, 0);
        }
    }

    /* delete from the list & free */
    if (prev)
        prev->next = oldbr->next;
    else
        br_lst = oldbr->next;

    free (oldbr->ports);
    free (oldbr);
    return 0;
}
static void port_connection_close(PortConnection * conn) {
    PortServer * server = conn->server;
    PortConnection * prev;

    port_connection_unbind(conn);
    if (conn->connected) {
        if (server->disconnect_callback) server->disconnect_callback(server, server->callback_data);
        disconnect_port(conn);
        conn->connected = 0;
        return;
    }

    if (conn->lock_cnt > 0) return;
    if (server->list == conn) server->list = conn->next;
    else {
        prev = server->list;
        while (prev->next != conn)
            prev = prev->next;
        assert (prev->next == conn);
        prev->next = conn->next;
    }
    loc_free(conn);

    /* If the last port connection has been closed and server shutdown is
     * in progress, complete it.
     */
    if (server->list == NULL) {
        if (server->sock == -1) {
            port_server_shutdown(server);
        }
        else if (server->auto_connect) {
            /* Retry target connection */
            post_event_with_delay(port_connection_open_event, server, server->auto_connect_period * 1000000);
        }
    }
}
int main(void)
{
	SetupHardware();

	LED(RED);

	state = init;
	switch_port(0);

	for (;;)
	{
		if (port_cur == 0)
			HUB_Task();

		if (port_cur == 5)
			JIG_Task();

		USB_USBTask();
		
		// connect 1
		if (state == hub_ready && expire == 0)
		{
			LED(GREEN);
                        expire_led = 10;
			connect_port(1);
			state = p1_wait_reset;
		}
		
		if (state == p1_wait_reset && last_port_reset_clear == 1)
		{
			LED(GREEN);
                        expire_led = 10;
			switch_port(1);
			state = p1_wait_enumerate;
		}

		// connect 2
		if (state == p1_ready && expire == 0)
		{
			switch_port(0);
			connect_port(2);
			state = p2_wait_reset;
		}

		if (state == p2_wait_reset && last_port_reset_clear == 2)
		{
			LED(GREEN);
                        expire_led = 10;
			switch_port(2);
			state = p2_wait_enumerate;
		}

		// connect 3
		if (state == p2_ready && expire == 0)
		{
			LED(GREEN);
                        expire_led = 10;
			switch_port(0);
			connect_port(3);
			state = p3_wait_reset;
		}

		if (state == p3_wait_reset && last_port_reset_clear == 3)
		{
			LED(GREEN);
                        expire_led = 10;
			switch_port(3);
			state = p3_wait_enumerate;
		}

		// disconnect 2
		if (state == p3_ready && expire == 0)
		{
			LED(GREEN);
                        expire_led = 10;
			switch_port(0);
			disconnect_port(2);
			state = p2_wait_disconnect;
		}

		if (state == p2_wait_disconnect && last_port_conn_clear == 2)
		{
			LED(GREEN);
                        expire_led = 10;
			state = p4_wait_connect;
			expire = 15;
		}

		// connect 4
		if (state == p4_wait_connect && expire == 0) 
		{
			LED(GREEN);
                        expire_led = 10;
			connect_port(4);
			state = p4_wait_reset;
		}

		if (state == p4_wait_reset && last_port_reset_clear == 4)
		{
			LED(GREEN);
                        expire_led = 10;
			switch_port(4);
			state = p4_wait_enumerate;
		}

		// connect 5
		if (state == p4_ready && expire == 0)
		{
			LED(GREEN);
                        expire_led = 10;
			switch_port(0);
			/* When first connecting port 5, we need to
			   have the wrong data toggle for the PS3 to
			   respond */
			hub_int_force_data0 = 1;
			connect_port(5);
			state = p5_wait_reset;
		}

		if (state == p5_wait_reset && last_port_reset_clear == 5)
		{
			LED(GREEN);
                        expire_led = 10;
			switch_port(5);
			state = p5_wait_enumerate;
		}

		// disconnect 3
		if (state == p5_responded && expire == 0)
		{
			LED(GREEN);
                        expire_led = 10;
			switch_port(0);
			/* Need wrong data toggle again */
			hub_int_force_data0 = 1;
			disconnect_port(3);
			state = p3_wait_disconnect;
		}

		if (state == p3_wait_disconnect && last_port_conn_clear == 3)
		{
			LED(GREEN);
                        expire_led = 10;
			state = p3_disconnected;
			expire = 45;
		}

		// disconnect 5
		if (state == p3_disconnected && expire == 0)
		{
			LED(GREEN);
                        expire_led = 10;
			switch_port(0);
			disconnect_port(5);
			state = p5_wait_disconnect;
		}

		if (state == p5_wait_disconnect && last_port_conn_clear == 5)
		{
			LED(GREEN);
                        expire_led = 10;
			state = p5_disconnected;
			expire = 20;
		}

		// disconnect 4
		if (state == p5_disconnected && expire == 0)
		{
			LED(GREEN);
                        expire_led = 10;
			switch_port(0);
			disconnect_port(4);
			state = p4_wait_disconnect;
		}

		if (state == p4_wait_disconnect && last_port_conn_clear == 4)
		{
			LED(GREEN);
                        expire_led = 10;
			state = p4_disconnected;
			expire = 20;
		}

		// disconnect 1
		if (state == p4_disconnected && expire == 0)
		{
			LED(GREEN);
                        expire_led = 10;
			switch_port(0);
			disconnect_port(1);
			state = p1_wait_disconnect;
		}

		if (state == p1_wait_disconnect && last_port_conn_clear == 1)
		{
			state = p1_disconnected;
			expire = 20;
		}

		// connect 6
		if (state == p1_disconnected && expire == 0)
		{
			switch_port(0);
			connect_port(6);
			state = p6_wait_reset;
			//expire = 0; // nuevo
		}

		if (state == p6_wait_reset && last_port_reset_clear == 6 /*&& expire == 0*/)
		{
			switch_port(6); // esto es por que ya no tenemos respuesta
			state = p6_wait_enumerate;
			
			//disconnect_port(6);
			//state = done;
		}

		// done
		if (state == done)
		{
			LED(GREEN);
		}
	}
}
Ejemplo n.º 10
0
int main(void)
{
	SetupHardware();

	setLed(RED);

	state = init;
	switch_port(0);
   DBGMSG1("Ready.");

   // Copy the hub descriptor into ram, vusb's
   // usbFunctionSetup() callback can't handle stuff
   // from FLASH
   memcpy_P(HUB_Hub_Descriptor_ram, HUB_Hub_Descriptor, sizeof(HUB_Hub_Descriptor));

	for (;;)
	{
		if (port_cur == 0)
			HUB_Task();

		if (port_cur == 5)
			JIG_Task();

      usbPoll();

		// connect 1
		if (state == hub_ready && expire == 0)
		{
         DBG1(0x00, "\x1", 1);
         setLed(NONE);
			connect_port(1);
			state = p1_wait_reset;
		}
		
		if (state == p1_wait_reset && last_port_reset_clear == 1)
		{
         DBG1(0x00, "\x2", 1);
         setLed(RED);
			switch_port(1);
			state = p1_wait_enumerate;
		}

		// connect 2
		if (state == p1_ready && expire == 0)
		{
         DBG1(0x00, "\x3", 1);
         setLed(NONE);
			switch_port(0);
			connect_port(2);
			state = p2_wait_reset;
		}

		if (state == p2_wait_reset && last_port_reset_clear == 2)
		{
         DBG1(0x00, "\x4", 1);
         setLed(RED);
			switch_port(2);
			state = p2_wait_enumerate;
		}

		// connect 3
		if (state == p2_ready && expire == 0)
		{
         DBG1(0x00, "\x5", 1);
         setLed(NONE);
			switch_port(0);
			connect_port(3);
			state = p3_wait_reset;
		}

		if (state == p3_wait_reset && last_port_reset_clear == 3)
		{
         DBG1(0x00, "\x6", 1);
         setLed(RED);
			switch_port(3);
			state = p3_wait_enumerate;
		}

		// disconnect 2
		if (state == p3_ready && expire == 0)
		{
         DBG1(0x00, "\x7", 1);
         setLed(NONE);
			switch_port(0);
			disconnect_port(2);
			state = p2_wait_disconnect;
		}

		if (state == p2_wait_disconnect && last_port_conn_clear == 2)
		{
         DBG1(0x00, "\x8", 1);
         setLed(RED);
			state = p4_wait_connect;
			expire = 15;
		}

		// connect 4
		if (state == p4_wait_connect && expire == 0) 
		{
         DBG1(0x00, "\x9", 1);
         setLed(NONE);
			connect_port(4);
			state = p4_wait_reset;
		}

		if (state == p4_wait_reset && last_port_reset_clear == 4)
		{
         DBG1(0x00, "\x10", 1);
         setLed(RED);
			switch_port(4);
			state = p4_wait_enumerate;
		}

		// connect 5
		if (state == p4_ready && expire == 0)
		{
         DBG1(0x00, "\x11", 1);
         setLed(NONE);
			switch_port(0);
			/* When first connecting port 5, we need to
			   have the wrong data toggle for the PS3 to
			   respond */
			hub_int_force_data0 = 1;
			connect_port(5);
			state = p5_wait_reset;
		}

		if (state == p5_wait_reset && last_port_reset_clear == 5)
		{
         DBG1(0x00, "\x12", 1);
         setLed(RED);
			switch_port(5);
			state = p5_wait_enumerate;
		}

		// disconnect 3
		if (state == p5_responded && expire == 0)
		{
         DBG1(0x00, "\x13", 1);
         setLed(NONE);
			switch_port(0);
			/* Need wrong data toggle again */
			hub_int_force_data0 = 1;
			disconnect_port(3);
			state = p3_wait_disconnect;
		}

		if (state == p3_wait_disconnect && last_port_conn_clear == 3)
		{
         DBG1(0x00, "\x14", 1);
         setLed(RED);
			state = p3_disconnected;
			expire = 45;
		}

		// disconnect 5
		if (state == p3_disconnected && expire == 0)
		{
         DBG1(0x00, "\x15", 1);
         setLed(NONE);
			switch_port(0);
			disconnect_port(5);
			state = p5_wait_disconnect;
		}

		if (state == p5_wait_disconnect && last_port_conn_clear == 5)
		{
         DBG1(0x00, "\x16", 1);
         setLed(RED);
			state = p5_disconnected;
			expire = 20;
		}

		// disconnect 4
		if (state == p5_disconnected && expire == 0)
		{
         DBG1(0x00, "\x17", 1);
         setLed(NONE);
			switch_port(0);
			disconnect_port(4);
			state = p4_wait_disconnect;
		}

		if (state == p4_wait_disconnect && last_port_conn_clear == 4)
		{
         DBG1(0x00, "\x18", 1);
         setLed(RED);
			state = p4_disconnected;
			expire = 20;
		}

		// disconnect 1
		if (state == p4_disconnected && expire == 0)
		{
         DBG1(0x00, "\x19", 1);
         setLed(NONE);
			switch_port(0);
			disconnect_port(1);
			state = p1_wait_disconnect;
		}

		if (state == p1_wait_disconnect && last_port_conn_clear == 1)
		{
         DBG1(0x00, "\x20", 1);
         setLed(RED);
			state = p1_disconnected;
			expire = 20;
		}

		// connect 6
		if (state == p1_disconnected && expire == 0)
		{
         DBG1(0x00, "\x21", 1);
         setLed(NONE);
			switch_port(0);
			connect_port(6);
			state = p6_wait_reset;
		}

		if (state == p6_wait_reset && last_port_reset_clear == 6)
		{
         DBG1(0x00, "\x22", 1);
         setLed(RED);
			switch_port(6);
			state = p6_wait_enumerate;
		}

		// done
		if (state == done)
		{
			setLed(GREEN);
		}
	}
}