#!/usr/bin/env python2 # This file is part of the OpenMV project. # # Copyright (c) 2013-2019 Ibrahim Abdelkader # Copyright (c) 2013-2019 Kwabena W. Agyeman # # This work is licensed under the MIT license, see the file LICENSE for details. # # Openmv module. import struct import sys,time import serial import platform import numpy as np from PIL import Image __serial = None __FB_HDR_SIZE =12 # USB Debug commands __USBDBG_CMD = 48 __USBDBG_FW_VERSION = 0x80 __USBDBG_FRAME_SIZE = 0x81 __USBDBG_FRAME_DUMP = 0x82 __USBDBG_ARCH_STR = 0x83 __USBDBG_SCRIPT_EXEC = 0x05 __USBDBG_SCRIPT_STOP = 0x06 __USBDBG_SCRIPT_SAVE = 0x07 __USBDBG_SCRIPT_RUNNING = 0x87 __USBDBG_TEMPLATE_SAVE = 0x08 __USBDBG_DESCRIPTOR_SAVE= 0x09 __USBDBG_ATTR_READ = 0x8A __USBDBG_ATTR_WRITE = 0x0B __USBDBG_SYS_RESET = 0x0C __USBDBG_FB_ENABLE = 0x0D __USBDBG_TX_BUF_LEN = 0x8E __USBDBG_TX_BUF = 0x8F ATTR_CONTRAST =0 ATTR_BRIGHTNESS =1 ATTR_SATURATION =2 ATTR_GAINCEILING=3 __BOOTLDR_START = 0xABCD0001 __BOOTLDR_RESET = 0xABCD0002 __BOOTLDR_ERASE = 0xABCD0004 __BOOTLDR_WRITE = 0xABCD0008 def init(port, baudrate=921600, timeout=0.3): global __serial # open CDC port __serial = serial.Serial(port, baudrate=baudrate, timeout=timeout) def disconnect(): global __serial try: if (__serial): __serial.close() __serial = None except: pass def set_timeout(timeout): __serial.timeout = timeout def fb_size(): # read fb header __serial.write(struct.pack(" 2): #JPEG num_bytes = size[2] else: num_bytes = size[0]*size[1]*size[2] # read fb data __serial.write(struct.pack(">11)*255.0/31.0).astype(np.uint8) g = (((arr & 0x07E0) >>5) *255.0/63.0).astype(np.uint8) b = (((arr & 0x001F) >>0) *255.0/31.0).astype(np.uint8) buff = np.column_stack((r,g,b)) else: # JPEG try: buff = np.asarray(Image.frombuffer("RGB", size[0:2], buff, "jpeg", "RGB", "")) except Exception as e: print ("JPEG decode error (%s)"%(e)) return None if (buff.size != (size[0]*size[1]*3)): return None return (size[0], size[1], buff.reshape((size[1], size[0], 3))) def exec_script(buf): __serial.write(struct.pack("