В наши дни редко можно увидеть новую компанию, производящую оборудование, способное совершить переворот в мире PC, но 30 лет назад они возникали постоянно. Особенно справедливо это было для сектора графики: десятки фирм сражались за кусок прибыльного зарождающегося рынка.
Одна из таких компаний выделилась на фоне остальных и на короткий промежуток времени стала лидером проектирования чипов для ускорения графики. Её продукты были настолько популярными, что встречались практически в каждом PC, продававшемся в начале 90-х. Но всего спустя десяток лет после рождения фирма разделилась, продала свои бесчисленные активы и быстро пропала из света прожекторов.
В этой статье мы почтим память S3 и узнаем, как на протяжении нескольких лет разворачивалась её примечательная история.
Формирование и первые успехи S3
Наш рассказ начинается с первого квартала 1989 года, эпохи Apple Macintosh SE/30, MS-DOS 4.0 и Intel 80486DX. Тогда персональные компьютеры обычно имели очень ограниченные графические возможности, отрисовка выполнялась ЦП и всего в однобитном монохромном цвете; но при помощи совместимой карты расширения или периферии можно было реализовать ускоренный рендеринг с 8-битным цветом.
Цены на такие расширения начинались от 900 долларов, и часто были гораздо выше, и именно для этого рынка Дадо Банатао и Рональд Яра открыли в Санта-Кларе (Калифорния) свой новый стартап: на сцене появляется S3, Inc. История Банатао заслуживает отдельной статьи, как и история Яра. К тому времени оба они были успешными предпринимателями в технологической сфере и инженерами по электрооборудованию и электронике.
За два года они подготовили к продажам свой первый продукт: P86C911 (также известный как S3 Carrera). Этот чип ускорял отрисовку линий, заполнение прямоугольников и растровые операции в Windows, в основном используя так называемую передачу битовых блоков (bit block transfer). Небольшие массивы данных, составляющих целый экран, перемещались, накладывались друг на друга, копировались, и т.д.
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.
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.
Эта карта содержит два чипа Nvidia NV1, изготовленных STMicroelectronics. Источник: Википедия
Учитывая нехватку программистов, работающих с API, внешней помощи по его усовершенствованию было недостаточно. К тому существовали и аппаратные проблемы — фильтрация текстур выполнялась чрезвычайно медленно, сэмплирование и смешение билинейного тексела занимало слишком много тактов. Поэтому в разрешении VGA чип утопал под нагрузкой, снижая частоту кадров почти до нуля.
Однако несмотря на эти недостатки, карты ViRGE продавались довольно неплохо благодаря хорошей производительности в 2D, достойной цене и вялой конкуренции.
Самый первый продукт Nvidia, дорогая NV1, была выпущена за несколько месяцев до того, как S3 выбрала неправильное направление развития 3D-графики, а серия ATI 3D Rage, выпущенная в апреле 1996 года, была ненамного лучше ViRGE.
Впрочем, было бы несправедливо излишне критиковать S3 на этом этапе. В конечном итоге, 3D-ускорители для потребительского рынка только начинали появляться, и для формирования этой ниши потребуется много лет. За пять лет в линейке ViRGE вышло множество моделей, а быстрые версии чипов (например, ViRGE/DX) обеспечили улучшения во всех аспектах.
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, полностью отказался от использования процессора.
Пара могучих карт 3dfx Voodoo2.
Драйверы на момент выпуска прославились своими багами (согласно отзывам, до выпуска они вообще не имели поддержки OpenGL) и S3 отказалась от поддержки собственного API. Но важнее был рост конкуренции. Первый ViRGE занял почти весь рынок и его поддерживала репутация качественного 2D, но Savage3D столкнулась с гораздо более серьёзными противниками.
К осени 1998 года Nvidia выпустила свою Riva TNT с чипом NV4, имеющую два пиксельных конвейера, обеспечивавших мультитекстурирование за один проход. Такой же возможностью могли похвастаться карты 3Dfx Voodoo2, однако при двойных текстурах скорость обработки пикселей в Riva TNT падала вдвое, а на Voodoo2 они никак не влияли.
Но даже в играх с одиночным текстурированием производительность Savage3D разочаровывала. Из-за дефицита чипов производители не могли даже продавать свои продукты по более низкой цене, чтобы противостоять конкурентам.
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, стремясь расширить портфолио своих продуктов.
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.
Старые добрые времена 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).
[ÐоÑÐµÐ¼Ñ Ð¿Ð¾ÑвилаÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека]
ÐÑжно бÑло найÑи новое ÑеÑение ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑ Ð½Ð°ÑÑ Ð°Ð¿Ð¿Ð°ÑаÑÑÑÑ Ðº 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.
2. ÐÑкÑоеÑÑÑ Ð´Ð¸Ð°Ð»Ð¾Ð³ оÑкÑÑÑÐ¸Ñ Ñайла. ÐайдиÑе Ñайл USBHIDDRIVER.csproj и оÑкÑойÑе его (кликниÑе Open).
3. ÐÑавÑм ÑелÑком мÑÑи на пÑоекÑе Visual Studio оÑкÑойÑе конÑекÑÑное Ð¼ÐµÐ½Ñ Ð¿ÑоекÑа и вÑбеÑиÑе Add Reference (добавиÑÑ ÑÑÑлкÑ).
4. ÐÑбеÑиÑе Ð·Ð°ÐºÐ»Ð°Ð´ÐºÑ Projects, заÑем вÑбеÑиÑе USBHIDDRIVER и ÑелкниÑе OK.
Ðобавление USBHIDDRIVER.dll к пÑоекÑÑ Visual Studio, пÑоÑеÑÑ Ð¿Ð¾ Ñагам.
1. ÐÑавÑм ÑелÑком мÑÑи на пÑоекÑе Visual Studio оÑкÑойÑе конÑекÑÑное Ð¼ÐµÐ½Ñ Ð¿ÑоекÑа и вÑбеÑиÑе Add Reference (добавиÑÑ ÑÑÑлкÑ).
2. ÐÑбеÑиÑе Ð·Ð°ÐºÐ»Ð°Ð´ÐºÑ Browse, найдиÑе USBHIDDRIVER.dll (или USBHIDDRIVER.dll.dll) и кликниÑе OK.
[ÐÑполÑзование 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.