⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eibdrv_sim.c

📁 欧洲安装总线系统的USB串口接口驱动c程序源代码.软件代码由西门子公司提供
💻 C
📖 第 1 页 / 共 5 页
字号:
   fl_ext_formobjects_add_box(FL_BORDER_BOX,40,555,365,20,"",         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);      rw_ges=0;   for (i=0;i<4;i++) rw_ges+=sim->stat->write[i];   rw_pt=363.0/rw_ges;   lowerbound=41;   for (i=1;i<5;i++)   {  if (sim->stat->write[i%4]>0)      {  fl_ext_formobjects_add_box2(&obj,FL_FLAT_BOX,lowerbound,556,404-lowerbound,18,"",               FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);         switch(i%4)         {  case 1: fl_set_object_color(obj,EIBDRV_SIM_W1_COL,BOX_COL2); break;            case 2: fl_set_object_color(obj,EIBDRV_SIM_W2_COL,BOX_COL2); break;            case 3: fl_set_object_color(obj,EIBDRV_SIM_W3_COL,BOX_COL2); break;            case 0: fl_set_object_color(obj,EIBDRV_SIM_WFAILED_COL,BOX_COL2); break;         }         lowerbound+=(int)(sim->stat->write[i%4]*rw_pt);      }   }   fl_ext_formobjects_add_box(FL_BORDER_BOX,465,555,365,20,"",         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);      rw_ges=0;   for (i=0;i<3;i++) rw_ges+=sim->stat->read[i];   rw_pt=363.0/rw_ges;   lowerbound=466;   for (i=0;i<3;i++)   {  if (sim->stat->read[i]>0)      {  fl_ext_formobjects_add_box2(&obj,FL_FLAT_BOX,lowerbound,556,829-lowerbound,18,"",               FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);         switch(i)         {  case 0: fl_set_object_color(obj,EIBDRV_SIM_W1_COL,BOX_COL2); break;            case 1: fl_set_object_color(obj,EIBDRV_SIM_W2_COL,BOX_COL2); break;            case 2: fl_set_object_color(obj,EIBDRV_SIM_W3_COL,BOX_COL2); break;         }         lowerbound+=(int)(sim->stat->read[i]*rw_pt);      }   }   diff_time=difftime(sim->stat_get_time,sim->stat_reset_time);   sprintf(&helpstring[0],"%li - %li - %li - %li",sim->stat->write[1],sim->stat->write[2],         sim->stat->write[3],sim->stat->write[0]);   fl_ext_formobjects_add_text(&obj,FL_NO_BOX,40,575,165,20,&helpstring[0],         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);   sprintf(&helpstring[0],"%li - %li - %li",sim->stat->read[0],sim->stat->read[1],sim->stat->read[2]);   fl_ext_formobjects_add_text(&obj,FL_NO_BOX,465,575,205,20,&helpstring[0],         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);   if (diff_time>0)   {  sprintf(&helpstring[0],"%3.2f - %3.2f - %3.2f - %3.2f",sim->stat->write[1]/diff_time,            sim->stat->write[2]/diff_time,sim->stat->write[3]/diff_time,sim->stat->write[0]/diff_time);      fl_ext_formobjects_add_text(&obj,FL_NO_BOX,40,590,205,20,&helpstring[0],            FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);      sprintf(&helpstring[0],"%3.2f - %3.2f - %3.2f",sim->stat->read[0]/diff_time,            sim->stat->read[1]/diff_time,sim->stat->read[2]/diff_time);      fl_ext_formobjects_add_text(&obj,FL_NO_BOX,465,590,205,20,&helpstring[0],            FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);   }   fl_ext_formobjects_add_text(&obj,FL_NO_BOX,35,615,140,15,"Average total time for write",         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);   fl_ext_formobjects_add_text(&obj,FL_NO_BOX,35,630,170,15,"with success in first attempt (ms):",         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);   if (sim->stat->write[1]>0)      {  avg_w1time=((sim->stat->total_w1time.tv_sec+sim->stat->total_w1time.tv_usec/1000000.0)*1000)/             sim->stat->write[1];      if (avg_w1time<1000)         sprintf(&helpstring[0],"%i",avg_w1time);      else         strcpy(&helpstring[0],"");      fl_ext_formobjects_add_text(&obj,FL_BORDER_BOX,205,625,75,20,&helpstring[0],            FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);   }         fl_ext_formobjects_add_btn(&obj,FL_NORMAL_BUTTON,870,630,90,25,"Close",         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);      fl_set_object_callback(obj,CloseBtn_cb,0);         fl_end_form();      fdui->VisForm->fdui=fdui;   return fdui;   }#if FL_INCLUDE_VERSION >= 89void idle_Indicator(int arg1,void *arg2)#else int idle_Indicator(XEvent *xev,void *userdata)#endif{  time_t actual_time;   time_t stop_time=sim->start_time+sim->sim_parameter->run_time*60;      time(&actual_time);   if (actual_time!=sim->last_act_time)   {  if (actual_time>=stop_time)         fl_ext_update_indicator(sim->RunForm->Indicator,FL_EXT_INDICATOR_RUNNING,100);      else         fl_ext_update_indicator(sim->RunForm->Indicator,FL_EXT_INDICATOR_RUNNING,            (100.0*difftime(actual_time,sim->start_time))/(sim->sim_parameter->run_time*60));      sim->last_act_time=actual_time;   }#if FL_INCLUDE_VERSION >= 89            fl_add_timeout(500,idle_Indicator,NULL);#else   return 0;#endif}FD_RunForm *create_form_RunForm(Eib_bcu2_sim *sim){  FL_OBJECT *obj;   int form_width=FL_EXT_INDICATOR_MINWIDTH+160;   int form_height=FL_EXT_INDICATOR_MINHEIGHT+40;   FD_RunForm *fdui=(FD_RunForm *)fl_calloc(1,sizeof(*fdui));      fdui->VisForm=fl_bgn_form(FL_NO_BOX,form_width,form_height);   fl_ext_formobjects_add_box(FL_UP_BOX,0,0,form_width,form_height,"",      FL_RESIZE_NONE,FL_NorthWest,FL_SouthEast);   fl_ext_formobjects_add_btn(&obj,FL_NORMAL_BUTTON,form_width-110,form_height-45,90,25,"Stop",         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);      fl_set_object_callback(obj,StopBtn_cb,0);   fl_end_form();   fdui->VisForm->fdui=fdui;   fdui->VisForm->u_vdata=sim;         fdui->Indicator=fl_ext_add_indicator(fdui->VisForm,20,20,         FL_EXT_INDICATOR_MINWIDTH,FL_EXT_INDICATOR_MINHEIGHT,FL_NoGravity);      return fdui;   }void RunTimeCounter_cb(FL_OBJECT *obj,long data){  Eib_bcu2_sim *sim=(Eib_bcu2_sim *)obj->form->u_vdata;   sim->act_parameter->run_time=fl_get_counter_value(obj);}void IntervalCounter_cb(FL_OBJECT *obj,long data){  Eib_bcu2_sim *sim=(Eib_bcu2_sim *)obj->form->u_vdata;   sim->act_parameter->write_interval=fl_get_counter_value(obj);}void MinLengthCounter_cb(FL_OBJECT *obj,long data){  Eib_bcu2_sim *sim=(Eib_bcu2_sim *)obj->form->u_vdata;   sim->act_parameter->min_len=fl_get_counter_value(obj);   fl_set_counter_bounds(sim->MainForm->MaxLengthCounter,fl_get_counter_value(obj),23);}void MaxLengthCounter_cb(FL_OBJECT *obj,long data){  Eib_bcu2_sim *sim=(Eib_bcu2_sim *)obj->form->u_vdata;   sim->act_parameter->max_len=fl_get_counter_value(obj);   fl_set_counter_bounds(sim->MainForm->MinLengthCounter,1,fl_get_counter_value(obj));}void ProcessCounter_cb(FL_OBJECT *obj,long data){  Eib_bcu2_sim *sim=(Eib_bcu2_sim *)obj->form->u_vdata;   sim->act_parameter->proc_count=fl_get_counter_value(obj);}void WModeCheckbtn_cb(FL_OBJECT *obj,long data){  Eib_bcu2_sim *sim=(Eib_bcu2_sim *)obj->form->u_vdata;      sim->act_parameter->wmode=(int)data;}void WIntervalCheckbtn_cb(FL_OBJECT *obj,long data){  Eib_bcu2_sim *sim=(Eib_bcu2_sim *)obj->form->u_vdata;      sim->act_parameter->winterval=(int)data;}      void StartBtn_cb(FL_OBJECT *obj,long data){  Eib_bcu2_sim *sim=(Eib_bcu2_sim *)obj->form->u_vdata;   int result;         fl_ext_deactivate_object(sim->MainForm->StartBtn);   *(sim->sim_parameter)=*(sim->act_parameter);   sim->cleanup_code=6;   if ((sim->shm_results_id=shmget(IPC_PRIVATE,2*sim->sim_parameter->proc_count*sizeof(Eib_bcu2_sim_shm),              0666|IPC_CREAT|IPC_EXCL))==-1)   {  make_InternalErrorPanel(sim->Panels+6,56);      fl_ext_panel1(sim->Panels+6,sim,cleanup);      return;   }   sim->cleanup_code=7;   if ((sim->shm_results=(Eib_bcu2_sim_shm *)shmat(sim->shm_results_id,NULL,0))==(void *)-1)   {  make_InternalErrorPanel(sim->Panels+6,57);      fl_ext_panel1(sim->Panels+6,sim,cleanup);      return;   }   sim->cleanup_code=8;   if (ioctl(sim->eib_fd,FT_RESET_STAT)<0)   {  switch(result=errno)      {  case EBUSY:  fl_ext_panel1(sim->Panels+4,sim,cleanup);                      break;         case EACCES: fl_ext_panel1(sim->Panels+10,sim,cleanup);                      break;      }      return;   }   time(&sim->stat_reset_time);   switch(sim->split_pid=fork())   {  case  0: sim_split();      case -1: make_InternalErrorPanel(sim->Panels+6,58);               fl_ext_panel1(sim->Panels+6,sim,cleanup);               return;      default: sim->state=EIBDRV_SIM_STATE_RUNNING;               sim->cleanup_code=5;               break;   }      fl_ext_reset_indicator(sim->RunForm->Indicator);   fl_ext_start_indicator(sim->RunForm->Indicator);   time(&sim->start_time);   fl_ext_update_indicator(sim->RunForm->Indicator,FL_EXT_INDICATOR_RUNNING,0);   fl_show_form(sim->RunForm->VisForm,FL_PLACE_CENTER,FL_TRANSIENT,"eibdrv_sim");#if FL_INCLUDE_VERSION >= 89   fl_add_timeout(500,idle_Indicator,NULL);#else   fl_set_idle_callback(idle_Indicator,0);#endif   }void StopBtn_cb(FL_OBJECT *obj,long data){  Eib_bcu2_sim *sim=(Eib_bcu2_sim *)obj->form->u_vdata;   if (sim->state==EIBDRV_SIM_STATE_RUNNING)      kill(-sim->split_pid,SIGTERM);}void ExitBtn_cb(FL_OBJECT *obj,long data){  Eib_bcu2_sim *sim=(Eib_bcu2_sim *)obj->form->u_vdata;   fl_hide_form(obj->form);   if (sim->state==EIBDRV_SIM_STATE_RUNNING)   {  fl_hide_form(sim->RunForm->VisForm);#if FL_INCLUDE_VERSION < 89            fl_set_idle_callback(0,0);#endif      sim->state=EIBDRV_SIM_STATE_SHUTDOWN;    // wait for all processes in      kill(-sim->split_pid,SIGTERM);             // main_sigchld and exit   }   else   {  semctl(sim->sem_start_rw,0,IPC_RMID,(int)0);    // direct exit because no      semctl(sim->sem_shm_results,0,IPC_RMID,(int)0); // read or write processes       fl_free_form(sim->MainForm->VisForm);           // are running      fl_ext_free_indicator(sim->RunForm->Indicator);      fl_free_form(sim->RunForm->VisForm);      close(sim->eib_fd);      returnEib_bcu2_sim(sim);      fl_finish();      exit(0);   }}FD_MainForm *create_form_MainForm(Eib_bcu2_sim *sim){   FL_OBJECT *obj;   FD_MainForm *fdui = (FD_MainForm *) fl_calloc(1, sizeof(*fdui));   fdui->VisForm = fl_bgn_form(FL_NO_BOX, 520, 425);   fl_ext_formobjects_add_box(FL_UP_BOX,0,0,520,425,"",         FL_RESIZE_NONE,FL_NorthWest,FL_SouthEast);     fl_ext_formobjects_add_labelframe(FL_ENGRAVED_FRAME,20,20,325,80,"Settings",         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);   fl_ext_formobjects_add_text(&obj,FL_NO_BOX,35,30,40,20,"Device:",         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);   fl_ext_formobjects_add_text(&obj,FL_NO_BOX,35,55,40,20,"Mode:",         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);   fl_ext_formobjects_add_text(&fdui->DeviceText,FL_BORDER_BOX,80,30,250,20,"",         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);   fl_ext_formobjects_add_text(&fdui->ModeText,FL_BORDER_BOX,80,55,250,20,"",         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);   create_object_copyright(365,20);         fl_ext_formobjects_add_labelframe(FL_ENGRAVED_FRAME,20,120,370,145,"Simulation Parameter",         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);   fl_ext_formobjects_add_text(&obj,FL_NO_BOX,35,130,160,20,"Run Time (min):",         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);   fl_ext_formobjects_add_counter(&fdui->RunTimeCounter,FL_NORMAL_COUNTER,200,130,170,20,"",         FL_ALIGN_LEFT,1,1000,1,10,0,         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);      fl_set_counter_value(fdui->RunTimeCounter, 1);      sim->act_parameter->run_time=1;      fl_set_object_callback(fdui->RunTimeCounter,RunTimeCounter_cb,0);   fl_ext_formobjects_add_text(&obj,FL_NO_BOX,35,155,160,20,"Write Interval (ms):",         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);   fl_ext_formobjects_add_counter(&fdui->IntervalCounter,FL_NORMAL_COUNTER,200,155,170,20,"",         FL_ALIGN_LEFT,10,10000,1,100,0,         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);      fl_set_counter_value(fdui->IntervalCounter, 1000);      sim->act_parameter->write_interval=1000;      fl_set_object_callback(fdui->IntervalCounter,IntervalCounter_cb,0);   fl_ext_formobjects_add_text(&obj,FL_NO_BOX,35,180,160,20,"Minimal message length (Byte):",         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);   fl_ext_formobjects_add_counter(&fdui->MinLengthCounter,FL_SIMPLE_COUNTER,200,180,170,20,"",         FL_ALIGN_LEFT,1,23,1,1,0,         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);      fl_set_counter_value(fdui->MinLengthCounter, 1);      sim->act_parameter->min_len=1;      fl_set_object_callback(fdui->MinLengthCounter,MinLengthCounter_cb,0);   fl_ext_formobjects_add_text(&obj,FL_NO_BOX,35,205,160,20,"Maximal message length (Byte):",         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);   fl_ext_formobjects_add_counter(&fdui->MaxLengthCounter,FL_SIMPLE_COUNTER,200,205,170,20,"",         FL_ALIGN_LEFT,1,EIB_BUF_ELEMENT_SIZE,1,1,0,         FL_RESIZE_NONE,FL_NorthWest,FL_NorthWest);      fl_set_counter_value(fdui->MaxLengthCounter,EIB_BUF_ELEMENT_SIZE);      sim->act_parameter->max_len=EIB_BUF_ELEMENT_SIZE;      fl_set_object_callback(fdui->MaxLengthCounter,MaxLengthCounter_cb,0);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -