USB HID mode

Discussion related to "under the hood" OpenMV topics.
haar_matey
Posts: 5
Joined: Mon Jun 18, 2018 12:01 am

USB HID mode

Postby haar_matey » Mon Jun 18, 2018 12:11 am

Is it possible to use USB HID mode with OpenMV? It's mentioned on this page, but I can't seem to get it to work

http://docs.openmv.io/library/pyb.USB_HID.html

Here's the code I'm using

Code: Select all

import sensor, image, time, math
import pyb

# I've tried both modes here but neither works, so moved it to a separate boot.py script
#pyb.usb_mode('VCP+HID', hid=pyb.hid_keyboard)
#pyb.usb_mode('CDC+HID', hid=pyb.hid_keyboard)
hid = pyb.USB_HID()

red_led = pyb.LED(1)
green_led = pyb.LED(2)
blue_led = pyb.LED(3)
ir_leds = pyb.LED(4)
red_led.off();
green_led.off();
blue_led.off();
ir_leds.off();

sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.VGA) # High Res!
sensor.set_windowing((640, 10)) # V Res of 80 == less work (40 for 2X the speed).
sensor.skip_frames(time = 2000)
sensor.set_auto_gain(False)  # must turn this off to prevent image washout...
sensor.set_auto_whitebal(False)  # must turn this off to prevent image washout...
clock = time.clock()

while(True):
    clock.tick()
    img = sensor.snapshot()
    codes = img.find_barcodes()
    for code in codes:
        img.draw_rectangle(code.rect())
        print_args = (code.type(), code.payload(), (180 * code.rotation()) / math.pi, code.quality(), clock.fps())
        print("Barcode {}, Payload \"{}\", rotation {} (degrees), quality {}, FPS {}".format(*print_args))
        green_led.on()
        for c in code.payload():
            buf = bytearray(8)
            buf[0] = 0x00 # no modifier keys
            buf[2] = 0x17 # just send char 'T' for now
            hid.send(buf)
            pyb.delay(5)
            buf[0] = 0x00 # no modifier keys
            buf[2] = 0x00 # release key
            hid.send(buf)
            pyb.delay(5)
    if not codes:
        green_led.off()

And I've also tried it in boot.py

Code: Select all

import pyb
#pyb.usb_mode('HID', hid=pyb.hid_keyboard)
pyb.usb_mode('VCP+HID', hid=pyb.hid_keyboard)
#pyb.usb_mode('CDC+HID', hid=pyb.hid_keyboard)
I've got both of these files on an SD card with the thinking that I'd need to remove it to get back access to the internal flash.

The green light flashes when a barcode is detected, so the script seems to run fine without errors (although I'm not sure if boot.py is running beforehand), but it's not passing an HID data to my laptop (Mac OS)

Thanks
User avatar
iabdalkader
Posts: 596
Joined: Sun May 24, 2015 3:53 pm

Re: USB HID mode

Postby iabdalkader » Mon Jun 18, 2018 12:27 am

HID mode is not enabled, I'll see if I can enable it before the next release.

Note: main.py and boot.py can run from SD or Flash the same, but we don't use boot.py so it's ignored.
haar_matey
Posts: 5
Joined: Mon Jun 18, 2018 12:01 am

Re: USB HID mode

Postby haar_matey » Mon Jun 18, 2018 12:41 am

Thanks that would be awesome!
User avatar
kwagyeman
Posts: 2407
Joined: Sun May 24, 2015 2:10 pm

Re: USB HID mode

Postby kwagyeman » Mon Jun 18, 2018 1:39 pm

Mmm, the documentation generator included that file in the doc tree even though there are no links to it.

Not sure how to hide these files. I disabled them in the index but they still show up.
Nyamekye,
User avatar
iabdalkader
Posts: 596
Joined: Sun May 24, 2015 3:53 pm

Re: USB HID mode

Postby iabdalkader » Tue Jun 19, 2018 7:53 pm

I re-enabled boot.py, you'll be able to use it as usual (note only VCP+MSC and VCP+HID are tested and working, I wouldn't try anything else).
haar_matey
Posts: 5
Joined: Mon Jun 18, 2018 12:01 am

Re: USB HID mode

Postby haar_matey » Tue Jun 19, 2018 9:04 pm

Thanks iabdalkader, do I need to update firmware for this to take effect?
User avatar
iabdalkader
Posts: 596
Joined: Sun May 24, 2015 3:53 pm

Re: USB HID mode

Postby iabdalkader » Tue Jun 19, 2018 9:39 pm

Yes from github if u don't want to wait for the next release.
Julo7139
Posts: 4
Joined: Wed Jul 25, 2018 4:17 pm

Re: USB HID mode

Postby Julo7139 » Thu Jul 26, 2018 3:31 pm

Hello i'm French
do you have an example to send data using the mouse mode?

Thank you
User avatar
iabdalkader
Posts: 596
Joined: Sun May 24, 2015 3:53 pm

Re: USB HID mode

Postby iabdalkader » Thu Jul 26, 2018 8:38 pm

Julo7139 wrote:
Thu Jul 26, 2018 3:31 pm
Hello i'm French
do you have an example to send data using the mouse mode?

Thank you
https://docs.micropython.org/en/latest/ ... hlight=hid
Julo7139
Posts: 4
Joined: Wed Jul 25, 2018 4:17 pm

Re: USB HID mode

Postby Julo7139 » Fri Jul 27, 2018 1:46 pm

Hello,

* i'm use google translate

I add in my file (boot.txt) this program:

Boot.py

Code: Select all

import pyb
pyb.main ('main.py') # main script to run after this one
# pyb.usb_mode ('VCP + MSC')
pyb.usb_mode ('VCP + HID')

then I renamed my file (boot.txt) => (boot.py)

then I add in my OpenMV IDE this program:

OpenMV IDE

Code: Select all

import pyb
hid = pyb.USB_HID ()

while (true):
     hid.send ((0, 10, 0, 0))
No other result ..... the mouse does not move ..

Can you tell me what I'm doing wrong?
User avatar
kwagyeman
Posts: 2407
Joined: Sun May 24, 2015 2:10 pm

Re: USB HID mode

Postby kwagyeman » Fri Jul 27, 2018 3:07 pm

We honestly don't support HID mode. Ibrahim however, added it I think to the firmware but it's not something I believe if operational or tested or that we care even to add... Ibrahim, can you expand on this? Is this feature in the firmware, does it work?
Nyamekye,
User avatar
iabdalkader
Posts: 596
Joined: Sun May 24, 2015 3:53 pm

Re: USB HID mode

Postby iabdalkader » Mon Jul 30, 2018 10:59 pm

Hi, no I didn't test it I just enabled it. I'll test it and get back to you.
User avatar
iabdalkader
Posts: 596
Joined: Sun May 24, 2015 3:53 pm

Re: USB HID mode

Postby iabdalkader » Sun Aug 05, 2018 9:05 pm

Julo7139 wrote:
Fri Jul 27, 2018 1:46 pm
Hello,

* i'm use google translate

I add in my file (boot.txt) this program:

Boot.py

Code: Select all

import pyb
pyb.main ('main.py') # main script to run after this one
# pyb.usb_mode ('VCP + MSC')
pyb.usb_mode ('VCP + HID')

then I renamed my file (boot.txt) => (boot.py)

then I add in my OpenMV IDE this program:

OpenMV IDE

Code: Select all

import pyb
hid = pyb.USB_HID ()

while (true):
     hid.send ((0, 10, 0, 0))
No other result ..... the mouse does not move ..

Can you tell me what I'm doing wrong?
Hi I just test HID and it's working. The problem is with your script, you're sending bytes in the wrong order. This script works:

Code: Select all

import pyb, time

kb = pyb.USB_HID()
buf = bytearray(8)

while(True):# Sending T
    # key down
    buf[0] = 0x02 # LEFT_SHIFT
    buf[2] = 0x17 # keycode for 't/T'
    kb.send(buf)
    time.sleep(10)
    # key up
    buf[0] = 0x00
    buf[2] = 0x00
    kb.send(buf)
    time.sleep(1000)
Please read MicroPython's tutorial first to understand how HID works:

http://wiki.micropython.org/USB-HID-Key ... ord-dongle
Julo7139
Posts: 4
Joined: Wed Jul 25, 2018 4:17 pm

Re: USB HID mode

Postby Julo7139 » Mon Aug 20, 2018 4:09 am

Hello,

I'm coming back to you because it still does not work ...
I use win 7 and win10 and do not work either.

can you tell me step by step what to do. because I'm leaving an open MV cam V7 empty

I tested in the boot.py:

Code: Select all

#boot.py
import machine
import pyb
pyb.main('main.py') # main script to run after this one
#pyb.usb_mode('VCP+MSC') # act as a serial and a storage device
pyb.usb_mode('HID')
and

Code: Select all

#boot.py
import machine
import pyb
pyb.main('main.py') # main script to run after this one
#pyb.usb_mode('VCP+MSC') # act as a serial and a storage device
pyb.usb_mode('VCP+HID')
and

Code: Select all

#boot.py
import machine
import pyb
pyb.main('main.py') # main script to run after this one
#pyb.usb_mode('VCP+MSC') # act as a serial and a storage device
pyb.usb_mode('VCP+HID'), hid=pyb.hid_keyboard)
and

Code: Select all

#boot.py
import machine
import pyb
pyb.main('main.py') # main script to run after this one
#pyb.usb_mode('CDC+MSC') # act as a serial and a storage device
pyb.usb_mode('CDC+HID'), hid=pyb.hid_keyboard)
and

Code: Select all

#boot.py
import machine
import pyb
pyb.main('main.py') # main script to run after this one
#pyb.usb_mode('CDC+MSC') # act as a serial and a storage device
pyb.usb_mode('CDC+HID')
main.py

Code: Select all

import pyb, time

kb = pyb.USB_HID()
buf = bytearray(8)

while(True):# Sending T
    # key down
    buf[0] = 0x02 # LEFT_SHIFT
    buf[2] = 0x17 # keycode for 't/T'
    kb.send(buf)
    time.sleep(10)
    # key up
    buf[0] = 0x00
    buf[2] = 0x00
    kb.send(buf)
    time.sleep(1000)
but nothing works......

I am blocked

thank you verry much for help
User avatar
iabdalkader
Posts: 596
Joined: Sun May 24, 2015 3:53 pm

Re: USB HID mode

Postby iabdalkader » Mon Aug 20, 2018 6:54 pm

Hi,

This works fine on Linux, however it may need an .inf file/driver on Windows. I'll test it and get back to you. In the mean time you should check MicroPython's documentation or search for their driver.
User avatar
iabdalkader
Posts: 596
Joined: Sun May 24, 2015 3:53 pm

Re: USB HID mode

Postby iabdalkader » Tue Aug 21, 2018 11:02 am

Hi,

Tested again on Windows 10, the keyboard works fine, and the mouse kinda works, scrolling works but I can't move the cursor, not sure why maybe because I'm testing on a virtual machine.

Please follow this example:

https://github.com/openmv/openmv/blob/m ... rol/hid.py

Make sure that you see a new HID mouse in the device manager:
Screenshot from 2018-08-21 16-49-54.png
Screenshot from 2018-08-21 16-49-54.png (9.38 KiB) Viewed 509 times
oelalfey
Posts: 4
Joined: Mon Aug 06, 2018 12:27 pm

Re: USB HID mode

Postby oelalfey » Wed Aug 22, 2018 10:18 pm

Hi, I tested HID mode on Windows 7, and I can confirm it's working. This is what I did:

1)First copy the following code to new file and name it boot.py

Code: Select all

import pyb #(UNCOMMENT THIS LINE!)
pyb.usb_mode('VCP+HID') # serial device + mouse (UNCOMMENT THIS LINE!)
#pyb.usb_mode('VCP+MSC') # serial device + storage device (default)
#pyb.usb_mode('VCP+HID', hid=pyb.hid_keyboard) # serial device + keyboard
2)copy boot.py to SD card

3)wait until the file is copied and then restart the camera.

4)run the following code on the OpenMV IDE

Code: Select all

import pyb, time

hid = pyb.USB_HID()

while(True):
    # x, y and scroll
    # move 10 pixels to the right
    hid.send((0, 10, 0, 0))
    time.sleep(500)

    
Check my video on youtube https://youtu.be/gUnpAMd1Dls

Return to “Technical Discussion”

Who is online

Users browsing this forum: No registered users and 365 guests