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

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

?? fusb_linux.cpp

?? 嵌入式開發(fā)板USB測試
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
   delete [] d_write_buffer;      if (d_read_work_in_progress)      free_urb (d_read_work_in_progress);  }    // ----------------------------------------------------------------    bool  fusb_ephandle_linux::start ()  {    if (d_started)      return true;                // already running      d_started = true;      if (d_input_p){               // fire off all the reads      usbdevfs_urb *urb;        int nerrors = 0;      while ((urb = free_list_get ()) != 0 && nerrors < d_nblocks){        if (!submit_urb (urb))          nerrors++;      }    }      return true;  }    //  // kill all i/o in progress.  // kill any completed but unprocessed transactions.  //  bool  fusb_ephandle_linux::stop ()  {    if (!d_started)      return true;      if (d_write_work_in_progress){      free_list_add (d_write_work_in_progress);      d_write_work_in_progress = 0;    }      if (d_read_work_in_progress){      free_list_add (d_read_work_in_progress);      d_read_work_in_progress = 0;      d_read_buffer = 0;      d_read_buffer_end = 0;    }      d_devhandle->_cancel_pending_rqsts (this);    d_devhandle->_reap (false);      while (1){      usbdevfs_urb *urb;      while ((urb = completed_list_get ()) != 0)        free_list_add (urb);        if (d_free_list.size () == (unsigned) d_nblocks)        break;        if (!d_devhandle->_reap(true))        break;    }      d_started = false;    return true;  }    // ----------------------------------------------------------------  //                      routines for writing   // ----------------------------------------------------------------    #if (MINIMIZE_TX_BUFFERING)    int   fusb_ephandle_linux::write(const void *buffer, int nbytes)  {    if (!d_started)      return -1;        if (d_input_p)      return -1;      assert(nbytes % 512 == 0);      unsigned char *src = (unsigned char *) buffer;      int n = 0;    while (n < nbytes){        usbdevfs_urb *urb = get_write_work_in_progress();      if (!urb)        return -1;      assert(urb->actual_length == 0);      int m = std::min(nbytes - n, MAX_BLOCK_SIZE);      urb->buffer = src;      urb->buffer_length = m;        n += m;      src += m;        if (!submit_urb(urb))        return -1;        d_write_work_in_progress = 0;    }      return n;  }    #else    int   fusb_ephandle_linux::write (const void *buffer, int nbytes)  {    if (!d_started)      return -1;        if (d_input_p)      return -1;      unsigned char *src = (unsigned char *) buffer;      int n = 0;    while (n < nbytes){        usbdevfs_urb *urb = get_write_work_in_progress ();      if (!urb)        return -1;      unsigned char *dst = (unsigned char *) urb->buffer;      int m = std::min (nbytes - n, urb->buffer_length - urb->actual_length);        memcpy (&dst[urb->actual_length], &src[n], m);      urb->actual_length += m;      n += m;        if (urb->actual_length == urb->buffer_length){        if (!submit_urb (urb))          return -1;        d_write_work_in_progress = 0;      }    }      return n;  }    #endif    usbdevfs_urb *  fusb_ephandle_linux::get_write_work_in_progress ()  {    // if we've already got some work in progress, return it      if (d_write_work_in_progress)      return d_write_work_in_progress;      while (1){        reap_complete_writes ();        usbdevfs_urb *urb = free_list_get ();        if (urb != 0){        assert (urb->actual_length == 0);        d_write_work_in_progress = urb;        return urb;      }        // The free list is empty.  Tell the device handle to reap.      // Anything it reaps for us will end up on our completed list.        if (!d_devhandle->_reap (true))        return 0;    }  }    void  fusb_ephandle_linux::reap_complete_writes ()  {    // take a look at the completed_list and xfer to free list after    // checking for errors.      usbdevfs_urb *urb;        while ((urb = completed_list_get ()) != 0){        // Check for any errors or short writes that were reported in the urb.      // The kernel sets status, actual_length and error_count.      // error_count is only used for ISO xfers.      // status is 0 if successful, else is an errno kind of thing        if (urb->status != 0){        fprintf (stderr, "fusb: (status %d) %s\n", urb->status, strerror (-urb->status));      }      else if (urb->actual_length != urb->buffer_length){        fprintf (stderr, "fusb: short write xfer: %d != %d\n",                 urb->actual_length, urb->buffer_length);      }        free_list_add (urb);    }  }    void  fusb_ephandle_linux::wait_for_completion ()  {    d_devhandle->_wait_for_completion ();  }    // ----------------------------------------------------------------  //                     routines for reading  // ----------------------------------------------------------------    int  fusb_ephandle_linux::read (void *buffer, int nbytes)  {    if (!d_started)      return -1;        if (!d_input_p)      return -1;      unsigned char *dst = (unsigned char *) buffer;      int n = 0;    while (n < nbytes){        if (d_read_buffer >= d_read_buffer_end)        if (!reload_read_buffer ())          return -1;        int m = std::min (nbytes - n, (int) (d_read_buffer_end - d_read_buffer));        memcpy (&dst[n], d_read_buffer, m);      d_read_buffer += m;      n += m;    }      return n;  }    bool  fusb_ephandle_linux::reload_read_buffer ()  {    assert (d_read_buffer >= d_read_buffer_end);      usbdevfs_urb *urb;      if (d_read_work_in_progress){      // We're done with this urb.  Fire off a read to refill it.      urb = d_read_work_in_progress;      d_read_work_in_progress = 0;      d_read_buffer = 0;      d_read_buffer_end = 0;      urb->actual_length = 0;      if (!submit_urb (urb))        return false;    }      while (1){        while ((urb = completed_list_get ()) == 0)        if (!d_devhandle->_reap (true))          return false;        // check result of completed read        if (urb->status != 0){        // We've got a problem. Report it and fail.        fprintf (stderr, "fusb: (rd status %d) %s\n", urb->status, strerror (-urb->status));        urb->actual_length = 0;        free_list_add (urb);        return false;      }        // we've got a happy urb, full of data...        d_read_work_in_progress = urb;      d_read_buffer = (unsigned char *) urb->buffer;      d_read_buffer_end = d_read_buffer + urb->actual_length;        return true;    }  }    // ----------------------------------------------------------------    void  fusb_ephandle_linux::free_list_add (usbdevfs_urb *urb)  {    assert (urb_get_ephandle (urb) == this);    urb->actual_length = 0;    d_free_list.push_back (urb);  }    usbdevfs_urb *  fusb_ephandle_linux::free_list_get ()  {    if (d_free_list.empty ())      return 0;      usbdevfs_urb *urb = d_free_list.front ();    d_free_list.pop_front ();    return urb;  }    void  fusb_ephandle_linux::completed_list_add (usbdevfs_urb *urb)  {    assert (urb_get_ephandle (urb) == this);    d_completed_list.push_back (urb);  }    usbdevfs_urb *  fusb_ephandle_linux::completed_list_get ()  {    if (d_completed_list.empty ())      return 0;      usbdevfs_urb *urb = d_completed_list.front ();    d_completed_list.pop_front ();    return urb;  }    /*   * Submit the urb.  If successful the urb ends up on the devhandle's   * pending list, otherwise, it's back on our free list.   */  bool  fusb_ephandle_linux::submit_urb (usbdevfs_urb *urb)  {    if (!d_devhandle->_submit_urb (urb)){// FIXME record the problem somewhere	fprintf (stderr, "_submit_urb failed\n");      free_list_add (urb);      return false;    }   return true;  }                            

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品乱码久久久久久久久| 日韩一区二区三区三四区视频在线观看 | 亚洲主播在线播放| 91网址在线看| 亚洲国产wwwccc36天堂| 久久精品视频在线免费观看 | 欧美美女一区二区在线观看| 亚洲综合免费观看高清完整版| 欧美日韩一区二区三区在线| 亚洲3atv精品一区二区三区| 欧美一区二区三区四区在线观看| 美日韩黄色大片| 日本一区二区三区免费乱视频| av一区二区三区在线| 亚洲永久精品国产| 日韩午夜在线观看视频| 国产99精品视频| 一区二区三区国产精华| 日韩一区和二区| 成人国产在线观看| 亚洲第一激情av| 日韩欧美在线123| 成人av电影在线观看| 亚洲成人福利片| 久久一区二区三区四区| 色综合天天在线| 卡一卡二国产精品| 日韩一区在线播放| 日韩一区二区三| 99re6这里只有精品视频在线观看| 亚洲免费视频中文字幕| 欧美大肚乱孕交hd孕妇| 99re这里只有精品视频首页| 日韩—二三区免费观看av| 国产欧美日韩精品一区| 欧美日韩三级一区| 成人性色生活片| 亚洲1区2区3区4区| 国产精品剧情在线亚洲| 91精品国产色综合久久| jlzzjlzz亚洲女人18| 男女男精品网站| 亚洲免费观看高清| 久久久精品国产免大香伊| 欧美在线视频你懂得| 国产激情一区二区三区| 亚洲电影一级片| 中文字幕中文字幕中文字幕亚洲无线| 正在播放亚洲一区| 99re成人在线| 国产成人欧美日韩在线电影| 免费精品视频在线| 夜夜嗨av一区二区三区中文字幕| 久久色在线视频| 91精品国产一区二区人妖| 一本大道久久a久久综合| 国产精品综合久久| 美女视频网站久久| 午夜精品福利一区二区三区蜜桃| 一区二区中文视频| 国产视频一区二区在线观看| 日韩亚洲欧美中文三级| 欧美日韩精品久久久| 色哟哟日韩精品| 成人avav影音| 成人晚上爱看视频| 国产精品一品二品| 国产在线精品视频| 九色|91porny| 麻豆中文一区二区| 美女精品自拍一二三四| 日韩成人精品在线观看| 国产精品一区二区免费不卡| 视频一区二区三区入口| 亚洲视频在线一区| 亚洲特黄一级片| 成人欧美一区二区三区白人| 欧美高清在线一区二区| 成人av片在线观看| 高清视频一区二区| 久久99久久99小草精品免视看| 亚洲韩国精品一区| 夜夜精品视频一区二区| 亚洲国产三级在线| 亚洲综合激情网| 亚洲国产视频一区二区| 亚洲成av人片在www色猫咪| 亚洲午夜一区二区三区| 亚洲成a人v欧美综合天堂下载| 亚洲高清不卡在线| 日本在线不卡视频| 精品一区二区三区免费播放| 国产真实乱对白精彩久久| 国产黄色精品视频| 粉嫩av一区二区三区粉嫩| 成人av在线一区二区三区| eeuss鲁片一区二区三区在线看| 不卡高清视频专区| 在线一区二区三区四区| 欧美区在线观看| 日韩欧美一级二级三级| 欧美国产欧美亚州国产日韩mv天天看完整| 国产欧美综合在线| 亚洲精品高清在线观看| 国产裸体歌舞团一区二区| 国内成人精品2018免费看| 高潮精品一区videoshd| 97久久久精品综合88久久| 欧美午夜一区二区| 日韩亚洲欧美一区二区三区| 国产亚洲精品福利| 一区二区三区在线观看国产| 日本v片在线高清不卡在线观看| 国产综合色在线视频区| 91热门视频在线观看| 欧美日韩国产另类一区| 久久久精品tv| 亚洲一区在线看| 国产一区视频在线看| 91麻豆国产福利精品| 欧美一区二区三区影视| 国产精品久久99| 亚洲高清在线视频| 国产河南妇女毛片精品久久久| 91免费精品国自产拍在线不卡| 91精选在线观看| 国产精品麻豆网站| 日韩经典中文字幕一区| 不卡电影免费在线播放一区| 6080午夜不卡| 一区二区中文字幕在线| 精品一区二区在线看| 91福利视频久久久久| 精品久久一区二区| 亚洲午夜在线视频| 成人激情图片网| 精品三级在线观看| 亚洲国产精品久久人人爱| 丁香激情综合国产| 日韩欧美不卡一区| 亚洲电影视频在线| 成人精品一区二区三区四区| 欧美一级理论片| 亚洲午夜精品在线| 91免费看视频| 国产欧美一区二区精品忘忧草| 日韩高清中文字幕一区| 91黄色免费观看| 中文字幕乱码久久午夜不卡| 久久99精品国产麻豆不卡| 欧美日韩午夜精品| 亚洲精品国产a| 99这里只有久久精品视频| 久久久91精品国产一区二区精品 | 日韩理论电影院| 成人综合在线观看| 久久久久国产精品麻豆| 美女www一区二区| 91精品国产91久久久久久最新毛片 | 在线观看亚洲专区| 国产精品乱人伦| 成人午夜精品在线| 国产亚洲精品7777| 国产麻豆成人精品| 国产亚洲一本大道中文在线| 狠狠色2019综合网| 久久综合九色欧美综合狠狠| 美女视频一区在线观看| 欧美一级片免费看| 蜜臀精品一区二区三区在线观看 | 欧美男女性生活在线直播观看 | 亚洲国产精品一区二区尤物区| 色呦呦一区二区三区| 亚洲免费在线电影| 色综合久久久网| 一区二区三区四区视频精品免费 | 在线电影国产精品| 亚洲成a人片在线观看中文| 欧美日韩在线观看一区二区| 亚洲影视资源网| 欧美日韩一区二区三区四区 | 美女一区二区久久| 久久女同性恋中文字幕| 成人午夜激情视频| 亚洲女厕所小便bbb| 欧美日韩一区二区在线视频| 午夜久久久影院| 欧美一区二区三区爱爱| 精品一区二区日韩| 国产色婷婷亚洲99精品小说| caoporen国产精品视频| 伊人夜夜躁av伊人久久| 欧美视频第二页| 蜜桃久久精品一区二区| 久久美女高清视频| 成人激情图片网| 亚洲一区二区不卡免费| 欧美精品久久99久久在免费线| 另类欧美日韩国产在线| 欧美国产成人在线|