<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416723&amp;view=findpost&amp;p=3820435</guid>
        <pubDate>Thu, 06 Feb 2020 09:04:56 +0000</pubDate>
        <title>Перечислить USB-устройства</title>
        <link>https://forum.sources.ru/index.php?showtopic=416723&amp;view=findpost&amp;p=3820435</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416723&view=findpost&p=3820429'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2020-02-06T08:36:50+00:00">06.02.20, 08:36</time></span><div class='quote '>Честно не помню уже для чего</div></div><br>
Я помню :) Это чтобы либа могла сбрасывать в stderr протокол в нужном уровне дебаг-сообщений.<br>
Поэтому это не неправильно. Я нашел для себя чуток полезного кода из исходников либы:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">enum libusb_error {</div><div class="code_line">&nbsp;&nbsp; &nbsp; LIBUSB_SUCCESS = 0,</div><div class="code_line">&nbsp;&nbsp; &nbsp; LIBUSB_ERROR_IO = -1,</div><div class="code_line">&nbsp;&nbsp; &nbsp; LIBUSB_ERROR_INVALID_PARAM = -2,</div><div class="code_line">&nbsp;&nbsp; &nbsp; LIBUSB_ERROR_ACCESS = -3,</div><div class="code_line">&nbsp;&nbsp; &nbsp; LIBUSB_ERROR_NO_DEVICE = -4,</div><div class="code_line">&nbsp;&nbsp; &nbsp; LIBUSB_ERROR_NOT_FOUND = -5,</div><div class="code_line">&nbsp;&nbsp; &nbsp; LIBUSB_ERROR_BUSY = -6,</div><div class="code_line">&nbsp;&nbsp; &nbsp; LIBUSB_ERROR_TIMEOUT = -7,</div><div class="code_line">&nbsp;&nbsp; &nbsp; LIBUSB_ERROR_OVERFLOW = -8,</div><div class="code_line">&nbsp;&nbsp; &nbsp; LIBUSB_ERROR_PIPE = -9,</div><div class="code_line">&nbsp;&nbsp; &nbsp; LIBUSB_ERROR_INTERRUPTED = -10,</div><div class="code_line">&nbsp;&nbsp; &nbsp; LIBUSB_ERROR_NO_MEM = -11,</div><div class="code_line">&nbsp;&nbsp; &nbsp; LIBUSB_ERROR_NOT_SUPPORTED = -12,</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; /* NB: Remember to update LIBUSB_ERROR_COUNT below as well as the</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;message strings in strerror.c when adding new error codes here. */</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; LIBUSB_ERROR_OTHER = -99,</div><div class="code_line">&nbsp;};</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-06T12:15:20+03:00">06.02.20, 09:15</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416723&view=findpost&p=3820429'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2020-02-06T08:36:50+00:00">06.02.20, 08:36</time></span><div class='quote '>libusb_kernel_driver_active(fHadnle, INTERFACE)</div></div><br>
Это *nix only. Но я и без подключения к нему вытягиваю описания. См UPD, только рутовые права нужны оказались.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416723&amp;view=findpost&amp;p=3820429</guid>
        <pubDate>Thu, 06 Feb 2020 08:36:50 +0000</pubDate>
        <title>Перечислить USB-устройства</title>
        <link>https://forum.sources.ru/index.php?showtopic=416723&amp;view=findpost&amp;p=3820429</link>
        <description><![CDATA[Pavia: 0) libusb - кривая сома по себе.<br>
Инициализация у вас не правильно. <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp;libusb_init(NULL);</div><div class="code_line">&nbsp;&nbsp; &nbsp;libusb_set_debug(NULL, 255); // необходимо добавить</div></ol></div></div></div></div><br>
Честно не помню уже для чего но исходный код libusb открыт можете посмотреть. <br>
<br>
1) По первому вопросу у вас основная ошибка в том что вы не подключились к драйверу<br>
libusb_get_string_descriptor_ascii выполняет посылки на устройства, а без подсоединения к драйверу это не будет работать.И да если вы забудете отсоединится, то повторно тоже работать не будет. <br>
Так что нужен вот такой вот код:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp;fHadnle = libusb_open_device_with_vid_pid(NULL, MyDevice_VID, MyDevice_PID);</div><div class="code_line">&nbsp;&nbsp; &nbsp;fFailed=false;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int ck=-1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (fHadnle==NULL)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fFailed=true;</div><div class="code_line">&nbsp;&nbsp; &nbsp;} else {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const int INTERFACE = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (libusb_kernel_driver_active(fHadnle, INTERFACE))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;libusb_detach_kernel_driver(fHadnle, INTERFACE);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ck = libusb_claim_interface(fHadnle, INTERFACE);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (ck&#60;0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;qDebug(lError) &#60;&#60; &quot;Ошибка захвата USB интерфейса=&quot; &#60;&#60; libusb_error_name(ck);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fFailed=true;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div></ol></div></div></div></div><br>
а вот после него можете вызывать свой libusb_get_string_descriptor_ascii<br>
<br>
2)<br>
По второму вопросу. Это от консоли не зависит и вообще насколько помню это принципиально не решается. Но вы можете попробовать разные драйверы(провайдеры) их в том году было 3 штуки: <br>
- libusbK-3.0.7.0-bin-chk<br>
- два других не помню.]]></description>
        <author>Pavia</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416723&amp;view=findpost&amp;p=3820390</guid>
        <pubDate>Wed, 05 Feb 2020 21:43:05 +0000</pubDate>
        <title>Перечислить USB-устройства</title>
        <link>https://forum.sources.ru/index.php?showtopic=416723&amp;view=findpost&amp;p=3820390</link>
        <description><![CDATA[JoeUser: Буэнос диас, амигос&#33;<br>
<br>
Настал момент, надо поработать с USB-устройствами. Нашел либу <strong class='tag-b'>libusb</strong> и решил сделать сабж.<br>
Вывод решил оформить как в линуксовой команде lsusb, типа:<br>
<br>
<img class='tag-img' src='https://i111.fastpic.ru/big/2020/0206/bc/d0dd5c2b51d22b96e958089ba571e4bc.png' alt='user posted image'><br>
<br>
но моя сборка под Линукс выдает вот так:<br>
<br>
<img class='tag-img' src='https://i111.fastpic.ru/big/2020/0206/90/20f950fd2b7826bfa54832be22672090.png' alt='user posted image'><br>
<br>
Ладно, думаю, соберу под Винду, посмотрю как там (Линух был на виртуалке, Винда на железе):<br>
<br>
<img class='tag-img' src='https://i111.fastpic.ru/big/2020/0206/9a/6da0b96883c9451898e007d6f743fc9a.png' alt='user posted image'><br>
<br>
Собственно, вопросы, которые возникли:<br>
<br>
1) Что с моей прогой не так под Линухом, штатная же команда lsusb выводит описалова<br>
2) Что с моей прогой не так под Виндой, почему столько устройств не опознано, и откуда в описалове вопросы (локаль не та или что?)<br>
<br>
Вот код:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;iomanip&#62;</div><div class="code_line">#include &#60;cstring&#62;</div><div class="code_line">#include &quot;libusb.h&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">using namespace std;</div><div class="code_line">&nbsp;</div><div class="code_line">void print_device(libusb_device *dev) {</div><div class="code_line">&nbsp;&nbsp;struct libusb_device_descriptor desc;</div><div class="code_line">&nbsp;&nbsp;libusb_device_handle *handle = NULL;</div><div class="code_line">&nbsp;&nbsp;unsigned char str[256] = {0};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;if (libusb_get_device_descriptor(dev, &amp;desc) &#60; 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;cout &#60;&#60; &quot;failed to get device descriptor&quot; &#60;&#60; endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;cout &#60;&#60; &quot;Bus &quot; &#60;&#60; std::setfill(&#39;0&#39;) &#60;&#60; std::setw(3) &#60;&#60; hex &#60;&#60; +libusb_get_bus_number(dev) &#60;&#60; &quot; &quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &#60;&#60; &quot;Device &quot; &#60;&#60; std::setfill(&#39;0&#39;) &#60;&#60; std::setw(3) &#60;&#60; hex &#60;&#60; +libusb_get_device_address(dev) &#60;&#60; &quot;: &quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &#60;&#60; &quot;ID &quot; &#60;&#60; std::setfill(&#39;0&#39;) &#60;&#60; std::setw(4) &#60;&#60; hex &#60;&#60; desc.idVendor &#60;&#60; &quot;:&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &#60;&#60; std::setfill(&#39;0&#39;) &#60;&#60; std::setw(4) &#60;&#60; hex &#60;&#60; desc.idProduct;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;if (libusb_open(dev, &amp;handle) == LIBUSB_SUCCESS) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (desc.iProduct) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (libusb_get_string_descriptor_ascii(handle, desc.iProduct, str, sizeof(str)) &#62; 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;string s(reinterpret_cast&#60;char*&#62;(str));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cout &#60;&#60; &quot; &quot; &#60;&#60; s.substr(s.find_first_not_of(&quot; \t&quot;));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp;} else cout &#60;&#60; &quot; -&quot;;</div><div class="code_line">&nbsp;&nbsp;cout &#60;&#60; endl;</div><div class="code_line">&nbsp;&nbsp;if (handle) libusb_close(handle);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp;libusb_device **devs;</div><div class="code_line">&nbsp;&nbsp;ssize_t cnt;</div><div class="code_line">&nbsp;&nbsp;if (libusb_init(NULL) &#60; 0) return 1;</div><div class="code_line">&nbsp;&nbsp;cnt = libusb_get_device_list(NULL, &amp;devs);</div><div class="code_line">&nbsp;&nbsp;if (cnt &#60; 0) return 1;</div><div class="code_line">&nbsp;&nbsp;for (int i = 0; devs[i]; i++) print_device(devs[i]);</div><div class="code_line">&nbsp;&nbsp;libusb_free_device_list(devs, 1);</div><div class="code_line">&nbsp;&nbsp;libusb_exit(NULL);</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
<strong class='tag-b'>UPD</strong><br>
<br>
Запуск проги под Линуксом, но с правами рута несколько изменил картину:<br>
<br>
<img class='tag-img' src='https://i111.fastpic.ru/big/2020/0206/ef/118e615713b6402736de8b38ee25bbef.png' alt='user posted image'>]]></description>
        <author>JoeUser</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      </channel>
      </rss>
	