I have been happily working with JAER project, however I now wish to process some event data on an FPGA on PCIExpress. To do this I want to read event data directly from USB and put it in some memory, but so far I have not been able to understand the data I have been recieving. I looked at the post here https://sourceforge.net/p/jaer/discussion/631958/thread/e5fbe1d5/, but it is for the DVS128. Is there a resource somewhere that will explain how to communicate with the DVS sensors directly without using JAER?
I have been looking through the jaer project code, and I see that the USB connection is set up in CypressFX3.java and how that data is parsed in DavisFX3HardwareInterface.java, however I haven't been able to find out where the camera is actually set up and from where communcations with the camera are based. Some help here would be very much appreciated!
Many thanks,
Timo
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Timo, in short, it's complicated. One the data starts flowing it is not
so complicated (it all flows through the translateEvents() method),
The device setup is complicated because a lot of configuration needs to
be sent to the camera to set the on-chip bias generator registers, other
on-chip registers, and also the off-chip (CPLD or FPGA) registers. All
of this stuff in jaer is centralized in the AEChip's Biasgen object
(which historically was just an on-chip bias generators but nowadays
encapsulated all configuration).
It's also complicated because the configuration needs to be sent 1. on
startup, 2. whenever the device is replugged, 3. whenever a new
configuration is loaded, by loading a new XML settings file.
Plus, the camera, the software state, and all the GUI elements need to
be kept in sync.
For Davis cameras, look in the class DavisConfig. Put a breakpoint in
the update() method and you will see how each type of configuration is
sent via the corresponding CypressFX3 method. update() is called by
firing a notifyObservers() in the set method that is called by GUI
changes. I.e. the DavisConfig is an Observer for these changes.
There is another method called sendConfiguration() that completely
updates the camera with all parameters.
Hope this helps a bit. The debugger is probably a good way to see how it
works.
Tobi
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Timo, PS, did you realize that jaer moved to github? Please have a look
at the the announcement on http://jaerproject.org
For migrating, Luca's instructions were very useful for me:
For Windows users, install Git For Windows https://git-scm.com/download/win and then I can highly recommend
TortoiseGit as client https://tortoisegit.org/ it also has some useful
documentation https://tortoisegit.org/docs/tortoisegit/
remember to always set your name and e-mail correctly in your Git
client! You can then create a user on GitHub and associate those e-mail
addresses to it, as Git(Hub) tracks commits by e-mail.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Tobi already explained how jAER works and what parts to look at, though for what you want to do, just get data from the camera and send it off to a PCI-Express FPGA, I'd highly recommend using libcaer instead. It's a minimal C library that simply sets the camera up and gives you back the events in a simple, efficient in-memory format that you can then send to your device. It's also got a C++ interface if you prefer that.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I agree with Luca. Using libcaer would be a great solution for basic camera applications. I expect that jaer will eventually interface to hardware the same way, using libcaer API.
Tobi Delbruck, www.ini.uzh.ch/~ tobi, Swiss cell +41766291500, USA cell +16265102646
On June 4, 2017 7:46:40 PM GMT+08:00, Luca Longinotti llongi@users.sf.net wrote:
Tobi already explained how jAER works and what parts to look at, though
for what you want to do, just get data from the camera and send it off
to a PCI-Express FPGA, I'd highly recommend using libcaer instead. It's a minimal C
library that simply sets the camera up and gives you back the events in
a simple, efficient in-memory format that you can then send to your
device. It's also got a C++ interface if you prefer that.
Thanks for the clear explanation Tobi and for the suggestion Luca! I will use the libcaer library, sounds like this would be easier than reinventing the wheel :)
Many thanks,
Timo
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi all,
I have been happily working with JAER project, however I now wish to process some event data on an FPGA on PCIExpress. To do this I want to read event data directly from USB and put it in some memory, but so far I have not been able to understand the data I have been recieving. I looked at the post here https://sourceforge.net/p/jaer/discussion/631958/thread/e5fbe1d5/, but it is for the DVS128. Is there a resource somewhere that will explain how to communicate with the DVS sensors directly without using JAER?
I have been looking through the jaer project code, and I see that the USB connection is set up in CypressFX3.java and how that data is parsed in DavisFX3HardwareInterface.java, however I haven't been able to find out where the camera is actually set up and from where communcations with the camera are based. Some help here would be very much appreciated!
Many thanks,
Timo
Timo, in short, it's complicated. One the data starts flowing it is not
so complicated (it all flows through the translateEvents() method),
The device setup is complicated because a lot of configuration needs to
be sent to the camera to set the on-chip bias generator registers, other
on-chip registers, and also the off-chip (CPLD or FPGA) registers. All
of this stuff in jaer is centralized in the AEChip's Biasgen object
(which historically was just an on-chip bias generators but nowadays
encapsulated all configuration).
It's also complicated because the configuration needs to be sent 1. on
startup, 2. whenever the device is replugged, 3. whenever a new
configuration is loaded, by loading a new XML settings file.
Plus, the camera, the software state, and all the GUI elements need to
be kept in sync.
For Davis cameras, look in the class DavisConfig. Put a breakpoint in
the update() method and you will see how each type of configuration is
sent via the corresponding CypressFX3 method. update() is called by
firing a notifyObservers() in the set method that is called by GUI
changes. I.e. the DavisConfig is an Observer for these changes.
There is another method called sendConfiguration() that completely
updates the camera with all parameters.
Hope this helps a bit. The debugger is probably a good way to see how it
works.
Tobi
Timo, PS, did you realize that jaer moved to github? Please have a look
at the the announcement on http://jaerproject.org
For migrating, Luca's instructions were very useful for me:
For Windows users, install Git For Windows
https://git-scm.com/download/win and then I can highly recommend
TortoiseGit as client https://tortoisegit.org/ it also has some useful
documentation https://tortoisegit.org/docs/tortoisegit/
remember to always set your name and e-mail correctly in your Git
client! You can then create a user on GitHub and associate those e-mail
addresses to it, as Git(Hub) tracks commits by e-mail.
Tobi already explained how jAER works and what parts to look at, though for what you want to do, just get data from the camera and send it off to a PCI-Express FPGA, I'd highly recommend using libcaer instead. It's a minimal C library that simply sets the camera up and gives you back the events in a simple, efficient in-memory format that you can then send to your device. It's also got a C++ interface if you prefer that.
I agree with Luca. Using libcaer would be a great solution for basic camera applications. I expect that jaer will eventually interface to hardware the same way, using libcaer API.
Tobi Delbruck, www.ini.uzh.ch/~ tobi, Swiss cell +41766291500, USA cell +16265102646
On June 4, 2017 7:46:40 PM GMT+08:00, Luca Longinotti llongi@users.sf.net wrote:
Thanks for the clear explanation Tobi and for the suggestion Luca! I will use the libcaer library, sounds like this would be easier than reinventing the wheel :)
Many thanks,
Timo