📄 callbacks.c
字号:
/* * Copyright (C) 2000-2004 Damien Douxchamps <ddouxchamps@users.sf.net> * * 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; either version 2 of the License, or * (at your option) any later version. * * 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 "coriander.h"#define EEPROM_CNFG 0xF00U#define TEST_CNFG 0xF04U#define CCR_BASE 0xFFFFF0F00000ULLgbooleanon_main_window_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data){ gtk_exit(0); return FALSE;}voidon_file_activate (GtkMenuItem *menuitem, gpointer user_data){ // function intentionnaly left almost blank: intermediate menu}voidon_exit_activate (GtkMenuItem *menuitem, gpointer user_data){ gtk_exit(0);}voidon_about_activate (GtkMenuItem *menuitem, gpointer user_data){ about_window = create_about_window (); gtk_signal_connect(GTK_OBJECT(about_window), "realize", GTK_SIGNAL_FUNC(window_set_icon), about_window); gtk_widget_show (about_window);}voidon_fps_activate (GtkMenuItem *menuitem, gpointer user_data){ int state; IsoFlowCheck(&state); if(dc1394_set_video_framerate(camera->camera_info.handle, camera->camera_info.id, (int)user_data)!=DC1394_SUCCESS) MainError("Could not set framerate"); else camera->misc_info.framerate=(int)user_data; IsoFlowResume(&state);}voidon_power_on_clicked (GtkButton *button, gpointer user_data){ if(dc1394_camera_on(camera->camera_info.handle, camera->camera_info.id)!=DC1394_SUCCESS) MainError("Could not set camera 'on'");}voidon_power_off_clicked (GtkButton *button, gpointer user_data){ if(dc1394_camera_off(camera->camera_info.handle, camera->camera_info.id)!=DC1394_SUCCESS) MainError("Could not set camera 'off'");}voidon_power_reset_clicked (GtkButton *button, gpointer user_data){ if (dc1394_init_camera(camera->camera_info.handle, camera->camera_info.id)!=DC1394_SUCCESS) MainError("Could not initilize camera");}voidon_trigger_polarity_toggled (GtkToggleButton *togglebutton, gpointer user_data){ if (dc1394_set_trigger_polarity(camera->camera_info.handle, camera->camera_info.id,togglebutton->active)!=DC1394_SUCCESS) MainError("Cannot set trigger polarity"); else camera->feature_set.feature[FEATURE_TRIGGER-FEATURE_MIN].trigger_polarity=(int)togglebutton->active;}voidon_trigger_mode_activate (GtkMenuItem *menuitem, gpointer user_data){ if (dc1394_set_trigger_mode(camera->camera_info.handle, camera->camera_info.id, (int)user_data)!=DC1394_SUCCESS) MainError("Could not set trigger mode"); else camera->feature_set.feature[FEATURE_TRIGGER-FEATURE_MIN].trigger_mode=(int)user_data; UpdateTriggerFrame();}voidon_trigger_external_toggled (GtkToggleButton *togglebutton, gpointer user_data){ if (dc1394_feature_on_off(camera->camera_info.handle, camera->camera_info.id, FEATURE_TRIGGER, togglebutton->active)!=DC1394_SUCCESS) MainError("Could not set external trigger source"); else camera->feature_set.feature[FEATURE_TRIGGER-FEATURE_MIN].is_on=togglebutton->active; UpdateTriggerFrame();}voidon_memory_channel_activate (GtkMenuItem *menuitem, gpointer user_data){ camera->misc_info.save_channel=(int)user_data; // user data is an int. camera->misc_info.load_channel=(int)user_data; // user data is an int. UpdateMemoryFrame();}voidon_load_mem_clicked (GtkButton *button, gpointer user_data){ if (dc1394_memory_load(camera->camera_info.handle, camera->camera_info.id, camera->misc_info.load_channel)!=DC1394_SUCCESS) MainError("Cannot load memory channel"); UpdateAllWindows();}voidon_save_mem_clicked (GtkButton *button, gpointer user_data){ unsigned long int timeout_bin=0; unsigned long int step; dc1394bool_t value=TRUE; step=(unsigned long int)(1000000.0/preferences.auto_update_frequency); if (dc1394_set_memory_save_ch(camera->camera_info.handle, camera->camera_info.id, camera->misc_info.save_channel)!=DC1394_SUCCESS) MainError("Could not set memory save channel"); else { if (dc1394_memory_save(camera->camera_info.handle, camera->camera_info.id)!=DC1394_SUCCESS) MainError("Could not save setup to memory channel"); else { while ((value==DC1394_TRUE) &&(timeout_bin<(unsigned long int)(preferences.op_timeout*1000000.0)) ) { usleep(step); if (dc1394_is_memory_save_in_operation(camera->camera_info.handle, camera->camera_info.id, &value)!=DC1394_SUCCESS) MainError("Could not query if memory save is in operation"); timeout_bin+=step; } if (timeout_bin>=(unsigned long int)(preferences.op_timeout*1000000.0)) MainStatus("Save operation function timed-out!"); } }}voidon_iso_start_clicked (GtkButton *button, gpointer user_data){ dc1394bool_t status; if (dc1394_start_iso_transmission(camera->camera_info.handle, camera->camera_info.id)!=DC1394_SUCCESS) MainError("Could not start ISO transmission"); else { usleep(DELAY); if (dc1394_get_iso_status(camera->camera_info.handle, camera->camera_info.id, &status)!=DC1394_SUCCESS) MainError("Could get ISO status"); else { if (status==DC1394_FALSE) { MainError("ISO transmission refuses to start"); } camera->misc_info.is_iso_on=status; UpdateIsoFrame(); } } UpdateTransferStatusFrame();}voidon_iso_stop_clicked (GtkButton *button, gpointer user_data){ dc1394bool_t status; if (dc1394_stop_iso_transmission(camera->camera_info.handle, camera->camera_info.id)!=DC1394_SUCCESS) MainError("Could not stop ISO transmission"); else { usleep(DELAY); if (dc1394_get_iso_status(camera->camera_info.handle, camera->camera_info.id, &status)!=DC1394_SUCCESS) MainError("Could get ISO status"); else { if (status==DC1394_TRUE) { MainError("ISO transmission refuses to stop"); } camera->misc_info.is_iso_on=status; UpdateIsoFrame(); } } UpdateTransferStatusFrame();}voidon_iso_restart_clicked (GtkButton *button, gpointer user_data){ on_iso_stop_clicked(GTK_BUTTON(lookup_widget(main_window,"iso_stop")),NULL); on_iso_start_clicked(GTK_BUTTON(lookup_widget(main_window,"iso_start")),NULL); UpdateTransferStatusFrame();}voidon_camera_select_activate (GtkMenuItem *menuitem, gpointer user_data){ camera_t* camera_ptr; // close current display (we don't want display to be used by 2 threads at the same time 'cause SDL forbids it) DisplayStopThread(camera); camera_ptr=(camera_t*)user_data; // set current camera pointers: SetCurrentCamera(camera_ptr->camera_info.euid_64);#ifdef HAVE_SDLLIB watchthread_info.draw=0; watchthread_info.mouse_down=0; watchthread_info.crop=0;#endif if (camera->want_to_display>0) DisplayStartThread(camera); //fprintf(stderr,"camera: %s\n",camera->prefs.name); // redraw all: BuildAllWindows(); UpdateAllWindows();}voidon_format7_packet_size_changed (GtkAdjustment *adj, gpointer user_data){ int bpp; int state; int value; value=(int)adj->value; value=NearestValue(value,camera->format7_info.mode[camera->format7_info.edit_mode-MODE_FORMAT7_MIN].min_bpp, camera->format7_info.mode[camera->format7_info.edit_mode-MODE_FORMAT7_MIN].min_bpp, camera->format7_info.mode[camera->format7_info.edit_mode-MODE_FORMAT7_MIN].max_bpp); // do something if we were called by a first generation signal: if (gtk_signal_n_emissions_by_name(GTK_OBJECT (adj), "changed")==0) { IsoFlowCheck(&state); if (dc1394_set_format7_byte_per_packet(camera->camera_info.handle, camera->camera_info.id, camera->format7_info.edit_mode, value)!=DC1394_SUCCESS) MainError("Could not change Format7 bytes per packet"); if (dc1394_query_format7_byte_per_packet(camera->camera_info.handle, camera->camera_info.id, camera->format7_info.edit_mode,&bpp)!=DC1394_SUCCESS) MainError("Could not query Format7 bytes per packet"); else { camera->format7_info.mode[camera->format7_info.edit_mode-MODE_FORMAT7_MIN].bpp=bpp; if (bpp==0) fprintf(stderr,"BPP is zero in %s at line %d\n",__FUNCTION__,__LINE__); // tell the range to change its setting adj->value=bpp; gtk_signal_emit_by_name(GTK_OBJECT (adj), "changed"); usleep(DELAY); } GetFormat7ModeInfo(camera, camera->format7_info.edit_mode); UpdateFormat7InfoFrame(); IsoFlowResume(&state); }} voidon_edit_format7_mode_activate (GtkMenuItem *menuitem, gpointer user_data){ camera->format7_info.edit_mode=(int)user_data; GetFormat7ModeInfo(camera, camera->format7_info.edit_mode); UpdateFormat7Window();}voidon_edit_format7_color_activate (GtkMenuItem *menuitem, gpointer user_data){ int state; // if the mode is the 'live' mode: if (camera->format7_info.edit_mode==camera->misc_info.mode) IsoFlowCheck(&state); if (dc1394_set_format7_color_coding_id(camera->camera_info.handle, camera->camera_info.id, camera->format7_info.edit_mode, (int)user_data)!=DC1394_SUCCESS) MainError("Could not change Format7 color coding"); else camera->format7_info.mode[camera->format7_info.edit_mode-MODE_FORMAT7_MIN].color_coding_id=(int)user_data; GetFormat7ModeInfo(camera, camera->format7_info.edit_mode); UpdateOptionFrame(); UpdateFormat7Window(); /*UpdateFormat7BppRange(); UpdateFormat7Ranges(); UpdateFormat7InfoFrame();*/ // if the mode is the 'live' mode: if (camera->format7_info.edit_mode==camera->misc_info.mode) { IsoFlowResume(&state); }}voidon_scale_value_changed ( GtkAdjustment *adj, gpointer user_data){ switch((int)user_data) { case FEATURE_TEMPERATURE: if (dc1394_set_temperature(camera->camera_info.handle, camera->camera_info.id,adj->value)!=DC1394_SUCCESS) MainError("Could not set temperature"); else camera->feature_set.feature[FEATURE_TEMPERATURE-FEATURE_MIN].target_value=adj->value; break; case FEATURE_WHITE_BALANCE+BU*4: // why oh why is there a *4? if (dc1394_set_white_balance(camera->camera_info.handle, camera->camera_info.id,adj->value, camera->feature_set.feature[FEATURE_WHITE_BALANCE-FEATURE_MIN].RV_value)!=DC1394_SUCCESS) MainError("Could not set B/U white balance"); else { camera->feature_set.feature[FEATURE_WHITE_BALANCE-FEATURE_MIN].BU_value=adj->value; if (camera->feature_set.feature[FEATURE_WHITE_BALANCE-FEATURE_MIN].absolute_capable!=0) { GetAbsValue(FEATURE_WHITE_BALANCE); } } break; case FEATURE_WHITE_BALANCE+RV*4: // why oh why is there a *4?
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -