Files
libgphoto2/tests/ddb

========================================================================
The gphoto2 device database (gp2ddb)
========================================================================

Important: This is a prototype the developers can play with. The final
           version will look much different, so don't invest too much
           in it.

Note: We try to talk of "devices" and "drivers" instead of "cameras"
      and "camlibs" since we also support digital audio players.


=============================================
The idea
========

 * Maintain a device database (DDB) of cameras (and audio players),
   their abilities etc. independently from the libgphoto2 camlibs.

 * Updates to the database are much easier to publish than updates to
   the camlibs which need to be compiled.


=============================================
The implementation
==================

 * A flex/bison based parser for text based config.

 * The text format is not completely ironed out yet.

 * It is possible to use some HAL device database instead, but do we
   really want to require HAL? Depends whether we target embedded or
   desktop environments.

 * print-camera-list prints the current config in the new format
   (minus camlib internal settings)

 * camlib specific settings can be accommodated using the
   driver_options { ... }; section.

 * The binary code (stripped) for the test case is about 22KByte. I
   suppose we could implement this database in about 35 to 40 KByte.
   However, we can probably get rid of some code in the drivers to
   compensate. 
   For comparison:
    * The current libgphoto2.so is about 120 KByte stripped. 
    * libxml2.so is 1.2MB (stripped).


=============================================
The testcase
============

 * The testcase check-ddb.sh checks that the CameraAbilitiesList read
   from the text database is the same one read from the camlibs via
   gp_abilities_list_load() - for all 700something cameras.


=============================================
How to test it
==============

 * Add --enable-gp2ddb to your ./configure parameters.

 * Run "make check".

 * Have a look into tests/ddb/.

 * Possibly add the output of
      (hostname;cat /proc/cpuinfo)|md5sum|cut -d" " -f1
   to the list in configure.in to avoid the --enable-gp2ddb
   requirement.


=============================================
TODO
====

What would need to be done to go into production with this:

 * Find a way to integrate the gphoto2 DDB with the HAL device 
   database, possibly using a sub/superset of the HAL device
   database. However, HAL does its stuff in XML, and we probably don't
   want libgphoto2 to depend on an XML parser.

 * Add driver specific parameters to DDB.

 * Rewrite gp_abilities_list_load() to read the data currently stored
   in the CameryAbilities record and all driver specific information
   from the DDB.

 * Rewrite all drivers to read their device specific parameters from
   the new CameraAbilities record.

 * Maintain binary compatibility.


========================================================================
End of file.
========================================================================