Рассказ the open window

В наши дни редко можно увидеть новую компанию, производящую оборудование, способное совершить переворот в мире pc, но 30 лет назад

image

В наши дни редко можно увидеть новую компанию, производящую оборудование, способное совершить переворот в мире PC, но 30 лет назад они возникали постоянно. Особенно справедливо это было для сектора графики: десятки фирм сражались за кусок прибыльного зарождающегося рынка.

Одна из таких компаний выделилась на фоне остальных и на короткий промежуток времени стала лидером проектирования чипов для ускорения графики. Её продукты были настолько популярными, что встречались практически в каждом PC, продававшемся в начале 90-х. Но всего спустя десяток лет после рождения фирма разделилась, продала свои бесчисленные активы и быстро пропала из света прожекторов.

В этой статье мы почтим память S3 и узнаем, как на протяжении нескольких лет разворачивалась её примечательная история.

0n6ae6gpd5yyh

Формирование и первые успехи S3

Наш рассказ начинается с первого квартала 1989 года, эпохи Apple Macintosh SE/30, MS-DOS 4.0 и Intel 80486DX. Тогда персональные компьютеры обычно имели очень ограниченные графические возможности, отрисовка выполнялась ЦП и всего в однобитном монохромном цвете; но при помощи совместимой карты расширения или периферии можно было реализовать ускоренный рендеринг с 8-битным цветом.

Цены на такие расширения начинались от 900 долларов, и часто были гораздо выше, и именно для этого рынка Дадо Банатао и Рональд Яра открыли в Санта-Кларе (Калифорния) свой новый стартап: на сцене появляется S3, Inc. История Банатао заслуживает отдельной статьи, как и история Яра. К тому времени оба они были успешными предпринимателями в технологической сфере и инженерами по электрооборудованию и электронике.

За два года они подготовили к продажам свой первый продукт: P86C911 (также известный как S3 Carrera). Этот чип ускорял отрисовку линий, заполнение прямоугольников и растровые операции в Windows, в основном используя так называемую передачу битовых блоков (bit block transfer). Небольшие массивы данных, составляющих целый экран, перемещались, накладывались друг на друга, копировались, и т.д.

rgd6rc4iq1 ujgp6g12c z9slpq

S3 P86C911 — источник: VGA Museum

Как и AMD с Nvidia сегодня, S3 использовала другие компании для производства и продажи своих чипов, которые покупались изготовителями плат расширения для собственных продуктов. Знаменитые компании наподобие Diamond Multimedia и Orchid Technology выпускали карты с 1 МБ VRAM на борту, обеспечивавшие разрешение до 1280 x 1024 в 16 цветах и систему подключения к 16-битной шине ISA.

В то время обзоры были весьма благосклонны — устройства не стали самыми быстрыми ускорителями на рынке, но имели конкурентоспособную цену. Эталоном для всех так называемых 2D-ускорителей тогда была серия чипов Mach компании ATi Technologies, однако карта ATI Graphics Ultra с чипом Mach 64 продавалась в розницу за 899 долларов, а карты с S3 P86C911 можно было приобрести всего за 499 долларов.

В первые годы своего развития S3 обеспечивала устойчивый цикл разработки, продолжая совершенствовать и модернизировать архитектуру своих чипов. К 1994 году производители плат расширений уже использовали новую серию ускорителей Vision: полный 16-битный цвет с разрешением 1280 x 1024, и до 4 МБ 64-битной DRAM FPM (fast page mode) или EDO (extended data out). Присутствовало даже ускорение видеофайлов MPEG.

hjeiumglfu0dqz7eorfp3me0pa

S3 Vision868 — источник: VGA Museum

Эти продукты тоже не были самыми быстрыми, но они оказались гораздо дешевле конкурентов. Естественно, это привлекло внимание сборщиков систем и других OEM, и чипы S3 появились в первых PC многих пользователей.

Выше представлена фотография продукта немецкого производителя карт Spea. Она демонстрирует проблему, с которой производители столкнулись в середине 90-х: для выполнения различных задач требовалось множество отдельных чипов. По крайней мере один использовался как основной тактовый генератор, а другой для цифрово-аналогового преобразования (например, RAMDAC).

Чтобы решить эту проблему, годом позже S3 выпустила серию чипов Trio, в которую интегрировала схемы ускорения графики с RAMDAC и тактовым генератором. В результате этого затраты производителей карт значительно снизились, что способствовало большей популярности S3, обеспечив ей львиную долю рынка дисплейных адаптеров.

S3 Trio64V+ — источник: Википедия

К 1995 году игровые консоли Sony PlayStation и Sega Saturn чётко продемонстрировали направление, в котором теперь двигался рынок графики, и благодаря тому, что S3 находилась на пике своего могущества, она стала одним из первых создателей чипов, удовлетворивших этот спрос со своим продуктом «всё в одном».

Учитывая, насколько хорошо компания освоила ускорение 2D и видео, окажется ли сложным для неё освоение 3D?

Новое измерение и первые неудачи

Лучшей по продажам игрой для PC в 1995 году стала Command & Conquer — стратегия реального времени, изначально выпущенная для DOS и использовавшая изометрическую 2D-графику. Однако владельцы консолей уже привыкли к 3D-графике, похожей на ту, которая создаётся в аркадных автоматах.

Поэтому производители оборудования должны были обеспечить ускорение и в этой сфере. Программная поддержка уже была готова — OpenGL к тому времени исполнилось три года, а в начале 1995 года Microsoft купила RenderMorphics, чтобы интегрировать её Reality Lab API в грядущую Windows 95 (в конечном итоге этот API превратился в Direct3D).

К концу года S3 выпустила чип ViRGE («Virtual Reality Graphics Engine»); по сути, это был улучшенный Trio с приделанными к нему ограниченными 3D-функциями (под маркетинговым названием S3d Engine).

Графическая карта S3 Virge — источник: VGA Museum

Карты расширения с процессором не выпускались до начала 1996 года, и первые подобные продукты были спорными. До этого момента 3D-игры на PC почти всегда рендерились внутри ЦП. В обработке простых полигонов, освещённых по Гуро и с наложенными нефильтрованными текстурами ViRGE обычно был чуть быстрее, чем лучшие ЦП того времени.

Однако при добавлении любых других 3D-функций (например, фильтрации текстур или перспективной коррекции) производительность резко снижалась, особенно в разрешениях от VGA (640 x 480) и выше. На то было множество причин, но больше всего выделялось два аспекта.

Во-первых, для использования 3D-ускорения разработчикам нужно было использовать собственный API компании S3, потому что изначально её драйверы не имели поддержки OpenGL. Проприетарные API не всегда хуже open source, но после того, как другие производители выпустили собственные 3D-чипы с полной поддержкой OpenGL, многие разработчики перестали выпускать для своих игр поддержку S3d.

armnice7gdmnbvjctlnruv6yuee

Эта карта содержит два чипа Nvidia NV1, изготовленных STMicroelectronics. Источник: Википедия

Учитывая нехватку программистов, работающих с API, внешней помощи по его усовершенствованию было недостаточно. К тому существовали и аппаратные проблемы — фильтрация текстур выполнялась чрезвычайно медленно, сэмплирование и смешение билинейного тексела занимало слишком много тактов. Поэтому в разрешении VGA чип утопал под нагрузкой, снижая частоту кадров почти до нуля.

Однако несмотря на эти недостатки, карты ViRGE продавались довольно неплохо благодаря хорошей производительности в 2D, достойной цене и вялой конкуренции.

Самый первый продукт Nvidia, дорогая NV1, была выпущена за несколько месяцев до того, как S3 выбрала неправильное направление развития 3D-графики, а серия ATI 3D Rage, выпущенная в апреле 1996 года, была ненамного лучше ViRGE.

Впрочем, было бы несправедливо излишне критиковать S3 на этом этапе. В конечном итоге, 3D-ускорители для потребительского рынка только начинали появляться, и для формирования этой ниши потребуется много лет. За пять лет в линейке ViRGE вышло множество моделей, а быстрые версии чипов (например, ViRGE/DX) обеспечили улучшения во всех аспектах.

dqjmgtvu63 w6kodyhs8mt1e1qs

S3 Savage3D — источник: VGA Museum

В 1998 году S3 Inc объявила о выпуске совершенно нового графического процессора: Savage3D. Этот чип имел гораздо более быструю фильтрацию текстур, чем ViRGE (билинейная фильтрация теперь выполнялась за один такт), однако для мультитекстурирования всё равно требовался рендеринг из нескольких проходов, то есть если вам нужно наложить на один пиксель две текстуры, то всю сцену, по сути, необходимо обрабатывать дважды.

Архитектура обеспечивала и улучшенные видеовозможности, в том числе встроенный кодировщик телесигнала, а также улучшенные масштабирование и интерполяцию для MPEG и DVD. S3 даже создала собственный алгоритм сжатия текстур под названием S3TC, который со временем интегрировали в API OpenGL и Direct3D.

Теоретически, чип должен был стать громким хитом, но не стал им.

Дикие времена Savage для S3

Первой проблемой для потребителей стал непосредственно поиск Savage3D на полках магазинов. Это был первый графический процессор, производимый по 250-нанометровому техпроцессу компанией UMC Group. Однако производитель тоже впервые работал с такими размерами и продуктивность создания кристаллов была довольно низкой.

Такой дефицит полнофункциональных кристаллов привёл к тому, что Savage3D купило довольно малое число производителей плат расширения; дело дошло до того, что Hercules и другие компании тестировали каждый чип из купленной партии и вручную выбирали работоспособные. Долговременный партнёр компании, Diamond Multimedia, полностью отказался от использования процессора.

gwl9dky7twq8ahywbajto6tolmw

Пара могучих карт 3dfx Voodoo2.

Драйверы на момент выпуска прославились своими багами (согласно отзывам, до выпуска они вообще не имели поддержки OpenGL) и S3 отказалась от поддержки собственного API. Но важнее был рост конкуренции. Первый ViRGE занял почти весь рынок и его поддерживала репутация качественного 2D, но Savage3D столкнулась с гораздо более серьёзными противниками.

К осени 1998 года Nvidia выпустила свою Riva TNT с чипом NV4, имеющую два пиксельных конвейера, обеспечивавших мультитекстурирование за один проход. Такой же возможностью могли похвастаться карты 3Dfx Voodoo2, однако при двойных текстурах скорость обработки пикселей в Riva TNT падала вдвое, а на Voodoo2 они никак не влияли.

Но даже в играх с одиночным текстурированием производительность Savage3D разочаровывала. Из-за дефицита чипов производители не могли даже продавать свои продукты по более низкой цене, чтобы противостоять конкурентам.

zk3w4btp xy

S3 Savage4 Pro — источник: VGA Museum

В течение года S3 решила многие из этих проблем и следующий чип Savage 4 стал тем, чем должен был стать Savage 3. Но пока S3 исправляла свои ошибки, компании наподобие 3Dfx, Matrox и Nvidia уже выпускали качественные продукты.

Поэтому карты с Savage4 были не лучше моделей предыдущего года, а производительность OpenGL по-прежнему оставалась ужасной. Но, по крайней мере, к S3 вернулась Diamond, да и множество других производителей выпустило различные модели карт.

Единственным спасением для Savage4 была S3TC. Система сжатия текстур с потерями поддерживалась Quake III Arena и Unreal Tournament (сверхпопулярными играми того времени) и значительно повышала качество картинки, мало влияя на производительность.

В том же году S3 Inc решила посорить деньгами, в декабре купив активы и интеллектуальную собственность производителя видеокарт Number Nine (а спустя два года лицензировав их инженерам-проектировщикам этой компании). Позже, летом 2000 года, S3 произвела слияние со своим давним партнёром Diamond Multimedia, стремясь расширить портфолио своих продуктов.

pf1kc vyhc vor9zkhoj0zjf0vy

S3 Savage2000 — источник: VGA Museum

Первым потомком «молодожёнов» стал Savage 2000 — первый графический чип S3, совместимый с Direct3D 7.0. В то время основным важным аспектом рендеринга были Hardware Transform and Lighting (TnL) — аппаратное преобразование и освещение; теперь геометрия 3D-сцены не обрабатывалась ЦП, а передавалась графическому процессору.

Благодаря двум пиксельным конвейерам, каждый из которых содержал два текстурных блока, и тактовой частоте 125 МГц Savage 2000 едва не дотягивал до нового GeForce 256 компании Nvidia. Но догнать конкурента снова не удалось — как обычно, продукт подвели драйверы. На момент выпуска аппаратное TnL не поддерживалось, а когда поддержка появилась, результаты часто оказывались забагованными и медленными.

В целом, Savage 2000 не была особо плохой графической картой, но она не была так же хороша, как конкуренты, и не оказалась значительно дешевле. За всю долгую историю превосходства архитектуры и маркетинга S3 впервые едва держалась на плаву.

Смена курса

Всего три месяца спустя после объявления о слиянии S3 Inc и Diamond Multimedia компания сменила бренд на SONICblue, а в 2001 году продала графический отдел тайваньскому производителю VIA Technologies.

SONICblue сосредоточилась на отрасли мультимедиа и начала создавать потребительские электронные продукты наподобие видеорекордеров и MP3-плееров, а в 2003 году закрылась и заявила о своём банкротстве. Однако S3 продолжила существование под совершенно неоригинальным новым названием (S3 Graphics), выбрав новую нишу: интегрированные чипсеты.

В начале тысячелетия центральные процессоры AMD и Intel (например, Athlon XP и Pentium III) не имели встроенного графического процессора. Для вывода видео с PC необходима была дополнительная видеокарта или одна из популярных тогда материнских плат с чипсетом, обладающим графическими функциями.

VIA CLE266 содержит в себе гибридный графический процессор Savage компании S3. Источник: VGA Museum

Какое-то время VIA Technologies была очень конкурентоспособной в секторе материнских плат, поэтому приобретение S3 оказалось вполне логичным. Вместо того, чтобы создавать с нуля что-то новое, инженеры взяли части предыдущих графических карт: движки 2D и мультимедиа из Savage 2000 и 3D-конвейеры из Savage4 были объединены для создания системы ProSavage.

Частично невозможность продажи предыдущих продуктов S3 по ценам ниже, чем, например, у Nvidia была вызвана тем, что её устройства были намного меньше. В процессорах использовалось меньше транзисторов, и в результате площадь кристаллов была намного меньше, благодаря чему они идеально подходили для интеграции в чипсеты.

Но на фоне бума рынка графических карт VIA отрезала его часть и для себя, поэтому S3 Graphics в 2004 году вернулась с серией процессоров Chrome. Первая модель называлась DeltaChrome и обладала полной поддержкой Direct3D 9.0, имела 4 конвейера для вершинных шейдеров и 8 конвейеров для пиксельных шейдеров.

К тому времени ATi и Nvidia уже выпускали невероятно мощные графические карты, наряду с поддержкой D3D 9.0 они экспериментировали с дополнительными функциями (например, поверхностями более высокого порядка и условным потоком выполнения). S3 Graphics мудро решила не усложнять себе работу, и первые обзоры производительности её продуктов вдохновляли, хотя отзывы и были смешанными.

Последний триумф S3 Graphics — Chrome 540 GTX. Источник: Википедия

Однако последующее тестирование показало, что процессор (сейчас мы называем их GPU) имел серьёзные проблемы при использовании сглаживания. VIA и S3 Graphics стойко держались и линейка Chrome продолжалась ещё в течение пяти лет, перейдя в 2008 году на унифицированную шейдерную архитектуру.

Эти поздние модели находились на самом дне производительности в играх, проявляя себя не лучше (а обычно и хуже), чем бюджетные карты ATi и Nvidia. Единственным их спасением была цена: например, Chrome 530 GT продавалась в розницу всего за 55 долларов.

Это были последние дискретные графические карты, спроектированные S3 Graphics, однако VIA Technologies продолжила использовать её GPU как интегрированные компоненты чипсетов своих материнских плат. В 2011 году VIA всё же сдалась и целиком продала S3 Graphics другому тайваньскому гиганту электроники под названием HTC.

Может показаться загадкой, почему производителю телефонов понадобилось покупать разработчика GPU. В отличие от Apple, HTC не проектировала самостоятельно чипы для своих телефонов, используя продукты Qualcomm, Samsung и Texas Instruments. Покупка нужна была только для расширения портфолио её интеллектуальной собственности и получения прибыли от продажи лицензий на патенты S3TC.

Осталось только имя и приятные воспоминания

Чипы с названием S3 или S3 Graphics не выпускались уже больше десятка лет, и мы, скорее всего, никогда их больше не увидим, потому что HTC после покупки интеллектуальной собственности компании не делала с ней ничего. То есть у нас осталось только имя, хорошие и плохие воспоминания, и, может быть, вопросы о том, что же стало причиной неудачи.

В эпоху 2D-ускорения графических карт S3 была почти недостижима и удерживала значительную долю рынка. Очевидно, что у неё были хорошие инженеры в этой области, но это не означает, что они станут мастерами и в мире полигонов. ViRGE разочаровал, а Savage3D был выпущен слишком рано, столкнувшись с производственными проблемами и некачественными драйверами, пошатнувшими репутацию S3.

0mbqcdklwy

Старые добрые времена S3 P86C911A. Источник: VGA Museum

Но эти проблемы можно было вовремя решить, ведь в целом архитектура фундаментально была качественной. Однако руководство компании выбрало другой путь — покупку ещё одной тонущей графической компании, затем слияние в группу производителей потребительской электроники, а затем полное поражение.

Другие громкие имена того времени (например, 3dfx, Rendition, BitBoys) тоже шли похожим путём и иногда их продукты оказывались лучшими на рынке. И точно как S3, все они теперь стали только вехами в истории, поглощёнными другими компаниями или оставшимися на страницах Wikipedia.

История S3 показывает, что в мире полупроводников и PC, ничто нельзя считать само собой разумеющимся, и что длительный успех — это сложное сочетание гениального проектирования, упорного труда и приличной доли удачи. Её продуктов больше нет, а имя утеряно, но компания совершенно точно не забыта.

Перевод статьи, посвященной удобной библиотеке HID USB Driver / Library for .Net / C# («HID USB Driver / Library for .Net / C#», автор Florian Leitner-Fischer).

usb-hid-and-csharp

[Почему появилась библиотека]

Нужно было найти новое решение чтобы подключить нашу аппаратуру к PC (компьютеру) через USB, потому что результаты, которые мы получили с помощью чипов FTDI, нас полностью не устраивали.

Выбранный нами контроллер USB Maxim MAX3420E был подключен к микроконтроллеру через Serial Peripheral Interface (SPI). Поставляется MAX3420E без каких-либо драйверов или библиотек, через которые Вы могли бы общаться с ним. По этой причине и появилась библиотека, описанная в статье.

После целого дня, потраченного на гугление и чтение полученной информации я решил, что самый простой и лучший метод — использовать Human Interface Device Class (HID). HID-Class является стандартным классом устройства (generic device class), так что все устройства этого класса поддерживаются Microsoft Windows из коробки, и имеются готовые DLL с функциями, которые можно использовать для доступа к устройствам USB HID.

Стартовой точкой для «Ð´Ñ€Ð°Ð¹Ð²ÐµÑ€Ð°| была статья, которую я нашел на Microsoft developer network (MSDN): «Is That You? Writing Better Software for Cool USB Hardware» (Это для Вас? Написание лучшего программного обеспечения для хорошей аппаратуры USB), написанную Scott Hanselman. Программное обеспечение автора основывалось на USBSharp Class [1].

К счастью, с MAX3420E был пример кода, который конфигурирует контроллер как Human Interface Device, так что мы не испытывали особых затруднений, чтобы понять, как сконфигурировать его в режиме HID.

[Human Interface Device Class, HID]

Как упоминалось выше, HID Class является стандартным классом устройства, драйвер для которого интегрирован в операционную систему, что упрощает работу с ним. Если, к примеру, в операционную систему Windows подключено новое устройство HID, то ему не требуется никакая инсталляция драйвера. Функции для получения доступа и управления устройством HID включены в Windows hid.dll, которая расположена в папке System32.

Если не знаете наверняка, что Ваше устройство — устройство HID, то взгляните на небольшое приложение «Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ о системе». Оно является частью windows, и Вы можете запустить его командой start -> run «msinfo32.exe«. Эта программа покажет в разделе Компоненты -> USB информацию о подключенных устройствах USB. Для обновления списка устройств при переподключениях выбирайте Вид -> Обновить. Кроме того, сведение о подключенных устройствах USB HID можно получить в Диспетчере Устройств, см. Панель Управления -> Администрирование -> Управление компьютером -> Устройства HID (Human Interface Devices).

[Специфика USB: идентификация устройства USB]

Устройство USB идентифицируется по его ID вендора (Vendor ID, VID) и ID продукта (Product ID, PID). Именно по этим идентификаторам ПО хоста подключается к конкретному устройству USB (из этого следует, кстати, что нельзя одновременно подключиться к двум устройствам USB HID, если они имеют одинаковые VID и PID). Эти ID состоят из префикса («vid_» для vendor id или «pid_» для product id) и 4 шестнадцатеричных цифр. Например, MAX3420E имеет vendor id vid_06ba и product id pid_5346. Обычно оба значения могут быть изменены в исходном коде USB-устройства (подразумевается, что Вы имеете доступ к этому коду).

[Размер пакета / скорость передачи данных на соединении]

Устройства HID обмениваются с PC данными через репорты HID (HID report). Эти репорты могут содержать от 8 до 64 байт данных. Каждую миллисекунду один репорт отправляется от PC к устройству USB и обратно. Это означает, что теоретическая максимальная скорость обмена может достигать 64000 байт/сек.

[Интерфейс библиотеки HID USB]

Библиотека написана на C# и разработана в виде DLL, что позволяет её очень просто интегрировать в новый проект. Библиотека рассчитана на устройства USB HID с размером 64 байта для конечных точек ввода и вывода (endpoints). Просто импортируйте DLL в проект, и получите удобный доступ к устройствам USB HID. Я старался сделать программный интерфейс библиотеки максимально простым, при сохранении максимально возможного функционала. В настоящий момент имеются следующие функции:

USBInterface(String vid, String pid) — метод конструктора, инициализирующий новый экземпляр (переменную) класса. У конструктора в этом случае два параметра — идентификатор вендора и идентификатор продукта USB-устройства. По этим параметрам будет происходить поиск нужного USB HID устройства.

USBInterface(String vid) — метод конструктора, инициализирующий новый экземпляр (переменную) класса. У конструктора в этом случае один параметр — идентификатор вендор. По этому параметру будет происходить поиск нужного USB HID устройства.

Connect() — этот метод устанавливает соединение до устройства USB. Вы можете быть уверенным, что подключились к нужному устройству только в том случае, если использовали конструктор USBInterface с двумя параметрами — vid и pid. Если же Вы использовали конструктор с одним параметром vid, то может произойти соединение с другим устройством с тем же самым Vendor ID (VID) — не с тем, с что ожидали, и Вы не сможете определить, к какому устройству произойдет подключение. Метод Connect возвратит false, если произошла любая ошибка.

Disconnect() — метод производит отключение от устройства.

getDeviceList() — метод возвращает список устройств с Vendor ID (VID), указанным в конструкторе. Эта функция понадобится Вам чтобы узнать, сколько подключено USB устройств (и какие они) с указанным идентификатором вендора. Возвращает список строк (String list) с системными путями до устройств.

write(Byte[]) — метод записывает массив байт в устройство USB. Если размер массива превышает 64, то массив будет поделен на несколько массивов, каждый по 64 байта. Массивы будут отправлены друг за другом, байты 0..63 будут отправлены первыми, затем будут отправлены байты 64..127, и так далее. Метод возвратит true, если все байты будут успешно записаны.

startRead() — метод используется для активизации «ÑÐ¾ÑÑ‚Ð¾ÑÐ½Ð¸Ñ чтения» (reading-State). Если Вы выполните эту команду, то запустится поток, который прослушивает устройство USB и ждет появления данных.

stopRead() — метод переключает библиотеку из состояния «reading-State» в состояние ожидания (idle-State). Путем выполнения этой команды поток чтения данных останавливается, и теперь данные могут быть получены.

enableUsbBufferEvent(EventHandler) — путем вызова этого метода с обработчиком события (System.EventHandler) добавляется событие прослушивания буфера USB. Таким образом будет вызван обработчик события всякий раз, когда набор данных добавлен к буферу (и также получен от USB-устройства).

[Как интегрировать библиотеку HID USB в проект Visual Basic]

Есть два способа интеграции HID USB Library в проект Visual Studio. Один из них — добавление проекта библиотеки к Вашему решению Visual Studio solution. Второй способ — добавление ссылки на USBHIDDRIVER.dll в проект, где Вы хотите использовать библиотеку HID USB. Предварительно скачайте пакет библиотеки [2], и распакуйте его файлы в Ваш проект приложения.

Добавление проекта библиотеки в решение (solution) Visual Studio 2005, процесс по шагам:

1. Откройте Ваше решение (Visual Studio solution). Выберите в меню File -> Add -> Existing Project.

usb-hid-csharp-lib-add-to-VB-project1

2. Откроется диалог открытия файла. Найдите файл USBHIDDRIVER.csproj и откройте его (кликните Open).

usb-hid-csharp-lib-add-to-VB-project2

3. Правым щелчком мыши на проекте Visual Studio откройте контекстное меню проекта и выберите Add Reference (добавить ссылку).

usb-hid-csharp-lib-add-to-VB-project3

4. Выберите закладку Projects, затем выберите USBHIDDRIVER и щелкните OK.

usb-hid-csharp-lib-add-to-VB-project4

Добавление USBHIDDRIVER.dll к проекту Visual Studio, процесс по шагам.

1. Правым щелчком мыши на проекте Visual Studio откройте контекстное меню проекта и выберите Add Reference (добавить ссылку).

USBHIDDRIVER-dll-add-to-Visual-Studio-project1

2. Выберите закладку Browse, найдите USBHIDDRIVER.dll (или USBHIDDRIVER.dll.dll) и кликните OK.

USBHIDDRIVER-dll-add-to-Visual-Studio-project2

[Использование USBHIDDRIVER.dll вместе с Visual Basic 6]

Исполняемый код .Net (.Net runtime) позволяет необслуживаемым клиентам COM (unmanaged COM aware clients, наподобие приложений Visual Basic 6) получить доступ к компонентам .Net через взаимодействие COM (COM interop) и инструменты, предоставленные средой разработки.

Библиотека USBHIDDRIVER.dll является сборкой .NET, к которой не может быть получен доступ из Visual Basic 6. Поэтому мы должны создать библиотеку типов, которая может использоваться с Visual Basic 6. Это можно сделать с помощью инструмента RegAsm.exe, который Вы можете найти в директории инсталляции среды разработки .Net. Создайте командный файл BAT в папке, где находится USBHIDDRIVER.dll, впишите в него следующую команду и затем запустите его:

“C:WINDOWSMicrosoft.NETFrameworkv2.0.50727RegAsm.exe” USBHIDDRIVER.dll.dll /tlb: USBHIDDRIVER.dll.tlb

Теперь Вы должны скопировать и dll, и tlb файлы в том же каталоге в папку приложения, Visual Basic, чтобы оно могло использовать библиотеку USB HID.

[Как использовать HID USB Library]

Предположим, Вам нужно наладить обмен с USB-устройством, которое имеет vendor id vid_06ba и несколько возможных product id. Первое, что Вам понадобится — список всех подключенных к PC устройств, которые имеют указанный vendor id. Чтобы получить этот список — просто создайте новый экземпляр класса USBInterface, при этом укажите конструктору только один параметр — VID (vendor id). Затем вызовите метод getDeviceList, и получите список подключенных устройств.

USBHIDDRIVER.USBInterface usb = new USBInterface("vid_06ba");
String[] list = usbI.getDeviceList();

Для организации обмена с нужным устройством из списка сделайте новый экземпляр USBInterface, и на этот раз укажите конструктору два параметра — VID и PID. Затем вызовите метод Connect, и получите соединение с USB-устройством.

USBHIDDRIVER.USBInterface usb = new USBInterface("vid_06ba", "pid_5346");
usb.Connect();

Как только соединение с устройством установлено, Вы можете читать или записывать данные. Для записи данных просто вызовите метод write с указанием в параметре массива байт, который нужно передать. Чтение может быть реализовано двумя способами: первый без события USB buffer event, и второй с событием USB buffer event.

Если разрешено событие, то обработчик события (event handler method) будет вызван всякий раз, когда будет принят новый набор данных. В другом случае Вы можете обработать данные по таймеру наподобие примерно следующего кода:

usb.write(startByte);
usb.enableUsbBufferEvent(new System.EventHandler(myEventCacher));
Thread.Sleep(5);
usb.startRead();
…
usb.stopRead();
usb.write(stopByte);

[Что происходит внутри HID USB Library]

Библиотека основана на классе USBSharp, который импортирует все нужные методы из kernel32.dll и hid.dll. Класс HIDUSBDevice оборачивает эти методы и организует чтение в отдельном потоке. Главным интерфейсом библиотеки является класс USBInterface, который доступен снаружи dll. В классе USBInterface существует объект ListWithEvent, который основывается на ArrayList с бонусом в виде запуска обработчика события, когда добавляется новый набор данных. Наконец, что не менее важно, в классе HidApiDeclaration Вы найдете некоторые объявления, необходимые для работы с USB HID.

[Примечание переводчика]

В Интернете можно найти очень похожий аналог библиотеки, описанной в этой статье, только не в виде DLL, а в виде файлов исходного кода C# (модулей .cs) [3]. Библиотека имеет класс UsbLibrary.UsbHidPort, в котором сосредоточен весь интерфейс работы с устройством USB HID. Возможностей у этой библиотеки больше — например, есть очень удобные события подключения и отключения устройства USB, благодаря чему легко реализовать прозрачную работу с устройством USB HID и восстанавливать обмен данными с USB-устройством без необходимости перезапуска программы.

[Ссылки]

1. The HID Page — страничка, посвященная классу HID.
2. Пакет библиотеки HID USB Driver / Library for .Net / C# (USBHIDDRIVER.dll).
3. UsbLibrary.UsbHidPort class source code.
4. Библиотеки для управления устройствами USB HID.
5. USB in a NutShell — путеводитель по стандарту USB.
6. HID API для Linux, Mac OS X и Windows.

А вот еще несколько наших интересных статей:

  • Рассказ my favourite sport
  • Рассказ attalea princeps читать
  • Рассказ 4 класс по литературе небольшой о животных
  • Рассказ 3 поросенка читать
  • Рассказ 6 класс по литературе любой
  • Поделиться этой статьей с друзьями:


    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии