Commit Graph

273 Commits

Author SHA1 Message Date
Bert Vermeulen fb019a0e4d Add sr_analog_to_float(). 2014-11-13 22:51:39 +01:00
Bert Vermeulen 3250d8c7e0 output: Add srzip, the session file format.
The 'filename' option is required: this module creates the zip file
itself, and never actually outputs anything back to the calling frontend.
2014-11-12 00:12:59 +01:00
Uwe Hermann 6b1adfaa86 unit tests: Add a test case for sr_dev_inst_user_new(). 2014-11-11 22:16:12 +01:00
Uwe Hermann 626027df0f Add UNI-T UT71x DMM parser. 2014-10-25 16:53:32 +02:00
Janne Huttunen 34d117afb4 Allow building libsigrok without libserialport.
Since the DER EE DE-5000 driver is currently the only user of
the es51919 module and it depends on the libserialport, compile
the module only if the DER EE DE-5000 driver is enabled. This
allows libsigrok to be built without libserialport again.
2014-10-17 12:13:50 +02:00
Janne Huttunen b50891952d Add driver for DER EE DE-5000 LCR meter.
Add a driver for the DER EE DE-5000 LCR meter. This meter is based on
the Cyrustek ES51919/ES51920 chipset and communicates with the host
computer via an optional connectivity kit.

The kit uses an optoisolated unidirectional link to connect to the
meter and an USB cable on the host side. Internally the connection is
using the FTDI FT232R USB UART chip i.e. from the host computer point
of view the meter is connected into an RS-232 serial port.

This driver implements just a thin shim layer for registering the
driver and uses the es51919 module for all the actual work.
2014-10-13 00:56:11 +02:00
Janne Huttunen 6bcb3ee876 Add protocol decoder for Cyrustek ES51919 LCR meter chip.
Add a protocol decoder for the Cyrustek ES51919 LCR meter chip.
This chipset (together with ES51920 front-end) is supposedly used
by multiple different portable LCR meters including at least
DER EE DE-5000, Yihua V&A VA520, Mastech MS5308, Uni-T UT612,
CEM DT-9935 and various OEM rebadges of them.

The communication protocol seems to be implemented on the Cyrustek
chip itself so all the different models are expected to use the
same protocol if they implement a host connection. Unfortunately
the protocol is not available in the public documentation of the
chipset, so this implementation is based on reverse engineering it
from traffic captures.

The actual connection between the meter and the host computer may be
different from meter to meter even when based on the same chip. This
module implements a decoder for the protocol and some common helper
functions for interfacing with the meter via an RS-232 serial port.
2014-10-13 00:56:11 +02:00
Martin Ling da89e23a28 Use AM_PATH_PYTHON macro to find Python binary.
A specific interpreter can now be passed to configure e.g:

./configure PYTHON=python3
2014-09-14 02:32:49 +01:00
Bert Vermeulen d4eabea847 scpi-pps: Add support for Rigol DP832. 2014-09-08 12:45:21 +02:00
Bert Vermeulen ca1a7cb56f scpi-pps: Initial driver skeleton. 2014-09-08 12:45:21 +02:00
Bert Vermeulen 7343ad1ec7 scpi/gpib: Rename backend to scpi_libgpib.
libgpib is the userspace component to linux-gpib's kernel modules that
implement low-level interface drivers.

When libsigrok gets userspace GPIB interface drivers, that backend will
be the "official" scpi_gpib.
2014-09-05 18:33:48 +02:00
Martin Ling bb2a4ed407 Add GPIB SCPI backend using linux-gpib and libgpib. 2014-09-05 10:34:04 +01:00
Bert Vermeulen 2fe07d3fb5 build: Silence java-clean. 2014-08-31 13:46:45 +02:00
Marcus Comstedt d1a5f73781 Makefile.am: Use $(CXXCOMPILE) to compile C++ code
When compiling the SWIG wrappers for the Java bindings, use the correct
automake macro so that all compiler flags are honoured.
2014-08-31 13:26:47 +02:00
Soeren Apel 107639373d yokogawa-dlm: Integrate driver skeleton 2014-08-31 00:42:10 +02:00
Martin Ling f1830b225d Clean Java files on any change that needs re-running SWIG. 2014-08-29 13:56:40 +01:00
Bert Vermeulen b84cba4dbf input: Convert binary module. 2014-08-26 01:55:41 +02:00
Bert Vermeulen 02e24c0ce0 input: Convert chronovu-la8 module. 2014-08-26 01:55:41 +02:00
Bert Vermeulen 41d214f61a input: Convert CSV module. 2014-08-26 01:55:41 +02:00
Bert Vermeulen 7db0639495 input: Fixes and VCD. 2014-08-26 01:55:41 +02:00
Bert Vermeulen 17bfaca62a input: Introduce new input module API.
This is a work in progress.
2014-08-26 01:55:41 +02:00
magnuskarlsson 4bd80e1228 added pipistrello-ols
Conflicts:
	configure.ac
	src/hwdriver.c
2014-08-25 01:00:55 +02:00
Marcus Comstedt 0e1a7fe91a Makefile.am: Fix out-of-tree build for Python bindings 2014-08-17 16:05:46 +02:00
Marcus Comstedt 33c84e8197 Makefile.am: Fix out-of-tree build for C++ and Java bindings 2014-08-17 12:58:39 +02:00
Marcus Comstedt 7f82ec4d72 Makefile.am: Fix doxygen invocation in out-of-tree build 2014-08-17 12:58:39 +02:00
Marcus Comstedt 55e55a3f92 Fix include paths for out-of-tree builds 2014-08-17 12:58:38 +02:00
Uwe Hermann 4172352914 Add a small set of unit tests for session handling. 2014-08-11 13:04:07 +02:00
Uwe Hermann 071b93d9ed Makefile.am: Silence some more Doxygen output.
This silences stuff like this (among others), depending on the
Doxygen version used:

  Warning: Tag `XML_SCHEMA' at line 1814 of file `Doxyfile' has become
  obsolete. To avoid this warning please remove this line from your
  configuration file or upgrade it using "doxygen -u"
2014-08-10 18:57:58 +02:00
Martin Ling 8a314e90ff java: Add documentation generation. 2014-08-10 15:47:14 +02:00
Martin Ling 6a8c1d6879 python: Add documentation generation. 2014-08-10 15:47:13 +02:00
Martin Ling bd4fda2407 bindings: Transfer C++ documentation strings to Python and Java wrappers. 2014-08-10 15:47:13 +02:00
Martin Ling 3532ed0125 C++ bindings: Reimplement enums.py using doxygen XML output instead of gccxml. 2014-08-10 15:47:13 +02:00
Janne Huttunen a24c3f4a89 Implement Brymen BM25x series as a serial DMM.
The Brymen BM25x series supports the BC-20X that is an opto-isolated
serial cable. The link seems to be unidirectional i.e. when activated
the DMM periodically sends updates to the host while the host cannot
control the DMM in any way.

The protocol is documented in "6000-count-digital-multimeters-r1.pdf"
that is available from the manufacturer. Every 15 byte packet consists
of a bitmap where the bits correspond to segments or symbols on the
LCD display i.e. the DMM essentially sends the contents of its screen
to the host in every update. This driver then decodes the measured
quantity, unit and its value from the bitmap.
2014-08-01 20:31:26 +02:00
Bert Vermeulen afaa75b98c output/wav: Initial module skeleton. 2014-07-29 02:47:10 +02:00
Martin Ling 90bd765640 Java: Move interfaces into org.sigrok.core.interfaces, tidy build system. 2014-07-26 20:41:08 +01:00
Martin Ling ca5fdd96ba Add bindings/swig/classes.i to Python binding dependencies. 2014-07-26 18:34:40 +01:00
Martin Ling 4711ec660d Fix python-quietclean Makefile target. 2014-07-26 18:34:20 +01:00
Uwe Hermann 3db4b08b2d Makefile.am: Add beaglelogic.h so it ends up in the tarball. 2014-07-22 23:18:37 +02:00
Bert Vermeulen 155b680da4 Reorganize project tree. 2014-07-22 18:19:29 +02:00
Bert Vermeulen c26162ffe0 python: Fix build dependency.
This also makes it more portable, notably to non-bash shells.
2014-07-22 04:31:54 +02:00
Kumar Abhishek bb99379761 beaglelogic: Initial driver skeleton. 2014-07-22 01:47:02 +02:00
Bert Vermeulen 8eb10b625e python: Silence irrelevant build warnings. 2014-07-20 22:37:32 +02:00
Uwe Hermann 6592c36995 Fix 'make check' invocation wrt new libsigrok.h location. 2014-07-20 12:03:29 +02:00
Bert Vermeulen f2a189f0a7 build: Silence language bindings building. 2014-07-19 22:25:11 +02:00
Martin Ling 580ed4005b Additional build system fixes for C++/Python/Java bindings. 2014-07-19 18:06:52 +02:00
Martin Ling d1785122c7 Assorted build system fixes for C++/Python/Java bindings. 2014-07-19 17:25:37 +02:00
Martin Ling 815a6b95f4 Pass configured prefix to python setup.py install step. 2014-07-19 16:44:05 +02:00
Martin Ling 9fcf4d0b5b Add Java bindings. 2014-07-18 21:34:57 +01:00
Martin Ling f774095496 Reimplement high-level Python bindings on top of SWIG/C++ bindings. 2014-07-18 20:47:10 +01:00
Martin Ling c23c8659b8 Add C++ bindings. 2014-07-18 20:47:10 +01:00
Martin Ling 63d0fb7528 Move public headers into include/libsigrok.
This is needed so that the C++ bindings, the header for which
references "libsigrok/libsigrok.h", can have a valid include
directory passed to build them before the headers are installed.
2014-07-17 18:30:49 +01:00
Bert Vermeulen 5d8c55f9ee Move conditional driver cruft to separate source file. 2014-07-11 16:47:06 +02:00
Bert Vermeulen d4b3874828 autoconf: Use DRIVER macro to declare drivers. 2014-07-10 20:44:32 +02:00
Bert Vermeulen 0acdd79357 testo: Initial driver skeleton. 2014-07-05 21:56:46 +02:00
Uwe Hermann 8f4e922f43 manson-hcs-3xxx: Initial driver skeleton. 2014-06-23 00:59:17 +02:00
Bert Vermeulen ac136b574a Add new software trigger as a library-wide facility.
This is strictly an internal feature, for use by drivers for hardware
that doesn't have its own trigger mechanism.
2014-05-28 15:53:27 +02:00
Bert Vermeulen 7b5e6d2978 Add new triggering framework.
The new triggers consist of a set of structs and an API to manipulate
them.  Both logic and analog triggers are supported, in an unlimited
number of stages.

A single struct sr_trigger containing its stages and triggers is then
added to the session.

In case of a driver where the hardware supports triggering, the struct
is then converted and used to arm the hardware trigger. Drivers without
hardware trigger support, such as fx2lafw or multimeter drivers, use it
as the basis for a software-based trigger implementation instead.
2014-05-27 23:53:27 +02:00
Matthias Heidbrink 41b7bd01c1 motech-lps-30x: Initial driver framework. 2014-05-19 19:23:30 +02:00
Uwe Hermann 8c21897f59 Unhook the Link Instruments MSO-19 from the build for now.
This driver is neither working nor has it been in a compiling state for
a long time, so unhook it from the build until it is fixed and works.

The files (api.c and protocol.[ch]) are still in git, but won't end up in
released tarballs and they don't get built (neither git nor tarballs).

This also allows us to drop the otherwise unneeded dependency on libudev.
When the MSO-19 driver comes back, it should be in a form that doesn't
require the inherently Linux-only libudev anyway. See also:
http://sigrok.org/bugzilla/show_bug.cgi?id=65
2014-05-04 17:44:05 +02:00
Uwe Hermann 2fa222c78b Drop obsolete Linux-only usbtmc backend.
We're now using a portable libusb-based (userspace) backend which should
in theory work on any OS with libusb support.
2014-05-04 17:38:09 +02:00
Bert Vermeulen dba3e6826e output: Introduce output module API wrappers. 2014-04-21 01:50:43 +02:00
Bert Vermeulen 7e7b7fb7d3 Removed ALSA driver.
This driver has been unmaintained for years, and was never good code
to begin with. It's also questionable whether it was ever useful,
particularly with the demo driver now supporting various analog
signalling.
2014-04-19 13:37:53 +02:00
Bert Vermeulen 3b15586812 Removed obsolete sr_filter_channels(). 2014-04-19 13:34:46 +02:00
Bert Vermeulen 44559b2c3b Remove obsolete output API. 2014-04-19 13:28:17 +02:00
Bert Vermeulen 6f64ebb223 output/ascii: Rewrite for new output API. 2014-04-19 12:34:51 +02:00
Bert Vermeulen 8d3af2e868 output/hex: Rewrite for new output API. 2014-04-19 12:31:50 +02:00
Bert Vermeulen dbd0aeff35 output/bits: Rewrite for new output API.
This also fixes the performance problems in the old module.
2014-04-19 12:25:02 +02:00
Uwe Hermann 7b3567126c Rename 'chronovu-la8' driver to 'chronovu-la'.
The driver now also supports the LA16 device (and possibly others in the
future).
2014-04-02 17:20:09 +02:00
Uwe Hermann 36cf5b5445 Makefile.am: Add missing vxi.h.
If it's not listed as SOURCE, it won't end up in the tarball and a build
from tarball would thus break.
2014-03-20 13:10:53 +01:00
Uwe Hermann 67bd805523 Switch to a non-recursive automake setup.
Instead of >= 44 Makefile.am's we now only have one top-level
Makefile.am, and use the 'subdir-objects' automake option to
handle the build via non-recursive (auto)make.

This has the advantage of fewer (boilerplate or other) files and less
clutter in general, as well as performance advantages since the new
setup can build many files in parallel (with 'make -j'), not only 2 or 3
files within the same (e.g. hardware/xxxx/* subdirectory) and also since
we no longer need to build intermediate libtool helper libs per subdirectory.

A quick, non-scientific test build on a quad-core laptop with 'make -j 4'
yields a build time reduction from 35s to 19s.

All autotools features that worked before are still intact without any
regressions, including the Make targets 'install', 'uninstall', 'check',
'dist', 'clean', 'distclean' and so on, as well as all the usual portability
handling (build works on any OS, with any Make implementation such as
GNU Make or BSD Make, with any shell such as sh/ksh/zsh/bash/dash, etc. etc.)
and features such as out-of-tree build support, cross-compile support,
testsuite support (also with colored output), "silent make rules", etc. etc.
2014-03-20 13:10:05 +01:00
Uwe Hermann 1ca48e29d4 Makefile.am: Add missing HACKING file. 2013-09-25 14:26:35 +02:00
Uwe Hermann 50985c2019 GPL headers: Use correct project name. 2013-04-23 22:24:30 +02:00
Uwe Hermann c77ed446f2 Add initial README.devices file. 2013-03-14 19:49:33 +01:00
Uwe Hermann 79bb0e97d5 Add a testsuite for libsigrok.
This adds a suite of unit tests for libsigrok. It uses the 'Check'
tool/library (apt-get install check) to run the tests.

The configure tool tries to find libcheck. If it succeeds, a
"make check" will run all tests. Otherwise, none of the tests will
be built and "make check" will not run any tests.

This also means that users who don't have 'check' installed will still
be able to build and install libsigrok just fine.
2013-03-09 11:55:43 +01:00
Uwe Hermann 063e7aef6d Factor out common hw_init() driver code.
Most drivers do pretty much the same things in their hw_init()
right now, so factor out that code to std_hw_init() in std.c.
2013-01-29 12:56:02 +01:00
Uwe Hermann bd58d8f3ec Makefile.am: Fix typo in 'ChangeLog' target. 2013-01-14 11:13:58 +01:00
Bert Vermeulen 6936ee4206 remove datastore functionality
Keeping a copy of acquired data is up to the frontend, not libsigrok.
2013-01-08 14:14:44 +01:00
Uwe Hermann 296821683d Makefile.am: Add missing backslash. 2012-10-22 11:54:40 +02:00
Alexandru Gagniuc d375b3c3ec radioshack-dmm: Add support for Radioshack 22-812 DMM
Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2012-10-15 17:32:58 +02:00
Uwe Hermann b5a8e84825 sr: Add sr_strerror() and sr_strerror_name(). 2012-07-12 23:23:07 +02:00
Bert Vermeulen 45c59c8bdd sr: moved sigrok.h so libsigrok/libsigrok.h
All frontends will have to include <libsigrok/libsigrok.h> from now on.
This header includes proto.h and version.h, both installed from the
distribution into $INCLUDE/libsigrok/ as well.

The only dynamically changed header is now version.h, which has both
libsigrok and libtool compile-time versions in it.
2012-07-05 01:17:28 +02:00
Uwe Hermann fb6f1978ed sr: New default firmware dir: $prefix/share/sigrok-firmware.
We no longer expect firmware files to be in the
$prefix/share/libsigrok/firmware directory, as that would require an
additional (distro) package 'sigrok-firmware' or the like to install
files into another package's (libsigrok) path, which can be problematic.

The current 'sigrok-firmware' repo's "make install" will already install
all files into $prefix/share/sigrok-firmware.
2012-05-30 00:00:33 +02:00
Uwe Hermann c09584085e sr/srd/cli/gtk: ChangeLog -> MAINTAINERCLEANFILES.
If the (generated) ChangeLog file is marked for DISTCLEANFILES, it'll be
removed whenever "make distclean" is called (and is then gone forever if
you use the tarballs, for example).
2012-05-29 20:30:15 +02:00
Uwe Hermann 787c43905d sr: Add functions to query sr version(s). 2012-04-15 20:33:45 +02:00
Uwe Hermann 1054920344 sr/srd: Fix 'make distcheck'. 2012-03-31 12:09:37 +02:00
Uwe Hermann 6dddd90224 sr: SR_PACKAGE_VERSION_* for consistency.
No need to use the LIBSIGROK_ prefix here when we use SR_ everywhere
else. Also, better distinction between package version and lib version.
2012-03-31 11:35:47 +02:00
Uwe Hermann 0fc12d66f1 sr: Generate ChangeLog from git upon 'make dist'. 2012-03-28 02:32:52 +02:00
Uwe Hermann c30b417f71 sr: Rename hwplugin.c to hwdriver.c. 2012-02-28 23:53:17 +01:00
Bert Vermeulen c73d2ea421 sr: adjust copyright year 2012-02-13 14:31:51 +01:00
Uwe Hermann dd8b5f565f sr/srd: Add Doxyfile to the tarball. 2012-01-04 02:50:26 +01:00
Uwe Hermann 3af71f0da6 sr: configure.ac: Fix version number magic. 2012-01-04 00:36:53 +01:00
Uwe Hermann d8521c939f Put most autotools files into autostuff/.
This yields a slightly more "tidy" top-level directory.
2012-01-03 23:34:31 +01:00
Uwe Hermann db8ae7b941 sr/srd: Remove/fix non-applicable autotools stuff. 2011-12-30 11:14:24 +01:00
Uwe Hermann 826938d81e sr/srd: Move some files to their resp. dirs. 2011-12-30 11:14:05 +01:00
Uwe Hermann 5e59cfbfc7 Move most contrib/ stuff to libsigrok.
The udev rules file is libsigrok-specific, the gnuplot files too.

The nsis files stay in the top-level contrib/ for now, they're not
really part of any of the (sub-)projects, but rather are used to create
a single Windows .exe installer for all of them.
2011-12-30 10:34:30 +01:00
Uwe Hermann b7f09cf86d libsigrok: Fix #includes.
In the lib, we should only #include "sigrok.h" or "sigrok-internal.h",
but not the (possibly installed and thus different/older versions) via
<sigrok.h> or <sigrok-internal.h>.

Frontends should of course use <sigrok.h> and <sigrok-internal.h>.
2011-12-28 23:07:08 +01:00
Uwe Hermann b08024a836 libsigrok: Introduce sr_dbg/sr_info/sr_warn/sr_err.
We should use these (internal) functions in libsigrok exclusively from
now on, i.e. no more use of glib's g_debug() etc.

These functions are only for libsigrok, the frontends use whatever
logging mechanism is suitable there.
2011-04-14 10:11:08 +02:00
Uwe Hermann 8a7b47cdfa Revert temporary changes for 0.2 release. 2011-04-03 23:18:46 +02:00
Uwe Hermann 2f3aab0ee9 Disable some stuff which should not be in 0.2.
Disable decoders, disable lib building.
2011-04-03 22:47:51 +02:00
Bert Vermeulen 7d65887435 implement session loading based on a virtual device driver 2011-01-31 22:34:14 +01:00
Bert Vermeulen 40f5ddac01 move samplerate/period printers and parsers into libsigrok 2011-01-31 22:29:40 +01:00
Uwe Hermann eeebceea31 Introduce proper libtool versioning for the libs. 2011-01-23 21:09:37 +01:00
Uwe Hermann 5819184b22 Remove duplicate FIRMWARE_DIR includes.
We use AC_DEFINE_UNQUOTED in configure.ac now to put the FIRMWARE_DIR #define
in the config.h file, which is included where we need the #define.
2011-01-21 21:14:37 +01:00
Uwe Hermann f95fd1aaf3 Install an empty firmware/ directory.
This reduces the hassle for the users (and distro packages) a bit, you
only need to copy files into there now.
2011-01-20 23:23:06 +01:00
Uwe Hermann bffed4fc10 Re-enable stuff we temporarily disabled for 0.1. 2011-01-20 00:43:57 +01:00
Uwe Hermann c70fce6ba6 Don't install libs and headers in the 0.1 release.
The library APIs are not yet usable or finalized, so don't expose the
libs for now. Instead, only install sigrok-cli, the manpages, and
the decoders.
2011-01-19 19:20:44 +01:00
Uwe Hermann 1483577eed Start moving private stuff to sigrok-internal.h.
This is work-in-progress, unfinished.
2011-01-15 15:57:54 +01:00
Bert Vermeulen 882e2075bb finish split of sigrok.h 2011-01-10 13:47:24 +01:00
Uwe Hermann 340f6e7aea Fix out-of-tree build.
Use libtool "noinst" local helper libs and use one Makefile.am per
subdir, which is the usual/preferred method. These helper libraries are
purely local and will not be installed.

This also fixes out-of-tree builds of sigrok, i.e. building in a
directory other than the sigrok source directory, e.g.

 $ cd /home/user
 $ git clone ...sigrok
 $ cd sigrok
 $ ./autogen.sh
 $ mkdir /tmp/foo
 $ cd /tmp/foo
 $ /home/user/sigrok/configure
 $ make
 $ make install

This will place all build results (.o files, .la files, etc) in the
local build directory (/tmp/foo) instead of the source directory
(/home/user/sigrok in this example). The installation directory is
selected via the --prefix configure option (/usr/local per default).
2011-01-08 03:32:25 +01:00
Uwe Hermann 6239c175c1 Initial, unfinished demo/simulation hardware driver. 2011-01-06 19:16:47 +01:00
Uwe Hermann 960a75e474 Only build hardware plugins if requested by user.
Per default all plugins will be built, though. The user can override
this via the --disable-la-xxxx options.
2010-06-25 01:11:11 +02:00
Uwe Hermann 5b907f9b07 Add per-LA --enable-XXXX configure options. 2010-05-31 12:43:08 +02:00
Uwe Hermann 9a5c6dcf49 Factor out opendev2/opendev3. 2010-05-18 00:05:10 +02:00
Uwe Hermann d658e348a8 pkg-config: Add (semi-generated) libsigrok.pc. 2010-05-11 22:28:09 +02:00
Bert Vermeulen 34e4813f2e inout module infrastructure + binary input module 2010-04-30 16:09:47 -07:00
Håvard Espeland 28a35d8ab3 This commit adds initial support for the Asix Sigma Logic Analyzer. Currently, only 200 MHz is supported, and only with software trigger. Firmware for the device will be distributed separately, with permission from the vendor.
Signed-off-by: Håvard Espeland <gus@ping.uio.no>
2010-04-27 13:16:01 -07:00
Uwe Hermann 62c8202582 libsigrok: More coding style fixes. 2010-04-15 20:16:53 +02:00
Uwe Hermann 1c5b9d302c Add raw binary output format.
Also, rename the "bin" format to "bits" for now to avoid confusion.
2010-04-12 21:22:58 +02:00
Uwe Hermann 25e7d9b115 Factor out common sigrok_samplerate_string(). 2010-04-07 20:13:57 +02:00
Uwe Hermann e2ad47b5b0 Gnuplot output format support. 2010-04-06 16:54:37 +02:00
Uwe Hermann 4c9ffa83cf Initial Value Change Dump (VCD) output support. 2010-04-04 13:19:20 +02:00
Uwe Hermann a695d6c075 Rename libbackend to libsigrok. 2010-04-02 20:27:59 +02:00
Uwe Hermann a1bb33afbd Start of code base layout restructuring. 2010-04-02 20:27:54 +02:00