亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ul_ufsm.c

?? linux下的RS485的驅動 值得一看
?? C
字號:
/*******************************************************************  uLan Communication - uL_DRV - multiplatform uLan driver  ul_ufsm.c	- finite state machine for building and receiving                  message frames on UART devices  (C) Copyright 1996-2004 by Pavel Pisa - project originator        http://cmp.felk.cvut.cz/~pisa  (C) Copyright 1996-2004 PiKRON Ltd.        http://www.pikron.com  (C) Copyright 2002-2004 Petr Smolik    The uLan driver project can be used and distributed   in compliance with any of next licenses   - GPL - GNU Public License     See file COPYING for details.   - LGPL - Lesser GNU Public License   - MPL - Mozilla Public License   - and other licenses added by project originator  Code can be modified and re-distributed under any combination  of the above listed licenses. If contributor does not agree with  some of the licenses, he/she can delete appropriate line.  WARNING: if you delete all lines, you are not allowed to  distribute code or sources in any form. *******************************************************************//*******************************************************************//* uLan main driver automata loop */ul_call_fnc uld_drvloop_proc_1, uld_drvloop_proc_2;ul_call_fnc uld_drvloop_rec_1, uld_drvloop_rec_2, uld_drvloop_rec_3, uld_drvloop_rec_4;int uld_drvloop(ul_drv *udrv, int ret_code){  if(((udrv->char_buff==(udrv->my_adr|0x100))||      (udrv->char_buff==0x100))&&     (udrv->char_buff==udrv->last_ctrl))  { /* it seems, that somebody wants us  */    udrv->con_flg=0;    udrv->xor_sum=udrv->char_buff+1;    UL_FCALL2(uld_recbeg_1,uld_drvloop_rec_1);    return UL_RC_PROC;  };  if(udrv->prep_bll.first!=NULL) /* we have something to proccess  */  {    LOG_CHIO(" call connect ");    UL_FCALL2(*udrv->fnc_connect,uld_drvloop_proc_1);    return UL_RC_PROC;  };  udrv->char_buff=0;  UL_FCALL(*udrv->fnc_recch);  return UL_RC_PROC;};int uld_drvloop_proc_error(ul_drv *udrv){ ul_mem_blk *mes;  udrv->fnc_timeout=NULL;  LOG_MESSAGES("uLan : send message ERROR\n");  if((mes=udrv->con_message)!=NULL)  {udrv->con_message=NULL;   if((UL_BLK_HEAD(mes).flg&UL_BFL_NORE)||      (++UL_BLK_HEAD(mes).retry_cnt>=UL_RETRY_CNT))   { UL_BLK_HEAD(mes).flg|=UL_BFL_FAIL;     ul_bll_move_mes(&udrv->proc_bll,mes);     LOG_FAILS(KERN_ERR "uLan : send message (d:%d,s:%d,c:%X,f:%X,l:%d) FAILED after %d attempts\n",                   UL_BLK_HEAD(mes).dadr,UL_BLK_HEAD(mes).sadr,                   UL_BLK_HEAD(mes).cmd,UL_BLK_HEAD(mes).flg,                   UL_BLK_HEAD(mes).len,UL_BLK_HEAD(mes).retry_cnt);     SCHEDULE_BH(udrv);   }else if(UL_BLK_HEAD(mes).flg&UL_BFL_REWA)     ul_bll_move_mes(&udrv->prep_bll,mes);  };  udrv->char_buff=0x1FF;   return 0;};int uld_drvloop_proc_1(ul_drv *udrv, int ret_code){  if(ret_code<0) {UL_FNEXT(uld_drvloop); return UL_RC_PROC;};  LOG_MESSAGES("uLan : begin of send message\n");  udrv->fnc_timeout=&uld_drvloop_proc_error;  udrv->con_message=udrv->prep_bll.first;  UL_FCALL2(uld_prmess,uld_drvloop_proc_2);  return UL_RC_PROC;};int uld_drvloop_proc_2(ul_drv *udrv, int ret_code){  ul_mem_blk *mes;  udrv->fnc_timeout=NULL;  udrv->char_buff=udrv->my_adr|0x180;   UL_FCALL2(*udrv->fnc_sndch,uld_drvloop);  if(udrv->con_message==NULL) return UL_RC_PROC;  if(ret_code<0)  {uld_drvloop_proc_error(udrv);  }else{    LOG_MESSAGES("uLan : send message finished OK\n");    mes=udrv->con_message;    udrv->con_message=NULL;    if(UL_BLK_HEAD(mes).flg&UL_BFL_M2IN ||        UL_BLK_HEAD(mes).dadr==udrv->my_adr)    {      ul_bll_move_mes(&udrv->proc_bll,mes);      SCHEDULE_BH(udrv);    } else     ul_bll_free_mes(mes);  };  return UL_RC_PROC;};int uld_drvloop_rec_error(ul_drv *udrv){ ul_mem_blk *mes;  udrv->fnc_timeout=NULL;  LOG_MESSAGES("uLan : receive message ERROR\n");  if((mes=udrv->con_message)!=NULL)  { udrv->con_message=NULL;    ul_bll_free_mes(mes);  };  udrv->char_buff=0x1FF;  return 0;};int uld_drvloop_rec_1(ul_drv *udrv, int ret_code){ ul_mem_blk *mes;  if(ret_code<0) {UL_FNEXT(uld_drvloop); return UL_RC_PROC;};  LOG_MESSAGES("uLan : begin of receive message\n");  mes=ul_new_frame_head(udrv,udrv->con_dadr,udrv->con_sadr,                 	udrv->con_cmd,0);  if(mes==NULL)   { LOG_FAILS(KERN_ERR "uLan : NO memory for receive\n");    UL_FNEXT(uld_drvloop); return UL_RC_PROC;  };  ul_bll_ins(&udrv->work_bll,mes);  udrv->con_message=mes;  udrv->fnc_timeout=&uld_drvloop_rec_error;  udrv->con_frame=mes;  UL_FCALL2(uld_recdata,uld_drvloop_rec_2);  return UL_RC_PROC;};int uld_drvloop_rec_2(ul_drv *udrv, int ret_code){  if(ret_code<0)   { uld_drvloop_rec_error(udrv);    UL_FNEXT(uld_drvloop); return UL_RC_PROC;  };  #ifdef UL_WITH_IAC    UL_FCALL2(uld_recend,uld_drvloop_rec_3);  #else     UL_FCALL2(uld_recend,uld_drvloop_rec_4);  #endif /* UL_WITH_IAC  */  return UL_RC_PROC;};#ifdef UL_WITH_IACint uld_drvloop_rec_3(ul_drv *udrv, int ret_code){   if(ret_code<0)   { uld_drvloop_rec_error(udrv);    UL_FNEXT(uld_drvloop); return UL_RC_PROC;  };  UL_FCALL2(uld_prmess_iac,uld_drvloop_rec_4);  return UL_RC_PROC; }#endif /* UL_WITH_IAC  */int uld_drvloop_rec_4(ul_drv *udrv, int ret_code){ ul_mem_blk *mes;  if(ret_code<0)   { uld_drvloop_rec_error(udrv);    UL_FNEXT(uld_drvloop); return UL_RC_PROC;  };  mes=udrv->con_message;  udrv->fnc_timeout=NULL;  udrv->con_message=NULL;  if (ret_code==UL_RC_FREEMSG) {    ul_bll_free_mes(mes);    UL_FNEXT(uld_drvloop);    LOG_MESSAGES("uLan : receive message was freed\n");    return UL_RC_PROC;  }  UL_BLK_HEAD(mes).stamp=ul_gen_stamp();  ul_bll_move_mes(&udrv->proc_bll,mes);  SCHEDULE_BH(udrv);  UL_FNEXT(uld_drvloop);  LOG_MESSAGES("uLan : end of receive message\n");  return UL_RC_PROC;};int ul_max_cycle_cnt=0;int ul_max_cycle_time=0;int ul_irq_seq_num=0;#ifdef ENABLE_UL_IRQ_STALE_WDG	int ul_irq_stale_wdg_cnt=0;#endif /* ENABLE_UL_IRQ_STALE_WDG *//*** Interrupt entry point ***/ul_irqreturn_t uld_irq_handler(UL_IRQ_HANDLER_ARGS(intno, dev_id)){  #ifdef UL_GLOBAL_IRQ_LOCK_FINI   UL_GLOBAL_IRQ_LOCK_FINI  #endif  int irq_loop_cnt=0;  int cycle_cnt=0;  int cycle_time;  int ret_code;  #ifdef UL_LOG_ENABLE    int seq_num=++ul_irq_seq_num;  #endif  ul_drv* udrv=(ul_drv*)dev_id;  if(udrv->magic!=UL_DRV_MAGIC)  {    #ifdef FOR_LINUX_KERNEL     panic("uld_irq_handler : BAD udrv magic !!!");    #elif defined(_WIN32)     UL_PRINTF("uld_irq_handler : BAD udrv magic !!!\n");     return FALSE;    #elif defined(__DJGPP__)||defined(CONFIG_OC_UL_DRV_SYSLESS)     UL_PRINTF("uld_irq_handler : BAD udrv magic !!!\n");     return;    #else     error("uld_irq_handler : BAD udrv magic !!!");    #endif  }  #ifdef UL_GLOBAL_IRQ_LOCK   UL_GLOBAL_IRQ_LOCK;  #endif  if(uld_test_dfl(udrv,CHIPOK))  do  {     #ifdef ENABLE_UL_IRQ_STALE_WDG	    /* last rescue code for stale IRQ !!!!!! */    if(ul_irq_stale_wdg_cnt++>10000)    {      SCHEDULE_BH(udrv); /* Test activation of BH */      if(ul_irq_stale_wdg_cnt>20000)      {	LOG_FATAL(KERN_CRIT "Stale IRQ uLan IRQ signal !!!\n");	udrv->fnc_cctrl(udrv,UL_CC_GENIRQ,0);	if(ul_irq_stale_wdg_cnt<25000) break;	#ifdef FOR_LINUX_KERNEL	 LOG_FATAL(KERN_CRIT "Disabling IRQ %d forever !!!\n",intno);	 disable_irq_nosync(intno);	#endif	break;      }    }     #endif /* ENABLE_UL_IRQ_STALE_WDG */    do /* IRQ fully SMP and re-entrant processing */    {      uld_set_dfl(udrv,ASK_ISR);      if(uld_test_and_set_dfl(udrv,IN_ISR))      { LOG_IRQ("uLan IRQ %d arrived, but else is in ISR\n",intno);        break;      };      /* only one CPU in no nested levels at time */      uld_clear_dfl(udrv,ASK_ISR);      while((ret_code=udrv->fnc_pool(udrv))!=0)      {	LOG_SEQNUM("\n<<< seq %d ",seq_num);	LOG_IRQ("uLan IRQ %d arrived, code = %d\n",intno,ret_code);	cycle_time=RDTSC;	while((ret_code=udrv->fnc_act(udrv,ret_code))!=0) 	  if(cycle_cnt++>100) 	    {LOG_FATAL(KERN_CRIT "Infinite loop in uLan IRQ handler !!!\n");break;};	cycle_time=RDTSC-cycle_time;	if(cycle_cnt>ul_max_cycle_cnt) ul_max_cycle_cnt=cycle_cnt;	if(cycle_time>ul_max_cycle_time) ul_max_cycle_time=cycle_time;	LOG_SEQNUM(" seq %d >>>",seq_num);	if(irq_loop_cnt++>10)	{ LOG_FATAL(KERN_CRIT "Stale IRQ - uLan state handlers !!!\n");	  udrv->fnc_cctrl(udrv,UL_CC_GENIRQ,0);	  break;	};	uld_atomic_clear_dfl(udrv,NACTIV);      };      uld_atomic_clear_dfl(udrv,IN_ISR);    }    while(uld_atomic_test_dfl(udrv,ASK_ISR));  }while(0);  #ifdef UL_GLOBAL_IRQ_UNLOCK   UL_GLOBAL_IRQ_UNLOCK;  #endif   return UL_IRQ_RETVAL(irq_loop_cnt);};/*** Timeout entry point ***/void uld_timeout(ul_drv *udrv){  #ifdef UL_GLOBAL_IRQ_LOCK_FINI   UL_GLOBAL_IRQ_LOCK_FINI  #endif  #if defined(_WIN32)&&defined(UL_WITH_PCI)   KIRQL old_irql;  #endif  int cycle_cnt=0;  int cycle_time;  int ret_code=0;  #ifdef UL_GLOBAL_IRQ_LOCK   UL_GLOBAL_IRQ_LOCK;  #endif  LOG_IRQ("uLan timeout activated\n");  if(uld_test_dfl(udrv,CHIPOK))  {    #ifdef FOR_LINUX_KERNEL    if(udrv->irq) disable_irq_nosync(udrv->irq);    #elif defined(_WIN32)&&defined(UL_WITH_PCI)    KeRaiseIrql(uL_SpinLock_Irql,&old_irql);    #endif    do    {      if(uld_test_and_set_dfl(udrv,IN_ISR))      { LOG_IRQ("uLan timeout, but else is in ISR\n");        break;      };      /* only one CPU with no nested levels goes there */      uld_clear_dfl(udrv,ASK_ISR);      if((ret_code=udrv->fnc_pool(udrv))==0)      {/* if first pass check for timeout conditions */	if(!cycle_cnt&&(uld_atomic_test_dfl(udrv,NACTIV)||            (udrv->last_ctrl&0x80)))	{ cycle_cnt++;	  uld_clear_dfl(udrv,WDFORCED);	  if(udrv->fnc_timeout) ret_code=udrv->fnc_timeout(udrv);	  if(ret_code==0)	  {udrv->fnc_sp=&udrv->fnc_stack[0];	   udrv->fnc_act=&uld_drvloop;	   ret_code=UL_RC_ACTIVATE;	  };	};      };      cycle_time=RDTSC;      while(ret_code)      { ret_code=udrv->fnc_act(udrv,ret_code);        if(cycle_cnt++>100) 	  {LOG_FATAL(KERN_CRIT "Infinite loop in uLan Timeout handler !!!\n");break;};      };      cycle_time=RDTSC-cycle_time;      if(cycle_cnt>ul_max_cycle_cnt) ul_max_cycle_cnt=cycle_cnt;      if(cycle_time>ul_max_cycle_time) ul_max_cycle_time=cycle_time;      uld_clear_dfl(udrv,NACTIV);      uld_atomic_clear_dfl(udrv,IN_ISR);    }    while(uld_atomic_test_dfl(udrv,ASK_ISR));    #ifdef FOR_LINUX_KERNEL     if(udrv->irq) enable_irq(udrv->irq);    #elif defined(_WIN32)&&defined(UL_WITH_PCI)     KeLowerIrql(old_irql);    #endif  };  #ifdef UL_GLOBAL_IRQ_UNLOCK   UL_GLOBAL_IRQ_UNLOCK;  #endif};/* link watchdog timer function */#ifdef _WIN32VOID  ulan_wd_dpc(IN PKDPC Dpc,IN PVOID data,		  IN PVOID arg1,IN PVOID arg2)#else /* _WIN32 */ void ulan_do_wd_timer(unsigned long data)#endif /* _WIN32 */{  ul_drv* udrv=(ul_drv*)data;  if(udrv->magic!=UL_DRV_MAGIC)  {    #ifdef FOR_LINUX_KERNEL     panic("ulan_do_wd_timer : BAD udrv magic !!!");    #elif defined(_WIN32)||defined(__DJGPP__)||defined(CONFIG_OC_UL_DRV_SYSLESS)     UL_PRINTF("ulan_do_wd_timer : BAD udrv magic !!!\n");     return;    #else     error("ulan_do_wd_timer : BAD udrv magic !!!");    #endif  }  if(!uld_test_dfl(udrv,CHIPOK)) return;  if((udrv->prep_bll.first!=NULL)||uld_test_dfl(udrv,WDFORCED))  {    if(uld_test_and_set_dfl(udrv,NACTIV)||      (udrv->last_ctrl&0x80)) uld_timeout(udrv);    #ifndef _WIN32       SCHEDULE_UDRV_WDTIM(udrv,jiffies+ULD_HZ/25+1);    #else /* _WIN32 */     { LARGE_INTEGER delay;       delay=RtlConvertLongToLargeInteger(-40*10000);       KeSetTimer(&udrv->wd_timer,delay,&udrv->wd_timer_dpc);     }    #endif /* _WIN32 */  };};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看亚洲精品视频| 亚洲少妇最新在线视频| 日韩高清不卡在线| 亚洲精品在线网站| 日韩视频免费观看高清在线视频| 911精品国产一区二区在线| 亚洲一区在线视频观看| 日韩免费观看高清完整版| 91免费精品国自产拍在线不卡| 青青草国产成人av片免费| 国产精品丝袜一区| 欧美一区二区视频观看视频| 国产精品亚洲第一区在线暖暖韩国| 欧美国产国产综合| 欧美色大人视频| 91毛片在线观看| 一本色道久久综合亚洲aⅴ蜜桃| 欧美日韩三级视频| 国产福利不卡视频| 亚洲免费观看高清完整版在线| 日韩毛片高清在线播放| 亚洲成人自拍偷拍| 免费三级欧美电影| 国产主播一区二区三区| 大尺度一区二区| av资源网一区| 精品视频1区2区3区| 日韩精品自拍偷拍| 欧美国产欧美综合| 一区二区三区四区在线免费观看 | 久久久久久久久久久久久久久99| 久久九九全国免费| 亚洲最大成人综合| 老司机精品视频线观看86| 福利一区福利二区| 色猫猫国产区一区二在线视频| 欧美一区二区观看视频| 国产欧美日本一区二区三区| 亚洲激情图片qvod| 狠狠色丁香婷婷综合久久片| 亚洲激情自拍偷拍| 亚洲成av人片在线| 国内精品写真在线观看| 色偷偷88欧美精品久久久| 91欧美激情一区二区三区成人| 在线观看免费亚洲| 精品91自产拍在线观看一区| 欧美大黄免费观看| 国产精品麻豆网站| 亚洲国产aⅴ成人精品无吗| 婷婷国产在线综合| 99国产精品久| 亚洲成人精品一区二区| 国产酒店精品激情| 欧美性淫爽ww久久久久无| 欧美岛国在线观看| 亚洲三级在线播放| 麻豆精品久久久| 日本成人在线一区| 99精品视频一区二区三区| 欧美日韩免费视频| 国产欧美综合色| 免费看日韩精品| 91精品国产综合久久精品麻豆 | 蜜桃久久久久久| 国产剧情一区二区三区| 欧美一区二区三区四区视频| 中文久久乱码一区二区| 丝袜诱惑亚洲看片| 一本一道波多野结衣一区二区| 亚洲精品一区二区三区在线观看 | 777久久久精品| 国产亚洲一区二区三区四区| 国产成人久久精品77777最新版本| 欧美日韩一二三| 国产v日产∨综合v精品视频| 国产三级欧美三级日产三级99| 一本久久精品一区二区| 亚洲欧美视频在线观看| 亚洲男帅同性gay1069| 狠狠色丁香久久婷婷综| 欧美女孩性生活视频| 蜜乳av一区二区| 亚洲电影一区二区三区| 欧美国产成人精品| 久久综合色8888| 中文字幕在线不卡| 亚洲主播在线观看| 91丨国产丨九色丨pron| 欧美高清在线一区| 国产一区二区0| 亚洲精品一区二区在线观看| 老司机精品视频在线| 成人午夜伦理影院| 日韩久久一区二区| 97国产一区二区| 亚洲午夜私人影院| 欧美日韩视频专区在线播放| 亚洲午夜精品17c| 欧美视频你懂的| 亚洲免费观看视频| 欧美亚洲尤物久久| 午夜国产精品一区| 亚洲人成亚洲人成在线观看图片 | 色婷婷久久久综合中文字幕| 中文字幕欧美区| 国产.欧美.日韩| 国产精品无码永久免费888| 国产99久久久久| 国产精品污www在线观看| 波多野结衣中文字幕一区二区三区 | av中文字幕不卡| 国产喷白浆一区二区三区| 成人一区二区三区中文字幕| 久久日韩精品一区二区五区| 高清久久久久久| 国产精品久久久久久久浪潮网站| 91在线视频官网| 亚洲成人综合网站| 日韩美女主播在线视频一区二区三区| 麻豆国产精品官网| 国产天堂亚洲国产碰碰| av高清久久久| 亚洲午夜国产一区99re久久| 日韩电影免费在线看| 成人h版在线观看| 亚洲激情五月婷婷| 99精品久久久久久| 亚洲国产成人高清精品| 日韩欧美国产电影| 丁香亚洲综合激情啪啪综合| 17c精品麻豆一区二区免费| 在线免费观看成人短视频| 日韩精品1区2区3区| 久久久精品tv| 日本电影欧美片| 男人操女人的视频在线观看欧美| 久久网站热最新地址| 99视频一区二区| 天天色综合天天| 国产欧美中文在线| 欧美又粗又大又爽| 久久国产欧美日韩精品| 国产精品久久久久久久久久免费看 | 日本欧美一区二区| 中日韩免费视频中文字幕| 在线观看网站黄不卡| 国产综合久久久久影院| 亚洲欧美激情小说另类| 精品精品欲导航| 日本乱码高清不卡字幕| 蜜桃一区二区三区四区| 国产精品美女久久久久aⅴ国产馆| 欧美色图激情小说| 大尺度一区二区| 日韩电影一区二区三区四区| 亚洲欧洲性图库| 日韩三区在线观看| 大陆成人av片| 美日韩一级片在线观看| 亚洲精品一二三四区| 久久久久久亚洲综合影院红桃| 欧美色涩在线第一页| 成人av电影在线观看| 麻豆成人久久精品二区三区小说| 亚洲丝袜美腿综合| www国产亚洲精品久久麻豆| 在线观看区一区二| 国产91精品一区二区麻豆网站| 亚洲一区二区在线免费观看视频| 国产清纯在线一区二区www| 91精品国产综合久久久久久久 | av激情亚洲男人天堂| 蜜臂av日日欢夜夜爽一区| 亚洲欧美一区二区三区极速播放 | 欧美一级免费大片| 色噜噜狠狠一区二区三区果冻| 国产成人在线网站| 美腿丝袜在线亚洲一区| 亚洲成人激情av| 一区二区高清视频在线观看| 亚洲国产精品二十页| 久久综合久久鬼色| 欧美一级夜夜爽| 在线播放欧美女士性生活| 日本乱人伦一区| 色综合天天性综合| 丁香亚洲综合激情啪啪综合| 国产乱码精品一区二区三区忘忧草| 亚洲女爱视频在线| 在线精品视频一区二区| 中文av一区二区| 91麻豆精品国产91久久久久久久久 | 色婷婷精品大视频在线蜜桃视频| 欧美一级久久久久久久大片| 一区二区视频免费在线观看| 国产精品日韩精品欧美在线| 日韩一区二区在线观看视频播放| 欧美在线观看一二区| www.欧美日韩|