void open_serial_port(const char *port_name) { int r; struct serial_struct kernel_serial_settings; if (port_fd >= 0) { close(port_fd); } port_fd = open(port_name, O_RDWR | O_NDELAY | O_NOCTTY); if (port_fd < 0) { report_open_error(port_name, errno); return; } r = set_baud(baud_setting()); if (r == 0) { printf("Port \"%s\" opened at %s baud\r\n", port_name, baud_setting()); new_port_setting(port_name); } else { printf("Port \"%s\" opened, unable to set baud to %s\r\n", port_name, baud_setting()); } /* attempt to set low latency mode, but don't worry if we can't */ r = ioctl(port_fd, TIOCGSERIAL, &kernel_serial_settings); if (r < 0) return; kernel_serial_settings.flags |= ASYNC_LOW_LATENCY; ioctl(port_fd, TIOCSSERIAL, &kernel_serial_settings); }
void create_window(int *argc, char ***argv) { GList *gtk_baud_list=NULL; int i; gtk_init(argc, argv); firmware_label = gtk_label_new("Firmware:"); gtk_label_set_justify(GTK_LABEL(firmware_label), GTK_JUSTIFY_RIGHT); gtk_widget_show(firmware_label); firmware_entry = gtk_entry_new(); gtk_widget_set_usize(firmware_entry, 110, 0); gtk_entry_set_text(GTK_ENTRY(firmware_entry), file_setting()); gtk_widget_show(firmware_entry); program_button = gtk_button_new_with_label("Program Now"); if (file_exists(file_setting())) { gtk_widget_set_sensitive(program_button, TRUE); } else { gtk_widget_set_sensitive(program_button, FALSE); } gtk_widget_show(program_button); line1_hbox = gtk_hbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(line1_hbox), firmware_label, FALSE, FALSE, 2); gtk_box_pack_start(GTK_BOX(line1_hbox), firmware_entry, TRUE, TRUE, 2); gtk_box_pack_start(GTK_BOX(line1_hbox), program_button, FALSE, FALSE, 2); gtk_widget_show(line1_hbox); port_label = gtk_label_new("Port:"); gtk_label_set_justify(GTK_LABEL(port_label), GTK_JUSTIFY_RIGHT); gtk_widget_show(port_label); port_entry = gtk_entry_new(); gtk_widget_set_usize(port_entry, 80, 0); gtk_entry_set_text(GTK_ENTRY(port_entry), port_setting()); open_serial_port(port_setting()); gtk_widget_show(port_entry); baud_label = gtk_label_new("Baud:"); gtk_label_set_justify(GTK_LABEL(baud_label), GTK_JUSTIFY_RIGHT); gtk_widget_show(baud_label); baud_combo = gtk_combo_new(); for (i=0; baud_list[i] != NULL; i++) { gtk_baud_list = g_list_append(gtk_baud_list, baud_list[i]); } gtk_combo_set_popdown_strings(GTK_COMBO(baud_combo), gtk_baud_list); gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(baud_combo)->entry), FALSE); gtk_widget_set_usize(baud_combo, 75, 0); for (i=0; baud_list[i] != NULL; i++) { if (strcmp(baud_list[i], baud_setting()) == 0) { gtk_list_select_item(GTK_LIST(GTK_COMBO(baud_combo)->list), i); break; } } gtk_widget_show(baud_combo); line2_hbox = gtk_hbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(line2_hbox), port_label, FALSE, FALSE, 2); gtk_box_pack_start(GTK_BOX(line2_hbox), port_entry, TRUE, TRUE, 2); gtk_box_pack_start(GTK_BOX(line2_hbox), baud_label, FALSE, FALSE, 2); gtk_box_pack_start(GTK_BOX(line2_hbox), baud_combo, FALSE, FALSE, 2); gtk_widget_show(line2_hbox); crystal_label = gtk_label_new("Crystal:"); gtk_label_set_justify(GTK_LABEL(crystal_label), GTK_JUSTIFY_RIGHT); gtk_widget_show(crystal_label); crystal_entry = gtk_entry_new(); gtk_widget_set_usize(crystal_entry, 80, 0); gtk_entry_set_text(GTK_ENTRY(crystal_entry), crystal_setting()); gtk_widget_show(crystal_entry); mhz_label = gtk_label_new("(MHz)"); gtk_label_set_justify(GTK_LABEL(mhz_label), GTK_JUSTIFY_LEFT); gtk_widget_show(mhz_label); line3_hbox = gtk_hbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(line3_hbox), crystal_label, FALSE, FALSE, 2); gtk_box_pack_start(GTK_BOX(line3_hbox), crystal_entry, TRUE, TRUE, 2); gtk_box_pack_start(GTK_BOX(line3_hbox), mhz_label, FALSE, FALSE, 2); gtk_widget_show(line3_hbox); reboot_button = gtk_button_new_with_label("Reboot"); gtk_widget_set_sensitive(reboot_button, TRUE); gtk_widget_show(reboot_button); bootloader_button = gtk_button_new_with_label("Booloader"); gtk_widget_show(bootloader_button); quit_button = gtk_button_new_with_label("Quit"); gtk_widget_show(quit_button); line4_hbox = gtk_hbox_new(TRUE, 2); gtk_box_pack_start(GTK_BOX(line4_hbox), reboot_button, TRUE, TRUE, 2); gtk_box_pack_start(GTK_BOX(line4_hbox), bootloader_button, TRUE, TRUE, 2); gtk_box_pack_start(GTK_BOX(line4_hbox), quit_button, TRUE, TRUE, 2); gtk_widget_show(line4_hbox); main_vbox = gtk_vbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(main_vbox), line1_hbox, TRUE, TRUE, 2); gtk_box_pack_start(GTK_BOX(main_vbox), line2_hbox, TRUE, TRUE, 2); gtk_box_pack_start(GTK_BOX(main_vbox), line3_hbox, TRUE, TRUE, 2); gtk_box_pack_start(GTK_BOX(main_vbox), line4_hbox, TRUE, TRUE, 2); gtk_widget_show(main_vbox); main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_add(GTK_CONTAINER(main_window), main_vbox); gtk_widget_show(main_window); }