Главная » Статьи » Swordfish |
USB HID + Visual Basic 6 все просто(часть 3)
USB HID + Visual Basic 6
Разбор программы для Visual Basic
Вместо предисловия: Так как в сутках всего 24 часа, поэтому решился выдать и третья часть одним днем. В предыдущих двух частях Мы рассмотрели примеры создания проджекта связи между PICом с поддержкой USB посредством EasyHID, разобрали программу на SWordFish-e. Теперь займемся Visual Basic программой. Заглянем в каталог VisualBasic созданной плагином EasyHID. Открыв проджект обнаруживаем Form(MainForm) и Module(HIDDLLInterface) В модуле HIDDLLInterface прописаны функции для связи библиотеки mcHID.dll. Модуль требуется добавлять к каждому Вашему прождекту для правильной работы с USB в режиме HID. Менять в нем ни чего не требуется. Если программа не идет, то добавьте библиотеку mcHID.dll в каталог с проджектом(ссылка выше). Собственно сам код FormMain Code
' vendor and product IDs Private Const VendorID = 6017 Private Const ProductID = 2000 ' read and write buffers Private Const BufferInSize = 8 Private Const BufferOutSize = 8 Dim BufferIn(0 To BufferInSize) As Byte Dim BufferOut(0 To BufferOutSize) As Byte ' **************************************************************** ' when the form loads, connect to the HID controller - pass ' the form window handle so that you can receive notification ' events... '***************************************************************** Private Sub Form_Load() ' do not remove! ConnectToHID (Me.hwnd) End Sub '***************************************************************** ' disconnect from the HID controller... '***************************************************************** Private Sub Form_Unload(Cancel As Integer) DisconnectFromHID End Sub '***************************************************************** ' a HID device has been plugged in... '***************************************************************** Public Sub OnPlugged(ByVal pHandle As Long) If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) = ProductID Then ' ** YOUR CODE HERE ** End If End Sub '***************************************************************** ' a HID device has been unplugged... '***************************************************************** Public Sub OnUnplugged(ByVal pHandle As Long) If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) = ProductID Then ' ** YOUR CODE HERE ** End If End Sub '***************************************************************** ' controller changed notification - called ' after ALL HID devices are plugged or unplugged '***************************************************************** Public Sub OnChanged() Dim DeviceHandle As Long ' get the handle of the device we are interested in, then set ' its read notify flag to true - this ensures you get a read ' notification message when there is some data to read... DeviceHandle = hidGetHandle(VendorID, ProductID) hidSetReadNotify DeviceHandle, True End Sub '***************************************************************** ' on read event... '***************************************************************** Public Sub OnRead(ByVal pHandle As Long) ' read the data (don't forget, pass the whole array)... If hidRead(pHandle, BufferIn(0)) Then ' ** YOUR CODE HERE ** ' first byte is the report ID, e.g. BufferIn(0) ' the other bytes are the data from the microcontrolller... End If End Sub '***************************************************************** ' this is how you write some data... '***************************************************************** Public Sub WriteSomeData() BufferOut(0) = 0 ' first by is always the report ID BufferOut(1) = 10 ' first data item, etc etc ' write the data (don't forget, pass the whole array)... hidWriteEx VendorID, ProductID, BufferOut(0) End Sub Приступим к разбору: Code
' код производителя и код продукта(смотрим первую часть статьи). Менять нельзя.
Private Const VendorID = 6017 Private Const ProductID = 2000 ' Установка значений приемного и передающего буфера(Менять нельзя, неправильная будет передача/прием данных) Private Const BufferInSize = 8 Private Const BufferOutSize = 8 Dim BufferIn(0 To BufferInSize) As Byte Dim BufferOut(0 To BufferOutSize) As Byte Code
' ****************************************************************
' после загрузки формы, проверяет наличие HID контроллера - открывает ' режим связи между программой и контроллером '***************************************************************** Private Sub Form_Load() ' Не удалять !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ConnectToHID (Me.hwnd) End Sub '***************************************************************** ' отсоединение HID контроллера... ' вроде бы параметр необязательный, но у меня наблюдались !!! зависания !!! ' VB если этот параметр был игнорирован в программе '***************************************************************** Private Sub Form_Unload(Cancel As Integer) DisconnectFromHID End Sub Code
'*****************************************************************
' Событие при подсоединении нашего HID устройства ... '***************************************************************** Public Sub OnPlugged(ByVal pHandle As Long) If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) = ProductID Then ' ** Здесь Ваш код ** ' например MainForm.Caption = "Устройство подключено" ' при подсоединении устройства в заголовке формы выводится "Устройство подключено" End If End Sub '***************************************************************** ' Событие при отсоединении нашего HID устройства ... '***************************************************************** Public Sub OnUnplugged(ByVal pHandle As Long) If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) = ProductID Then ' ** Здесь Ваш код ** ' например MainForm.Caption = "Устройство отключено" ' при отсоединении устройства в заголовке формы выводится "Устройство отключено" End If End Sub Со следующим событием я так и не разобрался.. Предполагаю что после смены код производителя и код продукта в процессоре процедура ловит все подключенные к компу HID девайсы. Если ошибаюсь, поправьте !!!!!! Code
'*****************************************************************
' controller changed notification - called ' after ALL HID devices are plugged or unplugged '***************************************************************** Public Sub OnChanged() Dim DeviceHandle As Long ' get the handle of the device we are interested in, then set ' its read notify flag to true - this ensures you get a read ' notification message when there is some data to read... DeviceHandle = hidGetHandle(VendorID, ProductID) hidSetReadNotify DeviceHandle, True End Sub Ну и далее соответственно чтение и запись. Code
'*****************************************************************
' читаем данные '***************************************************************** Public Sub OnRead(ByVal pHandle As Long) 'читать данные (не забывайте, пройти весь массив) ... If hidRead(pHandle, BufferIn(0)) Then ' ** Здесь Ваш код ** ' Первый байт является report ID, ( BufferIn(0) ) 'другие байты данные из микроконтроллера ... End If End Sub '***************************************************************** ' Пишем данные в микроконтроллер... '***************************************************************** Public Sub WriteSomeData() BufferOut(0) = 0 ' Первый байт является всегда report ID BufferOut(1) = 10 ' Первый байт в микроконтроллер, и т.д. ' запись данных (не забывайте, пройти весь массив) ... hidWriteEx VendorID, ProductID, BufferOut(0) End Sub Вот вроде бы и все. От себя добавлю: При разработке программы на VB поставьте галку на автоматической записи или не забывайте сохраняться перед запуском(отладкой) программы. Замечены зависания VB при пошаговой отладке через F8. Советую расставить точки прерывания в нужных местах программы, и после исследования нужного куска кода переходите в запуск по F5. Особенно это актуально касаемо пошагового прохождения модуля HIDDLLInterface. В остальном глюков не замечено. В архиве лежит типовой кусок кода для SWORDFISH и VisualBasic 5-6. На этом разрешите откланяться. Как говориться "Не стреляйте в тапера, он играет как умеет !!!!" В статье "USB HID + Visual Basic 6(Приложение)" Вы найдете рабочий прождект на Шпротеусе и Visual Basic 6 с подробными коментариями. Всем успехов в Ваших Начинаниях !!!!! С Уважением DAlexV | |
Просмотров: 11044 | Комментарии: 1 | | |
Всего комментариев: 1 | |
| |