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:
iabdalkader 2014-02-10 03:14:14 +02:00
parent b562d4c17e
commit 5ea84e8c20
3 changed files with 71 additions and 49 deletions

View File

@ -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()

View File

@ -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
View 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)