Главная » Статьи » 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




Категория: Swordfish | Добавил: DAlexV (14.01.2010)
Просмотров: 6415 | Комментарии: 1 | Теги: PICBASIC, USB, HID, бейсик для PIC, Pic Basic, Visual Basic 6, Swordfish, Программирование, процессор | Рейтинг: 5.0/1
Всего комментариев: 1
1 доцент2   (11.12.2013 00:47)
к сожалению в VisualStudio 2010 такой код не прокатывает. Выдает столько ошибок......

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]