На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> Как получить инфо о USB HOST?
    Есть USB прибор, сконфигурированный под USB 1.0. Из программы можно его переконфигурировать под USB 2.0 (загрузить новое firmware).

    КАК получить информацию о HOSTе, к которому он подключен  в данный момент?

    Конкретно нужна инфо о возможности может ли HOST работать с USB 2.0.
    USB 1.0 HOST отказывается понимать USB 2.0 прибор, не дает к нему доспут, поэтому нужно знать возможности HOST заранее, до загрузки нового firmware.

    Ответы можно на e-mail sikolenko@bsu.by
      Если ты работаешь через DOS или Win9x то можно просто прочитав регистр HOST контроллера и тем самым узнать версию USB.
        Проблема в том, что нужно работать с USB 2.0 под Win XP или 2000.
        Какие могут быть проблемы с этими Виндами?
        Может есть живой пример?
        Заранее спасибо.
          Я когдатоть писал функциёвину...вот завалялась  :)

          ExpandedWrap disabled
            <br>#include <windows.h><br>#pragma warning( disable : 4200 )<br><br>// DDK headers...<br>#include      <devioctl.h><br>#include      <usbioctl.h><br><br>int GetUSB2Capability( int controller_num = 0)<br>{<br>      int iRetCode = -1; // Error opening USB_ROOT_HUB<br>      BOOL bRet = FALSE;<br>      char controller_name[64];<br>      sprintf( controller_name, "\\\\.\\HCD\%d", controller_num);<br>      HANDLE controller = CreateFile( controller_name, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);<br>      if( controller != INVALID_HANDLE_VALUE)<br>      {<br>            USB_ROOT_HUB_NAME root_name = { 0 };<br>            DWORD bytes_returned = 0;<br>            DeviceIoControl(controller, IOCTL_USB_GET_ROOT_HUB_NAME, 0, 0, &root_name, sizeof(root_name), &bytes_returned, NULL);<br>            if( bytes_returned && root_name.ActualLength)<br>            {<br>                  const int actual_len = root_name.ActualLength;<br>                  unsigned char* key_raw = new unsigned char[root_name.ActualLength];<br>                  USB_ROOT_HUB_NAME* root_name_W = reinterpret_cast<USB_ROOT_HUB_NAME*>(key_raw);<br>                  bRet = DeviceIoControl(controller, IOCTL_USB_GET_ROOT_HUB_NAME, NULL, 0, root_name_W, root_name.ActualLength, &bytes_returned, NULL);<br>                  //root_name_W - в юникоде (под NT)<br>                  if( bRet)<br>                  {<br>                        char hub_name[MAX_PATH];<br>                        WideCharToMultiByte( CP_ACP, 0,      root_name_W->RootHubName, -1, hub_name, sizeof(hub_name), NULL,      NULL);<br>                        char device_name[MAX_PATH];<br>                        wsprintf( device_name, "\\\\.\\\%s", hub_name);<br>                        HANDLE hub_device = CreateFile( device_name, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);<br>                        if( hub_device != INVALID_HANDLE_VALUE)<br>                        {<br>                              USB_HUB_CAPABILITIES cap;<br>                              bytes_returned = 0;<br>                              bRet = DeviceIoControl( hub_device, IOCTL_USB_GET_HUB_CAPABILITIES, 0, 0, &cap, sizeof(cap), &bytes_returned, NULL);<br>                              if( bRet && bytes_returned == sizeof(cap))<br>                              {<br>                                    iRetCode = cap.HubIs2xCapable ? 1 : 0;<br>                              }<br>                              CloseHandle( hub_device);<br>                        }<br>                  }<br>                  delete[] key_raw;<br>            }<br>            CloseHandle( controller);<br>      }<br>      return iRetCode;<br>}<br>#pragma warning( default : 4200 )<br><br>int main(int argc, char* argv[])<br>{<br><br>      int iRet = GetUSB2Capability( 0);<br>      printf( "USB 2.0 capability: \"\%s\"", iRet == -1 ? "Error USB controller request!" : iRet == 0 ? "NO!" : "YES");<br>        return 0;<br>}<br>
          Сообщение отредактировано: AlexSm -
            AlexSm,
            может подскажешь, где объявлены USB_HUB_CAPABILITIES и IOCTL_USB_GET_HUB_CAPABILITIES?
            Мой NTDDK и MSDN об этом молчит.
              В "usbioctl.h". Если нету исползуй просто:
              ExpandedWrap disabled
                <br>IOCTL_USB_GET_HUB_CAPABILITIES = 0x0022043C<br><br>typedef struct _USB_HUB_CAPABILITIES {<br>    ULONG HubIs2xCapable:1;<br>} USB_HUB_CAPABILITIES, *PUSB_HUB_CAPABILITIES;<br>
                Я нашел в своем компьютере 4 HUBа.
                Ни один из них не отвечает на IOCTL_USB_GET_HUB_CAPABILITIES.
                Я нашел usbioctl.h, но в ем не объявлен IOCTL_USB_GET_HUB_CAPABILITIES.
                Возможна ли ошибка? Какой у вас DDK?
                  У меня все  ;)  Это из XP DDK.
                  Не отвечает на каком шаге выполнения? Какие винды? У меня этот код под XP работает на ура...И если дрова не отвечают на этот запрос - значит и не поддерживают работу с 2.0
                  Сообщение отредактировано: AlexSm -
                    DDK 2000.
                    Прибор и программа под USB 2.0 в общем работает. Есть жедание облегчить жизнь пользователю.
                    Запускаю под Win 2000.
                    Функция
                    bRet = DeviceIoControl( hub_device, IOCTL_USB_GET_HUB_CAPABILITIES, 0, 0, &cap, sizeof(cap), &bytes_returned, NULL);
                    возвращает 0.



                      Хммм...А что в bytes_returned ? И что возвращает GetLastError() ?
                        bytes_returned = 0
                        GetLastError() = 5Запустил под XP, нет проблем.  ???
                          bytes_returned = 0
                          GetLastError() = 50. Запустил под XP, нет проблем.
                            Дрова не поддерживают данный IOCTL...тут ничего не поделаешь  ;)
                            Счас посмотрю как можно ещё достать инфу под 2000.....
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0323 ]   [ 16 queries used ]   [ Generated: 1.05.24, 00:23 GMT ]