/*! \brief open_debug() opens the file for the debugging information log. The path defaults to the current working directory. */ G_MODULE_EXPORT void open_debug(void) { extern gconstpointer *global_data; CmdLineArgs * args = NULL; gchar * filename = NULL; gchar * tmpbuf = NULL; struct tm *tm = NULL; time_t *t = NULL; gsize count = 0; GError *error = NULL; const gchar *project = NULL; g_mutex_lock(&dbg_mutex); args = (CmdLineArgs *)DATA_GET(global_data,"args"); project = (const gchar *)DATA_GET(global_data,"project_name"); if (!project) project = DEFAULT_PROJECT; if(!dbg_file) { if (!args->dbglog) filename = g_build_filename(HOME(), "mtx",project,"debug.log",NULL); else filename = g_build_filename(HOME(),"mts",args->dbglog,NULL); dbg_file = fopen(filename,"w"); if (dbg_file) { t = (time_t *)g_malloc(sizeof(time_t)); time(t); tm = localtime(t); g_free(t); fprintf(dbg_file,_("Logfile opened for appending on %i-%.2i-%i at %.2i:%.2i \n"),1+(tm->tm_mon),tm->tm_mday,1900+(tm->tm_year),tm->tm_hour,tm->tm_min); } g_free(filename); } g_mutex_unlock(&dbg_mutex); }
static bool nearHomePosition(GHOST_TEventNDOFMotionData *ndof, float threshold) { if (threshold == 0.0f) { return atHomePosition(ndof); } else { #define HOME(foo) (fabsf(ndof->foo) < threshold) return HOME(tx) && HOME(ty) && HOME(tz) && HOME(rx) && HOME(ry) && HOME(rz); #undef HOME } }
void save_defaults() { ConfigFile *cfgfile; gchar * filename = NULL; gchar * tmpbuf = NULL; filename = g_build_filename(HOME(),"mtx","default","config", NULL); cfgfile = cfg_open_file(filename); if (cfgfile) { tmpbuf = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(gtk_builder_get_object ((GtkBuilder *)DATA_GET(global_data,"builder"), "filechooser_button"))); if (tmpbuf) cfg_write_string(cfgfile, (gchar *)"MTXLoader", (gchar *)"last_file", tmpbuf); g_free(tmpbuf); cfg_write_file(cfgfile,filename); cfg_free(cfgfile); g_free(filename); } }
void load_defaults() { GtkBuilder *builder = NULL; ConfigFile *cfgfile; gchar * filename = NULL; gchar * tmpbuf = NULL; GtkFileFilter *filter = NULL; GObject *object = NULL; builder = (GtkBuilder *)DATA_GET(global_data,"builder"); g_return_if_fail(builder); filename = g_build_filename(HOME(),"mtx","default","config", NULL); cfgfile = cfg_open_file(filename); if (cfgfile) { if(cfg_read_string(cfgfile, (gchar *)"Serial", (gchar *)"override_port", &tmpbuf)) { gtk_entry_set_text(GTK_ENTRY(gtk_builder_get_object (builder, "port_entry")),tmpbuf); g_free(tmpbuf); } if(cfg_read_string(cfgfile, (gchar *)"MTXLoader", (gchar *)"last_file", &tmpbuf)) { gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(gtk_builder_get_object (builder, "filechooser_button")),tmpbuf); filter = gtk_file_filter_new(); gtk_file_filter_add_pattern(filter,"*.s19"); gtk_file_filter_add_pattern(filter,"*.S19"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(gtk_builder_get_object (builder, "filechooser_button")),filter); g_free(tmpbuf); } object = gtk_builder_get_object(builder,"ms1_rbutton"); if (G_IS_OBJECT(object)) OBJ_SET(object,"persona",GINT_TO_POINTER(MS1)); object = gtk_builder_get_object(builder,"ms2_rbutton"); if (G_IS_OBJECT(object)) OBJ_SET(object,"persona",GINT_TO_POINTER(MS2)); object = gtk_builder_get_object(builder,"freeems_rbutton"); if (G_IS_OBJECT(object)) OBJ_SET(object,"persona",GINT_TO_POINTER(FREEEMS)); cfg_free(cfgfile); g_free(filename); } }
/*! \brief get_file() gets a single file defnied by pathstub, first searching in ~/mtx/<PROJECT>+pathstub, and then in $PREFIX/share/MegaTunix/+pathstub, \param pathstub is the partial path to filename \param extension is the extension wanted.. \returns filename if found or NULL if not found */ gchar * get_file(const gchar *prj, const gchar *pathstub, const gchar *extension) { gchar *filename = NULL; gchar *file = NULL; const gchar *project = NULL; ENTER(); if (extension) file = g_strconcat(pathstub,".",extension,NULL); else file = g_strdup(pathstub); if (prj) project = prj; else project = DEFAULT_PROJECT; filename = g_build_filename(HOME(),"mtx",project,file,NULL); /*printf("get_file, personal filename is %s\n",filename);*/ if (g_file_test(filename,(GFileTest)(G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR))) { g_free(file); EXIT(); return filename; } else { g_free(filename); filename = g_build_filename(MTXSYSDATA,file,NULL); /*printf("get_file, system filename is %s\n",filename);*/ g_free(file); if (g_file_test(filename,(GFileTest)(G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR))) { EXIT(); return filename; } else g_free(filename); } EXIT(); return NULL; }
void draw_board() { int i; HOME(); for (i=0;i<BOARD_WIDTH+1;i++) { printf("X"); } GOTO(0, BOARD_HEIGHT+1); for (i=0;i<BOARD_WIDTH+1;i++) { printf("X"); } for (i=1;i<BOARD_HEIGHT+1;i++) { GOTO(0, i); printf("X"); GOTO(BOARD_WIDTH+1, i); printf("X"); } }
/*! \brief pops up a Filechooser dialog to select a file \param data is a pointer to a MtxFileIO structure which contains important bits like the path to start, the filter, default filename and so on \see MtxFileIO \returns the path to the file or NULL if cancelled */ gchar * choose_file(MtxFileIO *data) { GtkWidget *dialog = NULL; GtkFileFilter *filter = NULL; gchar * path = NULL; gchar * defdir = NULL; gchar *filename = NULL; gchar *tmpbuf = NULL; gchar **vector = NULL; gint response = 0; gboolean res = FALSE; guint i = 0; if (!GTK_IS_WINDOW(data->parent)) data->parent = NULL; /* printf("choose_file\n"); printf("filter %s\n",data->filter); printf("filename %s\n",data->filename); printf("default_path %s\n",data->default_path); printf("title %s\n",data->title); */ if (!data->project) data->project = DEFAULT_PROJECT; if (!data->title) data->title = g_strdup("Open File"); if ((data->action == GTK_FILE_CHOOSER_ACTION_OPEN) || (data->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)) { dialog = gtk_file_chooser_dialog_new(data->title, GTK_WINDOW(data->parent), data->action, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); if ((data->on_top) && (GTK_IS_WIDGET(data->parent))) gtk_window_set_transient_for(GTK_WINDOW(gtk_widget_get_toplevel(dialog)),GTK_WINDOW(data->parent)); if ((data->absolute_path) && (!data->default_path)) gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(dialog),data->absolute_path); else if (data->default_path) { path = g_build_filename(MTXSYSDATA,data->default_path,NULL); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(dialog),path); g_free(path); } } else if (data->action == GTK_FILE_CHOOSER_ACTION_SAVE) { dialog = gtk_file_chooser_dialog_new(data->title, GTK_WINDOW(data->parent), data->action, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); if ((data->on_top) && (GTK_IS_WIDGET(data->parent))) gtk_window_set_transient_for(GTK_WINDOW(gtk_widget_get_toplevel(dialog)),GTK_WINDOW(data->parent)); defdir = g_build_filename(HOME(),"mtx",data->project,data->default_path, NULL); if (!g_file_test(defdir,G_FILE_TEST_IS_DIR)) g_mkdir(defdir,0755); /* If filename passed check/adj path */ if (data->filename) { #ifdef __WIN32__ /* Disallows modifying distributed files */ if (g_strrstr(data->filename,"dist") != NULL) #else if (g_strrstr(data->filename,DATA_DIR) != NULL) #endif { vector = g_strsplit(data->filename,PSEP,-1); tmpbuf = g_strconcat(defdir,PSEP,vector[g_strv_length(vector)-1],NULL); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),defdir); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog),vector[g_strv_length(vector)-1]); g_strfreev(vector); g_free(tmpbuf); } else gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),data->filename); } else { gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),defdir); gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), data->default_filename ); } g_free(defdir); } else return NULL; /* Add shortcut folders... */ if (data->shortcut_folders) { vector = g_strsplit(data->shortcut_folders,",",-1); for (i=0;i<g_strv_length(vector);i++) { path = g_build_filename(MTXSYSDATA,vector[i],NULL); gtk_file_chooser_add_shortcut_folder(GTK_FILE_CHOOSER(dialog),path,NULL); g_free(path); path = g_build_filename(HOME(),"mtx",data->project,vector[i],NULL); gtk_file_chooser_add_shortcut_folder(GTK_FILE_CHOOSER(dialog),path,NULL); g_free(path); } g_strfreev(vector); } /* If default path switch to that place */ if ((data->external_path) && (!(data->default_path))) { path = g_build_filename(HOME(),"mtx",data->project,data->external_path,NULL); if (!g_file_test(path,G_FILE_TEST_IS_DIR)) g_mkdir(path,0755); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(dialog),path); g_free(path); } /* If filters, assign them */ if (data->filter) { vector = g_strsplit(data->filter,",",-1); if (g_strv_length(vector)%2 > 0) goto afterfilter; for (i=0;i<g_strv_length(vector);i+=2) { filter = gtk_file_filter_new(); gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter),vector[i]); gtk_file_filter_set_name(GTK_FILE_FILTER(filter),vector[i+1]); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter); } gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog),filter); g_strfreev(vector); } afterfilter: /* Turn on overwriteconfirmation */ gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); g_signal_connect(G_OBJECT(dialog),"confirm-overwrite", G_CALLBACK (confirm_overwrite_callback), NULL); if (data->action == GTK_FILE_CHOOSER_ACTION_OPEN) if (data->default_filename) gtk_file_chooser_select_filename(GTK_FILE_CHOOSER(dialog),data->default_filename); response = gtk_dialog_run (GTK_DIALOG (dialog)); if (response == GTK_RESPONSE_ACCEPT) { tmpbuf = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); if ((data->action == GTK_FILE_CHOOSER_ACTION_SAVE) && (data->default_extension)) { if(!g_str_has_suffix (tmpbuf,data->default_extension)) filename = g_strjoin(".",tmpbuf,data->default_extension,NULL); else filename = g_strdup(tmpbuf); } else filename = g_strdup(tmpbuf); g_free(tmpbuf); } gtk_widget_destroy (dialog); return (filename); }
gboolean lookuptable_change(GtkCellRenderer *renderer, gchar *path, gchar * new_text, gpointer data) { GtkListStore *store = NULL; GtkTreeIter iter; GtkTreeModel *model = data; ConfigFile *cfgfile = NULL; gchar * int_name = NULL; gchar * old = NULL; gchar * new_name = NULL; gchar ** vector = NULL; gboolean restart_tickler = FALSE; extern gint realtime_id; extern GHashTable *lookuptables; extern GAsyncQueue *io_data_queue; extern Firmware_Details *firmware; gint count = 0; LookupTable *lookuptable = NULL; /* Get combo box model so we can set the combo to this new value */ g_object_get(G_OBJECT(renderer),"model",&store,NULL); gtk_tree_model_get_iter_from_string(model,&iter,path); gtk_tree_model_get(model,&iter,INTERNAL_NAME_COL,&int_name,FILENAME_COL,&old,-1); if (g_strcasecmp(old,new_text) == 0) /* If no change, return */ return TRUE; if (g_strcasecmp(new_text,"Personal") == 0) return TRUE; if (g_strcasecmp(new_text,"System") == 0) return TRUE; if (realtime_id) { restart_tickler = TRUE; stop_tickler(RTV_TICKLER); count = 0; while ((g_async_queue_length(io_data_queue) > 0) && (count < 30)) { dbg_func(CRITICAL,g_strdup_printf(__FILE__": LEAVE() draining I/O Queue, current length %i\n",g_async_queue_length(io_data_queue))); while (gtk_events_pending()) gtk_main_iteration(); count++; } } lookuptable = (LookupTable *)g_hash_table_lookup(lookuptables,int_name); if (!lookuptable) printf(_("No lookuptable found! expect a crash!!\n")); g_free(lookuptable->array); /* Free the old one */ g_free(lookuptable->filename); /* Free the old one */ g_free(lookuptable); /* Free the old one */ get_table(int_name,new_text,NULL); /* Load the new one in it's place */ gtk_list_store_set(GTK_LIST_STORE(model),&iter, FILENAME_COL, new_text,-1); if (restart_tickler) start_tickler(RTV_TICKLER); cfgfile = cfg_open_file(firmware->profile_filename); if (!cfgfile) return FALSE; g_hash_table_foreach(lookuptables,update_lt_config,cfgfile); if (g_strrstr(firmware->profile_filename,".MegaTunix")) cfg_write_file(cfgfile, firmware->profile_filename); else { vector = g_strsplit(firmware->profile_filename,PSEP,-1); new_name = g_build_filename(HOME(),".MegaTunix",INTERROGATOR_DATA_DIR,"Profiles",vector[g_strv_length(vector)-1],NULL); g_strfreev(vector); cfg_write_file(cfgfile, new_name); g_free(firmware->profile_filename); firmware->profile_filename=g_strdup(new_name); g_free(new_name); } cfg_free(cfgfile); /*printf("internal name %s, old table %s, new table %s\n",int_name,old,new_text);*/ return TRUE; }
void CTenkeyOpr::Tenkey(void) { BOOL bOff = (!g_opr.bStop || g_opr.bEmg || g_allHome.m_bStartAll); bOff |= (TRUE == g_nv.NDm(tenKeyJog)); if(TRUE == bOff) { m_bDisable = TRUE; m_tenkey.Disable(); } else { if(TRUE == g_nv.NDm(tenKeyJog)) { m_bDisable = TRUE; m_tenkey.Disable(); } else if(TRUE == m_bDisable) { m_bDisable = FALSE; m_tenkey.Reset(); } } int nTenkeyNo = m_tenkey.GetTenKeyNo(); //screen tenkey »ç¿ë if(nTenkeyNo == NO_KEY && !bOff) { if(0 < g_nv.NDm(screenTenkey)) { nTenkeyNo = g_nv.NDm(screenTenkey); } if(99 == nTenkeyNo) { if(g_allHome.m_bStartAll) { nTenkeyNo = NO_KEY; g_nv.NDm(screenTenkey) = NO_KEY; } } } g_nv.NDm(screenTenkey) = NO_KEY; if(bOff || g_allHome.m_bStartAll || g_opr.bCycleProgress || g_opr.bPaused) return; if(FALSE == DoorSafety(nTenkeyNo)) { nTenkeyNo = NO_KEY; } switch(nTenkeyNo) { ////////////////////////////////////////////////////////////////////////// // LOADER M/Z PART case HOME(1): // Home if(AOn(i1stRailFrontStripChk1) || AOn(i1stRailRearStripChk1)) { g_err.Save(WR_INRAIL_JAM); break; } if(g_allHome.PartHomeStart(HOME_LOADER_ELV)) { g_LdMz.m_pMtTrf->CancelHomeSearch(); g_LdMz.m_pMtElv->CancelHomeSearch(); } break; case STEP(1): // Step Cycle g_LdInTopConv.m_nRun = mcSTEP; g_LdInMidConv.m_nRun = mcSTEP; g_LdOutConv.m_nRun = mcSTEP; g_LdMz.m_nRun = mcSTEP; break; case HOME(2): // Pusher Front Fwd/Bwd if(pmBWD == g_LdMz.m_pCylPusherF->GetPos(100)) g_LdMz.m_pCylPusherF->Actuate(pmFWD); else g_LdMz.m_pCylPusherF->Actuate(pmBWD); break; case STEP(2): // Pusher Front Cycle if(g_LdMz.m_fsm.IsRun()) break; if(!g_LdMz.m_pMtElv->IsRdy(LDMZ::P_MZ_Z_WORK) || !g_LdMz.m_pMtTrf->IsRdy(LDMZ::P_MZ_TRF_F_WORK)) break; g_LdMz.m_fsm.SetStatus(LDMZ::C_PUSHER_F_START); break; case HOME(3): // Pusher Front Fwd/Bwd if(pmBWD == g_LdMz.m_pCylPusherR->GetPos(100)) g_LdMz.m_pCylPusherR->Actuate(pmFWD); else g_LdMz.m_pCylPusherR->Actuate(pmBWD); break; case STEP(3): // Pusher Front Cycle if(g_LdMz.m_fsm.IsRun()) break; if(!g_LdMz.m_pMtElv->IsRdy(LDMZ::P_MZ_Z_WORK) || !g_LdMz.m_pMtTrf->IsRdy(LDMZ::P_MZ_TRF_R_WORK)) break; g_LdMz.m_fsm.SetStatus(LDMZ::C_PUSHER_R_START); break; case HOME(4): // Cyl Clamp case STEP(4): if(pmUP == g_LdMz.m_pCylClamp->GetPos(100)) g_LdMz.m_pCylClamp->Actuate(pmDOWN); else g_LdMz.m_pCylClamp->Actuate(pmUP); break; case HOME(5): case STEP(5): if(!AOn(iLdMzLoading1) || !AOn(iLdMzLoading2)) break; if(g_LdMz.m_fsm.IsRun()) break; if(!g_LdMz.m_pMtTrf->IsRdy(LDMZ::P_MZ_TRF_F_WORK)) { if(g_LdMz.m_pMtElv->IsRdy(LDMZ::P_MZ_Z_WORK)) { g_LdMz.m_pMtTrf->Move(LDMZ::P_MZ_TRF_F_WORK); } break; } g_LdMz.m_fsm.SetStatus(LDMZ::C_UNLOADING_START); break; case HOME(6): //Ld MZ Guide Home if(g_allHome.PartHomeStart(HOME_LOADER_MZ_GUIDE)) { g_mt[MT_ON_LOADER_CONV].CancelHomeSearch(); } break; case STEP(6): break; ////////////////////////////////////////////////////////////////////////// // IN-RAIL PART case HOME(11): // Front Home if(AOn(i1stRailFrontStripChk1) || AOn(i1stRailFrontStripChk2) || AOn(i1stRailFrontStripChk3) || AOn(i1stRailFrontStripChk4) || AOn(i1stRailFrontStripChk5) || AOn(i1stRailFrontStripChk6)) { g_err.Save(WR_INRAIL_F_STRIP_EXIST); break; } if(g_allHome.PartHomeStart(HOME_INRAIL_FRONT)) { g_InRail[_INRAIL_F_].m_pMtInRail->CancelHomeSearch(); g_InRail[_INRAIL_F_].m_pMtGripper->CancelHomeSearch(); } break; case STEP(11): break; case HOME(12): // Rear Home if(AOn(i1stRailRearStripChk1) || AOn(i1stRailRearStripChk2) || AOn(i1stRailRearStripChk3) || AOn(i1stRailRearStripChk4) || AOn(i1stRailRearStripChk5) || AOn(i1stRailRearStripChk6)) { g_err.Save(WR_INRAIL_R_STRIP_EXIST); break; } if(g_allHome.PartHomeStart(HOME_INRAIL_REAR)) { g_InRail[_INRAIL_R_].m_pMtInRail->CancelHomeSearch(); g_InRail[_INRAIL_R_].m_pMtGripper->CancelHomeSearch(); } break; case STEP(12): break; case HOME(13): // Cyl Gripper case STEP(13): if(pmOPEN == g_InRail[_INRAIL_F_].m_pCylGripperOC->GetPos(100)) g_InRail[_INRAIL_F_].m_pCylGripperOC->Actuate(pmCLOSE); else g_InRail[_INRAIL_F_].m_pCylGripperOC->Actuate(pmOPEN); break; case HOME(14): case STEP(14): if(pmOPEN == g_InRail[_INRAIL_R_].m_pCylGripperOC->GetPos(100)) g_InRail[_INRAIL_R_].m_pCylGripperOC->Actuate(pmCLOSE); else g_InRail[_INRAIL_R_].m_pCylGripperOC->Actuate(pmOPEN); break; ////////////////////////////////////////////////////////////////////////// // ID VI PART case HOME(16): if(g_allHome.PartHomeStart(HOME_ID_VISION)) { g_mt[MT_VISION_INRAIL_Y_FRONT].CancelHomeSearch(); g_mt[MT_VISION_INRAIL_Y_REAR].CancelHomeSearch(); } break; case STEP(16): break; case HOME(17): g_pm[CYL_1ST_RAIL_REAR_GRIPPER_CLAMP].Actuate(pmUP); break; case STEP(17): g_pm[CYL_1ST_RAIL_REAR_GRIPPER_CLAMP].Actuate(pmDOWN); break; ////////////////////////////////////////////////////////////////////////// // LD PICKER case HOME(21): if(g_allHome.PartHomeStart(HOME_LOADER_PICKER)) { g_LdPicker.m_pMtY->CancelHomeSearch(); g_LdPicker.m_pMtZ->CancelHomeSearch(); } break; case STEP(21): g_LdPicker.m_nRun = mcSTEP; break; case HOME(22): // Vacuum g_LdPicker.m_pVac->Actuate(FALSE); break; case STEP(22): g_LdPicker.m_pVac->Actuate(TRUE); break; ////////////////////////////////////////////////////////////////////////// // ULD PICKER case HOME(31): if(g_allHome.PartHomeStart(HOME_UNLOADER_PICKER)) { g_UldPicker.m_pMtY->CancelHomeSearch(); g_UldPicker.m_pMtZ->CancelHomeSearch(); } break; case STEP(31): break; case HOME(32): // Vacuum g_UldPicker.m_pVac->Actuate(FALSE); break; case STEP(32): g_UldPicker.m_pVac->Actuate(TRUE); break; // OFF RAIL case HOME(33): if(AOn(i4thRailStripChk3) || AOn(iOffRailStripExist)) { g_err.Save(WR_OFFRAIL_STRIP_EXIST); break; } if(g_allHome.PartHomeStart(HOME_OFF_RAIL)) { g_OffRail.m_pMtY->CancelHomeSearch(); g_OffRail.m_pMtConv->CancelHomeSearch(); } break; case STEP(33): break; ////////////////////////////////////////////////////////////////////////// // QC VISION case HOME(35): if(g_allHome.PartHomeStart(HOME_QC_VISION)) { g_mt[MT_VISION_OUT_RAIL].CancelHomeSearch(); } break; case STEP(35): break; case HOME(36): // Qc Vision Cyl U/D case STEP(36): if(pmUP == g_OutRail.m_pCylVisionUD->GetPos(100)) g_OutRail.m_pCylVisionUD->Actuate(pmDOWN); else g_OutRail.m_pCylVisionUD->Actuate(pmUP); break; ////////////////////////////////////////////////////////////////////////// // LD RAIL case HOME(41): if(AOn(i1stRailFrontStripChk6) || AOn(i1stRailRearStripChk6)) { g_err.Save(WR_INRAIL_JAM); break; } if(AOn(i2ndRailStripChk1) || AOn(i2ndRailStripChk2) || AOn(i2ndRailStripChk3)) { g_err.Save(WR_LDRAIL_STRIP_EXIST); break; } if(g_allHome.PartHomeStart(HOME_LOADER_RAIL)) { g_LdRail.m_pMtRail->CancelHomeSearch(); g_LdRail.m_pMtPusher->CancelHomeSearch(); g_LdRail.m_pMtZ->CancelHomeSearch(); g_LdRail.m_pMtY->CancelHomeSearch(); } break; case STEP(41): break; case HOME(42): // Pusher 1 U/D case STEP(42): if(pmUP == g_LdRail.m_pCylPusher1UD->GetPos(100)) g_LdRail.m_pCylPusher1UD->Actuate(pmDOWN); else g_LdRail.m_pCylPusher1UD->Actuate(pmUP); break; case HOME(43): // Pusher 2 U/D case STEP(43): if(pmUP == g_LdRail.m_pCylPusher2UD->GetPos(100)) g_LdRail.m_pCylPusher2UD->Actuate(pmDOWN); else g_LdRail.m_pCylPusher2UD->Actuate(pmUP); break; case STEP(50): g_InRail[_INRAIL_F_].m_nRun = mcSTEP; break; ////////////////////////////////////////////////////////////////////////// // ULD RAIL case HOME(51): if(AOn(i3rdRailStripChk1) || AOn(i3rdRailStripChk2) || AOn(i3rdRailStripChk3)) { g_err.Save(WR_ULDRAIL_STRIP_EXIST); break; } if(AOn(i4thRailStripChk1)) { g_err.Save(WR_OUTRAIL_JAM); break; } if(g_allHome.PartHomeStart(HOME_UNLOADER_RAIL)) { g_UldRail.m_pMtRail->CancelHomeSearch(); g_UldRail.m_pMtGripper->CancelHomeSearch(); g_UldRail.m_pMtZ->CancelHomeSearch(); g_UldRail.m_pMtY->CancelHomeSearch(); } break; case STEP(51): break; case HOME(52): case STEP(52): break; case HOME(53): case STEP(53): break; ////////////////////////////////////////////////////////////////////////// // OUT RAIL case HOME(61): if(AOn(i4thRailStripChk1) || AOn(i4thRailStripChk2) || AOn(i4thRailStripChk3)) { g_err.Save(WR_OUTRAIL_STRIP_EXIST); break; } if(g_allHome.PartHomeStart(HOME_OUT_RAIL)) { g_OutRail.m_pMtOutRail->CancelHomeSearch(); g_OutRail.m_pMtGripper->CancelHomeSearch(); } break; case STEP(61): break; case HOME(62): case STEP(62): break; case HOME(63): case STEP(63): break; case HOME(64): // Uld Pusher U/D case STEP(64): if(pmDOWN == g_OutRail.m_pCylPusherUD->GetPos(100)) g_OutRail.m_pCylPusherUD->Actuate(pmUP); else g_OutRail.m_pCylPusherUD->Actuate(pmDOWN); break; case HOME(65): // Uld Pusher F/B case STEP(65): if(pmFWD == g_OutRail.m_pCylPusherFB->GetPos(100)) g_OutRail.m_pCylPusherFB->Actuate(pmBWD); else g_OutRail.m_pCylPusherFB->Actuate(pmFWD); break; ////////////////////////////////////////////////////////////////////////// // ULD M/Z case HOME(71): if(AOn(i4thRailStripChk3)) { g_err.Save(WR_OUTRAIL_JAM); break; } if(g_allHome.PartHomeStart(HOME_UNLOADER_ELV)) { g_UldMz.m_pMtElv->CancelHomeSearch(); g_UldMz.m_pMtTrf->CancelHomeSearch(); } break; case STEP(71): break; case HOME(72): case STEP(72): if(pmDOWN == g_UldMz.m_pCylClamp->GetPos(100)) g_UldMz.m_pCylClamp->Actuate(pmUP); else g_UldMz.m_pCylClamp->Actuate(pmDOWN); break; case HOME(73): case STEP(73): break; case HOME(74): case STEP(74): break; case HOME(75): case STEP(75): if(!AOn(iUldBtmMzLoading1) || !AOn(iUldBtmMzLoading2)) break; if(g_UldMz.m_fsm.IsRun()) break; if(!g_UldMz.m_pMtTrf->IsRdy(ULDMZ::P_MZ_TRF_WORK)) break; g_UldMz.m_fsm.SetStatus(ULDMZ::C_UNLOADING_START); break; case HOME(77): //Uld MZ Guide Home if(g_allHome.PartHomeStart(HOME_UNLOADER_MZ_GUIDE)) { g_mt[MT_OFF_LOADER_CONV].CancelHomeSearch(); } break; case STEP(77): break; case HOME(80): //Buffer 01 Home if(g_Buffer.StripIsExist(0)) { g_err.Save(ER_BUFFER_01_STRIP_EXIST); break; } g_mt[MT_BUFFER_CONV_01].CancelHomeSearch(); g_mt[MT_BUFFER_CONV_01].StartHomeSearch(); break; case HOME(81): //Buffer 02 Home if(g_Buffer.StripIsExist(1)) { g_err.Save(ER_BUFFER_02_STRIP_EXIST); break; } g_mt[MT_BUFFER_CONV_02].CancelHomeSearch(); g_mt[MT_BUFFER_CONV_02].StartHomeSearch(); break; case HOME(82): //Buffer 03 Home if(g_Buffer.StripIsExist(2)) { g_err.Save(ER_BUFFER_03_STRIP_EXIST); break; } g_mt[MT_BUFFER_CONV_03].CancelHomeSearch(); g_mt[MT_BUFFER_CONV_03].StartHomeSearch(); break; case HOME(83): //Buffer 04 Home if(g_Buffer.StripIsExist(3)) { g_err.Save(ER_BUFFER_04_STRIP_EXIST); break; } g_mt[MT_BUFFER_CONV_04].CancelHomeSearch(); g_mt[MT_BUFFER_CONV_04].StartHomeSearch(); break; case HOME(84): //Buffer 05 Home if(g_Buffer.StripIsExist(4)) { g_err.Save(ER_BUFFER_05_STRIP_EXIST); break; } g_mt[MT_BUFFER_CONV_05].CancelHomeSearch(); g_mt[MT_BUFFER_CONV_05].StartHomeSearch(); break; case HOME(85): //Buffer 06 Home if(g_Buffer.StripIsExist(5)) { g_err.Save(ER_BUFFER_06_STRIP_EXIST); break; } g_mt[MT_BUFFER_CONV_06].CancelHomeSearch(); g_mt[MT_BUFFER_CONV_06].StartHomeSearch(); break; case HOME(86): //Buffer 07 Home if(g_Buffer.StripIsExist(6)) { g_err.Save(ER_BUFFER_07_STRIP_EXIST); break; } g_mt[MT_BUFFER_CONV_07].CancelHomeSearch(); g_mt[MT_BUFFER_CONV_07].StartHomeSearch(); break; case HOME(87): //Buffer 08 Home if(g_Buffer.StripIsExist(7)) { g_err.Save(ER_BUFFER_08_STRIP_EXIST); break; } g_mt[MT_BUFFER_CONV_08].CancelHomeSearch(); g_mt[MT_BUFFER_CONV_08].StartHomeSearch(); break; case HOME(88): //Buffer 09 Home if(g_Buffer.StripIsExist(8)) { g_err.Save(ER_BUFFER_09_STRIP_EXIST); break; } g_mt[MT_BUFFER_CONV_09].CancelHomeSearch(); g_mt[MT_BUFFER_CONV_09].StartHomeSearch(); break; case HOME(89): //Buffer 10 Home if(g_Buffer.StripIsExist(9)) { g_err.Save(ER_BUFFER_10_STRIP_EXIST); break; } g_mt[MT_BUFFER_CONV_10].CancelHomeSearch(); g_mt[MT_BUFFER_CONV_10].StartHomeSearch(); break; case HOME(90): if(g_allHome.PartHomeStart(HOME_MZ_TRANSFER)) { g_MzTrans.m_pMtX->CancelHomeSearch(); g_MzTrans.m_pMtTrf->CancelHomeSearch(); } break; case STEP(90): g_InRail[_INRAIL_F_].m_MtTrigger.StartTrigOneShot(); g_InRail[_INRAIL_F_].m_MtTrigger.ResetTrigger(); break; case STEP(91): if(!g_InRail[_INRAIL_F_].m_pMtGripper->IsRdy() || !g_InRail[_INRAIL_F_].m_pMtVision->IsRdy()) break; g_InRail[_INRAIL_F_].m_pMtVision->Move(P_VI_ID_MARK); g_InRail[_INRAIL_F_].m_fsmGrip.SetStatus(INRAIL::C_ID_VISION_START); break; case STEP(92): if(!g_InRail[_INRAIL_R_].m_pMtGripper->IsRdy() || !g_InRail[_INRAIL_F_].m_pMtVision->IsRdy()) break; g_InRail[_INRAIL_R_].m_pMtVision->Move(P_VI_ID_MARK); g_InRail[_INRAIL_R_].m_fsmGrip.SetStatus(INRAIL::C_ID_VISION_START); break; case STEP(93): if(!g_InRail[_INRAIL_R_].m_pMtGripper->IsRdy() || !g_InRail[_INRAIL_F_].m_pMtVision->IsRdy()) break; if(!g_InRail[_INRAIL_F_].m_pMtGripper->IsRdy() || !g_InRail[_INRAIL_F_].m_pMtVision->IsRdy()) break; if(!g_OutRail.m_pMtGripper->IsRdy() || !g_OutRail.m_pMtVision->IsRdy()) break; g_OutRail.m_pMtVision->Move(P_VI_QC_MARK); g_OutRail.m_fsm.SetStatus(OUTRAIL::C_QC_VI_START); g_InRail[_INRAIL_F_].m_pMtVision->Move(P_VI_ID_MARK); g_InRail[_INRAIL_F_].m_fsmGrip.SetStatus(INRAIL::C_ID_VISION_START); g_InRail[_INRAIL_R_].m_pMtVision->Move(P_VI_ID_MARK); g_InRail[_INRAIL_R_].m_fsmGrip.SetStatus(INRAIL::C_ID_VISION_START); break; case STEP(94): if(!g_OutRail.m_pMtGripper->IsRdy() || !g_OutRail.m_pMtVision->IsRdy()) break; g_OutRail.m_pMtVision->Move(P_VI_QC_MARK); g_OutRail.m_fsm.SetStatus(OUTRAIL::C_QC_VI_START); break; case STEP(98): // Multi Step if(g_nv.NDm(stepLdMz)) g_LdMz.m_nRun = mcSTEP; if(g_nv.NDm(stepInRailF)) g_InRail[_INRAIL_F_].m_nRun = mcSTEP; if(g_nv.NDm(stepInRailR)) g_InRail[_INRAIL_R_].m_nRun = mcSTEP; if(g_nv.NDm(stepLdRail)) g_LdRail.m_nRun = mcSTEP; if(g_nv.NDm(stepLdPicker)) g_LdPicker.m_nRun = mcSTEP; if(g_nv.NDm(stepBundle)) g_InBundle.m_nRun = mcSTEP; if(g_nv.NDm(stepUldRail)) g_UldRail.m_nRun = mcSTEP; if(g_nv.NDm(stepOutRail)) g_OutRail.m_nRun = mcSTEP; if(g_nv.NDm(stepOffRail)) g_OffRail.m_nRun = mcSTEP; if(g_nv.NDm(stepUldPicker)) g_UldPicker.m_nRun = mcSTEP; if(g_nv.NDm(stepUldMz)) g_UldMz.m_nRun = mcSTEP; if(g_nv.NDm(stepMzTrans)) g_MzTrans.m_nRun = mcSTEP; if(g_nv.NDm(stepBuffer)) g_Buffer.m_nRun = mcSTEP; if(g_nv.NDm(stepLdInConvTop)) g_LdInTopConv.m_nRun = mcSTEP; if(g_nv.NDm(stepLdInConvMid)) g_LdInMidConv.m_nRun = mcSTEP; if(g_nv.NDm(stepLdOutConv)) g_LdOutConv.m_nRun = mcSTEP; if(g_nv.NDm(stepUldConvTop)) g_UldTopConv.m_nRun = mcSTEP; if(g_nv.NDm(stepUldConvBtm)) g_UldBtmConv.m_nRun = mcSTEP; if(g_nv.NDm(stepOutBundle)) g_OutBundle.m_nRun = mcSTEP; break; ////////////////////////////////////////////////////////////////////////// case HOME(99): // All Home { if(!g_opr.bStop || g_allHome.m_bStartAll) break; for(int mtno = 0; mtno < MT_MAX; mtno++) { g_mt[mtno].CancelHomeSearch(); } if(AOn(i1stRailFrontStripChk1) || AOn(i1stRailFrontStripChk2) || AOn(i1stRailFrontStripChk3) || AOn(i1stRailFrontStripChk4) || AOn(i1stRailFrontStripChk5) || AOn(i1stRailFrontStripChk6)) { g_err.Save(WR_INRAIL_F_STRIP_EXIST); break; } if(AOn(i1stRailRearStripChk1) || AOn(i1stRailRearStripChk2) || AOn(i1stRailRearStripChk3) || AOn(i1stRailRearStripChk4) || AOn(i1stRailRearStripChk5) || AOn(i1stRailRearStripChk6)) { g_err.Save(WR_INRAIL_R_STRIP_EXIST); break; } if(AOn(i4thRailStripChk3) || AOn(iOffRailStripExist)) { g_err.Save(WR_OFFRAIL_STRIP_EXIST); break; } if(AOn(i3rdRailStripChk1) || AOn(i3rdRailStripChk2) || AOn(i3rdRailStripChk3)) { g_err.Save(WR_ULDRAIL_STRIP_EXIST); break; } g_allHome.m_bStartAll = TRUE; } break; case HOME(100): // Ld Part Home { if(!g_opr.bStop || g_allHome.m_bStartAll) break; if(g_allHome.PartHomeStart(HOME_LOADER_PART_ALL)) { g_mt[MT_ON_LOADER_Z].CancelHomeSearch(); g_mt[MT_ON_LOADER_Y].CancelHomeSearch(); g_mt[MT_VISION_INRAIL_Y_FRONT].CancelHomeSearch(); g_mt[MT_VISION_INRAIL_Y_REAR].CancelHomeSearch(); g_mt[MT_1ST_RAIL_CONV_FRONT].CancelHomeSearch(); g_mt[MT_1ST_RAIL_GRIPPER_FRONT].CancelHomeSearch(); g_mt[MT_1ST_RAIL_CONV_REAR].CancelHomeSearch(); g_mt[MT_1ST_RAIL_GRIPPER_REAR].CancelHomeSearch(); g_mt[MT_ON_PNP_Y].CancelHomeSearch(); g_mt[MT_ON_PNP_Z].CancelHomeSearch(); g_mt[MT_2ND_RAIL_CONV].CancelHomeSearch(); g_mt[MT_2ND_RAIL_PUSHER].CancelHomeSearch(); g_mt[MT_2ND_RAIL_Z].CancelHomeSearch(); g_mt[MT_2ND_RAIL_Y1].CancelHomeSearch(); g_mt[MT_ON_LOADER_CONV].CancelHomeSearch(); } } break; case HOME(101): // Uld Part Home { if(!g_opr.bStop || g_allHome.m_bStartAll) break; if(g_allHome.PartHomeStart(HOME_UNLOADER_PART_ALL)) { g_mt[MT_3RD_RAIL_CONV].CancelHomeSearch(); g_mt[MT_3RD_RAIL_GRIPPER].CancelHomeSearch(); g_mt[MT_3RD_RAIL_Z].CancelHomeSearch(); g_mt[MT_3RD_RAIL_Y1].CancelHomeSearch(); g_mt[MT_4TH_RAIL_CONV].CancelHomeSearch(); g_mt[MT_4TH_RAIL_GRIPPER].CancelHomeSearch(); g_mt[MT_OFF_LOADER_Z].CancelHomeSearch(); g_mt[MT_OFF_LOADER_Y].CancelHomeSearch(); g_mt[MT_VISION_OUT_RAIL].CancelHomeSearch(); g_mt[MT_OFF_LOADER_CONV].CancelHomeSearch(); g_mt[MT_OFF_PNP_Y].CancelHomeSearch(); g_mt[MT_OFF_PNP_Z].CancelHomeSearch(); g_mt[MT_OFF_RAIL_CONV].CancelHomeSearch(); g_mt[MT_OFF_RAIL_Y].CancelHomeSearch(); } } break; // Front InRail Vision Cycle case HOME(110): if(!g_InRail[_INRAIL_F_].m_pMtGripper->IsRdy() || !g_InRail[_INRAIL_F_].m_pMtVision->IsRdy()) break; g_InRail[_INRAIL_F_].m_pMtVision->Move(P_VI_ID_MARK); g_InRail[_INRAIL_F_].m_fsmGrip.SetStatus(INRAIL::C_ID_VISION_START); break; // Rear InRail Vision Cycle case HOME(120): if(!g_InRail[_INRAIL_R_].m_pMtGripper->IsRdy() || !g_InRail[_INRAIL_R_].m_pMtVision->IsRdy()) break; g_InRail[_INRAIL_R_].m_pMtVision->Move(P_VI_ID_MARK); g_InRail[_INRAIL_R_].m_fsmGrip.SetStatus(INRAIL::C_ID_VISION_START); break; // Out Rail Vision Cycle case HOME(130): if(!g_OutRail.m_pMtGripper->IsRdy() || !g_OutRail.m_pMtVision->IsRdy()) break; g_OutRail.m_pMtVision->Move(P_VI_QC_MARK); g_OutRail.m_fsm.SetStatus(OUTRAIL::C_QC_VI_START); break; } }
static bool atHomePosition(GHOST_TEventNDOFMotionData* ndof) { #define HOME(foo) (ndof->foo == 0) return HOME(tx) && HOME(ty) && HOME(tz) && HOME(rx) && HOME(ry) && HOME(rz); #undef HOME }
/*! \brief pops up a Filechooser dialog to select a file \param data is a pointer to a MtxFileIO structure which contains important bits like the path to start, the filter, default filename and so on \see MtxFileIO \returns the path to the file or NULL if cancelled */ gchar * choose_file(MtxFileIO *data) { GtkWidget *dialog = NULL; GtkFileFilter *filter = NULL; GSList *filters = NULL; gchar *path = NULL; gchar *defdir = NULL; gchar *filename = NULL; gchar *tmpbuf = NULL; gchar **vector = NULL; const gchar *project = NULL; gint response = 0; gboolean res = FALSE; guint i = 0; ENTER(); if (!GTK_IS_WINDOW(data->parent)) data->parent = NULL; /* printf("choose_file\n"); printf("parent %p\n",(void *)data->parent); printf("on_top %s\n",data->on_top? "TRUE":"FALSE"); printf("filter %s\n",data->filter); printf("filename %s\n",data->filename); printf("default_filename %s\n",data->default_filename); printf("default_extension %s\n",data->default_extension); printf("absolute_path %s\n",data->absolute_path); printf("default_path %s\n",data->default_path); printf("external_path %s\n",data->external_path); printf("shortcut_folders %s\n",data->shortcut_folders); printf("project %s\n",data->project); printf("title %s\n",data->title); */ if (data->project) project = data->project; else project = DEFAULT_PROJECT; if (!data->title) data->title = g_strdup("Open File"); if ((data->action == GTK_FILE_CHOOSER_ACTION_OPEN) || (data->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)) { /*printf("ACTION_OPEN before gtk_file_chooser_dialog_new\n");*/ dialog = gtk_file_chooser_dialog_new(data->title, /*GTK_WINDOW(data->parent), */ 0, data->action, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); /*printf("after gtk_file_chooser_dialog_new\n");*/ if ((data->on_top) && (GTK_IS_WIDGET(data->parent))) gtk_window_set_transient_for(GTK_WINDOW(gtk_widget_get_toplevel(dialog)),GTK_WINDOW(data->parent)); if ((data->absolute_path) && (!data->default_path)) gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(dialog),data->absolute_path); else if (data->default_path) { /*printf("should be using system path + %s\n",data->default_path);*/ path = g_build_filename(MTXSYSDATA,data->default_path,NULL); if (!g_file_test(path,G_FILE_TEST_IS_DIR)) { g_free(path); path = g_build_filename(HOME(),"mtx",data->project,data->default_path, NULL); /*printf("System path is not found, falling back to user path %s\n",path);*/ } gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(dialog),path); g_free(path); } } else if (data->action == GTK_FILE_CHOOSER_ACTION_SAVE) { /*printf("ACTION_SAVE calling gtk_file_chooser_dialog_new\n");*/ dialog = gtk_file_chooser_dialog_new(data->title, /*GTK_WINDOW(data->parent), */ 0, data->action, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); /*printf("after gtk_file_chooser_dialog_new\n");*/ /* if ((data->on_top) && (GTK_IS_WIDGET(data->parent))) gtk_window_set_transient_for(GTK_WINDOW(gtk_widget_get_toplevel(dialog)),GTK_WINDOW(data->parent)); */ if (data->default_path) { defdir = g_build_filename(HOME(),"mtx",data->project,data->default_path, NULL); if (!g_file_test(defdir,G_FILE_TEST_IS_DIR)) g_mkdir(defdir,0755); } else defdir = g_build_filename(HOME(),"mtx",data->project, NULL); /* If filename passed check/adj path */ if (data->filename) { if (g_strrstr(data->filename,DATA_DIR) != NULL) { vector = g_strsplit(data->filename,PSEP,-1); tmpbuf = g_strconcat(defdir,PSEP,vector[g_strv_length(vector)-1],NULL); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),defdir); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog),vector[g_strv_length(vector)-1]); g_strfreev(vector); g_free(tmpbuf); } else gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),data->filename); } else { gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),defdir); gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), data->default_filename ); } g_free(defdir); } else { EXIT(); return NULL; } /* Add shortcut folders... */ if (data->shortcut_folders) { vector = g_strsplit(data->shortcut_folders,",",-1); for (i=0;i<g_strv_length(vector);i++) { path = g_build_filename(MTXSYSDATA,vector[i],NULL); gtk_file_chooser_add_shortcut_folder(GTK_FILE_CHOOSER(dialog),path,NULL); g_free(path); path = g_build_filename(HOME(),"mtx",data->project,vector[i],NULL); gtk_file_chooser_add_shortcut_folder(GTK_FILE_CHOOSER(dialog),path,NULL); g_free(path); } g_strfreev(vector); } /* If default path switch to that place */ if ((data->external_path) && (!(data->default_path))) { /*printf("external path with no default path\n");*/ path = g_build_filename(HOME(),"mtx",data->project,data->external_path,NULL); if (!g_file_test(path,G_FILE_TEST_IS_DIR)) g_mkdir(path,0755); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(dialog),path); g_free(path); } /* If filters, assign them CAUSES SEGFAULTS??? */ /* if (data->filter) { printf("data->filter is set to \"%s\"\n",data->filter); vector = g_strsplit(data->filter,",",-1); if (g_strv_length(vector)%2 > 0) goto afterfilter; for (i=0;i<g_strv_length(vector);i+=2) { filter = gtk_file_filter_new(); gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter),vector[i]); printf("Filter glob is set to \"%s\"\n",vector[i]); gtk_file_filter_set_name(GTK_FILE_FILTER(filter),vector[i+1]); printf("Filter name is set to \"%s\"\n",vector[i+1]); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter); } gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog),filter); g_strfreev(vector); } */ afterfilter: /* Turn on overwriteconfirmation */ gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); g_signal_connect(G_OBJECT(dialog),"confirm-overwrite", G_CALLBACK (confirm_overwrite_callback), NULL); if (data->action == GTK_FILE_CHOOSER_ACTION_OPEN) { if (data->default_filename) { /*printf("data->default_filename is set to \"%s\"\n",data->default_filename);*/ gtk_file_chooser_select_filename(GTK_FILE_CHOOSER(dialog),data->default_filename); } } /*printf("initiating dialog to run\n");*/ response = gtk_dialog_run (GTK_DIALOG (dialog)); /*printf("it returned \n");*/ if (response == GTK_RESPONSE_ACCEPT) { tmpbuf = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); if ((data->action == GTK_FILE_CHOOSER_ACTION_SAVE) && (data->default_extension)) { if(!g_str_has_suffix (tmpbuf,data->default_extension)) filename = g_strjoin(".",tmpbuf,data->default_extension,NULL); else filename = g_strdup(tmpbuf); } else filename = g_strdup(tmpbuf); g_free(tmpbuf); } filters = gtk_file_chooser_list_filters(GTK_FILE_CHOOSER(dialog)); if (filters) { g_slist_foreach(filters, remove_filter ,dialog); g_slist_free(filters); } gtk_widget_destroy (dialog); EXIT(); return (filename); }
/*! \brief When the user selects the OK button the new table is calculated packaged up, dumped to a file as well as being sent to the ECU to live a long and happy life \param widget is the OK button the user clicked \param data is unused \returns TRUE on success, FALSE otherwise */ G_MODULE_EXPORT gboolean afr_calibrate_calc_and_dl(GtkWidget *widget, gpointer data) { static gdouble diywbBv[] = { 0.00, 1.40, 1.45, 1.50, 1.55, 1.60, 1.65, 1.70, 1.75, 1.80, 1.85, 1.90, 1.95, 2.00, 2.05, 2.10, 2.15, 2.20, 2.25, 2.30, 2.35, 2.40, 2.45, 2.50, 2.55, 2.60, 2.65, 2.70, 2.75, 2.80, 2.85, 2.90, 4.00, 5.01 }; static gdouble diywbBa[] = { 7.42, 10.08, 10.23, 10.38, 10.53, 10.69, 10.86, 11.03, 11.20, 11.38, 11.57, 11.76, 11.96, 12.17, 12.38, 12.60, 12.83, 13.07, 13.31, 13.57, 13.84, 14.11, 14.40, 14.70, 15.25, 15.84, 16.48, 17.18, 17.93, 18.76, 19.66, 20.66, 40.00, 60.00 }; static gdouble lbwbBv[] = {0.00, 2.05, 4.21, 4.98, 5.01}; static gdouble lbwbBa[] = {1.00, 11.00, 14.70, 16.00, 99.00}; static gdouble teSVoutBv[] = { 1.024, 1.076, 1.126, 1.177, 1.227, 1.278, 1.330, 1.380, 1.431, 1.481, 1.532, 1.581, 1.626, 1.672, 1.717, 1.761, 1.802, 1.842, 1.883, 1.926, 1.971, 2.015, 2.053, 2.104, 2.150, 2.192, 2.231, 2.267, 2.305, 2.347, 2.398, 2.455, 2.514, 2.556, 2.602, 2.650, 2.698, 2.748, 2.797, 2.846, 2.900, 2.945, 2.991, 3.037, 3.083, 3.129, 3.175, 3.221, 3.266, 3.313, 3.359, 3.404, 3.451, 3.496, 3.542, 3.587, 3.634, 3.680, 3.725, 3.772, 3.817, 3.863, 3.910, 3.955, 4.001 }; static gdouble teSVoutBa[] = { 8.95, 9.11, 9.26, 9.41, 9.56, 9.71, 9.87, 10.02, 10.17, 10.32, 10.47, 10.63, 10.78, 10.93, 11.08, 11.24, 11.39, 11.54, 11.69, 11.86, 12.04, 12.23, 12.39, 12.62, 12.83, 13.03, 13.21, 13.4, 13.59, 13.82, 14.1, 14.43, 14.83, 15.31, 15.85, 16.47, 17.15, 17.9, 18.7, 19.57, 20.5, 21.5, 22.59, 23.78, 25.1, 26.54, 28.14, 29.9, 31.87, 34.11, 36.81, 40.27, 45.1, 52.38, 63.92, 82.66, 99.0, 99.0, 99.0, 99.0, 99.0, 99.0, 99.0, 99.0, 99.0}; static gdouble aemLinBv[] = { 0.00, 0.16, 0.31, 0.47, 0.62, 0.78, 0.94, 1.09, 1.25, 1.40, 1.56, 1.72, 1.87, 2.03, 2.18, 2.34, 2.50, 2.65, 2.81, 2.96, 3.12, 3.27, 3.43, 3.59, 3.74, 3.90, 4.05, 4.21, 4.37, 4.52, 4.68, 4.83, 4.99, 5.01 }; static gdouble aemLinBa[] = { 9.72, 10.01, 10.35, 10.64, 10.98, 11.27, 11.55, 11.90, 12.18, 12.47, 12.81, 13.10, 13.44, 13.73, 14.01, 14.35, 14.64, 14.93, 15.27, 15.56, 15.84, 16.18, 16.47, 16.81, 17.10, 17.39, 17.73, 18.01, 18.36, 18.64, 18.93, 19.27, 19.56, 99.00 }; static gdouble aemNonBv[] = { 0.00, 0.16, 0.31, 0.47, 0.62, 0.78, 0.94, 1.09, 1.25, 1.40, 1.56, 1.72, 1.87, 2.03, 2.18, 2.34, 2.50, 2.65, 2.81, 2.96, 3.12, 3.27, 3.43, 3.59, 3.74, 3.90, 4.05, 4.21, 4.37, 4.52, 4.68, 4.83, 4.99, 5.01 }; static gdouble aemNonBa[] = { 8.41, 8.52, 8.64, 8.81, 8.98, 9.09, 9.26, 9.44, 9.61, 9.78, 9.95, 10.12, 10.29, 10.47, 10.69, 10.92, 11.15, 11.38, 11.67, 11.95, 12.24, 12.58, 12.92, 13.27, 13.67, 14.13, 14.64, 15.21, 15.84, 16.53, 17.27, 18.19, 19.44, 99.00 }; static gdouble fjoBv[] = { 0.000, 0.811, 0.816, 1.256, 1.325, 1.408, 1.447, 1.667, 1.784, 1.804, 1.872, 1.984, 2.023, 2.126, 2.209, 2.268, 2.414, 2.454, 2.473, 2.502, 2.522, 2.581, 2.610, 2.717, 2.766, 2.820, 2.908, 2.933, 2.977, 3.021, 3.079, 3.099, 3.104, 5.000 }; static gdouble fjoBa[] = { 0.000, 9.996, 10.011, 11.113, 11.290, 11.481, 11.569, 12.142, 12.451, 12.510, 12.730, 13.024, 13.142, 13.465, 13.715, 13.892, 14.377, 14.524, 14.597, 14.759, 14.876, 15.273, 15.479, 16.302, 16.714, 17.170, 18.008, 18.243, 18.684, 19.184, 19.801, 19.977, 20.007, 29.400 }; static gdouble zeitronixBv[] = { 0.000, 0.150, 0.310, 0.460, 0.620, 0.780, 0.930, 1.090, 1.240, 1.400, 1.560, 1.710, 1.870, 2.020, 2.180, 2.340, 2.500, 2.650, 2.800, 2.960, 3.000, 3.120, 3.270, 5.010 }; static gdouble zeitronixBa[] = { 0.000, 9.700, 9.900, 10.100, 10.300, 10.500, 10.700, 11.000, 11.400, 11.700, 12.100, 12.400, 12.800, 13.200, 13.700, 14.200, 14.700, 15.600, 16.900, 18.500, 18.800, 19.900, 21.200, 99.000 }; static gdouble genericBv[4] = { 0.0, 1.0, 4.0, 5.01 }; static gdouble genericBa[4] = { 0.0, 9.7, 19.7, 99.0 }; gdouble *Bv = NULL; gdouble *Ba = NULL; gdouble voltage = 0.0; gdouble deltaVoltage = 0.0; gdouble vPct = 0.0; gint nB = 0; gint iV = 0; gint adcCount = 0; gchar * filename = NULL; gdouble afr = 0.0; gdouble (*Fv)(gint adc) = NULL; gboolean NB = FALSE; guint8 table[nADC]; time_t tim; FILE *f = NULL; Firmware_Details *firmware = NULL; extern gconstpointer *global_data; firmware = DATA_GET(global_data,"firmware"); #define USE_TABLE(prefix) \ Bv = prefix ## Bv; \ Ba = prefix ## Ba; \ nB = (sizeof(prefix ## Bv) / sizeof(gdouble)); #define USE_FUNC(prefix) \ Fv = prefix ## Fv switch (afr_enum) { case narrowBand: NB = TRUE; USE_FUNC(NB); break; case diyWB: USE_TABLE(diywb); break; case dynojetLinear: USE_FUNC (djWBlin); break; case fjo: USE_TABLE(fjo); break; case aemLinear: USE_TABLE(aemLin); break; case aemNonLinear: USE_TABLE(aemNon); break; case twintec: USE_FUNC (inno05); break; case techEdgeLinear: USE_FUNC (teWBlin); break; case techEdgeNonLinear: USE_TABLE(teSVout); break; case innovate12: USE_FUNC (inno12); break; case innovate05: USE_FUNC (inno05); break; case innovateLC1: USE_FUNC (innoLC1); break; case lambdaBoy: USE_TABLE(lbwb); break; case zeitronix: USE_TABLE(zeitronix); break; case genericWB: genericBv[1] = g_ascii_strtod(gtk_entry_get_text(GTK_ENTRY(lookup_widget_f("voltage1_entry"))),NULL); genericBv[2] = g_ascii_strtod(gtk_entry_get_text(GTK_ENTRY(lookup_widget_f("voltage2_entry"))),NULL); genericBa[1] = g_ascii_strtod(gtk_entry_get_text(GTK_ENTRY(lookup_widget_f("afr1_entry"))),NULL); genericBa[2] = g_ascii_strtod(gtk_entry_get_text(GTK_ENTRY(lookup_widget_f("afr2_entry"))),NULL); USE_TABLE(generic); break; default: printf(_("default case, shouldn't have gotten here. afr_enum is %i"),afr_enum); break; } filename = g_build_filename(HOME(), "afrtable.log",NULL); f = fopen(filename, "w"); g_free(filename); iV = 0; afr = 0.0; time(&tim); fprintf(f, "//------------------------------------------------------------------------------\n"); fprintf(f, "//-- Generated by MegaTunix %s", ctime(&tim)); fprintf(f, "//-- This file merely records what was sent to your MS-II, and may be --\n"); fprintf(f, "//-- deleted at any time. --\n"); fprintf(f, "//-- Selected type: %-57s--\n", afr_name); fprintf(f, "//------------------------------------------------------------------------------\n"); fprintf(f, "#ifndef GCC_BUILD\n"); fprintf(f, "#pragma ROM_VAR EGO_ROM\n"); fprintf(f, "#endif\n"); fprintf(f, "const unsigned char egofactor_table[%d] EEPROM_ATTR = {\n", nADC); fprintf(f, " // afr adcCount voltage\n"); for (adcCount = 0; adcCount < nADC; adcCount++) { voltage = adcCount / (nADC-1.0) * 5.0; if (NB) { afr = 0.0; table[adcCount] = (adcCount > nADC/5.0) ? 0 : (gint16)(nADC/5.0 - adcCount); } else { if (Fv) afr = Fv(adcCount); else { /* Use curve data from tabular expression of transfer function.*/ while (voltage > Bv[iV]) iV++; deltaVoltage = Bv[iV] - Bv[iV-1]; if (fabs(deltaVoltage) < 1e-10) /* Curve data is crap.*/ afr = 999.0; else { vPct = 1.0 - (Bv[iV] - voltage) / deltaVoltage; afr = vPct * (Ba[iV] - Ba[iV-1]) + Ba[iV-1]; } } table[adcCount] = (guint8)(afr*10.0+0.5); } fprintf(f, " %4d%c // %7.3f %4d %6.3f\n", table[adcCount], (adcCount<nADC-1)?',':' ', afr, adcCount, voltage); } fprintf(f, "};\n"); fprintf(f, "#ifndef GCC_BUILD\n"); fprintf(f, "#pragma ROM_VAR DEFAULT\n"); fprintf(f, "#endif\n"); fprintf(f, "//------------------------------------------------------------------------------\n"); fclose(f); ms_table_write(firmware->ego_table_page, firmware->page_params[firmware->ego_table_page]->length, (guint8 *)table); return TRUE; }
//G_MODULE_EXPORT gboolean lookuptable_changed(GtkCellRendererCombo *renderer, gchar *path, gchar * new_text, gpointer data) G_MODULE_EXPORT gboolean lookuptable_changed(GtkCellRendererCombo *renderer, gchar *path, GtkTreeIter *new_iter, gpointer data) { GtkTreeModel *combostore = NULL; GtkTreeIter iter; GtkTreeModel *model = (GtkTreeModel *)data; ConfigFile *cfgfile = NULL; gchar * new_text = NULL; gchar * int_name = NULL; gchar * old = NULL; gchar * new_name = NULL; gchar ** vector = NULL; const gchar * project = NULL; gboolean restart_tickler = FALSE; GAsyncQueue *io_data_queue = NULL; Firmware_Details *firmware = NULL; ENTER(); firmware = (Firmware_Details *)DATA_GET(global_data,"firmware"); io_data_queue = (GAsyncQueue *)DATA_GET(global_data,"io_data_queue"); /* Get combo box model so we can set the combo to this new value */ g_object_get(G_OBJECT(renderer),"model",&combostore,NULL); gtk_tree_model_get(combostore,new_iter,0,&new_text,-1); /* Get combo box model so we can set the combo to this new value */ gtk_tree_model_get_iter_from_string(model,&iter,path); gtk_tree_model_get(model,&iter,INTERNAL_NAME_COL,&int_name,FILENAME_COL,&old,-1); //printf("New text is %s, int name associated %s, filename %s\n",new_text,int_name,old); if (g_ascii_strcasecmp(old,new_text) == 0) /* If no change, return */ { g_free(int_name); g_free(old); EXIT(); return TRUE; } if (g_ascii_strcasecmp(new_text,"Personal") == 0) { g_free(int_name); g_free(old); EXIT(); return TRUE; } if (g_ascii_strcasecmp(new_text,"System") == 0) { g_free(int_name); g_free(old); EXIT(); return TRUE; } if (DATA_GET(global_data,"realtime_id")) { gint count = 0; restart_tickler = TRUE; stop_tickler(RTV_TICKLER); while ((g_async_queue_length(io_data_queue) > 0) && (count < 30)) { MTXDBG(CRITICAL,_("Draining I/O Queue, current length %i\n"),g_async_queue_length(io_data_queue)); count++; } } get_table(int_name,new_text,NULL); /* Load the new one in it's place */ gtk_list_store_set(GTK_LIST_STORE(model),&iter, FILENAME_COL, new_text,-1); if (restart_tickler) start_tickler(RTV_TICKLER); cfgfile = cfg_open_file(firmware->profile_filename); if (!cfgfile) { g_free(int_name); g_free(old); EXIT(); return FALSE; } g_hash_table_foreach((GHashTable *)DATA_GET(global_data,"lookuptables"),update_lt_config,cfgfile); if (g_strrstr(firmware->profile_filename,"mtx")) cfg_write_file(cfgfile, firmware->profile_filename); else { project = (const gchar *)DATA_GET(global_data,"project_name"); vector = g_strsplit(firmware->profile_filename,PSEP,-1); if (!project) project = DEFAULT_PROJECT; new_name = g_build_filename(HOME(),"mtx",project,INTERROGATOR_DATA_DIR,"Profiles",vector[g_strv_length(vector)-2],vector[g_strv_length(vector)-1],NULL); g_strfreev(vector); cfg_write_file(cfgfile, new_name); g_free(firmware->profile_filename); firmware->profile_filename=g_strdup(new_name); g_free(new_name); } cfg_free(cfgfile); /*printf("internal name %s, old table %s, new table %s\n",int_name,old,new_text);*/ g_free(int_name); g_free(old); EXIT(); return TRUE; }
void *snake_thread(void *dummy) { while(1) { // first advance snake parts, delete tail, add head if (!got_apple) { snake_part *tail = (snake_part *)list_front(&snake); free(tail); } got_apple = 0; snake_direction = next_snake_direction; snake_part *head = (snake_part *)snake.lastNode->data; snake_part *new_head = (snake_part *)malloc(sizeof(snake_part)); switch (snake_direction) { case DIR_UP: new_head->x = head->x; new_head->y = head->y-1; break; case DIR_DOWN: new_head->x = head->x; new_head->y = head->y+1; break; case DIR_LEFT: new_head->x = head->x-1; new_head->y = head->y; break; case DIR_RIGHT: new_head->x = head->x+1; new_head->y = head->y; break; } list_append(&snake, new_head); head = new_head; // check new head doesnt hit any walls if (head->x < 1 || head->x >= BOARD_WIDTH || head->y < 1 || head->y >= BOARD_HEIGHT) { end_game(); } // check if we hit ourself... list_map(&snake, collision_check); // apple logic if (head->x == apple_x && head->y == apple_y) { got_apple = 1; score++; put_apple(); } // then draw CLS(); draw_board(); list_map(&snake, draw_part); GOTO(apple_x+1, apple_y+1); printf("0"); GOTO(0, BOARD_HEIGHT+2); printf("Score: %d", score); HOME(); fflush(stdout); usleep(100000); } }