/*************************************************************************** * Copyright (C) 06/2008 by Olaf Rempel * * razzor@kopf-tisch.de * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; version 2 of the License * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include #include #include "gtk2-gui.h" #include "i2c.h" static GtkWidget *combobox101; static GtkWidget *spinbutton101; static GtkWidget *textview101; static GtkWidget *filechooserbutton201; static GtkWidget *filechooserbutton202; static GtkWidget *progressbar201; static GtkWidget *spinbutton301; static GtkWidget *spinbutton302; static GtkWidget *spinbutton303; static GtkWidget *spinbutton304; static GtkWidget *spinbutton305; static GtkWidget *spinbutton306; static GtkWidget *spinbutton307; static GtkWidget *spinbutton308; static GtkWidget *spinbutton309; static GtkWidget *spinbutton310; static GtkWidget *entry401; static GtkWidget *entry402; static GtkWidget *entry403; static GtkWidget *entry404; static GtkWidget *entry405; static GtkWidget *vscale401; static GtkWidget *togglebutton401; static int i2c_fd = -1; static struct blmc_parameter blmc_parameters; static int parameter_update_in_progress = 0; static void add_message(const char *msg) { if (msg == NULL) msg = "EMPTY MESSAGE\n"; GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview101)); gtk_text_buffer_insert_at_cursor(buffer, msg, strlen(msg)); GtkTextMark *mark = gtk_text_buffer_get_insert(buffer); gtk_text_view_scroll_mark_onscreen(GTK_TEXT_VIEW(textview101), mark); } static void update_parameter_boxes(void) { parameter_update_in_progress = 1; gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton301), blmc_parameters.spinup_ticks); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton302), blmc_parameters.spinup_tick); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton303), blmc_parameters.spinup_step); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton304), blmc_parameters.spinup_wait); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton305), blmc_parameters.spinup_pwm); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton306), blmc_parameters.pwm_min); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton307), blmc_parameters.pwm_max); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton308), blmc_parameters.current_limit); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton309), blmc_parameters.current_max); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton310), blmc_parameters.voltage_min); parameter_update_in_progress = 0; } static void update_status_boxes(struct blmc_status *status) { char buf[16]; snprintf(buf, sizeof(buf), "%d", status->pwm); gtk_entry_set_text(GTK_ENTRY(entry401), buf); snprintf(buf, sizeof(buf), "%d", status->pwm_real); gtk_entry_set_text(GTK_ENTRY(entry402), buf); snprintf(buf, sizeof(buf), "%d", status->rpm * 60 / 42); gtk_entry_set_text(GTK_ENTRY(entry403), buf); snprintf(buf, sizeof(buf), "%d", status->current); gtk_entry_set_text(GTK_ENTRY(entry404), buf); double voltage = (status->voltage * 5.00 * (18000 + 4700)) / (6 * 1024 * 4700); snprintf(buf, sizeof(buf), "%2.3f", voltage); gtk_entry_set_text(GTK_ENTRY(entry405), buf); } static void on_spinbutton101_value_changed(GtkSpinButton *spinbutton, gpointer user_data) { int address = gtk_spin_button_get_value_as_int(spinbutton); if (i2c_fd != -1) i2c_set_address(i2c_fd, address); } /* CONNECT Button */ static void on_button101_clicked(GtkButton *button, gpointer user_data) { if (!i2c_isconnected()) { /* not connected, so this is a CONNECT */ char *path = gtk_combo_box_get_active_text(GTK_COMBO_BOX(combobox101)); int address = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinbutton101)); i2c_fd = i2c_open(path); if (i2c_fd != -1) i2c_set_address(i2c_fd, address); } else { i2c_close(i2c_fd); i2c_fd = -1; } if (i2c_isconnected()) { gtk_button_set_label(button, "Disconnect"); } else { gtk_button_set_label(GTK_BUTTON(button), "Connect"); } } /* fetch bootloader info 150ms after bootloader was requested */ static gint bootloader_cb(gpointer data) { char info_buf[16]; unsigned char sig_buf[4]; i2c_cmd_getinfo(i2c_fd, info_buf, sizeof(info_buf)); i2c_cmd_getsignature(i2c_fd, sig_buf, sizeof(sig_buf)); char msg_buf[64]; snprintf(msg_buf, sizeof(msg_buf), "bootloader: %-16s (sig: 0x%02x%02x%02x)\n", info_buf, sig_buf[0], sig_buf[1], sig_buf[2]); add_message(msg_buf); return 0; } /* Bootloader Button */ static void on_button102_clicked(GtkButton *button, gpointer user_data) { i2c_cmd_bootloader(i2c_fd); g_timeout_add(150, bootloader_cb, NULL); } /* fetch application info 150ms after application was started */ static gint application_cb(gpointer data) { char info_buf[16]; i2c_cmd_getinfo(i2c_fd, info_buf, sizeof(info_buf)); i2c_cmd_getparameters(i2c_fd, &blmc_parameters); char msg_buf[64]; snprintf(msg_buf, sizeof(msg_buf), "application: %-16s\n", info_buf); add_message(msg_buf); update_parameter_boxes(); return 0; } /* Application Button */ static void on_button103_clicked(GtkButton *button, gpointer user_data) { i2c_cmd_application(i2c_fd); g_timeout_add(150, application_cb, NULL); } /* FLASH-READ Button */ static void on_button201_clicked(GtkButton *button, gpointer user_data) { add_message("sorry, not implemented yet\n"); } /* progress-bar callback */ static void progress_cb(int pos, int size) { char buf[16]; snprintf(buf, sizeof(buf), "%3d%%", pos * 100 / size); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progressbar201), buf); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progressbar201), (double)pos / (double)size); gdk_window_process_updates(gtk_widget_get_parent_window(progressbar201), 1); } /* FLASH-WRITE Button */ static void on_button202_clicked(GtkButton *button, gpointer user_data) { char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(filechooserbutton201)); int size = i2c_write_flash(i2c_fd, filename, progress_cb); char msg_buf[64]; snprintf(msg_buf, sizeof(msg_buf), "FLASH: %d bytes written and verified\n", size); add_message(msg_buf); } /* FLASH-VERIFY Button */ static void on_button203_clicked(GtkButton *button, gpointer user_data) { add_message("sorry, not implemented yet\n"); } /* FLASH-CLEAR Button */ static void on_button204_clicked(GtkButton *button, gpointer user_data) { add_message("sorry, not implemented yet\n"); } /* EEPROM-READ Button */ static void on_button205_clicked(GtkButton *button, gpointer user_data) { add_message("sorry, not implemented yet\n"); } /* EEPROM-WRITE Button */ static void on_button206_clicked(GtkButton *button, gpointer user_data) { add_message("sorry, not implemented yet\n"); } /* EEPROM-VERIFY Button */ static void on_button207_clicked(GtkButton *button, gpointer user_data) { add_message("sorry, not implemented yet\n"); } /* EEPROM-CLEAR Button */ static void on_button208_clicked(GtkButton *button, gpointer user_data) { add_message("sorry, not implemented yet\n"); } static void on_parameter_value_changed(GtkSpinButton *spinbutton, gpointer user_data) { if (parameter_update_in_progress) return; blmc_parameters.spinup_ticks = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinbutton301)); blmc_parameters.spinup_tick = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinbutton302)); blmc_parameters.spinup_step = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinbutton303)); blmc_parameters.spinup_wait = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinbutton304)); blmc_parameters.spinup_pwm = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinbutton305)); blmc_parameters.pwm_min = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinbutton306)); blmc_parameters.pwm_max = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinbutton307)); blmc_parameters.current_limit = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinbutton308)); blmc_parameters.current_max = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinbutton309)); blmc_parameters.voltage_min = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinbutton310)); i2c_cmd_setparameters(i2c_fd, &blmc_parameters, 0); add_message("parameter updated\n"); } /* Revert parameters to default */ static void on_button301_clicked(GtkButton *button, gpointer user_data) { add_message("sorry, not implemented yet\n"); } /* save parameters */ static void on_button302_clicked(GtkButton *button, gpointer user_data) { i2c_cmd_setparameters(i2c_fd, &blmc_parameters, 1); add_message("parameter saved\n"); } static gint pwm_update_cb(gpointer data) { int active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(togglebutton401)); int pwm = gtk_range_get_value(GTK_RANGE(vscale401)); if (!active) pwm = 0; i2c_cmd_setpwm(i2c_fd, pwm); struct blmc_status status; i2c_cmd_getstatus(i2c_fd, &status); update_status_boxes(&status); return active; } /* Motor Togglebutton */ static void on_togglebutton401_toggled(GtkToggleButton *togglebutton, gpointer user_data) { g_timeout_add(250, pwm_update_cb, NULL); } static unsigned int i2c_interface_count; void gui_add_i2c_interface(const char *path) { gtk_combo_box_append_text(GTK_COMBO_BOX(combobox101), path); gtk_combo_box_set_active(GTK_COMBO_BOX(combobox101), 0); i2c_interface_count++; } void gui_flush_i2c_interfaces(void) { while (i2c_interface_count-- > 0) gtk_combo_box_remove_text(GTK_COMBO_BOX(combobox101), 0); } GtkWidget * gui_create_window (void) { GtkWidget *window; GtkWidget *table1; GtkWidget *frame400; GtkWidget *table401; GtkWidget *label401; GtkWidget *label402; GtkWidget *label403; GtkWidget *label407; GtkWidget *label408; // GtkWidget *vscale401; // GtkWidget *togglebutton401; // GtkWidget *entry401; // GtkWidget *entry402; // GtkWidget *entry403; // GtkWidget *entry405; // GtkWidget *entry406; GtkWidget *vseparator402; GtkWidget *vseparator401; GtkWidget *label400; GtkWidget *frame200; GtkWidget *table201; GtkWidget *button202; GtkWidget *button204; GtkWidget *button203; GtkWidget *button201; GtkWidget *label201; // GtkWidget *filechooserbutton201; GtkWidget *label202; // GtkWidget *filechooserbutton202; GtkWidget *button207; GtkWidget *button208; GtkWidget *button205; GtkWidget *button206; GtkWidget *vseparator201; // GtkWidget *progressbar201; GtkWidget *label200; GtkWidget *frame300; GtkWidget *table301; GtkWidget *label301; GtkWidget *label302; GtkWidget *label303; GtkWidget *label304; GtkWidget *label305; GtkWidget *label306; GtkWidget *label307; GtkWidget *label308; GtkWidget *label309; GtkWidget *label310; GtkWidget *hseparator301; GtkObject *spinbutton302_adj; // GtkWidget *spinbutton302; GtkObject *spinbutton307_adj; // GtkWidget *spinbutton307; GtkObject *spinbutton303_adj; // GtkWidget *spinbutton303; GtkObject *spinbutton308_adj; // GtkWidget *spinbutton308; GtkObject *spinbutton304_adj; // GtkWidget *spinbutton304; GtkObject *spinbutton309_adj; // GtkWidget *spinbutton309; GtkObject *spinbutton305_adj; // GtkWidget *spinbutton305; GtkObject *spinbutton310_adj; // GtkWidget *spinbutton310; GtkWidget *hbuttonbox301; GtkWidget *button301; GtkWidget *button302; GtkObject *spinbutton301_adj; // GtkWidget *spinbutton301; GtkObject *spinbutton306_adj; // GtkWidget *spinbutton306; GtkWidget *vseparator301; GtkWidget *label300; GtkWidget *frame100; GtkWidget *table101; GtkWidget *label101; // GtkWidget *combobox101; GtkWidget *label102; GtkObject *spinbutton101_adj; // GtkWidget *spinbutton101; GtkWidget *scrolledwindow101; // GtkWidget *textview101; GtkWidget *hbuttonbox101; GtkWidget *button101; GtkWidget *button102; GtkWidget *button103; GtkWidget *hseparator101; GtkWidget *hseparator102; GtkWidget *label100; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_title (GTK_WINDOW (window), "blmc-config v0.20"); gtk_window_set_resizable (GTK_WINDOW (window), FALSE); table1 = gtk_table_new (2, 2, FALSE); gtk_widget_show (table1); gtk_container_add (GTK_CONTAINER (window), table1); gtk_table_set_row_spacings (GTK_TABLE (table1), 5); gtk_table_set_col_spacings (GTK_TABLE (table1), 5); frame400 = gtk_frame_new (NULL); gtk_widget_show (frame400); gtk_table_attach (GTK_TABLE (table1), frame400, 1, 2, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame400), GTK_SHADOW_IN); table401 = gtk_table_new (5, 6, FALSE); gtk_widget_show (table401); gtk_container_add (GTK_CONTAINER (frame400), table401); gtk_container_set_border_width (GTK_CONTAINER (table401), 5); gtk_table_set_row_spacings (GTK_TABLE (table401), 2); gtk_table_set_col_spacings (GTK_TABLE (table401), 2); label401 = gtk_label_new ("PWM:"); gtk_widget_show (label401); gtk_table_attach (GTK_TABLE (table401), label401, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label401), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label401), 5, 0); label402 = gtk_label_new ("PWM (real):"); gtk_widget_show (label402); gtk_table_attach (GTK_TABLE (table401), label402, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label402), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label402), 5, 0); label403 = gtk_label_new ("RPM:"); gtk_widget_show (label403); gtk_table_attach (GTK_TABLE (table401), label403, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label403), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label403), 5, 0); label407 = gtk_label_new ("Current:"); gtk_widget_show (label407); gtk_table_attach (GTK_TABLE (table401), label407, 0, 1, 3, 4, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label407), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label407), 5, 0); label408 = gtk_label_new ("Voltage:"); gtk_widget_show (label408); gtk_table_attach (GTK_TABLE (table401), label408, 0, 1, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label408), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label408), 5, 0); vscale401 = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 255, 0, 0, 0))); gtk_widget_show (vscale401); gtk_table_attach (GTK_TABLE (table401), vscale401, 3, 4, 0, 5, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); gtk_scale_set_value_pos (GTK_SCALE (vscale401), GTK_POS_BOTTOM); gtk_scale_set_digits (GTK_SCALE (vscale401), 0); gtk_range_set_inverted (GTK_RANGE (vscale401), TRUE); togglebutton401 = gtk_toggle_button_new_with_mnemonic ("Motor"); gtk_widget_show (togglebutton401); gtk_table_attach (GTK_TABLE (table401), togglebutton401, 5, 6, 0, 5, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); entry401 = gtk_entry_new (); gtk_widget_show (entry401); gtk_table_attach (GTK_TABLE (table401), entry401, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_editable_set_editable (GTK_EDITABLE (entry401), FALSE); gtk_entry_set_text (GTK_ENTRY (entry401), "0"); gtk_entry_set_invisible_char (GTK_ENTRY (entry401), 9679); gtk_entry_set_width_chars (GTK_ENTRY (entry401), 8); entry402 = gtk_entry_new (); gtk_widget_show (entry402); gtk_table_attach (GTK_TABLE (table401), entry402, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_editable_set_editable (GTK_EDITABLE (entry402), FALSE); gtk_entry_set_text (GTK_ENTRY (entry402), "0"); gtk_entry_set_invisible_char (GTK_ENTRY (entry402), 9679); gtk_entry_set_width_chars (GTK_ENTRY (entry402), 8); entry403 = gtk_entry_new (); gtk_widget_show (entry403); gtk_table_attach (GTK_TABLE (table401), entry403, 1, 2, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_editable_set_editable (GTK_EDITABLE (entry403), FALSE); gtk_entry_set_text (GTK_ENTRY (entry403), "0"); gtk_entry_set_invisible_char (GTK_ENTRY (entry403), 9679); gtk_entry_set_width_chars (GTK_ENTRY (entry403), 8); entry404 = gtk_entry_new (); gtk_widget_show (entry404); gtk_table_attach (GTK_TABLE (table401), entry404, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_editable_set_editable (GTK_EDITABLE (entry404), FALSE); gtk_entry_set_text (GTK_ENTRY (entry404), "0"); gtk_entry_set_invisible_char (GTK_ENTRY (entry404), 9679); gtk_entry_set_width_chars (GTK_ENTRY (entry404), 8); entry405 = gtk_entry_new (); gtk_widget_show (entry405); gtk_table_attach (GTK_TABLE (table401), entry405, 1, 2, 4, 5, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_editable_set_editable (GTK_EDITABLE (entry405), FALSE); gtk_entry_set_text (GTK_ENTRY (entry405), "0"); gtk_entry_set_invisible_char (GTK_ENTRY (entry405), 9679); gtk_entry_set_width_chars (GTK_ENTRY (entry405), 8); vseparator402 = gtk_vseparator_new (); gtk_widget_show (vseparator402); gtk_table_attach (GTK_TABLE (table401), vseparator402, 4, 5, 0, 5, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); vseparator401 = gtk_vseparator_new (); gtk_widget_show (vseparator401); gtk_table_attach (GTK_TABLE (table401), vseparator401, 2, 3, 0, 5, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); label400 = gtk_label_new ("Motorttest:"); gtk_widget_show (label400); gtk_frame_set_label_widget (GTK_FRAME (frame400), label400); gtk_label_set_use_markup (GTK_LABEL (label400), TRUE); gtk_misc_set_padding (GTK_MISC (label400), 5, 0); frame200 = gtk_frame_new (NULL); gtk_widget_show (frame200); gtk_table_attach (GTK_TABLE (table1), frame200, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame200), GTK_SHADOW_IN); table201 = gtk_table_new (5, 5, FALSE); gtk_widget_show (table201); gtk_container_add (GTK_CONTAINER (frame200), table201); gtk_container_set_border_width (GTK_CONTAINER (table201), 5); gtk_table_set_row_spacings (GTK_TABLE (table201), 2); gtk_table_set_col_spacings (GTK_TABLE (table201), 2); button202 = gtk_button_new_with_mnemonic ("WRITE"); gtk_widget_show (button202); gtk_table_attach (GTK_TABLE (table201), button202, 0, 1, 3, 4, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (button202), 5); GTK_WIDGET_SET_FLAGS (button202, GTK_CAN_DEFAULT); button204 = gtk_button_new_with_mnemonic ("CLEAR"); gtk_widget_show (button204); gtk_table_attach (GTK_TABLE (table201), button204, 1, 2, 3, 4, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (button204), 5); button203 = gtk_button_new_with_mnemonic ("VERIFY"); gtk_widget_show (button203); gtk_table_attach (GTK_TABLE (table201), button203, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (button203), 5); button201 = gtk_button_new_with_mnemonic ("READ"); gtk_widget_show (button201); gtk_table_attach (GTK_TABLE (table201), button201, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (button201), 5); GTK_WIDGET_SET_FLAGS (button201, GTK_CAN_DEFAULT); label201 = gtk_label_new ("FLASH:"); gtk_widget_show (label201); gtk_table_attach (GTK_TABLE (table201), label201, 0, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); filechooserbutton201 = gtk_file_chooser_button_new ("Select A File", GTK_FILE_CHOOSER_ACTION_OPEN); gtk_widget_show (filechooserbutton201); gtk_table_attach (GTK_TABLE (table201), filechooserbutton201, 0, 2, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 5, 0); g_object_set (filechooserbutton201, "width-chars", 15, NULL); label202 = gtk_label_new ("EEPROM:"); gtk_widget_show (label202); gtk_table_attach (GTK_TABLE (table201), label202, 3, 5, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); filechooserbutton202 = gtk_file_chooser_button_new ("Select A File", GTK_FILE_CHOOSER_ACTION_OPEN); gtk_widget_show (filechooserbutton202); gtk_table_attach (GTK_TABLE (table201), filechooserbutton202, 3, 5, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 5, 0); g_object_set (filechooserbutton202, "width-chars", 16, NULL); button207 = gtk_button_new_with_mnemonic ("VERIFY"); gtk_widget_show (button207); gtk_table_attach (GTK_TABLE (table201), button207, 4, 5, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (button207), 5); button208 = gtk_button_new_with_mnemonic ("CLEAR"); gtk_widget_show (button208); gtk_table_attach (GTK_TABLE (table201), button208, 4, 5, 3, 4, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (button208), 5); button205 = gtk_button_new_with_mnemonic ("READ"); gtk_widget_show (button205); gtk_table_attach (GTK_TABLE (table201), button205, 3, 4, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (button205), 5); GTK_WIDGET_SET_FLAGS (button205, GTK_CAN_DEFAULT); button206 = gtk_button_new_with_mnemonic ("WRITE"); gtk_widget_show (button206); gtk_table_attach (GTK_TABLE (table201), button206, 3, 4, 3, 4, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (button206), 5); GTK_WIDGET_SET_FLAGS (button206, GTK_CAN_DEFAULT); vseparator201 = gtk_vseparator_new (); gtk_widget_show (vseparator201); gtk_table_attach (GTK_TABLE (table201), vseparator201, 2, 3, 0, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 5, 0); progressbar201 = gtk_progress_bar_new (); gtk_widget_show (progressbar201); gtk_table_attach (GTK_TABLE (table201), progressbar201, 0, 5, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar201), "0%"); label200 = gtk_label_new ("Bootloader:"); gtk_widget_show (label200); gtk_frame_set_label_widget (GTK_FRAME (frame200), label200); gtk_label_set_use_markup (GTK_LABEL (label200), TRUE); gtk_misc_set_padding (GTK_MISC (label200), 5, 0); frame300 = gtk_frame_new (NULL); gtk_widget_show (frame300); gtk_table_attach (GTK_TABLE (table1), frame300, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame300), GTK_SHADOW_IN); table301 = gtk_table_new (7, 5, FALSE); gtk_widget_show (table301); gtk_container_add (GTK_CONTAINER (frame300), table301); gtk_container_set_border_width (GTK_CONTAINER (table301), 5); gtk_table_set_row_spacings (GTK_TABLE (table301), 2); gtk_table_set_col_spacings (GTK_TABLE (table301), 2); label301 = gtk_label_new ("SPINUP Ticks:"); gtk_widget_show (label301); gtk_table_attach (GTK_TABLE (table301), label301, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label301), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label301), 5, 0); label302 = gtk_label_new ("SPINUP Tick:"); gtk_widget_show (label302); gtk_table_attach (GTK_TABLE (table301), label302, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label302), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label302), 5, 0); label303 = gtk_label_new ("SPINUP Step:"); gtk_widget_show (label303); gtk_table_attach (GTK_TABLE (table301), label303, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label303), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label303), 5, 0); label304 = gtk_label_new ("SPINUP Wait:"); gtk_widget_show (label304); gtk_table_attach (GTK_TABLE (table301), label304, 0, 1, 3, 4, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label304), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label304), 5, 0); label305 = gtk_label_new ("SPINUP PWM:"); gtk_widget_show (label305); gtk_table_attach (GTK_TABLE (table301), label305, 0, 1, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label305), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label305), 5, 0); label306 = gtk_label_new ("min. PWM:"); gtk_widget_show (label306); gtk_table_attach (GTK_TABLE (table301), label306, 3, 4, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label306), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label306), 5, 0); label307 = gtk_label_new ("max. PWM:"); gtk_widget_show (label307); gtk_table_attach (GTK_TABLE (table301), label307, 3, 4, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label307), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label307), 5, 0); label308 = gtk_label_new ("Current Limit:"); gtk_widget_show (label308); gtk_table_attach (GTK_TABLE (table301), label308, 3, 4, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label308), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label308), 5, 0); label309 = gtk_label_new ("Current max.:"); gtk_widget_show (label309); gtk_table_attach (GTK_TABLE (table301), label309, 3, 4, 3, 4, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label309), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label309), 5, 0); label310 = gtk_label_new ("Voltage min.:"); gtk_widget_show (label310); gtk_table_attach (GTK_TABLE (table301), label310, 3, 4, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label310), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label310), 5, 0); hseparator301 = gtk_hseparator_new (); gtk_widget_show (hseparator301); gtk_table_attach (GTK_TABLE (table301), hseparator301, 0, 5, 5, 6, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); spinbutton302_adj = gtk_adjustment_new (0, 0, 63, 1, 10, 10); spinbutton302 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton302_adj), 1, 0); gtk_widget_show (spinbutton302); gtk_table_attach (GTK_TABLE (table301), spinbutton302, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); spinbutton307_adj = gtk_adjustment_new (0, 0, 255, 1, 10, 10); spinbutton307 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton307_adj), 1, 0); gtk_widget_show (spinbutton307); gtk_table_attach (GTK_TABLE (table301), spinbutton307, 4, 5, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); spinbutton303_adj = gtk_adjustment_new (0, 0, 255, 1, 10, 10); spinbutton303 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton303_adj), 1, 0); gtk_widget_show (spinbutton303); gtk_table_attach (GTK_TABLE (table301), spinbutton303, 1, 2, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); spinbutton308_adj = gtk_adjustment_new (0, 0, 1023, 1, 10, 10); spinbutton308 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton308_adj), 1, 0); gtk_widget_show (spinbutton308); gtk_table_attach (GTK_TABLE (table301), spinbutton308, 4, 5, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); spinbutton304_adj = gtk_adjustment_new (0, 0, 255, 1, 10, 10); spinbutton304 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton304_adj), 1, 0); gtk_widget_show (spinbutton304); gtk_table_attach (GTK_TABLE (table301), spinbutton304, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); spinbutton309_adj = gtk_adjustment_new (0, 0, 1023, 1, 10, 10); spinbutton309 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton309_adj), 1, 0); gtk_widget_show (spinbutton309); gtk_table_attach (GTK_TABLE (table301), spinbutton309, 4, 5, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); spinbutton305_adj = gtk_adjustment_new (0, 0, 255, 1, 10, 10); spinbutton305 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton305_adj), 1, 0); gtk_widget_show (spinbutton305); gtk_table_attach (GTK_TABLE (table301), spinbutton305, 1, 2, 4, 5, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); spinbutton310_adj = gtk_adjustment_new (0, 0, 1023, 1, 10, 10); spinbutton310 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton310_adj), 1, 0); gtk_widget_show (spinbutton310); gtk_table_attach (GTK_TABLE (table301), spinbutton310, 4, 5, 4, 5, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); hbuttonbox301 = gtk_hbutton_box_new (); gtk_widget_show (hbuttonbox301); gtk_table_attach (GTK_TABLE (table301), hbuttonbox301, 0, 5, 6, 7, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 5); gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox301), GTK_BUTTONBOX_SPREAD); button301 = gtk_button_new_with_mnemonic ("Revert to Defaults"); gtk_widget_show (button301); gtk_container_add (GTK_CONTAINER (hbuttonbox301), button301); GTK_WIDGET_SET_FLAGS (button301, GTK_CAN_DEFAULT); button302 = gtk_button_new_with_mnemonic ("Save to EEPROM"); gtk_widget_show (button302); gtk_container_add (GTK_CONTAINER (hbuttonbox301), button302); GTK_WIDGET_SET_FLAGS (button302, GTK_CAN_DEFAULT); spinbutton301_adj = gtk_adjustment_new (0, 0, 65535, 1, 10, 10); spinbutton301 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton301_adj), 1, 0); gtk_widget_show (spinbutton301); gtk_table_attach (GTK_TABLE (table301), spinbutton301, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); spinbutton306_adj = gtk_adjustment_new (0, 0, 255, 1, 10, 10); spinbutton306 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton306_adj), 1, 0); gtk_widget_show (spinbutton306); gtk_table_attach (GTK_TABLE (table301), spinbutton306, 4, 5, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); vseparator301 = gtk_vseparator_new (); gtk_widget_show (vseparator301); gtk_table_attach (GTK_TABLE (table301), vseparator301, 2, 3, 0, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 5, 0); label300 = gtk_label_new ("Parameters:"); gtk_widget_show (label300); gtk_frame_set_label_widget (GTK_FRAME (frame300), label300); gtk_label_set_use_markup (GTK_LABEL (label300), TRUE); gtk_misc_set_padding (GTK_MISC (label300), 5, 0); frame100 = gtk_frame_new (NULL); gtk_widget_show (frame100); gtk_table_attach (GTK_TABLE (table1), frame100, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame100), GTK_SHADOW_IN); table101 = gtk_table_new (6, 2, FALSE); gtk_widget_show (table101); gtk_container_add (GTK_CONTAINER (frame100), table101); gtk_container_set_border_width (GTK_CONTAINER (table101), 5); gtk_table_set_row_spacings (GTK_TABLE (table101), 2); gtk_table_set_col_spacings (GTK_TABLE (table101), 2); label101 = gtk_label_new ("I2C Interface:"); gtk_widget_show (label101); gtk_table_attach (GTK_TABLE (table101), label101, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label101), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label101), 5, 0); combobox101 = gtk_combo_box_new_text (); gtk_widget_show (combobox101); gtk_table_attach (GTK_TABLE (table101), combobox101, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); label102 = gtk_label_new ("I2C Address:"); gtk_widget_show (label102); gtk_table_attach (GTK_TABLE (table101), label102, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label102), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label102), 5, 0); spinbutton101_adj = gtk_adjustment_new (33, 1, 127, 1, 10, 10); spinbutton101 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton101_adj), 1, 0); gtk_widget_show (spinbutton101); gtk_table_attach (GTK_TABLE (table101), spinbutton101, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); scrolledwindow101 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow101); gtk_table_attach (GTK_TABLE (table101), scrolledwindow101, 0, 2, 5, 6, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow101), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow101), GTK_SHADOW_IN); textview101 = gtk_text_view_new (); gtk_widget_show (textview101); gtk_container_add (GTK_CONTAINER (scrolledwindow101), textview101); gtk_text_view_set_editable (GTK_TEXT_VIEW (textview101), FALSE); gtk_text_view_set_accepts_tab (GTK_TEXT_VIEW (textview101), FALSE); gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (textview101), FALSE); hbuttonbox101 = gtk_hbutton_box_new (); gtk_widget_show (hbuttonbox101); gtk_table_attach (GTK_TABLE (table101), hbuttonbox101, 0, 2, 3, 4, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox101), GTK_BUTTONBOX_SPREAD); button101 = gtk_button_new_with_mnemonic ("Connect"); gtk_widget_show (button101); gtk_container_add (GTK_CONTAINER (hbuttonbox101), button101); button102 = gtk_button_new_with_mnemonic ("Bootloader"); gtk_widget_show (button102); gtk_container_add (GTK_CONTAINER (hbuttonbox101), button102); button103 = gtk_button_new_with_mnemonic ("Application"); gtk_widget_show (button103); gtk_container_add (GTK_CONTAINER (hbuttonbox101), button103); hseparator101 = gtk_hseparator_new (); gtk_widget_show (hseparator101); gtk_table_attach (GTK_TABLE (table101), hseparator101, 0, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 5); hseparator102 = gtk_hseparator_new (); gtk_widget_show (hseparator102); gtk_table_attach (GTK_TABLE (table101), hseparator102, 0, 2, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 5); label100 = gtk_label_new ("Connection:"); gtk_widget_show (label100); gtk_frame_set_label_widget (GTK_FRAME (frame100), label100); gtk_label_set_use_markup (GTK_LABEL (label100), TRUE); gtk_misc_set_padding (GTK_MISC (label100), 5, 0); g_signal_connect ((gpointer) window, "destroy", G_CALLBACK (gtk_main_quit), NULL); g_signal_connect ((gpointer) window, "delete_event", G_CALLBACK (gtk_main_quit), NULL); g_signal_connect ((gpointer) togglebutton401, "toggled", G_CALLBACK (on_togglebutton401_toggled), NULL); g_signal_connect ((gpointer) button202, "clicked", G_CALLBACK (on_button202_clicked), NULL); g_signal_connect ((gpointer) button204, "clicked", G_CALLBACK (on_button204_clicked), NULL); g_signal_connect ((gpointer) button203, "clicked", G_CALLBACK (on_button203_clicked), NULL); g_signal_connect ((gpointer) button201, "clicked", G_CALLBACK (on_button201_clicked), NULL); g_signal_connect ((gpointer) button207, "clicked", G_CALLBACK (on_button207_clicked), NULL); g_signal_connect ((gpointer) button208, "clicked", G_CALLBACK (on_button208_clicked), NULL); g_signal_connect ((gpointer) button205, "clicked", G_CALLBACK (on_button205_clicked), NULL); g_signal_connect ((gpointer) button206, "clicked", G_CALLBACK (on_button206_clicked), NULL); g_signal_connect ((gpointer) spinbutton302, "value_changed", G_CALLBACK (on_parameter_value_changed), NULL); g_signal_connect ((gpointer) spinbutton307, "value_changed", G_CALLBACK (on_parameter_value_changed), NULL); g_signal_connect ((gpointer) spinbutton303, "value_changed", G_CALLBACK (on_parameter_value_changed), NULL); g_signal_connect ((gpointer) spinbutton308, "value_changed", G_CALLBACK (on_parameter_value_changed), NULL); g_signal_connect ((gpointer) spinbutton304, "value_changed", G_CALLBACK (on_parameter_value_changed), NULL); g_signal_connect ((gpointer) spinbutton309, "value_changed", G_CALLBACK (on_parameter_value_changed), NULL); g_signal_connect ((gpointer) spinbutton305, "value_changed", G_CALLBACK (on_parameter_value_changed), NULL); g_signal_connect ((gpointer) spinbutton310, "value_changed", G_CALLBACK (on_parameter_value_changed), NULL); g_signal_connect ((gpointer) button301, "clicked", G_CALLBACK (on_button301_clicked), NULL); g_signal_connect ((gpointer) button302, "clicked", G_CALLBACK (on_button302_clicked), NULL); g_signal_connect ((gpointer) spinbutton301, "value_changed", G_CALLBACK (on_parameter_value_changed), NULL); g_signal_connect ((gpointer) spinbutton306, "value_changed", G_CALLBACK (on_parameter_value_changed), NULL); g_signal_connect ((gpointer) spinbutton101, "value_changed", G_CALLBACK (on_spinbutton101_value_changed), NULL); g_signal_connect ((gpointer) button101, "clicked", G_CALLBACK (on_button101_clicked), NULL); g_signal_connect ((gpointer) button102, "clicked", G_CALLBACK (on_button102_clicked), NULL); g_signal_connect ((gpointer) button103, "clicked", G_CALLBACK (on_button103_clicked), NULL); return window; }