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