diff --git a/cxp_kernel.py b/cxp_kernel.py index c72b65f..9c5632f 100644 --- a/cxp_kernel.py +++ b/cxp_kernel.py @@ -234,20 +234,58 @@ class IdleKernel(EnvExperiment): # self.cxp.start() # self.cxp.trigger(0, 0) # self.cxp.stop() - - # cxp_debug_frame_print() # TODO: use TEST_PACKET_COUNT_TX to compare with readu64 # self.cxp.read_wide(self.cxp.acq_start_addr, 2) # NOTE: but why the acq start reg keep its value # So acq_start is a u32 register, the extra bits are useless - self.cxp.get_xml_data(0xc0000000, self.vals) + # DEBUG: download xml file on camera + # self.cxp.get_xml_data(0xc0000000, self.vals) + + + # DEBUG: Try to setup trigger + # All address below is from the XML, what's the point of bootstrap anyway? + # NOTE: setting persistent over ConnectionReset but NOT power cycle + _USER_SET_SELECTOR = 0x10000050 + + _REAL_ACQ_MODE = 0x10000bb4 + _REAL_ACQ_START = 0x10000498 + _REAL_ACQ_STOP = 0x100004a4 + _REAL_ACQ_ABORT = 0x100004b0 #stop all acq immediately + # self.cxp.write_u32(_REAL_ACQ_MODE, 1) # single frame mode + # self.cxp.write_u32(_REAL_ACQ_START, 1) # single acq start + # self.cxp.write_u32(_REAL_ACQ_STOP, 1) # single acq end + # self.cxp.write_u32(_REAL_ACQ_ABORT, 1) # single acq ABORT + + _BSL_SENSOR_STAND_BY = 0x100004c8 # put sensor in standby mode, certain parameter can only be change during standby + _BSL_POWER_MODE = 0x100000b4 + + # boA2448-250cm is area scan camera: + # see https://docs.baslerweb.com/triggered-image-acquisition#hardware-and-software-triggering to setup triggering properly + + # strange d_470 -> d_469 (= 3) perhaps a obscure security trick? So I guess looking @ Index"3" is fine? + _TRIG_MODE_INDEX_3 = 0x10001424 # d_87 + _TRIG_SRC_INDEX_3 = 0x100081ac # d_479 + _TRIG_ACT_INDEX_3 = 0x1000293c # d_502 + + # self.cxp.write_u32(_TRIG_SELECTOR, 3) # FrameStart by default, boA xml b_469 don't have an address for some reason + self.cxp.write_u32(_TRIG_MODE_INDEX_3, 1) # ON + self.cxp.write_u32(_TRIG_SRC_INDEX_3, 7) # CXPTrigger0 + self.cxp.write_u32(_TRIG_ACT_INDEX_3, 2) # trig on anyedge + + self.cxp.write_u32(_REAL_ACQ_MODE, 1) # single frame mode + self.cxp.write_u32(_REAL_ACQ_START, 1) # single acq start + # self.cxp.write_u32(_REAL_ACQ_STOP, 1) # single acq end + # self.cxp.write_u32(_REAL_ACQ_ABORT, 1) # single acq ABORT + + # self.cxp.write_u32(_BSL_SENSOR_STAND_BY, 1) + return self.cxp.read_u32(_BSL_POWER_MODE) def print_hex(self, arr: TList(TInt32)): print("[{}]".format(", ".join(hex(np.uint32(x)) for x in arr))) def run(self): - self.kernel() - self.cxp.print_xml_url() - self.cxp.write_xml_data(self.vals, "genicam_16e13898.zip") + print(self.kernel()) + # self.cxp.print_xml_url() + # self.cxp.write_xml_data(self.vals, "genicam_16e13898.zip")