def __init__(self,
                 blink_control=None,
                 serialtouse=None,
                 config_file_name="AR0135_1280x964_ext_trigger_M.json"):
        if not os.path.exists(config_file_name):
            print("Config file does not exist.")
            exit()

        devices_num, index, serials = ArducamSDK.Py_ArduCam_scan()
        print("Found %d devices" % devices_num)
        self.indextouse = None
        for i in range(devices_num):
            datas = serials[i]
            serial = ""
            for it, d in enumerate(datas[0:12]):
                serial = serial + "%c" % d
                if (it % 4) == 3 and it < 11: serial = serial + "-"
            if serialtouse is None:
                if i == 0: usethis = True
            else:
                if serial == serialtouse: usethis = True
            if usethis: self.indextouse = i
            print("Index:", index[i], "Serial:", serial, "Use:", usethis)

        time.sleep(2)

        self.handle = self.camera_initFromFile(config_file_name)
        if self.handle != None:
            ret_val = ArducamSDK.Py_ArduCam_setMode(
                self.handle, ArducamSDK.EXTERNAL_TRIGGER_MODE)
            if (ret_val == ArducamSDK.USB_BOARD_FW_VERSION_NOT_SUPPORT_ERROR):
                print("USB_BOARD_FW_VERSION_NOT_SUPPORT_ERROR")
                exit(0)
        self.prs = QB()
        self.blink_control = blink_control
signal.signal(signal.SIGTERM, sigint_handler)

if __name__ == "__main__":

    config_file_name = ""
    if len(sys.argv) > 1:
        config_file_name = sys.argv[1]

        if not os.path.exists(config_file_name):
            print "Config file does not exist."
            exit()
    else:
        showHelp()
        exit()

    devices_num, index, serials = ArducamSDK.Py_ArduCam_scan()
    print "Found %d devices" % devices_num
    for i in range(devices_num):
        datas = serials[i]
        serial = "%c%c%c%c-%c%c%c%c-%c%c%c%c" % (datas[0], datas[1], datas[2], datas[3],
                                                 datas[4], datas[5], datas[6], datas[7],
                                                 datas[8], datas[9], datas[10], datas[11])
        print "Index:", index[i], "Serial:", serial

    time.sleep(2)

    for i in range(devices_num):
        handle = camera_initFromFile(config_file_name, i)
        if handle != None:
            ret_val = ArducamSDK.Py_ArduCam_setMode(handle, ArducamSDK.EXTERNAL_TRIGGER_MODE)
            if (ret_val == ArducamSDK.USB_BOARD_FW_VERSION_NOT_SUPPORT_ERROR):
def camera_initFromFile(fialeName):
    global cfg,handle,Width,Height,color_mode
    #load config file
    config = json.load(open(fialeName,"r"))

    camera_parameter = config["camera_parameter"]
    Width = int(camera_parameter["SIZE"][0])
    Height = int(camera_parameter["SIZE"][1])

    BitWidth = camera_parameter["BIT_WIDTH"]
    ByteLength = 1
    if BitWidth > 8 and BitWidth <= 16:
        ByteLength = 2
    FmtMode = int(camera_parameter["FORMAT"][0])
    color_mode = (int)(camera_parameter["FORMAT"][1])
    print "color mode",color_mode

    I2CMode = camera_parameter["I2C_MODE"]
    I2cAddr = int(camera_parameter["I2C_ADDR"],16)
    TransLvl = int(camera_parameter["TRANS_LVL"])
    cfg = {"u32CameraType":0x4D091031,
            "u32Width":Width,"u32Height":Height,
            "usbType":0,
            "u8PixelBytes":ByteLength,
            "u16Vid":0,
            "u32Size":0,
            "u8PixelBits":BitWidth,
            "u32I2cAddr":I2cAddr,
            "emI2cMode":I2CMode,
            "emImageFmtMode":FmtMode,
            "u32TransLvl":TransLvl }

    # ArducamSDK.

    if serial_selection == None:
        ret,handle,rtn_cfg = ArducamSDK.Py_ArduCam_autoopen(cfg)
    else:
        index = None
        num_cam, cam_list, cam_serial = ArducamSDK.Py_ArduCam_scan()
        for i in range(num_cam):
            datas = cam_serial[i]
            camera_serial = "%c%c%c%c-%c%c%c%c-%c%c%c%c"%(datas[0],datas[1],datas[2],datas[3],
                                                          datas[4],datas[5],datas[6],datas[7],
                                                          datas[8],datas[9],datas[10],datas[11])
            if camera_serial == str(serial_selection):
                print("Arducam " + str(serial_selection) + " found")
                index = i
                break
        if index == None:
            print("Arducam " + str(serial_selection) + " not found")
            exit()
        time.sleep(3) 
        ret,handle,rtn_cfg = ArducamSDK.Py_ArduCam_open(cfg,i)
                
    if ret == 0:
        usb_version = rtn_cfg['usbType']
        print "USB VERSION:",usb_version
        #config board param
        configBoard(config["board_parameter"])

        if usb_version == ArducamSDK.USB_1 or usb_version == ArducamSDK.USB_2:
            configBoard(config["board_parameter_dev2"])
        if usb_version == ArducamSDK.USB_3:
            configBoard(config["board_parameter_dev3_inf3"])
        if usb_version == ArducamSDK.USB_3_2:
            configBoard(config["board_parameter_dev3_inf2"])
        
        writeSensorRegs(config["register_parameter"])
        
        if usb_version == ArducamSDK.USB_3:
            writeSensorRegs(config["register_parameter_dev3_inf3"])
        if usb_version == ArducamSDK.USB_3_2:
            writeSensorRegs(config["register_parameter_dev3_inf2"])

        rtn_val,datas = ArducamSDK.Py_ArduCam_readUserData(handle,0x400-16, 16)
        print "Serial: %c%c%c%c-%c%c%c%c-%c%c%c%c"%(datas[0],datas[1],datas[2],datas[3],
                                                    datas[4],datas[5],datas[6],datas[7],
                                                    datas[8],datas[9],datas[10],datas[11])

        return True
    else:
        print "open fail,rtn_val = ",ret
        return False
def camera_initFromFile(fileName):
    global cfg, handle, Width, Height, color_mode
    #load config file
    config = arducam_config_parser.LoadConfigFile(fileName)

    camera_parameter = config.camera_param.getdict()
    Width = camera_parameter["WIDTH"]
    Height = camera_parameter["HEIGHT"]

    BitWidth = camera_parameter["BIT_WIDTH"]
    ByteLength = 1
    if BitWidth > 8 and BitWidth <= 16:
        ByteLength = 2
    FmtMode = camera_parameter["FORMAT"][0]
    color_mode = camera_parameter["FORMAT"][1]
    print "color mode", color_mode

    I2CMode = camera_parameter["I2C_MODE"]
    I2cAddr = camera_parameter["I2C_ADDR"]
    TransLvl = camera_parameter["TRANS_LVL"]
    cfg = {
        "u32CameraType": 0x00,
        "u32Width": Width,
        "u32Height": Height,
        "usbType": 0,
        "u8PixelBytes": ByteLength,
        "u16Vid": 0,
        "u32Size": 0,
        "u8PixelBits": BitWidth,
        "u32I2cAddr": I2cAddr,
        "emI2cMode": I2CMode,
        "emImageFmtMode": FmtMode,
        "u32TransLvl": TransLvl
    }

    # ArducamSDK.

    if serial_selection == None:
        ret, handle, rtn_cfg = ArducamSDK.Py_ArduCam_autoopen(cfg)
    else:
        index = None
        num_cam, cam_list, cam_serial = ArducamSDK.Py_ArduCam_scan()
        for i in range(num_cam):
            datas = cam_serial[i]
            camera_serial = "%c%c%c%c-%c%c%c%c-%c%c%c%c" % (
                datas[0], datas[1], datas[2], datas[3], datas[4], datas[5],
                datas[6], datas[7], datas[8], datas[9], datas[10], datas[11])
            if camera_serial == str(serial_selection):
                print("Arducam " + str(serial_selection) + " found")
                index = i
                break
        if index == None:
            print("Arducam " + str(serial_selection) + " not found")
            exit()
        time.sleep(3)
        ret, handle, rtn_cfg = ArducamSDK.Py_ArduCam_open(cfg, i)

    if ret == 0:
        usb_version = rtn_cfg['usbType']
        print "USB VERSION:", usb_version
        configs = config.configs
        configs_length = config.configs_length
        for i in range(configs_length):
            type = configs[i].type
            if ((type >> 16) & 0xFF) != 0 and (
                (type >> 16) & 0xFF) != usb_version:
                continue
            if type & 0xFFFF == arducam_config_parser.CONFIG_TYPE_REG:
                ArducamSDK.Py_ArduCam_writeSensorReg(handle,
                                                     configs[i].params[0],
                                                     configs[i].params[1])
            elif type & 0xFFFF == arducam_config_parser.CONFIG_TYPE_DELAY:
                time.sleep(float(configs[i].params[0]) / 1000)
            elif type & 0xFFFF == arducam_config_parser.CONFIG_TYPE_VRCMD:
                configBoard(configs[i])

        rtn_val, datas = ArducamSDK.Py_ArduCam_readUserData(
            handle, 0x400 - 16, 16)
        print "Serial: %c%c%c%c-%c%c%c%c-%c%c%c%c" % (
            datas[0], datas[1], datas[2], datas[3], datas[4], datas[5],
            datas[6], datas[7], datas[8], datas[9], datas[10], datas[11])

        return True
    else:
        print "open fail,rtn_val = ", ret
        return False
예제 #5
0
def camera_initFromFile(fialeName):
    global acfg,handle,Width,Height,color_mode,save_raw
    #load config file
    config = json.load(open(fialeName,"r"))
    print(fialeName)
#    print(config)

    camera_parameter = config["camera_parameter"]
    Width = int(camera_parameter["SIZE"][0])
    Height = int(camera_parameter["SIZE"][1])



    BitWidth = camera_parameter["BIT_WIDTH"]
    ByteLength = 1
    if BitWidth > 8 and BitWidth <= 16:
        ByteLength = 2
        save_raw = True
    FmtMode = int(camera_parameter["FORMAT"][0])
    color_mode = (int)(camera_parameter["FORMAT"][1])







    print(camera_parameter)
    print(Width)
    print(Height)


    print(BitWidth)
    print(FmtMode)
#    print(BitWidth)
    print("color mode",color_mode)

    I2CMode = camera_parameter["I2C_MODE"]
    I2cAddr = int(camera_parameter["I2C_ADDR"],16)
    TransLvl = int(camera_parameter["TRANS_LVL"])
    acfg = {"u32CameraType":0x4D091031,
            "u32Width":Width,"u32Height":Height,
            "usbType":0,
            "u8PixelBytes":ByteLength,
            "u16Vid":0,
            "u32Size":0,
            "u8PixelBits":BitWidth,
            "u32I2cAddr":I2cAddr,
            "emI2cMode":I2CMode,
            "emImageFmtMode":FmtMode,
            "u32TransLvl":TransLvl }


    print("\nbanana\n")
#    usb_version = rtn_acfg['usbType']
#    print(usb_version)


#Return vale: number of supported cameras,indexs,serials
#    a, b, c = ArducamSDK.Py_ArduCam_scan()
#    print(a) #2
#    print(b) #[0,1]
#    print(c)

#    camnum = ArducamSDK.Py_ArduCam_scan()
#    print(camnum)
#    print(camnum[1][0])
#    print(camnum[1][1])



#    input("p")

#Serial: AU3S-1830-0003 <= USB 3.0 MT9J001
#Bus 001 Device 009: ID 04b4:03f1 Cypress Semiconductor Corp. 

#Serial: AU2S-1843-0016
#Bus 001 Device 010: ID 52cb:52cb  

#4.2.1.3 Py_ArduCam_open( acfg,index)
#Param 1: ArduCamCfg structure instance
#Param 2: index of the camera, handle,acfg




    ArducamSDK.Py_ArduCam_scan()
    print("scanning")
    time.sleep(3)
    ret,handle,rtn_cfg = ArducamSDK.Py_ArduCam_open(acfg,cameraID)
    time.sleep(3)
    

#    ret = ArducamSDK.Py_ArduCam_open(acfg,1)
#    print(ret)
#    input("p")

#4.2.1.1 Py_ArduCam_autoopen(acfg )
#Return vale: error code, handle,acfg
#    ret,handle,rtn_cfg = ArducamSDK.Py_ArduCam_autoopen(acfg)


    print(ret)
    print(handle)
    print(rtn_cfg)
    if ret == 0:
       
        #ArducamSDK.Py_ArduCam_writeReg_8_8(handle,0x46,3,0x00)
        usb_version = rtn_cfg['usbType']
        print("USB VERSION:",usb_version)
        #config board param
        configBoard(config["board_parameter"])

        if usb_version == ArducamSDK.USB_1 or usb_version == ArducamSDK.USB_2:
            configBoard(config["board_parameter_dev2"])
        if usb_version == ArducamSDK.USB_3:
            configBoard(config["board_parameter_dev3_inf3"])
        if usb_version == ArducamSDK.USB_3_2:
            configBoard(config["board_parameter_dev3_inf2"])
        
        writeSensorRegs(config["register_parameter"])
        
        if usb_version == ArducamSDK.USB_3:
            writeSensorRegs(config["register_parameter_dev3_inf3"])
        if usb_version == ArducamSDK.USB_3_2:
            writeSensorRegs(config["register_parameter_dev3_inf2"])

        rtn_val,datas = ArducamSDK.Py_ArduCam_readUserData(handle,0x400-16, 16)
        print("Serial: %c%c%c%c-%c%c%c%c-%c%c%c%c"%(datas[0],datas[1],datas[2],datas[3],
                                                    datas[4],datas[5],datas[6],datas[7],
                                                    datas[8],datas[9],datas[10],datas[11]))

        return True
    else:
        print("open fail,rtn_val = ",ret)
        return False