jAER project on SourceForge

ch.unizh.ini.jaer.chip.dvs320
Class DVS320HardwareInterface.RetinaAEReader

java.lang.Object
  extended by de.thesycon.usbio.UsbIo
      extended by de.thesycon.usbio.UsbIoPipe
          extended by de.thesycon.usbio.UsbIoThread
              extended by de.thesycon.usbio.UsbIoReader
                  extended by net.sf.jaer.hardwareinterface.usb.cypressfx2.CypressFX2.AEReader
                      extended by ch.unizh.ini.jaer.chip.dvs320.DVS320HardwareInterface.RetinaAEReader
All Implemented Interfaces:
de.thesycon.usbio.UsbIoErrorCodes, de.thesycon.usbio.UsbIoInterface, de.thesycon.usbio.UsbSpec, java.lang.Runnable, ReaderBufferControl
Enclosing class:
DVS320HardwareInterface

public class DVS320HardwareInterface.RetinaAEReader
extends CypressFX2.AEReader

This reader understands the format of raw USB data and translates to the AEPacketRaw


Field Summary
 
Fields inherited from class net.sf.jaer.hardwareinterface.usb.cypressfx2.CypressFX2.AEReader
CYPRESS_FIFO_SIZE, CYPRESS_NUM_BUFFERS, lastWrapAdd, MAX_NONMONOTONIC_TIME_EXCEPTIONS_TO_PRINT, MONITOR_PRIORITY, wrapAdd, wrappedBig
 
Fields inherited from class de.thesycon.usbio.UsbIoThread
BufPool, MaxErrorCount, PendingList, T
 
Fields inherited from class de.thesycon.usbio.UsbIo
Handle
 
Fields inherited from interface de.thesycon.usbio.UsbIoErrorCodes
USBIO_ERR_ADDITIONAL_EVENT_SIGNALLED, USBIO_ERR_ALREADY_BOUND, USBIO_ERR_ALREADY_CONFIGURED, USBIO_ERR_BABBLE_DETECTED, USBIO_ERR_BAD_START_FRAME, USBIO_ERR_BTSTUFF, USBIO_ERR_BUFFER_OVERRUN, USBIO_ERR_BUFFER_UNDERRUN, USBIO_ERR_BULK_RESTRICTION, USBIO_ERR_CANCELED, USBIO_ERR_CONTROL_NOT_SUPPORTED, USBIO_ERR_CONTROL_RESTRICTION, USBIO_ERR_CRC, USBIO_ERR_DATA_BUFFER_ERROR, USBIO_ERR_DATA_OVERRUN, USBIO_ERR_DATA_TOGGLE_MISMATCH, USBIO_ERR_DATA_UNDERRUN, USBIO_ERR_DEMO_EXPIRED, USBIO_ERR_DEV_NOT_RESPONDING, USBIO_ERR_DEVICE_GONE, USBIO_ERR_DEVICE_NOT_FOUND, USBIO_ERR_DEVICE_NOT_OPEN, USBIO_ERR_DEVICE_NOT_PRESENT, USBIO_ERR_ENDPOINT_HALTED, USBIO_ERR_EP0_RESTRICTION, USBIO_ERR_ERROR_BUSY, USBIO_ERR_ERROR_SHORT_TRANSFER, USBIO_ERR_FAILED, USBIO_ERR_FIFO, USBIO_ERR_FRAME_CONTROL_NOT_OWNED, USBIO_ERR_FRAME_CONTROL_OWNED, USBIO_ERR_INSUFFICIENT_RESOURCES, USBIO_ERR_INTERFACE_NOT_FOUND, USBIO_ERR_INTERNAL_HC_ERROR, USBIO_ERR_INTERRUPT_RESTRICTION, USBIO_ERR_INVALID_CONFIGURATION_DESCRIPTOR, USBIO_ERR_INVALID_DEVICE_STATE, USBIO_ERR_INVALID_DIRECTION, USBIO_ERR_INVALID_FUNCTION_PARAM, USBIO_ERR_INVALID_INBUFFER, USBIO_ERR_INVALID_IOCTL, USBIO_ERR_INVALID_ISO_PACKET, USBIO_ERR_INVALID_OUTBUFFER, USBIO_ERR_INVALID_PARAM, USBIO_ERR_INVALID_PARAMETER, USBIO_ERR_INVALID_PIPE_FLAGS, USBIO_ERR_INVALID_PIPE_HANDLE, USBIO_ERR_INVALID_POWER_STATE, USBIO_ERR_INVALID_RECIPIENT, USBIO_ERR_INVALID_TYPE, USBIO_ERR_INVALID_URB_FUNCTION, USBIO_ERR_ISO_NA_LATE_USBPORT, USBIO_ERR_ISO_NOT_ACCESSED_BY_HW, USBIO_ERR_ISO_NOT_ACCESSED_LATE, USBIO_ERR_ISO_RESTRICTION, USBIO_ERR_ISO_TD_ERROR, USBIO_ERR_ISOCH_REQUEST_FAILED, USBIO_ERR_LOAD_SETUP_API_FAILED, USBIO_ERR_NO_BANDWIDTH, USBIO_ERR_NO_MEMORY, USBIO_ERR_NO_SUCH_DEVICE_INSTANCE, USBIO_ERR_NOT_ACCESSED, USBIO_ERR_NOT_BOUND, USBIO_ERR_NOT_CONFIGURED, USBIO_ERR_NOT_SUPPORTED, USBIO_ERR_OPEN_PIPES, USBIO_ERR_OUT_OF_ADDRESS_SPACE, USBIO_ERR_OUT_OF_MEMORY, USBIO_ERR_PENDING_REQUESTS, USBIO_ERR_PID_CHECK_FAILURE, USBIO_ERR_PIPE_NOT_FOUND, USBIO_ERR_PIPE_RESTRICTION, USBIO_ERR_PIPE_SIZE_RESTRICTION, USBIO_ERR_POOL_EMPTY, USBIO_ERR_POWER_DOWN, USBIO_ERR_REQUEST_FAILED, USBIO_ERR_RESERVED1, USBIO_ERR_RESERVED2, USBIO_ERR_SET_CONFIG_FAILED, USBIO_ERR_SET_CONFIGURATION_FAILED, USBIO_ERR_STALL_PID, USBIO_ERR_STATUS_NOT_MAPPED, USBIO_ERR_SUCCESS, USBIO_ERR_TIMEOUT, USBIO_ERR_TOO_MUCH_ISO_PACKETS, USBIO_ERR_UNEXPECTED_PID, USBIO_ERR_USBD_BUFFER_TOO_SMALL, USBIO_ERR_USBD_INTERFACE_NOT_FOUND, USBIO_ERR_USBD_TIMEOUT, USBIO_ERR_VERSION_MISMATCH, USBIO_ERR_VID_RESTRICTION, USBIO_ERR_XACT_ERROR
 
Fields inherited from interface de.thesycon.usbio.UsbIoInterface
DevicePowerStateD0, DevicePowerStateD1, DevicePowerStateD2, DevicePowerStateD3, INFINITE, PipeTypeBulk, PipeTypeControl, PipeTypeInterrupt, PipeTypeIsochronous, RecipientDevice, RecipientEndpoint, RecipientInterface, RecipientOther, RequestTypeClass, RequestTypeVendor, USBIO_DEVICE_INFOFLAG_HIGH_SPEED, USBIO_ENABLE_REMOTE_WAKEUP, USBIO_INFOFLAG_CHECKED_BUILD, USBIO_INFOFLAG_DEMO_VERSION, USBIO_INFOFLAG_LIGHT_VERSION, USBIO_INFOFLAG_VS_LIGHT_VERSION, USBIO_RESET_DEVICE_ON_CLOSE, USBIO_SHORT_TRANSFER_OK, USBIO_START_TRANSFER_ASAP, USBIO_UNCONFIGURE_ON_CLOSE
 
Fields inherited from interface de.thesycon.usbio.UsbSpec
AUDIO_CS_ENDPOINT_TYPE, AUDIO_CS_INTERFACE_TYPE, USB_CONFIGURATION_DESCRIPTOR_TYPE, USB_DEVICE_DESCRIPTOR_TYPE, USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE, USB_ENDPOINT_DESCRIPTOR_TYPE, USB_HID_DESCRIPTOR_TYPE, USB_INTERFACE_DESCRIPTOR_TYPE, USB_INTERFACE_POWER_DESCRIPTOR_TYPE, USB_OTHER_SPEED_CONFIGURATION_DESCRIPTOR_TYPE, USB_STRING_DESCRIPTOR_TYPE
 
Constructor Summary
DVS320HardwareInterface.RetinaAEReader(CypressFX2 cypress)
           
 
Method Summary
protected  void translateEvents(de.thesycon.usbio.UsbIoBuf b)
          Method to translate the UsbIoBuffer for the DVS320 sensor which uses the 32 bit address space.
 
Methods inherited from class net.sf.jaer.hardwareinterface.usb.cypressfx2.CypressFX2.AEReader
bufErrorHandler, getFifoSize, getNumBuffers, onThreadExit, processBuffer, processData, resetTimestamps, setFifoSize, setNumBuffers, startThread, toString
 
Methods inherited from class de.thesycon.usbio.UsbIoReader
run
 
Methods inherited from class de.thesycon.usbio.UsbIoThread
allocateBuffers, freeBuffers, shutdownThread
 
Methods inherited from class de.thesycon.usbio.UsbIoPipe
abortPipe, bind, getPipeParameters, pipeControlTransferIn, pipeControlTransferOut, queryPipeStatistics, read, readSync, readSync, resetPipe, resetPipeStatistics, setPipeParameters, setupPipeStatistics, unbind, waitForCompletion, waitForCompletion, write, writeSync, writeSync
 
Methods inherited from class de.thesycon.usbio.UsbIo
acquireDevice, classOrVendorInRequest, classOrVendorOutRequest, clearFeature, close, createDeviceList, cyclePort, destroyDeviceList, errorText, finalize, getBandwidthInfo, getConfiguration, getConfigurationDescriptor, getConfigurationInfo, getCurrentFrameNumber, getDescriptor, getDescriptor, getDeviceDescriptor, getDeviceInfo, getDeviceParameters, getDevicePowerState, getDriverInfo, getInterface, getStatus, getStringDescriptor, isCheckedBuild, isDemoVersion, isLightVersion, isOpen, isOperatingAtHighSpeed, open, releaseDevice, resetDevice, setConfiguration, setDescriptor, setDeviceParameters, setDevicePowerState, setFeature, setInterface, unconfigureDevice
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

DVS320HardwareInterface.RetinaAEReader

public DVS320HardwareInterface.RetinaAEReader(CypressFX2 cypress)
                                       throws HardwareInterfaceException
Throws:
HardwareInterfaceException
Method Detail

translateEvents

protected void translateEvents(de.thesycon.usbio.UsbIoBuf b)
Method to translate the UsbIoBuffer for the DVS320 sensor which uses the 32 bit address space.

It has a CPLD to timetamp events and uses the CypressFX2 in slave FIFO mode.

The DVS320 has a burst mode readout mechanism that outputs a row address, then all the latched column addresses. The columns are output left to right. A timestamp is only meaningful at the row addresses level. Therefore the board timestamps on row address, and then sends the data in the following sequence: row, timestamp, col, col, col,...., row,timestamp,col,col...

The bit encoding of the data is as follows Address bit Address bit pattern 0 LSB Y or Polarity ON=1 1 Y1 or LSB X 2 Y2 or X1 3 Y3 or X2 4 Y4 or X3 5 Y5 or X4 6 Y6 or X5 7 MSBY or X6 8 intensity or X7 9 MSBX 10 Y=0, X=1 Address Address Name 00xx xxxx xxxx xxxx pixel address 01xx xxxx xxxx xxxx timestamp 10xx xxxx xxxx xxxx wrap 11xx xxxx xxxx xxxx timestamp reset The msb of the 16 bit timestamp is used to signal a wrap (the actual timestamp is only 15 bits). The wrapAdd is incremented when an emtpy event is received which has the timestamp bit 15 set to one.

Therefore for a valid event only 15 bits of the 16 transmitted timestamp bits are valid, bit 15 is the status bit. overflow happens every 32 ms. This way, no roll overs go by undetected, and the problem of invalid wraps doesn't arise.

Overrides:
translateEvents in class CypressFX2.AEReader
Parameters:
b - the data buffer
See Also:
translateEvents(de.thesycon.usbio.UsbIoBuf)

jAER project on SourceForge