mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
Move openmv code to separate python module
* Add openmv module which has USB debug functions * Update IDE and FB viewer to use openmv module
This commit is contained in:
parent
b562d4c17e
commit
5ea84e8c20
@ -4,11 +4,9 @@ import usb.core
|
||||
import usb.util
|
||||
import numpy as np
|
||||
import pygame
|
||||
import openmv
|
||||
from time import sleep
|
||||
|
||||
interface = 2;
|
||||
altsetting= 1;
|
||||
|
||||
def rgb_to_surface(buff):
|
||||
arr = np.fromstring(buff, dtype=np.uint16).newbyteorder('S')
|
||||
r = (((arr & 0xF800) >>11)*255.0/31.0).astype(np.uint8)
|
||||
@ -17,24 +15,12 @@ def rgb_to_surface(buff):
|
||||
arr = np.column_stack((r,g,b)).flat[0:]
|
||||
return pygame.image.frombuffer(arr, (160, 120), 'RGB')
|
||||
|
||||
# find USB device
|
||||
dev = usb.core.find(idVendor=0x0483, idProduct=0x5740)
|
||||
if dev is None:
|
||||
raise ValueError('Device not found')
|
||||
|
||||
# detach kernel driver
|
||||
if dev.is_kernel_driver_active(interface):
|
||||
dev.detach_kernel_driver(interface)
|
||||
|
||||
# claim interface
|
||||
usb.util.claim_interface(dev, interface)
|
||||
|
||||
# set FB debug alt setting
|
||||
dev.set_interface_altsetting(interface, altsetting)
|
||||
|
||||
# init pygame
|
||||
pygame.init()
|
||||
|
||||
# init openmv
|
||||
openmv.init()
|
||||
|
||||
# init screen
|
||||
screen = pygame.display.set_mode((160, 120), pygame.DOUBLEBUF, 32)
|
||||
|
||||
@ -45,11 +31,8 @@ font = pygame.font.SysFont("monospace", 15)
|
||||
while running:
|
||||
Clock.tick(60)
|
||||
|
||||
# request snapshot
|
||||
dev.ctrl_transfer(0xC1, 8, 0, 2, None, 2000)
|
||||
|
||||
# read framebuffer
|
||||
buf = dev.read(0x83, img_size, interface, 5000)
|
||||
buf = openmv.dump_fb()
|
||||
|
||||
if len(buf) <img_size:
|
||||
print(len(buf))
|
||||
@ -73,4 +56,5 @@ while running:
|
||||
running = False
|
||||
|
||||
pygame.quit()
|
||||
openmv.release()
|
||||
|
||||
|
||||
@ -11,9 +11,7 @@ from time import sleep
|
||||
import usb.core
|
||||
import usb.util
|
||||
import numpy as np
|
||||
|
||||
interface = 2;
|
||||
altsetting= 1;
|
||||
import openmv
|
||||
|
||||
def image2pixbuf(buff):
|
||||
arr = np.fromstring(buff, dtype=np.uint16).newbyteorder('S')
|
||||
@ -54,17 +52,8 @@ class OMVGtk:
|
||||
|
||||
self.framebuffer = self.builder.get_object("framebuffer_image")
|
||||
|
||||
# find USB device
|
||||
self.dev = usb.core.find(idVendor=0x0483, idProduct=0x5740)
|
||||
if self.dev is None:
|
||||
raise ValueError('Device not found')
|
||||
|
||||
# detach kernel driver
|
||||
if self.dev.is_kernel_driver_active(interface):
|
||||
self.dev.detach_kernel_driver(interface)
|
||||
|
||||
# set FB debug alt setting
|
||||
self.dev.set_interface_altsetting(interface, altsetting)
|
||||
# init openmv
|
||||
openmv.init()
|
||||
|
||||
#connect signals
|
||||
signals = {
|
||||
@ -77,22 +66,19 @@ class OMVGtk:
|
||||
|
||||
def execute_clicked(self, widget):
|
||||
buf = self.buffer.get_text(self.buffer.get_start_iter(), self.buffer.get_end_iter())
|
||||
# interrupt running code
|
||||
# interrupt any running code
|
||||
self.terminal.feed_child("\x03")
|
||||
for l in buf.splitlines():
|
||||
self.dev.ctrl_transfer(0x41, 10, 0, 2, l+'\n', 5000)
|
||||
self.dev.ctrl_transfer(0x41, 11, 0, 2, None, 5000)
|
||||
|
||||
# exec script
|
||||
openmv.exec_script(buf)
|
||||
|
||||
def stop_clicked(self, widget):
|
||||
self.terminal.feed_child("\x03\r\n")
|
||||
|
||||
def update_fb(self):
|
||||
img_size = 160*120*2
|
||||
# request snapshot
|
||||
self.dev.ctrl_transfer(0xC1, 8, 0, 2, None, 2000)
|
||||
|
||||
# read framebuffer
|
||||
buf = self.dev.read(0x83, img_size, interface, 5000)
|
||||
buf = openmv.dump_fb()
|
||||
|
||||
if len(buf) <img_size:
|
||||
print(len(buf))
|
||||
@ -107,11 +93,8 @@ class OMVGtk:
|
||||
def quit(self, widget):
|
||||
os.close(self.fd)
|
||||
|
||||
#reset device
|
||||
self.dev.reset();
|
||||
|
||||
#reattach kernel driver
|
||||
self.dev.attach_kernel_driver(interface)
|
||||
openmv.release()
|
||||
|
||||
sys.exit(0)
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
55
usr/openmv.py
Normal file
55
usr/openmv.py
Normal file
@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env python
|
||||
import sys
|
||||
import usb.core
|
||||
import usb.util
|
||||
|
||||
# USB Debug commands
|
||||
__USBDBG_DUMP_FB=1
|
||||
__USBDBG_EXEC_SCRIPT=2
|
||||
__USBDBG_READ_SCRIPT=3
|
||||
__USBDBG_WRITE_SCRIPT=4
|
||||
|
||||
# Debug __INTERFACE
|
||||
__INTERFACE = 2;
|
||||
__ALTSETTING= 1;
|
||||
|
||||
__dev = None
|
||||
|
||||
def init():
|
||||
global __dev
|
||||
# find USB __device
|
||||
__dev = usb.core.find(idVendor=0x0483, idProduct=0x5740)
|
||||
if __dev is None:
|
||||
raise ValueError('__device not found')
|
||||
|
||||
# detach kernel driver
|
||||
if __dev.is_kernel_driver_active(__INTERFACE):
|
||||
__dev.detach_kernel_driver(__INTERFACE)
|
||||
|
||||
# claim __INTERFACE
|
||||
usb.util.claim_interface(__dev, __INTERFACE)
|
||||
|
||||
# set FB debug alt setting
|
||||
__dev.set_interface_altsetting(__INTERFACE, __ALTSETTING)
|
||||
|
||||
def release():
|
||||
global __dev
|
||||
# release __INTERFACE
|
||||
usb.util.release_interface(__dev, __INTERFACE)
|
||||
|
||||
# reattach kernel driver
|
||||
__dev.attach_kernel_driver(__INTERFACE)
|
||||
|
||||
|
||||
def dump_fb():
|
||||
global __dev
|
||||
# request snapshot
|
||||
__dev.ctrl_transfer(0xC1, __USBDBG_DUMP_FB, 0, __INTERFACE, None, 2000)
|
||||
|
||||
# read framebuffer
|
||||
return __dev.read(0x83, 160*120*2, __INTERFACE, 5000)
|
||||
|
||||
def exec_script(buf):
|
||||
__dev.ctrl_transfer(0x41, __USBDBG_EXEC_SCRIPT, len(buf), __INTERFACE, None, 2000)
|
||||
__dev.write(0x03, buf, __INTERFACE, 10000)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user